Changeset: 0ae0eaefe7a3 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0ae0eaefe7a3
Modified Files:
sql/common/sql_types.c
sql/common/sql_types.h
sql/server/rel_dump.c
sql/server/rel_dump.h
sql/server/rel_optimizer.c
Branch: graph0
Log Message:
add the nested_table type
diffs (134 lines):
diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -528,7 +528,7 @@ sql_bind_aggr_(sql_allocator *sa, sql_sc
sql_func *a = n->data;
if (strcmp(a->base.name, sqlaname) == 0 &&
- list_cmp(a->ops, ops, (fcmp) &arg_subtype_cmp) == 0)
+ (list_cmp(a->ops, ops, (fcmp) &arg_subtype_cmp) == 0 ||
a->vararg))
return _dup_subaggr(sa, a, type);
n = n->next;
}
@@ -542,7 +542,7 @@ sql_bind_aggr_(sql_allocator *sa, sql_sc
continue;
if (strcmp(a->base.name, sqlaname) == 0 &&
- list_cmp(a->ops, ops, (fcmp) &arg_subtype_cmp) == 0)
+ (list_cmp(a->ops, ops, (fcmp) &arg_subtype_cmp) ==
0 || a->vararg))
return _dup_subaggr(sa, a, type);
}
}
@@ -733,7 +733,7 @@ sql_find_func(sql_allocator *sa, sql_sch
assert(nrargs);
MT_lock_set(&funcs->ht_lock);
- he = funcs->ht->buckets[key&(funcs->ht->size-1)];
+ he = funcs->ht->buckets[key&(funcs->ht->size-1)];
if (prev) {
for (; he && !found; he = he->chain)
if (he->value == prev->func)
@@ -1346,6 +1346,8 @@ sqltypeinit( sql_allocator *sa)
*t++ = sql_create_type(sa, "BLOB", 0, 0, 0, EC_BLOB, "sqlblob");
+ *t++ = sql_create_type(sa, "NESTED_TABLE", 0, 0, 0, EC_NESTED_TABLE,
"nested_table");
+
if (geomcatalogfix_get() != NULL) {
// the geom module is loaded
GEOM = *t++ = sql_create_type(sa, "GEOMETRY", 0, SCALE_NONE, 0,
EC_GEOM, "wkb");
diff --git a/sql/common/sql_types.h b/sql/common/sql_types.h
--- a/sql/common/sql_types.h
+++ b/sql/common/sql_types.h
@@ -42,6 +42,7 @@
#define EC_TEMP(e) (e==EC_TIME||e==EC_DATE||e==EC_TIMESTAMP)
#define EC_GEOM 15
#define EC_EXTERNAL 16
+#define EC_NESTED_TABLE 17
#define EC_TEMP_FRAC(e) (e==EC_TIME||e==EC_TIMESTAMP)
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1346,3 +1346,48 @@ rel_read(mvc *sql, char *r, int *pos, li
return rel;
}
+// DEBUG ONLY -- copy & paste from sql_gencode.c + decorate = TRUE
+// use with case, the result needs to be freed once used
+str
+dump_rel(mvc *sql, sql_rel *rel)
+{
+ buffer *b;
+ stream *s = buffer_wastream(b = buffer_create(1024), "rel_dump");
+ list *refs = sa_list(sql->sa);
+ char *res = NULL;
+
+ rel_print_refs(sql, s, rel, 0, refs, TRUE);
+ rel_print_(sql, s, rel, 0, refs, TRUE);
+ mnstr_printf(s, "\n");
+ res = buffer_get_buf(b); // leaks memory
+ buffer_destroy(b);
+ mnstr_destroy(s);
+ return res;
+}
+
+// use with case, the result needs to be freed once used
+str
+dump_exps(mvc *sql, list *exps){
+ buffer *b;
+ stream *s = buffer_wastream(b = buffer_create(1024), "rel_dump");
+ char *res = NULL;
+
+ exps_print(sql, s, exps, 0, /*alias=*/ 1, /*brackets=*/0);
+ mnstr_printf(s, "\n");
+ res = buffer_get_buf(b); // leaks memory
+ buffer_destroy(b);
+ mnstr_destroy(s);
+ return res;
+}
+
+str
+dump(mvc *sql, void* data){
+ typedef struct { int32_t x; int32_t y; } T;
+ T* tmp = (T*) data;
+ if(tmp->x < 10 /*arbitrary value*/ && tmp->y <= op_delete){
+ return dump_rel(sql, data);
+ } else {
+ return dump_exps(sql, data);
+ }
+}
+
diff --git a/sql/server/rel_dump.h b/sql/server/rel_dump.h
--- a/sql/server/rel_dump.h
+++ b/sql/server/rel_dump.h
@@ -18,4 +18,9 @@ extern const char *op2string(operator_ty
extern sql_rel *rel_read(mvc *sql, char *ra, int *pos, list *refs);
+// DEBUG ONLY
+extern str dump_rel(mvc *sql, sql_rel *rel);
+extern str dump_exps(mvc *sql, list *exps);
+extern str dump(mvc *sql, void* data);
+
#endif /*_REL_DUMP_H_*/
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
@@ -8824,6 +8824,8 @@ static sql_rel *
return rel;
}
+ printf("QRW EXIT [%d]: %s\n", level, dump_rel(sql, rel));
+
if (changes || level == 0)
return _rel_optimizer(sql, rel, ++level);
@@ -8833,5 +8835,6 @@ static sql_rel *
sql_rel *
rel_optimizer(mvc *sql, sql_rel *rel)
{
+ printf("QRW ENTRY: %s\n", dump_rel(sql, rel));
return _rel_optimizer(sql, rel, 0);
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list