Changeset: bb7bf53eaf84 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bb7bf53eaf84
Modified Files:
        sql/backends/monet5/Tests/optimizers.stable.err
        sql/backends/monet5/Tests/optimizers.stable.out
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.mx
        sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/02.stable.out
        sql/benchmarks/tpch/LOCKED/Tests/04.stable.out
        sql/benchmarks/tpch/Tests/01-22.stable.out
        sql/benchmarks/tpch/Tests/02.stable.out
        sql/benchmarks/tpch/Tests/04.stable.out
        sql/common/sql_types.c
        sql/include/sql_catalog.h
        sql/include/sql_relation.h
        sql/rel.txt
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_psm.c
        sql/server/rel_select.c
        sql/server/rel_select.h
        sql/server/rel_updates.c
        sql/server/sql_semantic.h
        sql/storage/sql_catalog.c
        
sql/test/BugDay_2005-10-06_2.9.3/Tests/var_char_cast_truncate.SF-1150907.stable.out
        
sql/test/BugDay_2005-12-19_2.9.3/Tests/timestamp_fraction.SF-1357342.stable.out
        sql/test/BugTracker-2008/Tests/OOM_query.SF-2457195.stable.out
        sql/test/BugTracker-2008/Tests/groupby_with_NULL.SF-2155606.stable.out
        sql/test/BugTracker-2009/Tests/correlated-selection-bug.stable.out
        sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.stable.out
        
sql/test/BugTracker-2009/Tests/double_count_limit_bug.SF-2862146.stable.out
        sql/test/BugTracker-2010/Tests/join_problem.Bug-2694.stable.out
        sql/test/BugTracker-2011/Tests/aggregate-in-subquery.Bug-2739.stable.out
        sql/test/BugTracker-2011/Tests/case-overflow.Bug-2239.stable.out
        sql/test/BugTracker-2011/Tests/exists-select.Bug-2933.stable.out
        sql/test/BugTracker-2011/Tests/rand-with-seed.Bug-2900.stable.out
        
sql/test/BugTracker-2012/Tests/aggregate_vs_positional_column_crash.Bug-3085.stable.out
        
sql/test/BugTracker-2012/Tests/scalar_subquery_with_alias.Bug-3093.stable.out
        sql/test/BugTracker-2012/Tests/simple_select.Bug-2988.stable.out
        sql/test/BugTracker-2013/Tests/All
        sql/test/BugTracker-2013/Tests/correlated_select.Bug-3250.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
        sql/test/Dependencies/Tests/Dependencies.stable.out
        sql/test/Tests/order_by_complex_exp.stable.out
        sql/test/Tests/round.stable.out
        sql/test/Tests/string.stable.out
        sql/test/VOC/Tests/VOC.stable.out
        sql/test/bugs/Tests/case_substring.stable.out
        sql/test/bugs/Tests/crash_order_by.stable.err
        sql/test/bugs/Tests/create_insert_select_aggr-bug-00001.stable.out
        sql/test/bugs/Tests/groupby_having_charlength-bug-sf-943566.stable.out
        sql/test/bugs/Tests/polymorphism.stable.out
        sql/test/bugs/Tests/selectlist_subquery-sf-1208599.stable.out
        sql/test/bugs/Tests/subselect_single_value-bug-sf-962099.stable.out
        sql/test/bugs/Tests/zero_or_one_bug.stable.out
        sql/test/sql_xml/Tests/xml.stable.out
Branch: Feb2013
Log Message:

fixed bug 3250, handle correlation using apply operator


diffs (truncated from 3971 to 300 lines):

diff --git a/sql/backends/monet5/Tests/optimizers.stable.err 
b/sql/backends/monet5/Tests/optimizers.stable.err
--- a/sql/backends/monet5/Tests/optimizers.stable.err
+++ b/sql/backends/monet5/Tests/optimizers.stable.err
@@ -30,70 +30,70 @@ stderr of test 'optimizers` in directory
 # 03:16:16 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=rome" 
"--port=36613"
 # 03:16:16 >  
 
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set optimizer='off';
 ERROR = !optimizer 'off' unknown
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set optimizer='on';
 ERROR = !optimizer 'on' unknown
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set optimizer='';
 ERROR = !optimizer '' unknown
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.costModel();optimizer.coercions();optimizer.emptySet();optimizer.aliases();optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.coercions();optimizer.emptySet();optimizer.aliases();optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.emptySet();optimizer.aliases();optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.aliases();optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.aliases();optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set optimizer='optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set optimizer='optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.costModel();optimizer.coercions();optimizer.emptySet();optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.reduce();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.costModel();optimizer.coercions();optimizer.emptySet();optimizer.commonTerms();optimizer.accumulators();optimizer.joinPath();optimizer.deadcode();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set optimizer='optimizer.inline();';
 ERROR = !'multiplex' should be used
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set optimizer='optimizer.inline();optimizer.multiplex();';
 ERROR = !'deadcode' should be used at least once
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.inline();optimizer.multiplex();optimizer.deadcode();';
 ERROR = !'garbageCollector' should be used as the last one
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.inline();optimizer.deadcode();optimizer.multiplex();';
 ERROR = !'garbageCollector' should be used as the last one
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.deadcode();optimizer.inline();optimizer.multiplex();optimizer.garbageCollector();';
 ERROR = !'inline' should be the first
