beta2 make check failed on Win32

Started by William ZHANGover 20 years ago4 messages
#1William ZHANG
uniware@zedware.org

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

#2Qingqing Zhou
zhouqq@cs.toronto.edu
In reply to: William ZHANG (#1)
Re: beta2 make check failed on Win32

"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

#3William ZHANG
uniware@zedware.org
In reply to: William ZHANG (#1)
Re: beta2 make check failed on Win32

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

Show quoted text

right. But I am quite sure if revoke this will affect other things.

Regards,
Qingqing

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: William ZHANG (#1)
Re: beta2 make check failed on Win32

"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