Changeset: b752a601e585 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b752a601e585
Modified Files:
        monetdb5/optimizer/opt_mergetable.c
        sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.err
        
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
Branch: Feb2013
Log Message:

only output packs once


diffs (truncated from 868 to 300 lines):

diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -36,6 +36,7 @@ typedef struct mat {
        int im;                 /* input mat, for attribute of sub relations */
        int pm;                 /* parent mat, for sub relations */
        mat_type_t type;        /* type of operation */
+       int packed;
 } mat_t;
 
 static mat_type_t
@@ -84,6 +85,7 @@ mat_add(mat_t *mat, int mtop, InstrPtr q
        mat[mtop].mv = getArg(q,0);
        mat[mtop].type = type;
        mat[mtop].pm = -1;
+       mat[mtop].packed = 0;
        (void)func;
        //printf (" mtop %d %s\n", mtop, func);
        return mtop+1;
@@ -100,15 +102,18 @@ mat_add_var(mat_t *mat, int mtop, InstrP
        mat[mtop].type = type;
        mat[mtop].im = inputmat;
        mat[mtop].pm = parentmat;
+       mat[mtop].packed = 0;
        return mtop+1;
 }
 
-static InstrPtr 
+static void 
 mat_pack(MalBlkPtr mb, mat_t *mat, int m)
 {
        InstrPtr r;
 
-       if( mat[m].mi->argc-mat[m].mi->retc == 1){
+       if (mat[m].packed)
+               return ;
+       if((mat[m].mi->argc-mat[m].mi->retc) == 1){
                /* simple assignment is sufficient */
                r = newInstruction(mb, ASSIGNsymbol);
                getArg(r,0) = getArg(mat[m].mi,0);
@@ -125,8 +130,8 @@ mat_pack(MalBlkPtr mb, mat_t *mat, int m
                for(l=mat[m].mi->retc; l< mat[m].mi->argc; l++)
                        r= pushArgument(mb,r, getArg(mat[m].mi,l));
        }
+       mat[m].packed = 1;
        pushInstruction(mb, r);
-       return r;
 }
 
 static void
diff --git 
a/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.err 
b/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.err
--- a/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.err
+++ b/sql/test/BugTracker-2012/Tests/predicate_select.Bug-3090.stable.err
@@ -30,9 +30,9 @@ stderr of test 'predicate_select.Bug-309
 # 18:53:13 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" "--host=niels" 
"--port=32323"
 # 18:53:13 >  
 
-MAPI  = monetdb@niels:38122
+MAPI  = (monetdb) /var/tmp/mtest-18981/.s.monetdb.35692
 QUERY = select * from tables where name;
-ERROR = !conversion of string 'systemfunctions' to type bit failed.
+ERROR = !conversion of string 'storagemodelinput' to type bit failed.
 
 # 18:53:13 >  
 # 18:53:13 >  "Done."
diff --git 
a/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
 
b/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
--- 
a/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
+++ 
b/sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
@@ -31,63 +31,59 @@ Ready.
 % clob # type
 % 96 # length
 function user.s0_1(A0:str):void;
-    X_87 := nil:bat[:oid,:str];
-    X_88 := nil:bat[:oid,:str];
-    X_89 := nil:bat[:oid,:str];
-    X_90 := nil:bat[:oid,:str];
+    X_11 := nil:bat[:oid,:str];
+    X_94 := nil:bat[:oid,:str];
+    X_93 := nil:bat[:oid,:str];
+    X_92 := nil:bat[:oid,:str];
     X_91 := nil:bat[:oid,:str];
-    X_92 := nil:bat[:oid,:str];
-    X_93 := nil:bat[:oid,:str];
-    X_94 := nil:bat[:oid,:str];
 barrier X_96 := language.dataflow();
     X_2 := sql.mvc();
+    X_47:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,0,4);
     X_40:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",0,4);
+    X_75 := algebra.likesubselect(X_47,X_40,A0,"":str,false);
+    (X_51:bat[:oid,:oid] ,X_52:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,0,4);
+    X_79 := algebra.likesubselect(X_52,A0,"":str,false);
+    X_83 := sql.subdelta(X_75,X_51,X_79);
+    X_87 := sql.projectdelta(X_83,X_47,X_51,X_52);
+    X_48:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,1,4);
     X_42:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",1,4);
+    X_76 := algebra.likesubselect(X_48,X_42,A0,"":str,false);
+    (X_53:bat[:oid,:oid] ,X_54:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,1,4);
+    X_80 := algebra.likesubselect(X_54,A0,"":str,false);
+    X_84 := sql.subdelta(X_76,X_53,X_80);
+    X_88 := sql.projectdelta(X_84,X_48,X_53,X_54);
+    X_49:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,2,4);
     X_44:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",2,4);
