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