Thread: beta2 make check failed on Win32

beta2 make check failed on Win32

From
"William ZHANG"
Date:
pgsql-8.1beta2 "make check" failed on Win32 under MinGW.
Here is some lines from log/initdb.log.

<skipped>
creating configuration files ... ok
creating template1 database in
C:/MSYS/home/wlzhang/postgresql-8.1beta2/src/test/regress/tmp_check/data/bas
e/1 ... FATAL:  syntax error in file
"C:/MSYS/home/wlzhang/postgresql-8.1beta2/src/test/regress/tmp_check/data/po
stgresql.conf" line 386, near token "'s Republic of China.936'"
child process was terminated by signal 1
initdb: data directory
"C:/MSYS/home/wlzhang/postgresql-8.1beta2/src/test/regress/tmp_check/data"
not removed at user's request

And some lines from postgresql.conf.

# These settings are initialized by initdb -- they might be changed
lc_messages = 'Chinese_People''s Republic of China.936'         # locale for
system error message

# strings
lc_monetary = 'Chinese_People''s Republic of China.936'         # locale for
monetary formatting
lc_numeric = 'Chinese_People''s Republic of China.936'          # locale for
number formatting
lc_time = 'Chinese_People''s Republic of China.936'             # locale for
time formatting

It seems that we cannot deal with embedded quotes correctly.
For simplicity, we can test using any parameter with string type. e.g.
bonjour_name.

-- 
Regards,
William ZHANG




Re: beta2 make check failed on Win32

From
"Qingqing Zhou"
Date:
"William ZHANG" <uniware@zedware.org> wrote

> lc_messages = 'Chinese_People''s Republic of China.936'         # locale 
> for
> system error message
>

Diff current version vs. some earlier version, you see this:
/* * signal handler in case we are interrupted.
@@ -1951,12 +2035,12 @@ escape_quotes(const char *src){    int            len = strlen(src),                i, j;
-    char        *result = xmalloc(len * 2 + 1);
+    char        *result = pg_malloc(len * 2 + 1);
    for (i = 0, j = 0; i < len; i++)    {
-        if (src[i] == '\'' || src[i] == '\\')
-            result[j++] = '\\';
+        if (SQL_STR_DOUBLE(src[i]))
+            result[j++] = src[i];        result[j++] = src[i];    }

So the problem is this line:
    result[j++] = src[i];

That is, use the old line then the 'People\'s republic of China' string gets 
right. But I am quite sure if revoke this will affect other things.

Regards,
Qingqing






Re: beta2 make check failed on Win32

From
"William ZHANG"
Date:
What you find is in initdb.c. Maybe the author want to make single quotes
escaped just the same as in SQL. But guc-file.l is unaware of it.

"Qingqing Zhou" <zhouqq@cs.toronto.edu> wrote
>
> Diff current version vs. some earlier version, you see this:
>
>  /*
>   * signal handler in case we are interrupted.
> @@ -1951,12 +2035,12 @@ escape_quotes(const char *src)
>  {
>   int len = strlen(src),
>   i, j;
> - char *result = xmalloc(len * 2 + 1);
> + char *result = pg_malloc(len * 2 + 1);
>
>   for (i = 0, j = 0; i < len; i++)
>   {
> - if (src[i] == '\'' || src[i] == '\\')
> - result[j++] = '\\';
> + if (SQL_STR_DOUBLE(src[i]))
> + result[j++] = src[i];
>   result[j++] = src[i];
>   }
>
> So the problem is this line:
>
>      result[j++] = src[i];
>
> That is, use the old line then the 'People\'s republic of China' string
gets
> right. But I am quite sure if revoke this will affect other things.
>
> Regards,
> Qingqing
>
>
>
>




Re: beta2 make check failed on Win32

From
Tom Lane
Date:
"William ZHANG" <uniware@zedware.org> writes:
> # These settings are initialized by initdb -- they might be changed
> lc_messages = 'Chinese_People''s Republic of China.936'         # locale for
> system error message

Bruce seems to have gotten a bit ahead of himself on the
SQL-standard-strings project --- guc-file.l did not actually accept
the above as legal syntax.  Seems it should though; fixed accordingly.
        regards, tom lane