+    X_77 := algebra.likesubselect(X_49,X_44,A0,"":str,false);
+    (X_55:bat[:oid,:oid] ,X_56:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,2,4);
+    X_81 := algebra.likesubselect(X_56,A0,"":str,false);
+    X_85 := sql.subdelta(X_77,X_55,X_81);
+    X_89 := sql.projectdelta(X_85,X_49,X_55,X_56);
+    X_50:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,3,4);
     X_46:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",3,4);
-    X_47:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,0,4);
-    X_48:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,1,4);
-    X_49:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,2,4);
-    X_50:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,3,4);
-    (X_51:bat[:oid,:oid] ,X_52:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,0,4);
-    (X_53:bat[:oid,:oid] ,X_54:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,1,4);
-    (X_55:bat[:oid,:oid] ,X_56:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,2,4);
+    X_78 := algebra.likesubselect(X_50,X_46,A0,"":str,false);
     (X_57:bat[:oid,:oid] ,X_58:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,3,4);
+    X_82 := algebra.likesubselect(X_58,A0,"":str,false);
     X_8 := sql.bind(X_2,"sys","functions","name",1);
-    X_75 := algebra.likesubselect(X_47,X_40,A0,"":str,false);
-    X_76 := algebra.likesubselect(X_48,X_42,A0,"":str,false);
-    X_77 := algebra.likesubselect(X_49,X_44,A0,"":str,false);
-    X_78 := algebra.likesubselect(X_50,X_46,A0,"":str,false);
-    X_79 := algebra.likesubselect(X_52,A0,"":str,false);
-    X_80 := algebra.likesubselect(X_54,A0,"":str,false);
-    X_81 := algebra.likesubselect(X_56,A0,"":str,false);
-    X_82 := algebra.likesubselect(X_58,A0,"":str,false);
     X_37 := algebra.likesubselect(X_8,X_46,A0,"":str,false);
-    X_83 := sql.subdelta(X_75,X_51,X_79);
-    X_84 := sql.subdelta(X_76,X_53,X_80);
-    X_85 := sql.subdelta(X_77,X_55,X_81);
     X_86 := sql.subdelta(X_78,X_57,X_82,X_37);
-    X_87 := sql.projectdelta(X_83,X_47,X_51,X_52);
-    X_88 := sql.projectdelta(X_84,X_48,X_53,X_54);
-    X_89 := sql.projectdelta(X_85,X_49,X_55,X_56);
     X_90 := sql.projectdelta(X_86,X_50,X_57,X_58,X_8);
-    X_59:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,0,4);
-    X_60:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,1,4);
-    X_61:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,2,4);
+    X_11 := mat.pack(X_87,X_88,X_89,X_90);
     X_62:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,3,4);
-    (X_63:bat[:oid,:oid] ,X_64:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,0,4);
-    (X_65:bat[:oid,:oid] ,X_66:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,1,4);
-    (X_67:bat[:oid,:oid] ,X_68:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,2,4);
     (X_69:bat[:oid,:oid] ,X_70:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,3,4);
     X_13 := sql.bind(X_2,"sys","functions","func",1);
+    X_94 := sql.projectdelta(X_86,X_62,X_69,X_70,X_13);
+    X_61:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,2,4);
+    (X_67:bat[:oid,:oid] ,X_68:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,2,4);
+    X_93 := sql.projectdelta(X_85,X_61,X_67,X_68);
+    X_60:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,1,4);
+    (X_65:bat[:oid,:oid] ,X_66:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,1,4);
+    X_92 := sql.projectdelta(X_84,X_60,X_65,X_66);
+    X_59:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,0,4);
+    (X_63:bat[:oid,:oid] ,X_64:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,0,4);
     X_91 := sql.projectdelta(X_83,X_59,X_63,X_64);
-    X_92 := sql.projectdelta(X_84,X_60,X_65,X_66);
-    X_93 := sql.projectdelta(X_85,X_61,X_67,X_68);
-    X_94 := sql.projectdelta(X_86,X_62,X_69,X_70,X_13);
 exit X_96;
