Changeset: 1d5062c444fa for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1d5062c444fa Modified Files: sql/server/sql_scan.c sql/test/Tests/identifiers.stable.err sql/test/Tests/identifiers.stable.out sql/test/bugs/Tests/object_name-bug-sf-985242.stable.out sql/test/identifiers.sql Branch: Jan2014 Log Message:
don't treat the backslash as escape character in sql quoted identifiers. diffs (140 lines): diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c --- a/sql/server/sql_scan.c +++ b/sql/server/sql_scan.c @@ -928,11 +928,10 @@ valid_ident(char *s, char *dst) return 0; /* do unescaping in the loop */ while (*s && (*s != '"' || escaped)) { - if (*s == '\\' || (*s == '"' && s[1] == '"')) { + if (*s == '"' && s[1] == '"') { escaped = !escaped; - if (!escaped) { + if (!escaped) dst[p++] = *s; - } } else if (*s == '"' && escaped) { escaped = 0; dst[p++] = *s; @@ -940,10 +939,14 @@ valid_ident(char *s, char *dst) escaped = 0; dst[p++] = *s; } + //if (*s == '\\') + //dst[p++] = *s; s++; if (p >= 1024) return 0; } + if (*s) + return 0; dst[p] = '\0'; return 1; } @@ -987,7 +990,7 @@ sql_get_next_token(YYSTYPE *yylval, void yylval->sval = sa_strndup(c->sa, yylval->sval, lc->yycur-lc->yysval); else if (token == STRING) { char quote = *yylval->sval; - char *str = sa_alloc( c->sa, (lc->yycur-lc->yysval-2)*2 +1 ); + char *str = sa_alloc( c->sa, (lc->yycur-lc->yysval-2)*2 + 1 ); assert(quote == '"' || quote == '\''); lc->rs->buf[lc->rs->pos+lc->yycur- 1] = 0; diff --git a/sql/test/Tests/identifiers.stable.err b/sql/test/Tests/identifiers.stable.err --- a/sql/test/Tests/identifiers.stable.err +++ b/sql/test/Tests/identifiers.stable.err @@ -1,20 +1,44 @@ stderr of test 'identifiers` in directory 'sql/test` itself: -# 22:26:32 > -# 22:26:32 > Mtimeout -timeout 180 Mserver "--config=/ufs/fabian/scratch/monetdb/current/program-x86_64/etc/MonetDB.conf" --debug=10 --set "monet_mod_path=/ufs/fabian/scratch/monetdb/current/program-x86_64/lib/MonetDB:/ufs/fabian/scratch/monetdb/current/program-x86_64/lib/bin" --set "gdk_dbfarm=/ufs/fabian/scratch/monetdb/current/program-x86_64/var/MonetDB/dbfarm" --set "sql_logdir=/ufs/fabian/scratch/monetdb/current/program-x86_64/var/MonetDB/log" --set mapi_port=33439 --set sql_port=45449 --set xquery_port=52917 --set monet_prompt= --trace "--dbname=mTests_src_test" --dbinit="module(sql_server); sql_server_start();" ; echo ; echo Over.. -# 22:26:32 > +# 18:30:40 > +# 18:30:40 > "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" "mapi_open=true" "--set" "mapi_port=38230" "--set" "mapi_usock=/var/tmp/mtest-20764/.s.monetdb.38230" "--set" "monet_prompt=" "--forcemito" "--set" "mal_listing=2" "--dbpath=/home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test" "--set" "mal_listing=0" +# 18:30:40 > +# builtin opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/monetdb5/dbfarm/demo +# builtin opt gdk_debug = 0 +# builtin opt gdk_vmtrim = no +# builtin opt monet_prompt = > +# builtin opt monet_daemon = no +# builtin opt mapi_port = 50000 +# builtin opt mapi_open = false +# builtin opt mapi_autosense = false +# builtin opt sql_optimizer = default_pipe +# builtin opt sql_debug = 0 +# cmdline opt gdk_nr_threads = 0 +# cmdline opt mapi_open = true +# cmdline opt mapi_port = 38230 +# cmdline opt mapi_usock = /var/tmp/mtest-20764/.s.monetdb.38230 +# cmdline opt monet_prompt = +# cmdline opt mal_listing = 2 +# cmdline opt gdk_dbpath = /home/niels/scratch/rc-clean/Linux-x86_64/var/MonetDB/mTests_sql_test +# cmdline opt mal_listing = 0 -# 22:26:32 > -# 22:26:32 > Mtimeout -timeout 60 MapiClient -lsql -u monetdb -P monetdb --host=localhost --port=45449 < identifiers.sql -# 22:26:32 > +# 18:30:40 > +# 18:30:40 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-20764" "--port=38230" +# 18:30:40 > -MAPI = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225 +MAPI = (monetdb) /var/tmp/mtest-20764/.s.monetdb.38230 +QUERY = CREATE TABLE "B\"la\"" (id int); -- should fail +ERROR = !Invalid identifier 'B\"la\"' +MAPI = (monetdb) /var/tmp/mtest-20764/.s.monetdb.38230 +QUERY = SELECT 1 AS "B\"la\""; -- should fail +ERROR = !Invalid identifier 'B\"la\"' +MAPI = (monetdb) /var/tmp/mtest-20764/.s.monetdb.38230 QUERY = SELECT 1 AS "\"Bla\""; -- should fail ERROR = !Invalid identifier '\"Bla\"' -# 22:26:32 > -# 22:26:32 > Done. -# 22:26:32 > +# 18:30:40 > +# 18:30:40 > "Done." +# 18:30:40 > diff --git a/sql/test/Tests/identifiers.stable.out b/sql/test/Tests/identifiers.stable.out --- a/sql/test/Tests/identifiers.stable.out +++ b/sql/test/Tests/identifiers.stable.out @@ -55,13 +55,6 @@ Ready. % tinyint # type % 1 # length [ 1 ] -#CREATE TABLE "B\"la\"" (id int); -- succeeds -#SELECT 1 AS "B\"la\""; -- should succeed, gives B"la" -% .L # table_name -% B"la" # name -% tinyint # type -% 1 # length -[ 1 ] # 11:50:07 > # 11:50:07 > Done. diff --git a/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.out b/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.out --- a/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.out +++ b/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.out @@ -24,7 +24,7 @@ Ready. #create table x ("\t" int); #select * from x; % sys.x # table_name -% t # name +% \t # name % int # type % 1 # length #drop table "x"; diff --git a/sql/test/identifiers.sql b/sql/test/identifiers.sql --- a/sql/test/identifiers.sql +++ b/sql/test/identifiers.sql @@ -3,6 +3,6 @@ SELECT 1 AS BLA; -- gives bla SELECT 1 AS "bla"; -- gives bla SELECT 1 AS "Bla"; -- gives Bla SELECT 1 AS "BLA"; -- gives BLA -CREATE TABLE "B\"la\"" (id int); -- succeeds -SELECT 1 AS "B\"la\""; -- should succeed, gives B"la" +CREATE TABLE "B\"la\"" (id int); -- should fail +SELECT 1 AS "B\"la\""; -- should fail SELECT 1 AS "\"Bla\""; -- should fail _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list