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]

Reply via email to