Changeset: f98c0609fa56 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f98c0609fa56
Added Files:
sql/test/Dependencies/Tests/view_table_udf.sql
sql/test/Dependencies/Tests/view_table_udf.stable.err
sql/test/Dependencies/Tests/view_table_udf.stable.out
Modified Files:
clients/mapiclient/eventparser.c
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_upgrades.c
sql/server/rel_optimizer.c
sql/server/rel_optimizer.h
sql/storage/sql_storage.h
sql/storage/store.c
sql/test/Dependencies/Tests/All
sql/test/Dependencies/Tests/Dependencies.stable.out
sql/test/Dependencies/Tests/Dependencies.stable.out.int128
sql/test/Dependencies/Tests/dependency_loop.stable.out
sql/test/Dependencies/Tests/dependency_loop.stable.out.int128
sql/test/merge-partitions/Tests/mergepart21.stable.err
Branch: default
Log Message:
Merge with Nov2019
diffs (truncated from 1025 to 300 lines):
diff --git a/clients/mapiclient/eventparser.c b/clients/mapiclient/eventparser.c
--- a/clients/mapiclient/eventparser.c
+++ b/clients/mapiclient/eventparser.c
@@ -229,7 +229,7 @@ keyvalueparser(char *txt, EventRecord *e
curr_time = *localtime(&sec);
#endif
ev->time = malloc(DATETIME_CHAR_LENGTH*sizeof(char));
- snprintf(ev->time, DATETIME_CHAR_LENGTH, "%d/%02d/%02d
%02d:%02d:%02d.%lu",
+ snprintf(ev->time, DATETIME_CHAR_LENGTH, "%d/%02d/%02d
%02d:%02d:%02d.%"PRIu64,
curr_time.tm_year + 1900, curr_time.tm_mon,
curr_time.tm_mday,
curr_time.tm_hour, curr_time.tm_min, curr_time.tm_sec,
microsec);
ev->clkticks = sec * 1000000;
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
@@ -5746,7 +5746,7 @@ id_cmp(int *id1, int *id2)
static list *
cond_append(list *l, int *id)
{
- if (*id >= 2000 && !list_find(l, id, (fcmp) &id_cmp))
+ if (*id >= FUNC_OIDS && !list_find(l, id, (fcmp) &id_cmp))
list_append(l, id);
return l;
}
@@ -5856,37 +5856,32 @@ rel_deps(mvc *sql, sql_rel *r, list *ref
if (!t && c)
t = c->t;
+
cond_append(l, &t->base.id);
- if (isTable(t)) {
- /* find all used columns */
- node *en;
- for( en = r->exps->h; en; en = en->next ) {
- sql_exp *exp = en->data;
- const char *oname = exp->r;
-
- if (is_func(exp->type)) {
- list *exps = exp->l;
- sql_exp *cexp = exps->h->data;
- const char *cname = cexp->r;
-
- c = find_sql_column(t, cname);
- cond_append(l, &c->base.id);
- } else if (oname[0] == '%' && strcmp(oname,
TID) == 0) {
- continue;
- } else if (oname[0] == '%') {
- sql_idx *i = find_sql_idx(t, oname+1);
-
- cond_append(l, &i->base.id);
- } else {
- sql_column *c = find_sql_column(t,
oname);
- cond_append(l, &c->base.id);
- }
+ /* find all used columns */
+ for (node *en = r->exps->h; en; en = en->next) {
+ sql_exp *exp = en->data;
+ const char *oname = exp->r;
+
+ assert(!is_func(exp->type));
+ if (oname[0] == '%' && strcmp(oname, TID) == 0) {
+ continue;
+ } else if (oname[0] == '%') {
+ sql_idx *i = find_sql_idx(t, oname+1);
+ cond_append(l, &i->base.id);
+ } else {
+ sql_column *c = find_sql_column(t, oname);
+ cond_append(l, &c->base.id);
}
}
- } break;
- case op_table:
- /* */
- break;
+ } break;
+ case op_table: {
+ if ((r->flag == 0 || r->flag == 1) && r->r) { /* table
producing function, excluding rel_relational_func cases */
+ sql_exp *op = r->r;
+ sql_subfunc *f = op->f;
+ cond_append(l, &f->func->base.id);
+ }
+ } break;
case op_join:
case op_left:
case op_right:
@@ -5933,7 +5928,7 @@ rel_deps(mvc *sql, sql_rel *r, list *ref
}
break;
}
- if (r->exps) {
+ if (!is_base(r->op) && r->exps) {
if (exps_deps(sql, r->exps, refs, l) != 0)
return -1;
}
diff --git a/sql/backends/monet5/sql_upgrades.c
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -46,7 +46,7 @@ sql_fix_system_tables(Client c, mvc *sql
for (n = types->h; n; n = n->next) {
sql_type *t = n->data;
- if (t->base.id >= 2000)
+ if (t->base.id >= FUNC_OIDS)
continue;
pos += snprintf(buf + pos, bufsize - pos,
@@ -68,7 +68,7 @@ sql_fix_system_tables(Client c, mvc *sql
sql_arg *arg;
node *m;
- if (func->base.id >= 2000)
+ if (func->base.id >= FUNC_OIDS)
continue;
pos += snprintf(buf + pos, bufsize - pos,
@@ -136,7 +136,7 @@ sql_fix_system_tables(Client c, mvc *sql
sql_func *aggr = n->data;
sql_arg *arg;
- if (aggr->base.id >= 2000)
+ if (aggr->base.id >= FUNC_OIDS)
continue;
pos += snprintf(buf + pos, bufsize - pos,
@@ -283,7 +283,7 @@ sql_update_geom(Client c, mvc *sql, int
for (n = types->h; n; n = n->next) {
sql_type *t = n->data;
- if (t->base.id < 2000 &&
+ if (t->base.id < FUNC_OIDS &&
(strcmp(t->base.name, "mbr") == 0 ||
strcmp(t->base.name, "wkb") == 0 ||
strcmp(t->base.name, "wkba") == 0))
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -9137,7 +9137,8 @@ optimize_rel(mvc *sql, sql_rel *rel, int
changes = 0;
}
- rel = rewrite_topdown(sql, rel, &rel_merge_table_rewrite, &changes);
+ if (value_based_opt)
+ rel = rewrite_topdown(sql, rel, &rel_merge_table_rewrite,
&changes);
if (level <= 0 && mvc_debug_on(sql,8))
rel = rewrite_topdown(sql, rel, &rel_add_dicts, &changes);
*g_changes = changes;
diff --git a/sql/server/rel_optimizer.h b/sql/server/rel_optimizer.h
--- a/sql/server/rel_optimizer.h
+++ b/sql/server/rel_optimizer.h
@@ -12,13 +12,13 @@
#include "sql_relation.h"
#include "sql_mvc.h"
-extern sql_rel * rel_optimizer(mvc *sql, sql_rel *rel, int value_based_opt);
+extern sql_rel *rel_optimizer(mvc *sql, sql_rel *rel, int value_based_opt);
extern int exp_joins_rels(sql_exp *e, list *rels);
-extern void *name_find_column( sql_rel *rel, const char *rname, const char
*name, int pnr, sql_rel **bt );
+extern void *name_find_column(sql_rel *rel, const char *rname, const char
*name, int pnr, sql_rel **bt);
extern int exps_unique(mvc *sql, sql_rel *rel, list *exps);
-extern sql_rel * rel_dce(mvc *sql, sql_rel *rel);
+extern sql_rel *rel_dce(mvc *sql, sql_rel *rel);
#endif /*_REL_OPTIMIZER_H_*/
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -36,6 +36,9 @@ typedef enum store_type {
#define STORE_READONLY (store_readonly)
+/* builtin functions have ids less than this */
+#define FUNC_OIDS 2000
+
extern sql_trans *gtrans;
extern list *active_sessions;
extern ATOMIC_TYPE store_nr_active;
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -51,9 +51,6 @@ static int logger_debug = 0;
static sql_trans *spare_trans[MAX_SPARES];
static int spares = 0;
-/* builtin functions have ids less than this */
-#define FUNC_OIDS 2000
-
static int
key_cmp(sql_key *k, sqlid *id)
{
diff --git a/sql/test/Dependencies/Tests/All b/sql/test/Dependencies/Tests/All
--- a/sql/test/Dependencies/Tests/All
+++ b/sql/test/Dependencies/Tests/All
@@ -1,2 +1,3 @@
HAVE_GEOM&HAVE_SAMTOOLS?Dependencies
HAVE_GEOM?dependency_loop
+view_table_udf
diff --git a/sql/test/Dependencies/Tests/Dependencies.stable.out
b/sql/test/Dependencies/Tests/Dependencies.stable.out
--- a/sql/test/Dependencies/Tests/Dependencies.stable.out
+++ b/sql/test/Dependencies/Tests/Dependencies.stable.out
@@ -140,7 +140,9 @@ Dependencies between database objects
% varchar, varchar, char # type
% 4, 2, 8 # length
[ "age", "v1", "DEP_VIEW" ]
+[ "age", "v2", "DEP_VIEW" ]
[ "id", "v1", "DEP_VIEW" ]
+[ "id", "v2", "DEP_VIEW" ]
[ "name", "v1", "DEP_VIEW" ]
#SELECT c.name, k.name, 'DEP_KEY' from columns as c, objects as kc, keys as k
where kc."name" = c.name AND kc.id = k.id AND k.table_id = c.table_id AND
k.rkey = -1 order by c.name, k.name;
% .c, .k, .L11 # table_name
@@ -184,9 +186,11 @@ Dependencies between database objects
% varchar, varchar, char # type
% 9, 8, 8 # length
[ "age", "f2", "DEP_FUNC" ]
+[ "age", "f2", "DEP_FUNC" ]
[ "auth_name", "getproj4", "DEP_FUNC" ]
[ "auth_srid", "getproj4", "DEP_FUNC" ]
[ "id", "f2", "DEP_FUNC" ]
+[ "id", "f2", "DEP_FUNC" ]
[ "name", "f2", "DEP_FUNC" ]
[ "proj4text", "getproj4", "DEP_FUNC" ]
[ "srid", "getproj4", "DEP_FUNC" ]
@@ -487,8 +491,12 @@ Cleanup
[ "atomwidth", "storagemodel", "DEP_VIEW" ]
[ "atomwidth", "tablestoragemodel", "DEP_VIEW" ]
[ "column", "storagemodel", "DEP_VIEW" ]
+[ "columnsize", "schemastorage", "DEP_VIEW" ]
+[ "columnsize", "tablestorage", "DEP_VIEW" ]
[ "count", "storagemodel", "DEP_VIEW" ]
+[ "count", "tablestorage", "DEP_VIEW" ]
[ "count", "tablestoragemodel", "DEP_VIEW" ]
+[ "default_schema", "dependency_schemas_on_users", "DEP_VIEW" ]
[ "depend_id", "dependencies_vw", "DEP_VIEW" ]
[ "depend_id", "dependency_args_on_types", "DEP_VIEW" ]
[ "depend_id", "dependency_columns_on_functions", "DEP_VIEW" ]
@@ -534,6 +542,11 @@ Cleanup
[ "func_id", "dependency_args_on_types", "DEP_VIEW" ]
[ "func_id", "ids", "DEP_VIEW" ]
[ "grantor", "roles", "DEP_VIEW" ]
+[ "hashes", "schemastorage", "DEP_VIEW" ]
+[ "hashes", "tablestorage", "DEP_VIEW" ]
+[ "heapsize", "schemastorage", "DEP_VIEW" ]
+[ "heapsize", "tablestorage", "DEP_VIEW" ]
+[ "id", "dependencies_vw", "DEP_VIEW" ]
[ "id", "dependencies_vw", "DEP_VIEW" ]
[ "id", "dependency_args_on_types", "DEP_VIEW" ]
[ "id", "dependency_args_on_types", "DEP_VIEW" ]
@@ -541,16 +554,28 @@ Cleanup
[ "id", "dependency_args_on_types", "DEP_VIEW" ]
[ "id", "dependency_columns_on_functions", "DEP_VIEW" ]
[ "id", "dependency_columns_on_functions", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_functions", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_indexes", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_indexes", "DEP_VIEW" ]
[ "id", "dependency_columns_on_indexes", "DEP_VIEW" ]
[ "id", "dependency_columns_on_indexes", "DEP_VIEW" ]
[ "id", "dependency_columns_on_keys", "DEP_VIEW" ]
[ "id", "dependency_columns_on_keys", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_keys", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_keys", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_procedures", "DEP_VIEW" ]
[ "id", "dependency_columns_on_procedures", "DEP_VIEW" ]
[ "id", "dependency_columns_on_procedures", "DEP_VIEW" ]
[ "id", "dependency_columns_on_triggers", "DEP_VIEW" ]
[ "id", "dependency_columns_on_triggers", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_triggers", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_triggers", "DEP_VIEW" ]
[ "id", "dependency_columns_on_types", "DEP_VIEW" ]
[ "id", "dependency_columns_on_types", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_types", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_types", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_views", "DEP_VIEW" ]
+[ "id", "dependency_columns_on_views", "DEP_VIEW" ]
[ "id", "dependency_columns_on_views", "DEP_VIEW" ]
[ "id", "dependency_functions_on_functions", "DEP_VIEW" ]
[ "id", "dependency_functions_on_functions", "DEP_VIEW" ]
@@ -564,24 +589,35 @@ Cleanup
[ "id", "dependency_functions_on_types", "DEP_VIEW" ]
[ "id", "dependency_functions_on_views", "DEP_VIEW" ]
[ "id", "dependency_functions_on_views", "DEP_VIEW" ]
+[ "id", "dependency_functions_on_views", "DEP_VIEW" ]
[ "id", "dependency_keys_on_foreignkeys", "DEP_VIEW" ]
[ "id", "dependency_owners_on_schemas", "DEP_VIEW" ]
[ "id", "dependency_owners_on_schemas", "DEP_VIEW" ]
[ "id", "dependency_schemas_on_users", "DEP_VIEW" ]
[ "id", "dependency_tables_on_foreignkeys", "DEP_VIEW" ]
+[ "id", "dependency_tables_on_foreignkeys", "DEP_VIEW" ]
+[ "id", "dependency_tables_on_functions", "DEP_VIEW" ]
[ "id", "dependency_tables_on_functions", "DEP_VIEW" ]
[ "id", "dependency_tables_on_functions", "DEP_VIEW" ]
[ "id", "dependency_tables_on_indexes", "DEP_VIEW" ]
+[ "id", "dependency_tables_on_indexes", "DEP_VIEW" ]
+[ "id", "dependency_tables_on_procedures", "DEP_VIEW" ]
[ "id", "dependency_tables_on_procedures", "DEP_VIEW" ]
[ "id", "dependency_tables_on_procedures", "DEP_VIEW" ]
[ "id", "dependency_tables_on_triggers", "DEP_VIEW" ]
[ "id", "dependency_tables_on_triggers", "DEP_VIEW" ]
+[ "id", "dependency_tables_on_triggers", "DEP_VIEW" ]
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list