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

Reply via email to