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

Reply via email to