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
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list