Changeset: a27b334ae151 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a27b334ae151
Modified Files:
        sql/backends/monet5/sql.mx
        sql/server/rel_schema.c
        sql/server/sql_mvc.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/sciql/Tests/01_create_01.sql
        sql/test/sciql/Tests/01_create_01.stable.out
Branch: sciql
Log Message:

Be more correct with the "fixed" property of the SQL catalog

renamed "fixed" into "fixed_array" in the SQL catalog and set it value to FALSE
(i.s.o. TRUE) for all tables.

added tests to check if "fixed_array" and "nr_dimensions" in the SQL catalog
are computed correctly.  apporved new stable.out


diffs (251 lines):

diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -1881,7 +1881,7 @@ create_table_or_view( mvc *sql, char *sn
                }
        }
 
-       nt = sql_trans_create_table(sql->session->tr, s, t->base.name, 
t->query, t->type, t->system, temp, t->commit_action, t->sz, &t->fixed, 
&t->ndims);
+       nt = sql_trans_create_table(sql->session->tr, s, t->base.name, 
t->query, t->type, t->system, temp, t->commit_action, t->sz, t->fixed, 
t->ndims);
 
        for (n = t->columns.set->h; n; n = n->next) {
                sql_column *c = n->data;
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -729,7 +729,9 @@ create_column(mvc *sql, symbol *s, sql_s
                                cs->dim->step = GDKstrdup("");
                                cs->dim->stop = GDKstrdup("");
                        }
-                       t->fixed = isFixedDim(cs->dim);
+                       if (!(isFixedDim(cs->dim)))
+                               t->fixed = 0;
+
                        /* TODO: the case "ARRAY dim_range_list" is not dealt 
with */
                }
                if (column_options(sql, opt_list, ss, t, cs) == SQL_ERR)
