Changeset: 5b1d069c943e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b1d069c943e
Modified Files:
        sql/server/sql_mvc.c
        sql/storage/store.c
Branch: sciql
Log Message:

when loading the catalog, load the dimension info as well.
removed columns "table_id" and "fixed" from the catalog table "_dimensions",
since their values can be derived.


diffs (94 lines):

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
@@ -99,8 +99,7 @@
                mvc_create_column_(m, t, "number", "int", 32);
                mvc_create_column_(m, t, "storage_type", "int", 32);
 
-               /* TODO: check the correctness of this new query for arrays */
-               t = mvc_create_view(m, s, "arrays", SQL_PERSIST, "SELECT * FROM 
(SELECT p.*, 0 AS \"temporary\" FROM \"sys\".\"_tables\" WHERE type = 5 AS p 
UNION ALL SELECT t.*, 1 AS \"temporary\" FROM \"tmp\".\"_tables\" WHERE type = 
5 AS t) AS arrays;", 1);
+               t = mvc_create_view(m, s, "arrays", SQL_PERSIST, "SELECT * FROM 
(SELECT p.*, 0 AS \"temporary\" FROM \"sys\".\"_tables\" AS p WHERE type = 5 
UNION ALL SELECT t.*, 1 AS \"temporary\" FROM \"tmp\".\"_tables\" AS t WHERE 
type = 5) AS arrays;", 1);
                mvc_create_column_(m, t, "id", "int", 32);
                mvc_create_column_(m, t, "name", "varchar", 1024);
                mvc_create_column_(m, t, "schema_id", "int", 32);
@@ -111,8 +110,7 @@
                mvc_create_column_(m, t, "readonly", "boolean", 1);
                mvc_create_column_(m, t, "temporary", "smallint", 16);
 
-               /* TODO: check the correctness of this new query for dimensions 
*/
-               t = mvc_create_view(m, s, "dimensions", SQL_PERSIST, "SELECT * 
FROM (SELECT pc.*, pd.fixed, pd.start, pd.step, pd.stop FROM 
\"sys\".\"_columns\" AS pc, \"sys\".\"_dimensions\" AS pd WHERE pc.id = 
pd.column_id AND pc.table_id = pd.table_id UNION ALL SELECT tc.*, td.fixed, 
td.start, td.step, td.stop FROM \"tmp\".\"_columns\" AS tc, 
\"tmp\".\"_dimensions\" AS td WHERE tc.id = td.column_id AND tc.table_id = 
td.table_id) AS dimensions;", 1);
+               t = mvc_create_view(m, s, "dimensions", SQL_PERSIST, "SELECT * 
FROM (SELECT pc.*, \"pd\".\"start\", pd.step, pd.stop FROM \"sys\".\"_columns\" 
AS pc, \"sys\".\"_dimensions\" AS pd WHERE pc.id = pd.column_id UNION ALL 
SELECT tc.*, \"td\".\"start\", td.step, td.stop FROM \"tmp\".\"_columns\" AS 
tc, \"tmp\".\"_dimensions\" AS td WHERE tc.id = td.column_id) AS dimensions;", 
1);
                mvc_create_column_(m, t, "id", "int", 32);
                mvc_create_column_(m, t, "name", "varchar", 1024);
                mvc_create_column_(m, t, "schema_id", "int", 32);
@@ -122,7 +120,6 @@
                mvc_create_column_(m, t, "commit_action", "smallint", 16);
                mvc_create_column_(m, t, "readonly", "boolean", 1);
                mvc_create_column_(m, t, "temporary", "smallint", 16);
-               mvc_create_column_(m, t, "fixed", "boolean", 1);
                mvc_create_column_(m, t, "start", "varchar", 2048);
                mvc_create_column_(m, t, "step", "varchar", 2048);
                mvc_create_column_(m, t, "stop", "varchar", 2048);
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -477,9 +477,12 @@
        void *v;
        char *def, *tpe, *st;
        int sz, d;
+       lng dim_v;
+       oid dim_rid;
        sql_column *c = ZNEW(sql_column);
        sql_schema *syss = find_sql_schema(tr, "sys");
        sql_table *columns = find_sql_table(syss, "_columns");
+       sql_table *dimensions = find_sql_table(syss, "_dimensions");
        sqlid cid;
 
        v = table_funcs.column_find_value(tr, find_sql_column(columns, "id"), 
rid);
@@ -495,6 +498,18 @@
        if (!sql_find_subtype(&c->type, tpe, sz, d))
                sql_init_subtype(&c->type, sql_trans_bind_type(tr, t->s, tpe), 
sz, d);
        _DELETE(tpe);
+
+       dim_rid = table_funcs.column_find_row(tr, find_sql_column(dimensions, 
"column_id"), &cid, NULL);
+       if (dim_rid != oid_nil){ /* this is a dimension column */
+               c->dim = ZNEW(sql_dimspec);
+               if(v = table_funcs.column_find_value(tr, 
find_sql_column(dimensions, "start"), dim_rid))
+                       c->dim->start = ZNEW(lng); *c->dim->start = *(lng *)v; 
_DELETE(v);
+               if(v = table_funcs.column_find_value(tr, 
find_sql_column(dimensions, "step"), dim_rid))
+                       c->dim->step = ZNEW(lng); *c->dim->step = *(lng *)v; 
_DELETE(v);
+               if(v = table_funcs.column_find_value(tr, 
find_sql_column(dimensions, "stop"), dim_rid))
+                       c->dim->stop = ZNEW(lng); *c->dim->stop = *(lng *)v; 
_DELETE(v);
+       }
+
        c->def = NULL;
        def = table_funcs.column_find_value(tr, find_sql_column(columns, 
"default"), rid);
        if (ATOMcmp(TYPE_str, ATOMnilptr(TYPE_str), def) != 0)
@@ -625,7 +640,7 @@
                cs_add(&t->columns, load_column(tr, t, rid), TR_OLD);
        table_funcs.rids_destroy(rs);
 
-       if (!isTable(t) && !isMergeTable(t)) 
+       if (!isTable(t) && !isArray(t) && !isMergeTable(t)) 
                return t;
 
        /* load idx's first as they may be needed by the keys */
@@ -1426,9 +1441,7 @@
                bootstrap_create_column(tr, t, "storage", "varchar", 2048);
 
                t = bootstrap_create_table(tr, s, "_dimensions");
-               bootstrap_create_column(tr, t, "table_id", "int", 32);
                bootstrap_create_column(tr, t, "column_id", "int", 32);
-               bootstrap_create_column(tr, t, "fixed", "boolean", 1);
                bootstrap_create_column(tr, t, "start", "varchar", 2048);
                bootstrap_create_column(tr, t, "step", "varchar", 2048);
                bootstrap_create_column(tr, t, "stop", "varchar", 2048);
@@ -4032,7 +4045,7 @@
                store_funcs.create_col(tr, col);
        if (!isDeclaredTable(t)) {
                table_funcs.table_insert(tr, syscolumn, &col->base.id, 
col->base.name, col->type.type->sqlname, &col->type.digits, &col->type.scale, 
&t->base.id, (col->def) ? col->def : ATOMnilptr(TYPE_str), &col->null, 
&col->colnr, (col->storage_type) ? col->storage_type : ATOMnilptr(TYPE_str));
-               if (isArray(t)) /* column_id, fixed, start, step, stop*/
+               if (isArray(t)) /* column_id, start, step, stop*/
                { /* TODO */ }
        }
 
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to