Changeset: 8b00131c3de5 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8b00131c3de5
Modified Files:
        clients/Tests/SQL-dump.stable.out
        clients/Tests/SQL-dump.stable.out.int128
        monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
        sql/common/sql_list.c
        sql/include/sql_list.h
        sql/server/rel_optimizer.c
        sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
        
sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
        sql/test/leaks/Tests/check1.stable.out.int128
        sql/test/leaks/Tests/check2.stable.out.int128
        sql/test/leaks/Tests/check3.stable.out.int128
        sql/test/leaks/Tests/check4.stable.out.int128
        sql/test/leaks/Tests/check5.stable.out.int128
Branch: default
Log Message:

approved output after fwf merge
optimized join reorder more.


diffs (truncated from 485 to 300 lines):

diff --git a/clients/Tests/SQL-dump.stable.out 
b/clients/Tests/SQL-dump.stable.out
--- a/clients/Tests/SQL-dump.stable.out
+++ b/clients/Tests/SQL-dump.stable.out
@@ -3438,7 +3438,7 @@ drop function pcre_replace(string, strin
 [ "sys",       "concat",       "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL    ]
 [ "sys",       "contains",     "a",    "geometry",     0,      0,      1,      
"x",    "double",       53,     0,      1,      "y",    "double",       53,     
0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL    ]
 [ "sys",       "copyfrom",     "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL    ]
-[ "sys",       "copyfrom",     "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      "arg_3",        
"varchar",      0,      0,      1,      "arg_4",        "varchar",      0,      
0,      1,      "arg_5",        "varchar",      0,      0,      1,      
"arg_6",        "varchar",      0,      0,      1,      "arg_7",        
"bigint",       64,     0,      1,      "arg_8",        "bigint",       64,     
0,      1,      "arg_9",        "int",  32,     0,      1,      NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
+[ "sys",       "copyfrom",     "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      "arg_3",        
"varchar",      0,      0,      1,      "arg_4",        "varchar",      0,      
0,      1,      "arg_5",        "varchar",      0,      0,      1,      
"arg_6",        "varchar",      0,      0,      1,      "arg_7",        
"bigint",       64,     0,      1,      "arg_8",        "bigint",       64,     
0,      1,      "arg_9",        "int",  32,     0,      1,      "arg_:",        
"varchar",      0,      0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
 [ "sys",       "corr", "e1",   "bigint",       64,     0,      1,      "e2",   
"bigint",       64,     0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
 [ "sys",       "corr", "e1",   "double",       53,     0,      1,      "e2",   
"double",       53,     0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
 [ "sys",       "corr", "e1",   "int",  32,     0,      1,      "e2",   "int",  
32,     0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
diff --git a/clients/Tests/SQL-dump.stable.out.int128 
b/clients/Tests/SQL-dump.stable.out.int128
--- a/clients/Tests/SQL-dump.stable.out.int128
+++ b/clients/Tests/SQL-dump.stable.out.int128
@@ -3481,7 +3481,7 @@ drop function pcre_replace(string, strin
 % sys.s,       sys.f,  .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, 
.arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, 
.arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, 
.arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, 
.arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, 
.arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, 
.arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, 
.arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16, .arg16 # table_name
 % name,        name,   name1,  type1,  type_digits1,   type_scale1,    inout1, 
name2,  type2,  type_digits2,   type_scale2,    inout2, name3,  type3,  
type_digits3,   type_scale3,    inout3, name4,  type4,  type_digits4,   
type_scale4,    inout4, name5,  type5,  type_digits5,   type_scale5,    inout5, 
name6,  type6,  type_digits6,   type_scale6,    inout6, name7,  type7,  
type_digits7,   type_scale7,    inout7, name8,  type8,  type_digits8,   
type_scale8,    inout8, name9,  type9,  type_digits9,   type_scale9,    inout9, 
name10, type10, type_digits10,  type_scale10,   inout10,        name11, type11, 
type_digits11,  type_scale11,   inout11,        name12, type12, type_digits12,  
type_scale12,   inout12,        name13, type13, type_digits13,  type_scale13,   
inout13,        name14, type14, type_digits14,  type_scale14,   inout14,        
name15, type15, type_digits15,  type_scale15,   inout15 # name
 % varchar,     varchar,        varchar,        varchar,        int,    int,    
tinyint,        varchar,        varchar,        int,    int,    tinyint,        
varchar,        varchar,        int,    int,    tinyint,        varchar,        
varchar,        int,    int,    tinyint,        varchar,        varchar,        
int,    int,    tinyint,        varchar,        varchar,        int,    int,    
tinyint,        varchar,        varchar,        int,    int,    tinyint,        
varchar,        varchar,        int,    int,    tinyint,        varchar,        
varchar,        int,    int,    tinyint,        varchar,        varchar,        
int,    int,    tinyint,        varchar,        varchar,        int,    int,    
tinyint,        varchar,        varchar,        int,    int,    tinyint,        
varchar,        varchar,        int,    int,    tinyint,        varchar,        
varchar,        int,    int,    tinyint,        varchar,        varchar,        
int,    int,    tinyint # type
-% 8,   35,     16,     14,     4,      1,      1,      16,     14,     3,      
1,      1,      27,     12,     3,      1,      1,      12,     7,      2,      
1,      1,      10,     7,      2,      1,      1,      8,      7,      2,      
1,      1,      9,      6,      2,      1,      1,      10,     6,      2,      
1,      1,      8,      7,      2,      1,      1,      8,      6,      2,      
1,      1,      5,      7,      2,      1,      1,      8,      6,      2,      
1,      1,      6,      7,      1,      1,      1,      8,      6,      2,      
1,      1,      5,      4,      1,      1,      1 # length
+% 8,   35,     16,     14,     4,      1,      1,      16,     14,     3,      
1,      1,      27,     12,     3,      1,      1,      12,     7,      2,      
1,      1,      10,     7,      2,      1,      1,      8,      7,      2,      
1,      1,      9,      6,      2,      1,      1,      10,     6,      2,      
1,      1,      8,      7,      2,      1,      1,      8,      7,      2,      
1,      1,      5,      7,      2,      1,      1,      8,      6,      2,      
1,      1,      6,      7,      1,      1,      1,      8,      6,      2,      
1,      1,      5,      4,      1,      1,      1 # length
 [ "bam",       "bam_drop_file",        "dbschema",     "smallint",     16,     
0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL    ]
 [ "bam",       "bam_export",   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
 [ "bam",       "bam_flag",     "flag", "smallint",     16,     0,      1,      
"name", "clob", 0,      0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
@@ -3635,7 +3635,7 @@ drop function pcre_replace(string, strin
 [ "sys",       "concat",       "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL    ]
 [ "sys",       "contains",     "a",    "geometry",     0,      0,      1,      
"x",    "double",       53,     0,      1,      "y",    "double",       53,     
0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL    ]
 [ "sys",       "copyfrom",     "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL    ]
-[ "sys",       "copyfrom",     "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      "arg_3",        
"varchar",      0,      0,      1,      "arg_4",        "varchar",      0,      
0,      1,      "arg_5",        "varchar",      0,      0,      1,      
"arg_6",        "varchar",      0,      0,      1,      "arg_7",        
"bigint",       64,     0,      1,      "arg_8",        "bigint",       64,     
0,      1,      "arg_9",        "int",  32,     0,      1,      NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    ]
+[ "sys",       "copyfrom",     "arg_1",        "varchar",      0,      0,      
1,      "arg_2",        "varchar",      0,      0,      1,      "arg_3",        
"varchar",      0,      0,      1,      "arg_4",        "varchar",      0,      
0,      1,      "arg_5",        "varchar",      0,      0,      1,      
"arg_6",        "varchar",      0,      0,      1,      "arg_7",        
"bigint",       64,     0,      1,      "arg_8",        "bigint",       64,     
0,      1,      "arg_9",        "int",  32,     0,      1,      "arg_:",        
"varchar",      0,      0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
 [ "sys",       "corr", "e1",   "bigint",       64,     0,      1,      "e2",   
"bigint",       64,     0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
 [ "sys",       "corr", "e1",   "double",       53,     0,      1,      "e2",   
"double",       53,     0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
 [ "sys",       "corr", "e1",   "hugeint",      128,    0,      1,      "e2",   
"hugeint",      128,    0,      1,      NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   
NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL,   NULL    
]
diff --git 
a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out 
b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
--- a/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
+++ b/monetdb5/extras/mal_optimizer_template/Tests/opt_sql_append.stable.out
@@ -61,12 +61,12 @@ Ready.
 % .explain # table_name
 % mal # name
 % clob # type
-% 118 # length
+% 126 # length
 function user.s4_1():void;
     X_24:void := querylog.define("explain copy into ttt from 
\\'/tmp/xyz\\';","default_pipe",12);
 barrier X_51 := language.dataflow();
     X_1 := sql.mvc();
-    (X_11:bat[:int],X_12:bat[:int],X_13:bat[:int]) := 
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0);
+    (X_11:bat[:int],X_12:bat[:int],X_13:bat[:int]) := 
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0,nil:str);
 exit X_51;
     X_14 := sql.append(X_1,"sys","ttt","a",X_11);
     X_18 := sql.append(X_14,"sys","ttt","b",X_12);
@@ -95,12 +95,12 @@ end user.s4_1;
 % .explain # table_name
 % mal # name
 % clob # type
-% 118 # length
+% 126 # length
 function user.s12_1():void;
     X_24:void := querylog.define("explain copy into ttt from 
\\'/tmp/xyz\\';","user_1",12);
 barrier X_52 := language.dataflow();
     X_1 := sql.mvc();
-    (X_11:bat[:int],X_12:bat[:int],X_13:bat[:int]) := 
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0);
+    (X_11:bat[:int],X_12:bat[:int],X_13:bat[:int]) := 
sql.copy_from(nil,"|","\\n",nil:str,"null","/tmp/xyz",-1,0,0,0,nil:str);
 exit X_52;
     X_14 := sql.append(X_1,"sys","ttt","a",X_11);
     X_18 := sql.append(X_14,"sys","ttt","b",X_12);
diff --git a/sql/common/sql_list.c b/sql/common/sql_list.c
--- a/sql/common/sql_list.c
+++ b/sql/common/sql_list.c
@@ -448,21 +448,6 @@ list_distinct(list *l, fcmp cmp, fdup du
        return res;
 }
 
-static node *
-list_find2(list *l, void *data, void *key, fcmp2 cmp)
-{
-       node *n = NULL;
-
-       if (key) {
-               for (n = l->h; n; n = n->next) {
-                       if (cmp(data, n->data, key) == 0) {
-                               return n;
-                       }
-               }
-       }
-       return NULL;
-}
-
 int
 list_position(list *l, void *val)
 {
@@ -487,20 +472,6 @@ list_fetch(list *l, int pos)
        return NULL;
 }
 
-list *
-list_distinct2(list *l, void *data, fcmp2 cmp, fdup dup)
-{
-       list *res = list_new_(l);
-       node *n = NULL;
-
-       for (n = l->h; n; n = n->next) {
-               if (!list_find2(res, data, n->data, cmp)) {
-                       list_append(res, dup?dup(n->data):n->data);
-               }
-       }
-       return res;
-}
-
 void *
 list_reduce(list *l, freduce red, fdup dup)
 {
diff --git a/sql/include/sql_list.h b/sql/include/sql_list.h
--- a/sql/include/sql_list.h
+++ b/sql/include/sql_list.h
@@ -69,7 +69,6 @@ extern void * list_fetch(list *l, int po
 extern list *list_select(list *l, void *key, fcmp cmp, fdup dup);
 extern list *list_order(list *l, fcmp cmp, fdup dup);
 extern list *list_distinct(list *l, fcmp cmp, fdup dup);
-extern list *list_distinct2(list *l, void *data, fcmp2 cmp, fdup dup);
 extern void *list_reduce(list *l, freduce red, fdup dup);
 extern void *list_reduce2(list *l, freduce2 red, sql_allocator *sa);
 extern list *list_map(list *l, void *data, fmap f);
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
@@ -399,29 +399,6 @@ exp_keyvalue(sql_exp *e)
        return cnt;
 }
 
-static int
-joinexp_cmp(list *rels, sql_exp *h, sql_exp *key)
-{
-       sql_rel *h_l;
-       sql_rel *h_r;
-       sql_rel *key_l;
-       sql_rel *key_r;
-
-       assert (!h || !key || (h->type == e_cmp && key->type == e_cmp));
-       if (is_complex_exp(h->flag) || is_complex_exp(key->flag))
-               return -1;
-       h_l = find_rel(rels, h->l);
-       h_r = find_rel(rels, h->r);
-       key_l = find_rel(rels, key->l);
-       key_r  = find_rel(rels, key->r);
-
-       if (h_l == key_l && h_r == key_r)
-               return 0;
-       if (h_r == key_l && h_l == key_r)
-               return 0;
-        return -1;
-}
-
 static sql_exp *
 joinexp_col(sql_exp *e, sql_rel *r)
 {
@@ -640,15 +617,74 @@ rel_find_column( sql_allocator *sa, sql_
        return NULL;
 }
 
+static int
+find_join_rels(list **L, list **R, list *exps, list *rels)
+{
+       node *n;
+
+       *L = sa_list(exps->sa);
+       *R = sa_list(exps->sa);
+       if (!exps || list_length(exps) <= 1)
+               return -1;
+       for(n = exps->h; n; n = n->next) {
+               sql_exp *e = n->data;
+               sql_rel *l = NULL, *r = NULL;
+
+               if (!is_complex_exp(e->flag)){
+                       l = find_rel(rels, e->l);
+                       r = find_rel(rels, e->r);
+               }
+               if (l<r) {
+                       list_append(*L, l);
+                       list_append(*R, r);
+               } else {
+                       list_append(*L, r);
+                       list_append(*R, l);
+               }
+       }
+       return 0;
+}
+
+static list * 
+distinct_join_exps(list *aje, list *lrels, list *rrels)
+{
+       node *n, *m, *o, *p;
+       int len = 0, i, j;
+       char *used = SA_NEW_ARRAY(aje->sa, char, len = list_length(aje));
+       list *res = sa_list(aje->sa);
+
+       memset(used, 0, len);
+       assert(len == list_length(lrels));
+       for(n = lrels->h, m = rrels->h, j = 0; n && m; 
+           n = n->next, m = m->next, j++) {
+               if (n->data && m->data)
+               for(o = n->next, p = m->next, i = j+1; o && p; 
+                   o = o->next, p = p->next, i++) {
+                       if (o->data == n->data && p->data == m->data)
+                               used[i] = 1;
+               }
+       }
+       for (i = 0, n = aje->h; i < len; n = n->next, i++) {
+               if (!used[i])
+                       list_append(res, n->data);
+       }
+       return res;
+}
+
 static list *
 find_fk( mvc *sql, list *rels, list *exps) 
 {
        node *djn;
        list *sdje, *aje, *dje;
+       list *lrels, *rrels;
 
        /* first find the distinct join expressions */
        aje = list_select(exps, rels, (fcmp) &exp_is_join, (fdup)NULL);
-       dje = list_distinct2(aje, rels, (fcmp2) &joinexp_cmp, (fdup)NULL);
+       /* add left/right relation */
+       if (find_join_rels(&lrels, &rrels, aje, rels) < 0)
+               dje = aje;
+       else
+               dje = distinct_join_exps(aje, lrels, rrels);
        for(djn=dje->h; djn; djn = djn->next) {
                /* equal join expressions */
                sql_idx *idx = NULL;
diff --git 
a/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out 
b/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
--- a/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
+++ b/sql/test/BugTracker-2009/Tests/copy_multiple_files.SF-2902320.stable.out
@@ -28,12 +28,12 @@ Ready.
 % .plan # table_name
 % rel # name
 % clob # type
-% 180 # length
+% 196 # length
 insert(
 | table(sys.cm_tmp) [ cm_tmp.i, cm_tmp.%TID% NOT NULL ]
 | union (
-| | table sys.copyfrom(table(cm_tmp), varchar "|", varchar "\n", varchar 
"NULL", varchar "null", varchar "/file1", bigint "-1", bigint "0", int "0", int 
"0"),  [ cm_tmp.i ] COUNT ,
-| | table sys.copyfrom(table(cm_tmp), varchar "|", varchar "\n", varchar 
"NULL", varchar "null", varchar "/file2", bigint "-1", bigint "0", int "0", int 
"0"),  [ cm_tmp.i ] COUNT 
+| | table sys.copyfrom(table(cm_tmp), varchar "|", varchar "\n", varchar 
"NULL", varchar "null", varchar "/file1", bigint "-1", bigint "0", int "0", int 
"0", varchar "NULL"),  [ cm_tmp.i ] COUNT ,
+| | table sys.copyfrom(table(cm_tmp), varchar "|", varchar "\n", varchar 
"NULL", varchar "null", varchar "/file2", bigint "-1", bigint "0", int "0", int 
"0", varchar "NULL"),  [ cm_tmp.i ] COUNT 
 | ) [ int "NULL" ]
 )
 
diff --git 
a/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
 
b/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
--- 
a/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
+++ 
b/sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out
@@ -22,7 +22,7 @@ Ready.
 
 #debug select * from tables;
 mdb>#X_1=0@0:void := user.s1_1();
-mdb>#X_159=0@0:void := querylog.define("debug select * from 
tables;","default_pipe",630);
+mdb>#X_159=0@0:void := querylog.define("debug select * from 
tables;","default_pipe",374);
 
 # 16:24:01 >  
 # 16:24:01 >  "Done."
diff --git a/sql/test/Tests/systemfunctions.stable.out 
b/sql/test/Tests/systemfunctions.stable.out
--- a/sql/test/Tests/systemfunctions.stable.out
+++ b/sql/test/Tests/systemfunctions.stable.out
@@ -419,6 +419,7 @@ Ready.
 [ "sys",       "copyfrom",     7,      "bigint",       ""      ]
 [ "sys",       "copyfrom",     8,      "bigint",       ""      ]
 [ "sys",       "copyfrom",     9,      "int",  ""      ]
+[ "sys",       "copyfrom",     10,     "varchar",      ""      ]
 [ "sys",       "copyfrom",     0,      "table",        "importTable"   ]
 [ "sys",       "copyfrom",     1,      "varchar",      ""      ]
 [ "sys",       "copyfrom",     2,      "varchar",      ""      ]
diff --git a/sql/test/Tests/systemfunctions.stable.out.int128 
b/sql/test/Tests/systemfunctions.stable.out.int128
--- a/sql/test/Tests/systemfunctions.stable.out.int128
+++ b/sql/test/Tests/systemfunctions.stable.out.int128
@@ -448,6 +448,7 @@ Ready.
 [ "sys",       "copyfrom",     7,      "bigint",       ""      ]
 [ "sys",       "copyfrom",     8,      "bigint",       ""      ]
 [ "sys",       "copyfrom",     9,      "int",  ""      ]
+[ "sys",       "copyfrom",     10,     "varchar",      ""      ]
 [ "sys",       "copyfrom",     0,      "table",        "importTable"   ]
 [ "sys",       "copyfrom",     1,      "varchar",      ""      ]
 [ "sys",       "copyfrom",     2,      "varchar",      ""      ]
diff --git a/sql/test/leaks/Tests/check1.stable.out.int128 
b/sql/test/leaks/Tests/check1.stable.out.int128
--- a/sql/test/leaks/Tests/check1.stable.out.int128
+++ b/sql/test/leaks/Tests/check1.stable.out.int128
@@ -43,7 +43,7 @@ Ready.
 [ "bit",       1726    ]
 [ "bit",       1726    ]
 [ "bit",       1726    ]
-[ "bte",       4877    ]
+[ "bte",       4878    ]
 [ "int",       0       ]
 [ "int",       0       ]
 [ "int",       0       ]
@@ -123,11 +123,11 @@ Ready.
 [ "int",       1726    ]
 [ "int",       3911    ]
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to