Changeset: e60aba74fe5f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e60aba74fe5f
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_optimizer.c
sql/backends/monet5/sql_statement.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
Branch: nested
Log Message:
some more merge fixes, also lookup columns using id for nested objects
diffs (170 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
@@ -3746,6 +3746,14 @@ get_equi_joins_first(mvc *sql, list *exp
}
static stmt *
+stmt_append_nil(backend *be, stmt *s, stmt *rows)
+{
+ if (s->nested)
+ return stmt_nest(be, s, rows, &stmt_append_nil);
+ return stmt_append(be, s, stmt_const(be, rows,
(s->flag&OUTER_ZERO)?stmt_atom_lng(be, 0):stmt_atom(be,
atom_general(be->mvc->sa, tail_type(s), NULL, 0))));
+}
+
+static stmt *
rel2bin_join(backend *be, sql_rel *rel, list *refs)
{
mvc *sql = be->mvc;
@@ -3959,6 +3967,7 @@ rel2bin_join(backend *be, sql_rel *rel,
}
#endif
+ int op = rel->op;
for (n = left->op4.lval->h; n; n = n->next) {
stmt *c = n->data;
sql_alias *rnme = table_name(sql->sa, c);
@@ -3966,13 +3975,14 @@ rel2bin_join(backend *be, sql_rel *rel,
stmt *s = stmt_project(be, jl, column(be, c));
/* as append isn't save, we append to a new copy */
- if (rel->op == op_left || rel->op == op_full || rel->op ==
op_right)
+ if (op == op_left || op == op_full || op == op_right)
s = create_const_column(be, s, NULL);
- if (rel->op == op_left || rel->op == op_full)
+ if (op == op_left || op == op_full)
s = stmt_append(be, s, stmt_project(be, ld, c));
- if (rel->op == op_right || rel->op == op_full)
- s = stmt_append(be, s, stmt_const(be, rd,
(c->flag&OUTER_ZERO)?stmt_atom_lng(be, 0):stmt_atom(be, atom_general(sql->sa,
tail_type(c), NULL, 0))));
-
+ if (op == op_right || op == op_full) {
+ s->flag = c->flag; /* push OUTER_ZERO */
+ s = stmt_append_nil(be, s, rd);
+ }
s = stmt_alias(be, s, c->label, rnme, nme);
list_append(l, s);
}
@@ -3983,11 +3993,13 @@ rel2bin_join(backend *be, sql_rel *rel,
stmt *s = stmt_project(be, jr, column(be, c));
/* as append isn't save, we append to a new copy */
- if (rel->op == op_left || rel->op == op_full || rel->op ==
op_right)
+ if (op == op_left || op == op_full || op == op_right)
s = create_const_column(be, s, NULL);
- if (rel->op == op_left || rel->op == op_full)
- s = stmt_append(be, s, stmt_const(be, ld,
(c->flag&OUTER_ZERO)?stmt_atom_lng(be, 0):stmt_atom(be, atom_general(sql->sa,
tail_type(c), NULL, 0))));
- if (rel->op == op_right || rel->op == op_full)
+ if (op == op_left || op == op_full) {
+ s->flag = c->flag; /* push OUTER_ZERO */
+ s = stmt_append_nil(be, s, ld);
+ }
+ if (op == op_right || op == op_full)
s = stmt_append(be, s, stmt_project(be, rd, c));
s = stmt_alias(be, s, c->label, rnme, nme);
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
@@ -6531,6 +6531,19 @@ static mel_func sql_init_funcs[] = {
pattern("sql", "emptybind", mvc_bind_wrap, false, "", args(2,8,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",str),arg("access",int),arg("part_nr",int))),
pattern("sql", "bind", mvc_bind_wrap, false, "Bind the 'schema.table.column'
BAT with access kind: 0 - base table 1 - inserts 2 - updates", args(2,8,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",str),arg("access",int),arg("part_nr",int))),
+ pattern("sql", "emptybind", mvc_bind_wrap, false, "", args(1,6,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int))),
+ pattern("sql", "bind", mvc_bind_wrap, false, "Bind the 'schema.table.column'
BAT with access kind:\n0 - base table\n1 - inserts\n2 - updates", args(1,6,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int))),
+ pattern("sql", "emptybind", mvc_bind_wrap, false, "", args(2,7,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int))),
+ pattern("sql", "bind", mvc_bind_wrap, false, "Bind the 'schema.table.column'
BAT with access kind:\n0 - base table\n1 - inserts\n2 - updates", args(2,7,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int))),
+ pattern("sql", "emptybind", mvc_bind_wrap, false, "", args(1,8,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int),arg("nr_parts",int))),
+ pattern("sql", "bind", mvc_bind_wrap, false, "Bind the 'schema.table.column'
BAT partition with access kind:\n0 - base table\n1 - inserts\n2 - updates",
args(1,8,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int),arg("nr_parts",int))),
+ pattern("sql", "emptybind", mvc_bind_wrap, false, "", args(1,7,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int))),
+ pattern("sql", "bind", mvc_bind_wrap, false, "Bind the 'schema.table.column'
BAT partition with access kind:\n0 - base table\n1 - inserts\n2 - updates",
args(1,7,
batargany("",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int))),
+ pattern("sql", "emptybind", mvc_bind_wrap, false, "", args(2,9,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int),arg("nr_parts",int))),
+ pattern("sql", "bind", mvc_bind_wrap, false, "Bind the 'schema.table.column'
BAT with access kind:\n0 - base table\n1 - inserts\n2 - updates", args(2,9,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int),arg("nr_parts",int))),
+ pattern("sql", "emptybind", mvc_bind_wrap, false, "", args(2,8,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int))),
+ pattern("sql", "bind", mvc_bind_wrap, false, "Bind the 'schema.table.column'
BAT with access kind:\n0 - base table\n1 - inserts\n2 - updates", args(2,8,
batarg("uid",oid),batargany("uval",1),arg("mvc",int),arg("schema",str),arg("table",str),arg("column",int),arg("access",int),arg("part_nr",int))),
+
command("sql", "delta", DELTAbat, false, "Return column bat with delta's
applied.", args(1,4,
batargany("",1),batargany("col",1),batarg("uid",oid),batargany("uval",1))),
command("sql", "projectdelta", DELTAproject, false, "Return column bat with
delta's applied.", args(1,5,
batargany("",1),batarg("select",oid),batargany("col",1),batarg("uid",oid),batargany("uval",1))),
command("sql", "subdelta", DELTAsub, false, "Return a single bat of selected
delta.", args(1,5,
batarg("",oid),batarg("col",oid),batarg("cand",oid),batarg("uid",oid),batarg("uval",oid))),
diff --git a/sql/backends/monet5/sql_optimizer.c
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -19,6 +19,7 @@
#include "sql_optimizer.h"
#include "sql_scenario.h"
#include "sql_gencode.h"
+#include "sql_catalog.h"
#include "opt_pipes.h"
/* calculate the footprint for optimizer pipe line choices
@@ -65,7 +66,7 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
if (getModuleId(p) == sqlRef && getFunctionId(p) == bindRef &&
p->retc <= 2){
char *sname = getVarConstant(mb, getArg(p, 1 +
p->retc)).val.sval;
char *tname = getVarConstant(mb, getArg(p, 2 +
p->retc)).val.sval;
- char *cname = getVarConstant(mb, getArg(p, 3 +
p->retc)).val.sval;
+ int ctype = getArgType(mb, p, 3 + p->retc);
int access = getVarConstant(mb, getArg(p, 4 +
p->retc)).val.ival;
sql_schema *s = mvc_bind_schema(m, sname);
sql_table *t = 0;
@@ -76,7 +77,13 @@ SQLgetSpace(mvc *m, MalBlkPtr mb, int pr
t = mvc_bind_table(m, s, tname);
if (!t || isDeclaredTable(t))
continue;
- c = mvc_bind_column(m, t, cname);
+ if (ctype == TYPE_int) {
+ int colid = getVarConstant(mb, getArg(p, 3 +
p->retc)).val.ival;
+ c = find_sql_column_id(t, colid);
+ } else {
+ char *cname = getVarConstant(mb, getArg(p, 3 +
p->retc)).val.sval;
+ c = mvc_bind_column(m, t, cname);
+ }
if (!c)
continue;
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
@@ -759,7 +759,10 @@ stmt_bat(backend *be, sql_column *c, sql
q = pushArgument(mb, q, be->mvc_var);
q = pushSchema(mb, q, c->t);
q = pushArgument(mb, q, getStrConstant(mb,c->t->base.name));
- q = pushArgument(mb, q, getStrConstant(mb,c->base.name));
+ if (c->t->multiset || c->t->composite)
+ q = pushArgument(mb, q, getIntConstant(mb,c->base.id));
+ else
+ q = pushArgument(mb, q, getStrConstant(mb,c->base.name));
q = pushArgument(mb, q, getIntConstant(mb,access));
if (partition && be->pp) {
q = pushArgument(mb, q, be->pp);
@@ -909,7 +912,7 @@ stmt_append_col(backend *be, sql_column
*mvc_var_update = tmpvar;
q = pushSchema(mb, q, c->t);
q = pushStr(mb, q, c->t->base.name);
- if (c->column_type != column_plain)
+ if (c->type.multiset || c->column_type != column_plain)
q = pushInt(mb, q, c->base.id);
else
q = pushStr(mb, q, c->base.name);
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -4215,7 +4215,7 @@ log_table_append(sql_trans *tr, sql_tabl
sql_column *c = n->data;
column_storage *cs = ATOMIC_PTR_GET(&c->data);
- if (c->type.type->composite || c->type.multiset == MS_VECTOR)
+ if ((c->type.type->composite && !c->type.multiset) ||
c->type.multiset == MS_VECTOR)
continue;
if (cs->cleared) {
ok = (tr_log_cs(tr, t, cs, NULL, c->base.id) ==
LOG_OK)? GDK_SUCCEED : GDK_FAIL;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4309,7 +4309,7 @@ sql_trans_copy_column( sql_trans *tr, sq
return -2;
needs_data = true; /* column its self is reference
id */
}
- if (c->type.multiset == MS_ARRAY) { /* array need order */
+ if (c->type.multiset == MS_ARRAY) { /* array needs order */
char *name = MSNR_NAME;
sql_subtype tp = *sql_fetch_localtype(MSNR_TYPE);
sql_column *ic = NULL;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]