@@ -992,6 +994,8 @@ rel_create_table(mvc *sql, sql_schema *s
                int i = 0, j = 0, cnt = 0, *N = NULL, *M = NULL;
                lng cntall = 1;
 
+               if (isArray(t))
+                       t->fixed = 1;
                for (n = columns->h; n; n = n->next) {
                        symbol *sym = n->data.sym;
                        int res = table_element(sql, sym, s, t, 0);
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -87,7 +87,7 @@ mvc_init(char *dbname, int debug, store_
                mvc_create_column_(m, t, "system", "boolean", 1);
                mvc_create_column_(m, t, "commit_action", "smallint", 16);
                mvc_create_column_(m, t, "readonly", "boolean", 1);
-               mvc_create_column_(m, t, "fixed", "boolean", 1);
+               mvc_create_column_(m, t, "fixed_array", "boolean", 1);
                mvc_create_column_(m, t, "nr_dimensions", "int", 32);
                mvc_create_column_(m, t, "temporary", "smallint", 16);
 
@@ -124,7 +124,7 @@ mvc_init(char *dbname, int debug, store_
                mvc_create_column_(m, t, "system", "boolean", 1);
                mvc_create_column_(m, t, "commit_action", "smallint", 16);
                mvc_create_column_(m, t, "readonly", "boolean", 1);
-               mvc_create_column_(m, t, "fixed", "boolean", 1);
+               mvc_create_column_(m, t, "fixed_array", "boolean", 1);
                mvc_create_column_(m, t, "nr_dimensions", "int", 32);
                mvc_create_column_(m, t, "temporary", "smallint", 16);
                if (catalog_version) {
@@ -1029,13 +1029,13 @@ mvc_create_table(mvc *m, sql_schema *s, 
                                tt == tt_table? "TABLE":(tt == tt_array? 
"ARRAY":"OTHER_TT"),
                                s->base.name, name, tt, system, persistence, 
commit_action);
 
-       /* FIXME: are the NULLs correct values for 'fixed' and 'ndims'? */
        if (persistence == SQL_DECLARED_TABLE && (!s || strcmp(s->base.name, 
dt_schema))) {
                /* declared tables should not end up in the catalog */
-               t = create_sql_table(m->sa, name, tt, system, persistence, 
commit_action, NULL, NULL);
+               /* actual values of 'fixed' and 'ndims' are computed later */
+               t = create_sql_table(m->sa, name, tt, system, persistence, 
commit_action, 0, 0);
                t->s = s;
        } else {
-               t = sql_trans_create_table(m->session->tr, s, name, NULL, tt, 
system, persistence, commit_action, sz, NULL, NULL);
+               t = sql_trans_create_table(m->session->tr, s, name, NULL, tt, 
system, persistence, commit_action, sz, 0, 0);
        }
        return t;
 }
@@ -1049,11 +1049,11 @@ mvc_create_view(mvc *m, sql_schema *s, c
                fprintf(stderr, "#mvc_create_view %s %s %s\n", s->base.name, 
name, sql);
 
        if (persistence == SQL_DECLARED_TABLE) {
-               t = create_sql_table(m->sa, name, tt_view, system, persistence, 
0, NULL, NULL);
+               t = create_sql_table(m->sa, name, tt_view, system, persistence, 
0, 0, 0);
                t->s = s;
                t->query = sa_strdup(m->sa, sql);
        } else {
-               t = sql_trans_create_table(m->session->tr, s, name, sql, 
tt_view, system, SQL_PERSIST, 0, 0, NULL, NULL);
+               t = sql_trans_create_table(m->session->tr, s, name, sql, 
tt_view, system, SQL_PERSIST, 0, 0, 0, 0);
        }
        return t;
 }
@@ -1067,11 +1067,11 @@ mvc_create_remote(mvc *m, sql_schema *s,
                fprintf(stderr, "#mvc_create_remote %s %s %s\n", s->base.name, 
name, loc);
 
        if (persistence == SQL_DECLARED_TABLE) {
-               t = create_sql_table(m->sa, name, tt_remote, 0, persistence, 0, 
NULL, NULL);
+               t = create_sql_table(m->sa, name, tt_remote, 0, persistence, 0, 
0, 0);
                t->s = s;
                t->query = sa_strdup(m->sa, loc);
        } else {
-               t = sql_trans_create_table(m->session->tr, s, name, loc, 
tt_remote, 0, SQL_REMOTE, 0, 0, NULL, NULL);
+               t = sql_trans_create_table(m->session->tr, s, name, loc, 
tt_remote, 0, SQL_REMOTE, 0, 0, 0, 0);
        }
        return t;
 }
@@ -1084,7 +1084,7 @@ mvc_create_generated(mvc *m, sql_schema 
        if (mvc_debug)
                fprintf(stderr, "#mvc_create_generated %s %s %s\n", 
s->base.name, name, sql);
 
-       t = sql_trans_create_table(m->session->tr, s, name, sql, tt_generated, 
system, SQL_PERSIST, 0, 0, NULL, NULL);
+       t = sql_trans_create_table(m->session->tr, s, name, sql, tt_generated, 
system, SQL_PERSIST, 0, 0, 0, 0);
        return t;
 }
 
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -314,7 +314,7 @@ extern void reset_functions(sql_trans *t
 extern sql_schema *sql_trans_create_schema(sql_trans *tr, char *name, int 
auth_id, int owner);
 extern void sql_trans_drop_schema(sql_trans *tr, int id, int drop_action);
 
-extern sql_table *sql_trans_create_table(sql_trans *tr, sql_schema *s, char 
*name, char *sql, int tt, bit system, int persistence, int commit_action, int 
sz, bit *fixed, int *ndims);
+extern sql_table *sql_trans_create_table(sql_trans *tr, sql_schema *s, char 
*name, char *sql, int tt, bit system, int persistence, int commit_action, int 
sz, bit fixed, int ndims);
 extern sql_table *sql_trans_add_table(sql_trans *tr, sql_table *mt, sql_table 
*pt);
 extern sql_table *sql_trans_del_table(sql_trans *tr, sql_table *mt, sql_table 
*pt, int drop_action);
 
@@ -368,7 +368,7 @@ extern int sql_trans_connect_catalog(sql
 extern int sql_trans_disconnect_catalog(sql_trans *tr, char *db_alias);
 extern int sql_trans_disconnect_catalog_ALL(sql_trans *tr);
 
-extern sql_table *create_sql_table(sql_allocator *sa, char *name, sht type, 
bit system, int persistence, int commit_action, bit *fixed, int *ndims);
+extern sql_table *create_sql_table(sql_allocator *sa, char *name, sht type, 
bit system, int persistence, int commit_action, bit fixed, int ndims);
 extern sql_column *create_sql_column(sql_allocator *sa, sql_table *t, char 
*name, sql_subtype *tpe);
 extern sql_ukey *create_sql_ukey(sql_allocator *sa, sql_table *t, char *nme, 
key_type kt);
 extern sql_fkey *create_sql_fkey(sql_allocator *sa, sql_table *t, char *nme, 
key_type kt, sql_key *rkey, int on_delete, int on_update );
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -578,7 +578,7 @@ load_table(sql_trans *tr, sql_schema *s,
        t->cleared = 0;
        v = table_funcs.column_find_value(tr, find_sql_column(tables, 
"readonly"),rid);
        t->readonly = *(bit *)v;        _DELETE(v);
-       v = table_funcs.column_find_value(tr, find_sql_column(tables, 
"fixed"),rid);
+       v = table_funcs.column_find_value(tr, find_sql_column(tables, 
"fixed_array"),rid);
        t->fixed = *(bit *)v;   _DELETE(v);
        v = table_funcs.column_find_value(tr, find_sql_column(tables, 
"nr_dimensions"),rid);
        t->ndims = *(int *)v;   _DELETE(v);
@@ -1127,7 +1127,7 @@ bootstrap_create_column(sql_trans *tr, s
 }
 
 sql_table *
-create_sql_table(sql_allocator *sa, char *name, sht type, bit system, int 
persistence, int commit_action, bit *fixed, int *ndims)
+create_sql_table(sql_allocator *sa, char *name, sht type, bit system, int 
persistence, int commit_action, bit fixed, int ndims)
 {
        sql_table *t = SA_ZNEW(sa, sql_table);
 
@@ -1149,9 +1149,9 @@ create_sql_table(sql_allocator *sa, char
        t->pkey = NULL;
        t->sz = COLSIZE;
        t->cleared = 0;
-       /* 'fixed' and 'ndims' are ONLY used for arrays.  Pass NULLs to get 
their defaults. */
-       t->fixed = fixed ? *fixed : 1; /* should be set to 0 if an unbounded 
dimension is found. */
-       t->ndims = ndims ? *ndims : 0;
+       /* 'fixed' and 'ndims' are ONLY used for arrays. For tables, their 
values arre always 0. */
+       t->fixed = isArray(t) ? fixed : 0; /* should be set to 1 for fixed 
arrays. */
+       t->ndims = isArray(t) ? ndims : 0;
        t->s = NULL;
        return t;
 }
@@ -1188,7 +1188,7 @@ sql_table *
 dup_sql_table(sql_allocator *sa, sql_table *t)
 {
        node *n;
-       sql_table *nt = create_sql_table(sa, t->base.name, t->type, t->system, 
SQL_DECLARED_TABLE, t->commit_action, &t->fixed, &t->ndims);
+       sql_table *nt = create_sql_table(sa, t->base.name, t->type, t->system, 
SQL_DECLARED_TABLE, t->commit_action, t->fixed, t->ndims);
 
        for (n = t->columns.set->h; n; n = n->next) 
                dup_sql_column(sa, nt, n->data);
@@ -1223,7 +1223,7 @@ bootstrap_create_table(sql_trans *tr, sq
        int istmp = isTempSchema(s);
        int persistence = istmp?SQL_GLOBAL_TEMP:SQL_PERSIST;
        sht commit_action = istmp?CA_PRESERVE:CA_COMMIT;
-       sql_table *t = create_sql_table(tr->sa, name, tt_table, 1, persistence, 
commit_action, NULL, NULL /* we never have arrays here */);
+       sql_table *t = create_sql_table(tr->sa, name, tt_table, 1, persistence, 
commit_action, 0, 0 /* we never have arrays here */);
 
        if (bs_debug)
                fprintf(stderr, "#bootstrap_create_table %s\n", name );
@@ -1411,7 +1411,7 @@ store_init(int debug, store_type store, 
                bootstrap_create_column(tr, t, "system", "boolean", 1);
                bootstrap_create_column(tr, t, "commit_action", "smallint", 16);
                bootstrap_create_column(tr, t, "readonly", "boolean", 1);
-               bootstrap_create_column(tr, t, "fixed", "boolean", 1);
+               bootstrap_create_column(tr, t, "fixed_array", "boolean", 1);
                bootstrap_create_column(tr, t, "nr_dimensions", "int", 32);
 
                t = bootstrap_create_table(tr, s, "_columns");
@@ -3863,7 +3863,7 @@ sql_trans_del_table(sql_trans *tr, sql_t
 }
 
 sql_table *
-sql_trans_create_table(sql_trans *tr, sql_schema *s, char *name, char *sql, 
int tt, bit system, int persistence, int commit_action, int sz, bit *fixed, int 
*ndims)
+sql_trans_create_table(sql_trans *tr, sql_schema *s, char *name, char *sql, 
int tt, bit system, int persistence, int commit_action, int sz, bit fixed, int 
ndims)
 {
        sql_table *t = create_sql_table(tr->sa, name, tt, system, persistence, 
commit_action, fixed, ndims);
        sql_schema *syss = find_sql_schema(tr, isGlobal(t)?"sys":"tmp");
diff --git a/sql/test/sciql/Tests/01_create_01.sql 
b/sql/test/sciql/Tests/01_create_01.sql
--- a/sql/test/sciql/Tests/01_create_01.sql
+++ b/sql/test/sciql/Tests/01_create_01.sql
@@ -1,5 +1,16 @@
 -- use the [size] shortcut for integer type dimensions
 CREATE ARRAY ary(x TINYINT DIMENSION[4], y BIGINT DIMENSION[-5], v FLOAT 
DEFAULT 3.7);
 SELECT * FROM ary;
+
+CREATE ARRAY ary1(x TINYINT DIMENSION, y BIGINT DIMENSION, v FLOAT DEFAULT 
3.7);
+SELECT * FROM ary1;
+
+CREATE ARRAY ary2(x TINYINT DIMENSION[4], y BIGINT DIMENSION, z BIGINT 
DIMENSION[-5], v FLOAT DEFAULT 3.7);
+SELECT * FROM ary2;
+
+SELECT * FROM _tables WHERE type = 7 OR fixed_array = TRUE;
+
 DROP ARRAY ary;
+DROP ARRAY ary1;
+DROP ARRAY ary2;
 
diff --git a/sql/test/sciql/Tests/01_create_01.stable.out 
b/sql/test/sciql/Tests/01_create_01.stable.out
--- a/sql/test/sciql/Tests/01_create_01.stable.out
+++ b/sql/test/sciql/Tests/01_create_01.stable.out
@@ -49,6 +49,26 @@ Ready.
 [ 3,   -2,     3.7     ]
 [ 3,   -3,     3.7     ]
 [ 3,   -4,     3.7     ]
+#CREATE ARRAY ary1(x TINYINT DIMENSION, y BIGINT DIMENSION, v FLOAT DEFAULT 
3.7);
+#SELECT * FROM ary1;
+% sys.ary1,    sys.ary1,       sys.ary1 # table_name
+% x,   y,      v # name
+% tinyint,     bigint, double # type
+% 1,   1,      24 # length
+#CREATE ARRAY ary2(x TINYINT DIMENSION[4], y BIGINT DIMENSION, z BIGINT 
DIMENSION[-5], v FLOAT DEFAULT 3.7);
+#SELECT * FROM ary2;
+% sys.ary2,    sys.ary2,       sys.ary2,       sys.ary2 # table_name
+% x,   y,      z,      v # name
+% tinyint,     bigint, bigint, double # type
+% 1,   1,      1,      24 # length
+#SELECT * FROM _tables WHERE type = 7 OR fixed_array = TRUE;
+% sys._tables, sys._tables,    sys._tables,    sys._tables,    sys._tables,    
sys._tables,    sys._tables,    sys._tables,    sys._tables,    sys._tables # 
table_name
+% id,  name,   schema_id,      query,  type,   system, commit_action,  
readonly,       fixed_array,    nr_dimensions # name
+% int, varchar,        int,    varchar,        smallint,       boolean,        
smallint,       boolean,        boolean,        int # type
+% 4,   4,      4,      0,      1,      5,      1,      5,      5,      1 # 
length
+[ 6461,        "ary",  2000,   NULL,   7,      false,  0,      false,  true,   
2       ]
+[ 6466,        "ary1", 2000,   NULL,   7,      false,  0,      false,  false,  
2       ]
+[ 6472,        "ary2", 2000,   NULL,   7,      false,  0,      false,  false,  
3       ]
 #DROP ARRAY ary;
 
 # 13:50:46 >  
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to