-    X_11 := mat.pack(X_87,X_88,X_89,X_90);
     X_15 := sql.resultSet(2,1,X_11);
-    X_11 := mat.pack(X_87,X_88,X_89,X_90);
     sql.rsColumn(X_15,"sys.functions","name","varchar",256,0,X_11);
     X_14 := mat.pack(X_91,X_92,X_93,X_94);
     sql.rsColumn(X_15,"sys.functions","func","varchar",8196,0,X_14);
@@ -100,63 +96,59 @@ end s0_1;
 % clob # type
 % 96 # length
 function user.s1_1(A0:str):void;
-    X_87 := nil:bat[:oid,:str];
-    X_88 := nil:bat[:oid,:str];
-    X_89 := nil:bat[:oid,:str];
-    X_90 := nil:bat[:oid,:str];
+    X_11 := nil:bat[:oid,:str];
+    X_94 := nil:bat[:oid,:str];
+    X_93 := nil:bat[:oid,:str];
+    X_92 := nil:bat[:oid,:str];
     X_91 := nil:bat[:oid,:str];
-    X_92 := nil:bat[:oid,:str];
-    X_93 := nil:bat[:oid,:str];
-    X_94 := nil:bat[:oid,:str];
 barrier X_96 := language.dataflow();
     X_2 := sql.mvc();
+    X_47:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,0,4);
     X_40:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",0,4);
+    X_75 := algebra.likesubselect(X_47,X_40,A0,"":str,true);
+    (X_51:bat[:oid,:oid] ,X_52:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,0,4);
+    X_79 := algebra.likesubselect(X_52,A0,"":str,true);
+    X_83 := sql.subdelta(X_75,X_51,X_79);
+    X_87 := sql.projectdelta(X_83,X_47,X_51,X_52);
+    X_48:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,1,4);
     X_42:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",1,4);
+    X_76 := algebra.likesubselect(X_48,X_42,A0,"":str,true);
+    (X_53:bat[:oid,:oid] ,X_54:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,1,4);
+    X_80 := algebra.likesubselect(X_54,A0,"":str,true);
+    X_84 := sql.subdelta(X_76,X_53,X_80);
+    X_88 := sql.projectdelta(X_84,X_48,X_53,X_54);
+    X_49:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,2,4);
     X_44:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",2,4);
+    X_77 := algebra.likesubselect(X_49,X_44,A0,"":str,true);
+    (X_55:bat[:oid,:oid] ,X_56:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,2,4);
+    X_81 := algebra.likesubselect(X_56,A0,"":str,true);
+    X_85 := sql.subdelta(X_77,X_55,X_81);
+    X_89 := sql.projectdelta(X_85,X_49,X_55,X_56);
+    X_50:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,3,4);
     X_46:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",3,4);
-    X_47:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,0,4);
-    X_48:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,1,4);
-    X_49:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,2,4);
-    X_50:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,3,4);
-    (X_51:bat[:oid,:oid] ,X_52:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,0,4);
-    (X_53:bat[:oid,:oid] ,X_54:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,1,4);
-    (X_55:bat[:oid,:oid] ,X_56:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,2,4);
+    X_78 := algebra.likesubselect(X_50,X_46,A0,"":str,true);
     (X_57:bat[:oid,:oid] ,X_58:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,3,4);
+    X_82 := algebra.likesubselect(X_58,A0,"":str,true);
     X_8 := sql.bind(X_2,"sys","functions","name",1);
-    X_75 := algebra.likesubselect(X_47,X_40,A0,"":str,true);
-    X_76 := algebra.likesubselect(X_48,X_42,A0,"":str,true);
-    X_77 := algebra.likesubselect(X_49,X_44,A0,"":str,true);
-    X_78 := algebra.likesubselect(X_50,X_46,A0,"":str,true);
-    X_79 := algebra.likesubselect(X_52,A0,"":str,true);
-    X_80 := algebra.likesubselect(X_54,A0,"":str,true);
-    X_81 := algebra.likesubselect(X_56,A0,"":str,true);
-    X_82 := algebra.likesubselect(X_58,A0,"":str,true);
     X_37 := algebra.likesubselect(X_8,X_46,A0,"":str,true);
-    X_83 := sql.subdelta(X_75,X_51,X_79);
-    X_84 := sql.subdelta(X_76,X_53,X_80);
-    X_85 := sql.subdelta(X_77,X_55,X_81);
     X_86 := sql.subdelta(X_78,X_57,X_82,X_37);
