Changeset: 73905a09f51b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=73905a09f51b
Modified Files:
        clients/Tests/exports.stable.out
        monetdb5/optimizer/opt_prelude.c
        monetdb5/optimizer/opt_prelude.h
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_statement.c
        sql/backends/monet5/sql_statement.h
Branch: Apr2019
Log Message:

fixes for bug 6671


diffs (121 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -2189,6 +2189,7 @@ str expandRef;
 str exportOperationRef;
 str export_tableRef;
 str fcnDefinition(MalBlkPtr mb, InstrPtr p, str s, int flg, str base, size_t 
len);
+str fetchRef;
 int findGDKtype(int type);
 Module findModule(Module scope, str name);
 str findRef;
diff --git a/monetdb5/optimizer/opt_prelude.c b/monetdb5/optimizer/opt_prelude.c
--- a/monetdb5/optimizer/opt_prelude.c
+++ b/monetdb5/optimizer/opt_prelude.c
@@ -127,6 +127,7 @@ str execRef;
 str expandRef;
 str exportOperationRef;
 str export_tableRef;
+str fetchRef;
 str findRef;
 str finishRef;
 str firstnRef;
@@ -429,6 +430,7 @@ void optimizerInit(void)
        expandRef = putName("expand");
        exportOperationRef = putName("exportOperation");
        export_tableRef = putName("export_table");
+       fetchRef = putName("fetch");
        findRef = putName("find");
        finishRef = putName("finish");
        firstnRef = putName("firstn");
diff --git a/monetdb5/optimizer/opt_prelude.h b/monetdb5/optimizer/opt_prelude.h
--- a/monetdb5/optimizer/opt_prelude.h
+++ b/monetdb5/optimizer/opt_prelude.h
@@ -126,6 +126,7 @@ mal_export  str execRef;
 mal_export  str expandRef;
 mal_export  str exportOperationRef;
 mal_export  str export_tableRef;
+mal_export  str fetchRef;
 mal_export  str findRef;
 mal_export  str finishRef;
 mal_export  str firstnRef;
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
@@ -1589,6 +1589,7 @@ rel2bin_table(backend *be, sql_rel *rel,
        } else if (rel->l) { /* handle sub query via function */
                int i;
                char name[16], *nme;
+               sql_rel *fr;
 
                nme = number2name(name, 16, ++sql->remote);
 
@@ -1597,6 +1598,7 @@ rel2bin_table(backend *be, sql_rel *rel,
                        return NULL;
                sub = stmt_list(be, l);
                sub = stmt_func(be, sub, sa_strdup(sql->sa, nme), rel->l, 0);
+               fr = rel->l;
                l = sa_list(sql->sa);
                for(i = 0, n = rel->exps->h; n; n = n->next, i++ ) {
                        sql_exp *c = n->data;
@@ -1605,6 +1607,8 @@ rel2bin_table(backend *be, sql_rel *rel,
                        const char *rnme = NULL;
 
                        s = stmt_alias(be, s, rnme, nme);
+                       if (fr->card <= CARD_ATOM) /* single value, get result 
from bat */
+                               s = stmt_fetch(be, s);
                        list_append(l, s);
                }
                sub = stmt_list(be, l);
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
@@ -3755,3 +3755,38 @@ const_column(backend *be, stmt *val)
        }
        return NULL;
 }
+
+stmt *
+stmt_fetch(backend *be, stmt *val)
+{
+       sql_subtype *ct = tail_type(val);
+       MalBlkPtr mb = be->mb;
+       InstrPtr q = NULL;
+       int tt = ct->type->localtype;
+
+       if (val->nr < 0) 
+               return NULL;
+       q = newStmt(mb, algebraRef, fetchRef);
+       if (q == NULL)
+               return NULL;
+       setVarType(mb, getArg(q, 0), tt);
+       q = pushArgument(mb, q, val->nr);
+       q = pushOid(mb, q, 0);
+       if (q) {
+               stmt *s = stmt_create(be->mvc->sa, st_single);
+               if(!s) {
+                       freeInstruction(q);
+                       return NULL;
+               }
+               s->op1 = val;
+               s->op4.typeval = *ct;
+               s->nrcols = 0;
+
+               s->tname = val->tname;
+               s->cname = val->cname;
+               s->nr = getDestVar(q);
+               s->q = q;
+               return s;
+       }
+       return NULL;
+}
diff --git a/sql/backends/monet5/sql_statement.h 
b/sql/backends/monet5/sql_statement.h
--- a/sql/backends/monet5/sql_statement.h
+++ b/sql/backends/monet5/sql_statement.h
@@ -240,5 +240,6 @@ extern const char *table_name(sql_alloca
 extern const char *schema_name(sql_allocator *sa, stmt *st);
 
 extern stmt *const_column(backend *ba, stmt *val);
+extern stmt *stmt_fetch(backend *ba, stmt *val);
 
 #endif /* _SQL_STATEMENT_H_ */
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to