-MAPI  = monetdb@madrid:32172
+MAPI  = (monetdb) /var/tmp/mtest-19468/.s.monetdb.39762
 QUERY = set 
optimizer='optimizer.inline();optimizer.deadcode();optimizer.garbageCollector();optimizer.multiplex();';
 ERROR = !'garbageCollector' should be used as the last one
 
diff --git a/sql/backends/monet5/Tests/optimizers.stable.out 
b/sql/backends/monet5/Tests/optimizers.stable.out
--- a/sql/backends/monet5/Tests/optimizers.stable.out
+++ b/sql/backends/monet5/Tests/optimizers.stable.out
@@ -45,31 +45,31 @@ Ready.
 # 03:16:16 >  
 
 #select 'optimizer test:',optimizer;
-% .,   . # table_name
-% single_value,        single_value # name
+% .L1, .L1 # table_name
+% L1,  single_value # name
 % char,        varchar # type
 % 15,  12 # length
 [ "optimizer test:",   "default_pipe"  ]
 #select 'optimizer off test:',optimizer;
-% .,   . # table_name
-% single_value,        single_value # name
+% .L1, .L1 # table_name
+% L1,  single_value # name
 % char,        varchar # type
 % 19,  12 # length
 [ "optimizer off test:",       "default_pipe"  ]
 #select 'optimizer on test:',optimizer;
-% .,   . # table_name
-% single_value,        single_value # name
+% .L1, .L1 # table_name
+% L1,  single_value # name
 % char,        varchar # type
 % 18,  12 # length
 [ "optimizer on test:",        "default_pipe"  ]
 #select 'optimizer <empty> test:',optimizer;
-% .,   . # table_name
-% single_value,        single_value # name
+% .L1, .L1 # table_name
+% L1,  single_value # name
 % char,        varchar # type
 % 23,  12 # length
 [ "optimizer <empty> test:",   "default_pipe"  ]
 #select 'done';
-% . # table_name
+% .L # table_name
 % single_value # name
 % char # type
 % 4 # length
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
@@ -30,8 +30,6 @@
 
 static stmt * subrel_bin(mvc *sql, sql_rel *rel, list *refs);
 
-static char *TID = "%TID%";
-
 static stmt *
 refs_find_rel(list *refs, sql_rel *rel)
 {
@@ -517,9 +515,11 @@ exp_bin(mvc *sql, sql_exp *e, stmt *left
                                list_append(l, ext);
                        }
                }
