Changeset: 9e857531d690 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9e857531d690
Modified Files:
gdk/gdk_calc_compare.h
sql/server/sql_parser.y
sql/server/sql_scan.c
sql/storage/bat/bat_storage.c
sql/test/Tests/identifiers.stable.err
sql/test/Tests/identifiers.stable.out
Branch: Jan2014
Log Message:
fixed compilation in gdk_calc_compare.h
more valid_idents (a""b)
fixed bug (default value)
diffs (208 lines):
diff --git a/gdk/gdk_calc_compare.h b/gdk/gdk_calc_compare.h
--- a/gdk/gdk_calc_compare.h
+++ b/gdk/gdk_calc_compare.h
@@ -32,7 +32,7 @@ op_typeswitchloop(const void *lft, int t
switch (tp1) {
case TYPE_void: {
- oid v;
+ oid v = oid_nil;
assert(incr1 == 1);
assert(tp2 == TYPE_oid || incr2 == 1); /* if void, incr2==1 */
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -1061,9 +1061,9 @@ opt_column:
;
create_statement:
- role_def
+ create role_def { $$ = $2; }
| create table_def { $$ = $2; }
- | view_def
+ | create view_def { $$ = $2; }
| type_def
| func_def
| index_def
@@ -1279,18 +1279,18 @@ CREATE [ UNIQUE ] INDEX index_name
*/
role_def:
- create ROLE ident opt_grantor
+ ROLE ident opt_grantor
{ dlist *l = L();
- append_string(l, $3);
+ append_string(l, $2);
+ append_int(l, $3);
+ $$ = _symbol_create_list( SQL_CREATE_ROLE, l ); }
+ | USER ident WITH opt_encrypted PASSWORD string sqlNAME string SCHEMA ident
+ { dlist *l = L();
+ append_string(l, $2);
+ append_string(l, $6);
+ append_string(l, $8);
+ append_string(l, $10);
append_int(l, $4);
- $$ = _symbol_create_list( SQL_CREATE_ROLE, l ); }
- | create USER ident WITH opt_encrypted PASSWORD string sqlNAME string SCHEMA
ident
- { dlist *l = L();
- append_string(l, $3);
- append_string(l, $7);
- append_string(l, $9);
- append_string(l, $11);
- append_int(l, $5);
$$ = _symbol_create_list( SQL_CREATE_USER, l ); }
;
@@ -1725,12 +1725,12 @@ like_table:
;
view_def:
- create VIEW qname opt_column_list AS query_expression opt_with_check_option
+ VIEW qname opt_column_list AS query_expression opt_with_check_option
{ dlist *l = L();
+ append_list(l, $2);
append_list(l, $3);
- append_list(l, $4);
- append_symbol(l, $6);
- append_int(l, $7);
+ append_symbol(l, $5);
+ append_int(l, $6);
append_int(l, TRUE); /* persistent view */
$$ = _symbol_create_list( SQL_CREATE_VIEW, l );
}
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,11 @@ valid_ident(char *s, char *dst)
if (*s == '%')
return 0;
- /* do unescaping in the loop */
+
while (*s && (*s != '"' || escaped)) {
- if (*s == '"' && s[1] == '"') {
+ if (*s == '\\' && s[1] == '"') {
escaped = !escaped;
- if (!escaped)
+ if (escaped)
dst[p++] = *s;
} else if (*s == '"' && escaped) {
escaped = 0;
@@ -941,8 +941,6 @@ valid_ident(char *s, char *dst)
escaped = 0;
dst[p++] = *s;
}
- //if (*s == '\\')
- //dst[p++] = *s;
s++;
if (p >= 1024)
return 0;
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -1752,38 +1752,38 @@ update_table(sql_trans *tr, sql_table *f
sql_column *cc = n->data;
sql_column *oc = m->data;
- if (!cc->base.wtime || !cc->base.allocated) {
- cc->data = NULL;
- cc->base.allocated = cc->base.rtime = cc->base.wtime =
0;
- continue;
- }
+ if (cc->base.wtime && cc->base.allocated) {
+ assert(oc->base.wtime < cc->base.wtime);
+ if (store_nr_active > 1) { /* move delta */
+ sql_delta *b = cc->data, *p = NULL;
- assert(oc->base.wtime < cc->base.wtime);
- if (store_nr_active > 1) { /* move delta */
- sql_delta *b = cc->data, *p = NULL;
-
- cc->data = NULL;
- b->next = oc->data;
- oc->data = b;
- while (b && b->wtime > oldest->stime) {
- p = b;
- b = b->next;
+ cc->data = NULL;
+ b->next = oc->data;
+ oc->data = b;
+ while (b && b->wtime > oldest->stime) {
+ p = b;
+ b = b->next;
+ }
+ if (b && b->wtime > oldest->stime && p) {
+ p->next = NULL;
+ destroy_bat(tr, b);
+ }
+ } else {
+ assert(oc->base.allocated);
+ tr_update_delta(tr, oc->data, cc->data,
cc->unique == 1);
}
- if (b && b->wtime > oldest->stime && p) {
- p->next = NULL;
- destroy_bat(tr, b);
- }
- } else {
- assert(oc->base.allocated);
- tr_update_delta(tr, oc->data, cc->data, cc->unique ==
1);
}
oc->null = cc->null;
oc->unique = cc->unique;
- if (cc->storage_type && (!cc->storage_type ||
strcmp(cc->storage_type, oc->storage_type) != 0))
+ if (cc->storage_type && (!oc->storage_type ||
strcmp(cc->storage_type, oc->storage_type) != 0))
oc->storage_type = sa_strdup(tr->sa, cc->storage_type);
- if (cc->def && (!cc->def || strcmp(cc->def, oc->def) != 0))
+ if (!cc->storage_type)
+ oc->storage_type = NULL;
+ if (cc->def && (!oc->def || strcmp(cc->def, oc->def) != 0))
oc->def = sa_strdup(tr->sa, cc->def);
+ if (!cc->def)
+ oc->def = NULL;
if (oc->base.rtime < cc->base.rtime)
oc->base.rtime = cc->base.rtime;
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
@@ -28,15 +28,6 @@ stderr of test 'identifiers` in director
# 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-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\"'
# 18:30:40 >
# 18:30:40 > "Done."
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,6 +55,19 @@ Ready.
% tinyint # type
% 1 # length
[ 1 ]
+#CREATE TABLE "B\"la\"" (id int); -- should fail
+#SELECT 1 AS "B\"la\""; -- should fail
+% .L # table_name
+% B\"la\" # name
+% tinyint # type
+% 1 # length
+[ 1 ]
+#SELECT 1 AS "\"Bla\""; -- should fail
+% .L # table_name
+% \"Bla\" # name
+% tinyint # type
+% 1 # length
+[ 1 ]
# 11:50:07 >
# 11:50:07 > Done.
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list