]> granicus.if.org Git - postgresql/commitdiff
Make scanner multibyte aware. Currently it may produce an incorrect
authorTatsuo Ishii <ishii@postgresql.org>
Tue, 22 Aug 2000 13:01:20 +0000 (13:01 +0000)
committerTatsuo Ishii <ishii@postgresql.org>
Tue, 22 Aug 2000 13:01:20 +0000 (13:01 +0000)
multibyte sequence while truncating identifiers.

src/backend/parser/scan.l

index 2701479313c6c850436dc083cf669abd2a3017e1..f5597d1593ed245c1b96c5bae50e21c5a57ef359 100644 (file)
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.75 2000/08/12 05:15:21 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/parser/scan.l,v 1.76 2000/08/22 13:01:20 ishii Exp $
  *
  *-------------------------------------------------------------------------
  */
 #include "parser/scansup.h"
 #include "utils/builtins.h"
 
+#ifdef MULTIBYTE
+#include "mb/pg_wchar.h"
+#endif
+
 extern char *parseString;
 static char *parseCh;
 
@@ -345,9 +349,17 @@ other                      .
                                        BEGIN(INITIAL);
                                        if (strlen(literalbuf) >= NAMEDATALEN)
                                        {
+#ifdef MULTIBYTE
+                                               int len;
+                                               len = pg_mbcliplen(literalbuf,strlen(literalbuf),NAMEDATALEN-1);
+                                               elog(NOTICE, "identifier \"%s\" will be truncated to \"%.*s\"",
+                                                        literalbuf, len, literalbuf);
+                                               literalbuf[len] = '\0';
+#else
                                                elog(NOTICE, "identifier \"%s\" will be truncated to \"%.*s\"",
                                                         literalbuf, NAMEDATALEN-1, literalbuf);
                                                literalbuf[NAMEDATALEN-1] = '\0';
+#endif
                                        }
                                        yylval.str = pstrdup(literalbuf);
                                        return IDENT;
@@ -471,9 +483,17 @@ other                      .
                                                        yytext[i] = tolower(yytext[i]);
                                        if (i >= NAMEDATALEN)
                     {
+#ifdef MULTIBYTE
+                                               int len;
+                                               len = pg_mbcliplen(yytext,i,NAMEDATALEN-1);
+                        elog(NOTICE, "identifier \"%s\" will be truncated to \"%.*s\"",
+                             yytext, len, yytext);
+                                               yytext[len] = '\0';
+#else
                         elog(NOTICE, "identifier \"%s\" will be truncated to \"%.*s\"",
                              yytext, NAMEDATALEN-1, yytext);
                                                yytext[NAMEDATALEN-1] = '\0';
+#endif
                     }
                                        keyword = ScanKeywordLookup((char*)yytext);
                                        if (keyword != NULL) {