Changeset: d28875138d99 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d28875138d99
Modified Files:
monetdb5/modules/kernel/mmath.mal
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_statement.c
sql/backends/monet5/sql_statement.h
Branch: Jul2015
Log Message:
call rand() many times (not just once).
diffs (46 lines):
diff --git a/monetdb5/modules/kernel/mmath.mal
b/monetdb5/modules/kernel/mmath.mal
--- a/monetdb5/modules/kernel/mmath.mal
+++ b/monetdb5/modules/kernel/mmath.mal
@@ -188,7 +188,7 @@ command rand{unsafe} () :int
address MATHrandint
comment "return a random number";
-command rand{unsafe} (v:int) :int
+command rand (v:int) :int
address MATHrandintarg
comment "return a random number";
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
@@ -400,6 +400,8 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left
return NULL;
if (es->nrcols > nrcols)
nrcols = es->nrcols;
+ if (es && es->nrcols <= 0 && left &&
has_side_effect(es))
+ es = stmt_const(sql->sa,
bin_first_column(sql->sa, left), es);
list_append(l,es);
}
if (sel && strcmp(sql_func_mod(f->func), "calc") == 0
&& nrcols && strcmp(sql_func_imp(f->func), "ifthenelse") != 0)
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
@@ -633,7 +633,7 @@ push_project(sql_allocator *sa, stmt *ro
return val;
}
-static int
+int
has_side_effect(stmt *val)
{
int se = 0;
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
@@ -255,4 +255,6 @@ extern list *stmt_list_dependencies(sql_
extern stmt *const_column(sql_allocator *sa, stmt *val);
+extern int has_side_effect(stmt *val);
+
#endif /* _SQL_STATEMENT_H_ */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list