Changeset: 6ed58f6acd9e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6ed58f6acd9e
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sciql.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_gencode.c
sql/backends/monet5/sql_statement.c
Branch: SciQL-2
Log Message:
more compilation errors fixed/hid
diffs (225 lines):
diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -680,24 +680,52 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left
return NULL;
}
- if (list_length(e->r) > 2) {
- /* NB: this is a HACK to make the array_slice
filter work.
- * Unlike the normal filters, the array_slice
doesn't have
- * right-side comparison value.
- * Instead, it has a list of dimension and
slicing ranges,
- * contained in e->r, that need to be passed
to the filter
- * function.
- * Here we create a stmt for each of them and
add it to the ops
- * list.
- */
- node *n;
- for (n = ((list*)e->r)->h; n; n = n->next) {
- append(ops, exp_bin(sql, n->data, NULL,
NULL, NULL, NULL, NULL, NULL));
+//FOT: The original filter case does not exist anymore so I removed also the
+//adaptation for the arrays. I need to see how (if needed) to put it in the
changed code
+#if 0
+ /* general predicate, select and join */
+ if (get_cmp(e) == cmp_filter) {
+ list *ops;
+
+ if (l->nrcols == 0)
+ l = stmt_const(sql->sa,
bin_first_column(sql->sa, swapped?right:left), l);
+
+ if (left && right && re->card > CARD_ATOM &&
!is_select) {
+ /* find predicate function */
+ sql_subfunc *f = e->f;
+ stmt *j = stmt_joinN(sql->sa, l, r, r2,
f, swapped);
+
+ if (j && is_anti(e))
+ j->flag |= ANTI;
+ return j;
+ }
+
+ ops = sa_list(sql->sa);
+
+ if (list_length(e->r) > 2) {
+ /* NB: this is a HACK to make the
array_slice filter work.
+ * Unlike the normal filters, the
array_slice doesn't have
+ * right-side comparison value.
+ * Instead, it has a list of dimension
and slicing ranges,
+ * contained in e->r, that need to be
passed to the filter function.
+ * Here we create a stmt for each of
them and add it to the ops list.*/
+ node *n;
+ for (n = ((list*)e->r)->h; n; n = n->next) {
+ append(ops, exp_bin(sql, n->data, NULL, NULL, NULL,
NULL, NULL, NULL));
+ }
+ } else { /* the normal/original filter case */
+ append(ops, r);
+ append(ops, r2);
}
- } else { /* the normal/original filter case */
- append(ops, r);
- append(ops, r2);
- }
+ r = stmt_list(sql->sa, ops);
+ s = stmt_genselect(sql->sa, l, r, e->f, sel);
+
+ if (s && is_anti(e))
+ s->flag |= ANTI;
+ return s;
+ }
+#endif
+
if (left && right && !is_select &&
((l->nrcols && (r->nrcols || (r2 && r2->nrcols))) ||
re->card > CARD_ATOM ||
@@ -765,7 +793,7 @@ stmt_col( mvc *sql, sql_column *c, stmt
{
stmt *sc = stmt_bat(sql->sa, c, RDONLY);
- if (isTableOrArray(c->t) && !c->t->readonly && !readonly &&
+ if ((isTable(c->t) || isArray(c->t)) && c->t->access != TABLE_READONLY
&&
(c->base.flag != TR_NEW || c->t->base.flag != TR_NEW /* alter */) &&
(c->t->persistence == SQL_PERSIST || c->t->persistence ==
SQL_DECLARED_TABLE) && !c->t->commit_action) {
stmt *i = stmt_bat(sql->sa, c, RD_INS);
@@ -783,7 +811,7 @@ stmt_idx( mvc *sql, sql_idx *i, stmt *de
{
stmt *sc = stmt_idxbat(sql->sa, i, RDONLY);
- if (isTableOrArray(i->t) && !i->t->readonly && !readonly &&
+ if ((isTable(i->t) || isArray(i->t)) && i->t->access != TABLE_READONLY
&&
(i->base.flag != TR_NEW || i->t->base.flag != TR_NEW /* alter */) &&
(i->t->persistence == SQL_PERSIST || i->t->persistence ==
SQL_DECLARED_TABLE) && !i->t->commit_action) {
stmt *ic = stmt_idxbat(sql->sa, i, RD_INS);
diff --git a/sql/backends/monet5/sciql.c b/sql/backends/monet5/sciql.c
--- a/sql/backends/monet5/sciql.c
+++ b/sql/backends/monet5/sciql.c
@@ -204,25 +204,25 @@ str SCIQLmaterialise(Client cntxt, MalBl
/* Fill the BAT with the constant value */
switch(tpe) { /* TODO: check for overflow */
case TYPE_bte:
- bn = BATconstant(tpe, &dst.val.btval, cntall);
+ bn = BATconstant(tpe, &dst.val.btval, cntall,
TRANSIENT);
break;
case TYPE_sht:
- bn = BATconstant(tpe, &dst.val.shval, cntall);
+ bn = BATconstant(tpe, &dst.val.shval, cntall,
TRANSIENT);
break;
case TYPE_int:
- bn = BATconstant(tpe, &dst.val.ival, cntall);
+ bn = BATconstant(tpe, &dst.val.ival, cntall,
TRANSIENT);
break;
case TYPE_lng:
- bn = BATconstant(tpe, &dst.val.lval, cntall);
+ bn = BATconstant(tpe, &dst.val.lval, cntall,
TRANSIENT);
break;
case TYPE_flt:
- bn = BATconstant(tpe, &dst.val.fval, cntall);
+ bn = BATconstant(tpe, &dst.val.fval, cntall,
TRANSIENT);
break;
case TYPE_dbl:
- bn = BATconstant(tpe, &dst.val.dval, cntall);
+ bn = BATconstant(tpe, &dst.val.dval, cntall,
TRANSIENT);
break;
case TYPE_str:
- bn = BATconstant(tpe, dst.val.sval, cntall);
+ bn = BATconstant(tpe, dst.val.sval, cntall,
TRANSIENT);
break;
default:
throw(MAL, "sciql.materialise", "Unsupported
data type %s", ATOMname(tpe));
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -424,7 +424,7 @@ create_table_or_view(mvc *sql, char *sna
}
}
- nt = sql_trans_create_table(sql->session->tr, s, t->base.name,
t->query, t->type, t->system, temp, t->commit_action, t->sz);
+ nt = sql_trans_create_table(sql->session->tr, s, t->base.name,
t->query, t->type, t->system, temp, t->commit_action, t->sz, 0, 1, 0);
for (n = t->columns.set->h; n; n = n->next) {
sql_column *c = n->data;
@@ -4552,7 +4552,7 @@ RAstatement(Client cntxt, MalBlkPtr mb,
MSinitClientPrg(cntxt, "user", "test");
/* generate MAL code */
- backend_callinline(b, cntxt, s);
+ backend_callinline(b, cntxt, s, rel);
addQueryToCache(cntxt);
msg = (str) runMAL(cntxt, cntxt->curprg->def, 0, 0);
diff --git a/sql/backends/monet5/sql_execute.c
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -179,7 +179,7 @@ SQLstatementIntern(Client c, str *expr,
goto endofcompile;
}
/* generate MAL code */
- if (backend_callinline(sql, c, s) == 0)
+ if (backend_callinline(sql, c, s, r) == 0)
addQueryToCache(c);
else
err = 1;
diff --git a/sql/backends/monet5/sql_gencode.c
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1256,11 +1256,12 @@ static int
if (backend_create_subfunc(sql,
s->op4.funcval, NULL) < 0)
return -1;
- isArraySlice = (strcmp(mod, "array") ==
0 && strcmp(fimp, "slice") == 0);
-
+
mod = sql_func_mod(f);
fimp = sql_func_imp(f);
fimp = strconcat(fimp, "subselect");
+ isArraySlice = (strcmp(mod, "array") ==
0 && strcmp(fimp, "slice") == 0);
+
q = newStmt(mb, mod,
convertOperator(fimp));
/* NB: this is a HACK to make the
array_slice filter work.
* The array_slice function computes
the selected OIDs only
@@ -1280,14 +1281,15 @@ static int
// f->query contains the R code to be
run
if (f->lang == FUNC_LANG_R)
q = pushStr(mb, q, f->query);
+
for (n = s->op1->op4.lval->h; n; n =
n->next) {
stmt *op = n->data;
q = pushArgument(mb, q, op->nr);
}
/* candidate lists */
- if (sub > 0)
- q = pushArgument(mb, q,
sub);
+ if (sub > 0)
+ q = pushArgument(mb, q, sub);
else
q = pushNil(mb, q, TYPE_bat);
@@ -2584,13 +2586,15 @@ add_materialise_stmt(MalBlkPtr mb, sql_r
}
break;
case op_table:
+//FOT: sql_subtype does not store a pointer to the sql_table so I had to
comment it until I find the solution
+#if 0
if (rel->flag == 0 && rel->r != NULL) { /* a table returning
UDF */
sql_table *t =
((sql_subfunc*)((sql_exp*)rel->r)->f)->res.comp_type;
if (t->valence > 0) { /* an array returning UDF */
/* TODO: materialise the arrays
defined/returned by the function */
}
}
-
+#endif
if (rel->l)
add_materialise_stmt(mb, rel->l, processed);
break;
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -361,7 +361,7 @@ stmt_deps(list *dep_list, stmt *s, int d
case st_append_col:
case st_update_col:
if (depend_type == COLUMN_DEPENDENCY) {
- if (isTableOrArray(s->op4.cval->t))
+ if (isTable(s->op4.cval->t) ||
isArray(s->op4.cval->t))
dep_list =
cond_append(dep_list, &s->op4.cval->base.id);
dep_list = cond_append(dep_list,
&s->op4.cval->t->base.id);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list