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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list