Changeset: 67cd988ae16d for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67cd988ae16d Modified Files: sql/server/sql_scan.c sql/test/ADT2006/Tests/sander.stable.err sql/test/bugs/Tests/crash_order_by.stable.out sql/test/bugs/Tests/object_name-bug-sf-985242.stable.err sql/test/bugs/Tests/object_name-bug-sf-985242.stable.out sql/test/bugs/Tests/simple_view.stable.out sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out sql/test/bugs/object_name-bug-sf-985242.sql sql/test/create_in_schema.sql Branch: default Log Message:
Merge with Jan2014 branch. diffs (201 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 @@ -911,18 +911,24 @@ tokenize(mvc * c, int cur) } } +/* SQL 'quoted' idents consist of a set of any character of + * the source language character set other than a 'quote' + * + * MonetDB has 2 restrictions: + * 1 we disallow '%' as the first character. + * 2 the length is reduced to 1024 characters + */ static int valid_ident(char *s, char *dst) { int escaped = 0; int p = 0; - if (*s != '_' && !(isascii((int) *s) && isalnum((int) *s)) && *s != ' ' && - *s != '(' && *s != ')') + if (*s == '%') return 0; /* do unescaping in the loop */ while (*s && (*s != '"' || escaped)) { - if (*s == '\\') { + if (*s == '\\' || (*s == '"' && s[1] == '"')) { escaped = !escaped; if (!escaped) { dst[p++] = *s; @@ -930,9 +936,6 @@ valid_ident(char *s, char *dst) } else if (*s == '"' && escaped) { escaped = 0; dst[p++] = *s; - } else if (*s != '_' && !(isascii((int) *s) && isalnum((int) *s)) && *s != ' ' && - *s != '(' && *s != ')') { - return 0; } else { escaped = 0; dst[p++] = *s; @@ -989,7 +992,6 @@ sql_get_next_token(YYSTYPE *yylval, void lc->rs->buf[lc->rs->pos+lc->yycur- 1] = 0; if (quote == '"') { - /* Todo check if what valid 'quoted' idents are */ if (valid_ident(yylval->sval+1,str)) { token = IDENT; } else { diff --git a/sql/test/ADT2006/Tests/sander.stable.err b/sql/test/ADT2006/Tests/sander.stable.err --- a/sql/test/ADT2006/Tests/sander.stable.err +++ b/sql/test/ADT2006/Tests/sander.stable.err @@ -10,19 +10,18 @@ stderr of test 'sander` in directory 'sq # 11:28:18 > Mtimeout -timeout 60 MapiClient -lsql -umonetdb -Pmonetdb --host=localhost --port=32149 < sander.sql # 11:28:18 > -MAPI = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225 +MAPI = (monetdb) /var/tmp/mtest-12878/.s.monetdb.32234 QUERY = insert into suspect (name, picture_uri, notes, victim_name) values ("Dr. Thomas Neill Cream ", "http://blabla/toolong", "did commit murders, but by poisoning", ""); -ERROR = !Invalid identifier 'Dr. Thomas Neill Cream ' -MAPI = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225 +ERROR = !SELECT: identifier 'Dr. Thomas Neill Cream ' unknown +MAPI = (monetdb) /var/tmp/mtest-12878/.s.monetdb.32234 QUERY = insert into suspect (name, picture_uri, notes, victim_name) values ("Sander Borsboom", "lives centuries later, so not much chance", "blah.jpg", "noone (yet :D)"); -ERROR = !Invalid identifier 'lives - !centuries later, so not much chance' +ERROR = !SELECT: identifier 'Sander Borsboom' unknown # 11:28:19 > # 11:28:19 > Done. diff --git a/sql/test/bugs/Tests/crash_order_by.stable.out b/sql/test/bugs/Tests/crash_order_by.stable.out --- a/sql/test/bugs/Tests/crash_order_by.stable.out +++ b/sql/test/bugs/Tests/crash_order_by.stable.out @@ -29,15 +29,15 @@ Ready. % row, single_value # name % int, char # type % 2, 1 # length +[ 31, "1" ] +[ 47, "1" ] +[ 14, "1" ] +[ 5, "1" ] [ 32, "1" ] -[ 48, "1" ] -[ 15, "1" ] -[ 6, "1" ] -[ 33, "1" ] -[ 12, "1" ] -[ 9, "1" ] -[ 5, "1" ] -[ 2, "1" ] +[ 11, "1" ] +[ 8, "1" ] +[ 4, "1" ] +[ 1, "1" ] [ 18, "1" ] # 23:16:56 > diff --git a/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.err b/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.err --- a/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.err +++ b/sql/test/bugs/Tests/object_name-bug-sf-985242.stable.err @@ -10,15 +10,6 @@ stderr of test 'object_name-bug-sf-98524 # 14:52:48 > Mtimeout -timeout 60 MapiClient --language=sql -u monetdb -P monetdb --host=stem --port=54903 < object_name-bug-sf-985242.sql # 14:52:48 > -MAPI = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225 -QUERY = create table "\t" (id int); -ERROR = !Invalid identifier '\t' -MAPI = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225 -QUERY = create table x ("\t" int); -ERROR = !Invalid identifier '\t' -MAPI = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225 -QUERY = select * from x; -ERROR = !SELECT: no such table 'x' # 14:52:48 > # 14:52:48 > 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 @@ -13,13 +13,23 @@ stdout of test 'object_name-bug-sf-98524 Ready. +# 14:34:15 > +# 14:34:15 > "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=/var/tmp/mtest-1382" "--port=39275" +# 14:34:15 > -# 12:52:02 > -# 12:52:02 > Mtimeout -timeout 60 MapiClient -lsql -u monetdb -P monetdb --host=localhost --port=45579 < object_name-bug-sf-985242.sql -# 12:52:02 > +#create table "\t" (id int); +#drop table "\t"; +#create table " " (id int); +#drop table " "; +#create table x ("\t" int); +#select * from x; +% sys.x # table_name +% t # name +% int # type +% 1 # length +#drop table "x"; +# 14:34:15 > +# 14:34:15 > "Done." +# 14:34:15 > -# 12:52:02 > -# 12:52:02 > Done. -# 12:52:02 > - diff --git a/sql/test/bugs/Tests/simple_view.stable.out b/sql/test/bugs/Tests/simple_view.stable.out --- a/sql/test/bugs/Tests/simple_view.stable.out +++ b/sql/test/bugs/Tests/simple_view.stable.out @@ -69,7 +69,6 @@ Ready. [ "statistics", "str", 1 ] [ "systemfunctions", "str", 1 ] [ "test_update", "str", 1 ] -[ " ", "str", 1 ] [ "pwprijs", "str", 1 ] [ "foo1345861", "str", 1 ] [ "urlparts", "str", 1 ] diff --git a/sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out b/sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out --- a/sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out +++ b/sql/test/bugs/Tests/subselect_multiple_unionall_where_1=1-bug-sf-1005596.stable.out @@ -72,7 +72,6 @@ Ready. % TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE, REMARKS, TYPE_CAT, TYPE_SCHEM, TYPE_NAME, SELF_REFERENCING_COL_NAME, REF_GENERATION # name % char, varchar, varchar, char, char, char, char, char, char, char # type % 4, 3, 11, 20, 0, 0, 0, 0, 5, 6 # length -[ "demo", "sys", " ", "TABLE", "", NULL, NULL, NULL, "rowid", "SYSTEM" ] [ "demo", "sys", "test_update", "TABLE", "", NULL, NULL, NULL, "rowid", "SYSTEM" ] # 12:52:40 > diff --git a/sql/test/bugs/object_name-bug-sf-985242.sql b/sql/test/bugs/object_name-bug-sf-985242.sql --- a/sql/test/bugs/object_name-bug-sf-985242.sql +++ b/sql/test/bugs/object_name-bug-sf-985242.sql @@ -1,4 +1,7 @@ create table "\t" (id int); +drop table "\t"; create table " " (id int); +drop table " "; create table x ("\t" int); select * from x; +drop table "x"; diff --git a/sql/test/create_in_schema.sql b/sql/test/create_in_schema.sql --- a/sql/test/create_in_schema.sql +++ b/sql/test/create_in_schema.sql @@ -10,7 +10,7 @@ create table bla.bla3(id int); select * from bla3; -- should fail select * from bla.bla3; -create temporary table sys.bla4(id int); +create temporary table tmp.bla4(id int); select * from bla4; create table tmp.bla5(id int); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list