+               /*
                if (strcmp(f->func->base.name, "identity") == 0) 
                        s = stmt_mirror(sql->sa, l->h->data);
                else
+               */
                        s = stmt_Nop(sql->sa, stmt_list(sql->sa, l), e->f); 
        }       break;
        case e_aggr: {
@@ -4461,6 +4461,8 @@ subrel_bin(mvc *sql, sql_rel *rel, list 
                s = rel2bin_join(sql, rel, refs);
                sql->type = Q_TABLE;
                break;
+       case op_apply:
+               assert(0);
        case op_semi:
        case op_anti:
                s = rel2bin_semijoin(sql, rel, refs);
diff --git a/sql/backends/monet5/sql.mx b/sql/backends/monet5/sql.mx
--- a/sql/backends/monet5/sql.mx
+++ b/sql/backends/monet5/sql.mx
@@ -283,11 +283,11 @@ address mvc_clear_table_wrap
 comment "Clear table";
 
 pattern tid( mvc:int, sname:str, tname:str):bat[:oid,:any_3] 
-address TID
+address SQLtid
 comment "Return the tables tid column.";
 
 pattern tid( mvc:int, sname:str, tname:str, part_nr:int, nr_parts:int 
):bat[:oid,:any_3] 
-address TID
+address SQLtid
 comment "Return the tables tid column.";
 
 pattern delete{unsafe}(mvc:int, sname:str, tname:str, b:any):int
@@ -540,6 +540,18 @@ pattern storage()(
 address sql_storage
 comment "return a table with storage information ";
 
+command calc.identity(:any_2) :oid 
+address SQLidentity
+comment "Returns a unique row identitfier.";
+
+command batcalc.identity(b:bat[:oid,:any_2]) :bat[:oid,:oid] 
+address BATSQLidentity
+comment "Returns the unique row identitfiers.";
+
+pattern batcalc.identity(b:bat[:oid,:any_2], s:oid ) 
(resb:bat[:oid,:oid],ns:oid)
+address PBATSQLidentity
+comment "Returns the unique row identitfiers.";
+
 # @- SQL function aliases
 # The code generate should identify the precise module
 # target for all functions. This creates quite some
@@ -1327,7 +1339,7 @@ sql5_export str mvc_bind_dbat_wrap(Clien
 sql5_export str mvc_bind_idxbat_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 sql5_export str mvc_clear_table_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr 
stk, InstrPtr pci);
 sql5_export str mvc_delete_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
-sql5_export str TID(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
+sql5_export str SQLtid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci);
 sql5_export str DELTAbat(bat *result, bat *col, bat *uid, bat *uval, bat *ins);
 sql5_export str DELTAsub(bat *result, bat *col, bat *cid, bat *uid, bat *uval, 
bat *ins);
 sql5_export str DELTAproject(bat *result, bat *subselect, bat *col, bat *uid, 
bat *uval, bat *ins);
@@ -1394,6 +1406,9 @@ sql5_export str sql_rank_grp(bat *rid, b
 sql5_export str sql_rank(bat *rid, bat *bid);
 sql5_export str sql_dense_rank_grp(bat *rid, bat *bid, bat *gid, bat *gpe);
 sql5_export str sql_dense_rank(bat *rid, bat *bid);
+sql5_export str SQLidentity(bat *rid, bat *bid);
+sql5_export str BATSQLidentity(bat *rid, bat *bid);
+sql5_export str PBATSQLidentity(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci);
 @= round_export
 sql5_export str @1_dec_round_wrap( @1 *res, @1 *v, @1 *r );
 sql5_export str @1_round_wrap( @1 *res, @1 *v, int *d, int *s, bte *r );
@@ -3679,9 +3694,9 @@ DELTAproject(bat *result, bat *sub, bat 
        return MAL_SUCCEED;
 }
 
-/* str TID(bat *result, mvc *m, str *sname, str *tname) */
+/* str SQLtid(bat *result, mvc *m, str *sname, str *tname) */
 str
-TID(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+SQLtid(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        int *res = (int*)getArgReference(stk, pci, 0);
        mvc *m = NULL;
@@ -4549,6 +4564,50 @@ not_unique_oids(bat *ret, bat* bid)
        return MAL_SUCCEED;
 }
 
+/* row case */
+str SQLidentity(bat *ret, bat *bid)
+{
+       BAT *bn, *b;
+
+       if ((b = BATdescriptor(*bid)) == NULL) {
+               throw(SQL, "batcalc.identity", "Cannot access descriptor");
+       }
+       bn = VIEWhead(b);
+       BBPunfix(b->batCacheid);
+       BBPkeepref(*ret = bn->batCacheid);
+       return MAL_SUCCEED;
+}
+
+str BATSQLidentity(bat *ret, bat *bid)
+{
+       return BKCmirror(ret, bid);
+}
+
+str PBATSQLidentity(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+       int *res = (int *)getArgReference(stk, pci, 0);
+       oid *ns = (oid *)getArgReference(stk, pci, 1);
+       int *bid = (int *)getArgReference(stk, pci, 2);
+       oid *s = (oid *)getArgReference(stk, pci, 3);
+        BAT *b, *bn = NULL;
+       
+       (void)cntxt;
+       (void)mb;
+        if ((b = BATdescriptor(*bid)) == NULL) {
+                throw(MAL, "batcalc.identity", RUNTIME_OBJECT_MISSING);
+        }
+        bn = BATmark(b, *s);
+        if (bn != NULL) {
+               *ns = *s + BATcount(b);
+                BBPreleaseref(b->batCacheid);
+                BBPkeepref(*res = bn->batCacheid);
+                return MAL_SUCCEED;
+        }
+        BBPreleaseref(b->batCacheid);
+        throw(MAL, "batcalc.identity", GDK_EXCEPTION);
+
+}
+
 lng scales[20] = {
        LL_CONSTANT(1),
        LL_CONSTANT(10),
diff --git a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out 
b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
--- a/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
+++ b/sql/benchmarks/tpch/LOCKED/Tests/01-22.stable.out
@@ -79,7 +79,7 @@ Ready.
 % rewrite,     count # name
 % clob,        int # type
 % 7,   1 # length
-[ "joinidx",   6       ]
+[ "joinidx",   7       ]
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to