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