-    X_87 := sql.projectdelta(X_83,X_47,X_51,X_52);
-    X_88 := sql.projectdelta(X_84,X_48,X_53,X_54);
-    X_89 := sql.projectdelta(X_85,X_49,X_55,X_56);
     X_90 := sql.projectdelta(X_86,X_50,X_57,X_58,X_8);
-    X_59:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,0,4);
-    X_60:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,1,4);
-    X_61:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,2,4);
+    X_11 := mat.pack(X_87,X_88,X_89,X_90);
     X_62:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,3,4);
-    (X_63:bat[:oid,:oid] ,X_64:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,0,4);
-    (X_65:bat[:oid,:oid] ,X_66:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,1,4);
-    (X_67:bat[:oid,:oid] ,X_68:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,2,4);
     (X_69:bat[:oid,:oid] ,X_70:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,3,4);
     X_13 := sql.bind(X_2,"sys","functions","func",1);
+    X_94 := sql.projectdelta(X_86,X_62,X_69,X_70,X_13);
+    X_61:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,2,4);
+    (X_67:bat[:oid,:oid] ,X_68:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,2,4);
+    X_93 := sql.projectdelta(X_85,X_61,X_67,X_68);
+    X_60:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,1,4);
+    (X_65:bat[:oid,:oid] ,X_66:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,1,4);
+    X_92 := sql.projectdelta(X_84,X_60,X_65,X_66);
+    X_59:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","func",0,0,4);
+    (X_63:bat[:oid,:oid] ,X_64:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","func",2,0,4);
     X_91 := sql.projectdelta(X_83,X_59,X_63,X_64);
-    X_92 := sql.projectdelta(X_84,X_60,X_65,X_66);
-    X_93 := sql.projectdelta(X_85,X_61,X_67,X_68);
-    X_94 := sql.projectdelta(X_86,X_62,X_69,X_70,X_13);
 exit X_96;
-    X_11 := mat.pack(X_87,X_88,X_89,X_90);
     X_15 := sql.resultSet(2,1,X_11);
-    X_11 := mat.pack(X_87,X_88,X_89,X_90);
     sql.rsColumn(X_15,"sys.functions","name","varchar",256,0,X_11);
     X_14 := mat.pack(X_91,X_92,X_93,X_94);
     sql.rsColumn(X_15,"sys.functions","func","varchar",8196,0,X_14);
@@ -169,63 +161,59 @@ end s1_1;
 % clob # type
 % 96 # length
 function user.s2_1(A0:str):void;
-    X_87 := nil:bat[:oid,:str];
-    X_88 := nil:bat[:oid,:str];
-    X_89 := nil:bat[:oid,:str];
-    X_90 := nil:bat[:oid,:str];
+    X_11 := nil:bat[:oid,:str];
+    X_94 := nil:bat[:oid,:str];
+    X_93 := nil:bat[:oid,:str];
+    X_92 := nil:bat[:oid,:str];
     X_91 := nil:bat[:oid,:str];
-    X_92 := nil:bat[:oid,:str];
-    X_93 := nil:bat[:oid,:str];
-    X_94 := nil:bat[:oid,:str];
 barrier X_96 := language.dataflow();
     X_2 := sql.mvc();
+    X_47:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,0,4);
     X_40:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",0,4);
+    X_75 := algebra.ilikesubselect(X_47,X_40,A0,"":str,false);
+    (X_51:bat[:oid,:oid] ,X_52:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,0,4);
+    X_79 := algebra.ilikesubselect(X_52,A0,"":str,false);
+    X_83 := sql.subdelta(X_75,X_51,X_79);
+    X_87 := sql.projectdelta(X_83,X_47,X_51,X_52);
+    X_48:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,1,4);
     X_42:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",1,4);
+    X_76 := algebra.ilikesubselect(X_48,X_42,A0,"":str,false);
+    (X_53:bat[:oid,:oid] ,X_54:bat[:oid,:str] ) := 
sql.bind(X_2,"sys","functions","name",2,1,4);
+    X_80 := algebra.ilikesubselect(X_54,A0,"":str,false);
+    X_84 := sql.subdelta(X_76,X_53,X_80);
+    X_88 := sql.projectdelta(X_84,X_48,X_53,X_54);
+    X_49:bat[:oid,:str]  := sql.bind(X_2,"sys","functions","name",0,2,4);
     X_44:bat[:oid,:oid]  := sql.tid(X_2,"sys","functions",2,4);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to