Changeset: 43baac65bf3b for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=43baac65bf3b
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        sql/backends/monet5/rel_bin.c
        sql/test/BugTracker-2020/Tests/values-like-join.Bug-6954.stable.out
        sql/test/SQLancer/Tests/sqlancer04.test
        sql/test/miscellaneous/Tests/simple_plans.stable.out
Branch: default
Log Message:

Merged with Oct2020


diffs (truncated from 444 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -621,8 +621,8 @@ stdout of test 'MAL-signatures` in direc
 [ "algebra",   "ilike",        "command algebra.ilike(X_1:str, X_2:str, 
X_3:str):bit ",        "PCREilike3;",  ""      ]
 [ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, 
X_7:bit):bat[:oid] ",  "ILIKEjoin1;",  ""      ]
 [ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, X_8:bit) 
(X_0:bat[:oid], X_1:bat[:oid]) ",     "ILIKEjoin;",   ""      ]
-[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:str, X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ", "ILIKEjoin_esc1;",      ""      ]
-[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:str, X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",    "ILIKEjoin_esc;",       ""      ]
+[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ",   "ILIKEjoin_esc1;",      ""      ]
+[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:str], X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",      "ILIKEjoin_esc;",       ""      
]
 [ "algebra",   "ilikeselect",  "command algebra.ilikeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:str, X_5:bit):bat[:oid] ",      "PCRElikeselect1;", 
    ""      ]
 [ "algebra",   "ilikeselect",  "command algebra.ilikeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:bit):bat[:oid] ",       "PCRElikeselect4;",     ""  
    ]
 [ "algebra",   "intersect",    "command algebra.intersect(X_1:bat[:any_1], 
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:bit, 
X_7:lng):bat[:oid] ",      "ALGintersect;",        ""      ]
@@ -634,8 +634,8 @@ stdout of test 'MAL-signatures` in direc
 [ "algebra",   "like", "command algebra.like(X_1:str, X_2:str, X_3:str):bit ", 
"PCRElike3;",   ""      ]
 [ "algebra",   "likejoin",     "command algebra.likejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, 
X_7:bit):bat[:oid] ",   "LIKEjoin1;",   ""      ]
 [ "algebra",   "likejoin",     "command algebra.likejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, X_8:bit) 
(X_0:bat[:oid], X_1:bat[:oid]) ",      "LIKEjoin;",    ""      ]
-[ "algebra",   "likejoin",     "command algebra.likejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:str, X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ",  "LIKEjoin_esc1;",       ""      ]
-[ "algebra",   "likejoin",     "command algebra.likejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:str, X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",     "LIKEjoin_esc;",        ""      ]
+[ "algebra",   "likejoin",     "command algebra.likejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ",    "LIKEjoin_esc1;",       ""      ]
+[ "algebra",   "likejoin",     "command algebra.likejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:str], X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",       "LIKEjoin_esc;",        ""     
 ]
 [ "algebra",   "likeselect",   "command algebra.likeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:str, X_5:bit, X_6:bit):bat[:oid] ",      
"PCRElikeselect2;",     ""      ]
 [ "algebra",   "likeselect",   "command algebra.likeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:str, X_5:bit):bat[:oid] ",       
"PCRElikeselect3;",     ""      ]
 [ "algebra",   "likeselect",   "command algebra.likeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:bit):bat[:oid] ",        "PCRElikeselect5;",     "" 
     ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -734,8 +734,8 @@ stdout of test 'MAL-signatures` in direc
 [ "algebra",   "ilike",        "command algebra.ilike(X_1:str, X_2:str, 
X_3:str):bit ",        "PCREilike3;",  ""      ]
 [ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, 
X_7:bit):bat[:oid] ",  "ILIKEjoin1;",  ""      ]
 [ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, X_8:bit) 
(X_0:bat[:oid], X_1:bat[:oid]) ",     "ILIKEjoin;",   ""      ]
-[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:str, X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ", "ILIKEjoin_esc1;",      ""      ]
-[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:str, X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",    "ILIKEjoin_esc;",       ""      ]
+[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ",   "ILIKEjoin_esc1;",      ""      ]
+[ "algebra",   "ilikejoin",    "command algebra.ilikejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:str], X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",      "ILIKEjoin_esc;",       ""      
]
 [ "algebra",   "ilikeselect",  "command algebra.ilikeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:str, X_5:bit):bat[:oid] ",      "PCRElikeselect1;", 
    ""      ]
 [ "algebra",   "ilikeselect",  "command algebra.ilikeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:bit):bat[:oid] ",       "PCRElikeselect4;",     ""  
    ]
 [ "algebra",   "intersect",    "command algebra.intersect(X_1:bat[:any_1], 
X_2:bat[:any_1], X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:bit, 
X_7:lng):bat[:oid] ",      "ALGintersect;",        ""      ]
@@ -747,8 +747,8 @@ stdout of test 'MAL-signatures` in direc
 [ "algebra",   "like", "command algebra.like(X_1:str, X_2:str, X_3:str):bit ", 
"PCRElike3;",   ""      ]
 [ "algebra",   "likejoin",     "command algebra.likejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:oid], X_4:bat[:oid], X_5:bit, X_6:lng, 
X_7:bit):bat[:oid] ",   "LIKEjoin1;",   ""      ]
 [ "algebra",   "likejoin",     "command algebra.likejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, X_8:bit) 
(X_0:bat[:oid], X_1:bat[:oid]) ",      "LIKEjoin;",    ""      ]
-[ "algebra",   "likejoin",     "command algebra.likejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:str, X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ",  "LIKEjoin_esc1;",       ""      ]
-[ "algebra",   "likejoin",     "command algebra.likejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:str, X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",     "LIKEjoin_esc;",        ""      ]
+[ "algebra",   "likejoin",     "command algebra.likejoin(X_1:bat[:str], 
X_2:bat[:str], X_3:bat[:str], X_4:bat[:oid], X_5:bat[:oid], X_6:bit, X_7:lng, 
X_8:bit):bat[:oid] ",    "LIKEjoin_esc1;",       ""      ]
+[ "algebra",   "likejoin",     "command algebra.likejoin(X_2:bat[:str], 
X_3:bat[:str], X_4:bat[:str], X_5:bat[:oid], X_6:bat[:oid], X_7:bit, X_8:lng, 
X_9:bit) (X_0:bat[:oid], X_1:bat[:oid]) ",       "LIKEjoin_esc;",        ""     
 ]
 [ "algebra",   "likeselect",   "command algebra.likeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:str, X_5:bit, X_6:bit):bat[:oid] ",      
"PCRElikeselect2;",     ""      ]
 [ "algebra",   "likeselect",   "command algebra.likeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:str, X_5:bit):bat[:oid] ",       
"PCRElikeselect3;",     ""      ]
 [ "algebra",   "likeselect",   "command algebra.likeselect(X_1:bat[:str], 
X_2:bat[:oid], X_3:str, X_4:bit):bat[:oid] ",        "PCRElikeselect5;",     "" 
     ]
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -2334,16 +2334,18 @@ bailout:
 }
 
 static str
-PCREjoin(bat *r1, bat *r2, bat lid, bat rid, bat slid, bat srid, const char 
*esc, bool caseignore, bool anti)
+PCREjoin(bat *r1, bat *r2, bat lid, bat rid, bat slid, bat srid, bat elid, 
bool caseignore, bool anti)
 {
-       BAT *left = NULL, *right = NULL, *candleft = NULL, *candright = NULL;
+       BAT *left = NULL, *right = NULL, *escape = NULL, *candleft = NULL, 
*candright = NULL;
        BAT *result1 = NULL, *result2 = NULL;
-       char *msg = MAL_SUCCEED;
+       char *msg = MAL_SUCCEED, *esc = "";
 
        if ((left = BATdescriptor(lid)) == NULL)
                goto fail;
        if ((right = BATdescriptor(rid)) == NULL)
                goto fail;
+       if (!is_bat_nil(elid) && (escape = BATdescriptor(elid)) == NULL)
+               goto fail;
        if (!is_bat_nil(slid) && (candleft = BATdescriptor(slid)) == NULL)
                goto fail;
        if (!is_bat_nil(srid) && (candright = BATdescriptor(srid)) == NULL)
@@ -2369,6 +2371,13 @@ PCREjoin(bat *r1, bat *r2, bat lid, bat 
                result2->trevsorted = true;
                result2->tseqbase = 0;
        }
+       if (escape) {
+               if (BATcount(escape) != 1) {
+                       msg = createException(MAL, "pcre.join", SQLSTATE(42000) 
"At the moment, only one value is allowed for the escape input at pcre join");
+                       goto fail;
+               }
+               esc = BUNtvar(bat_iterator(escape), 0);
+       }
        msg = pcrejoin(result1, result2, left, right, candleft, candright, esc, 
caseignore, anti);
        if (msg)
                goto fail;
@@ -2380,6 +2389,8 @@ PCREjoin(bat *r1, bat *r2, bat lid, bat 
        }
        BBPunfix(left->batCacheid);
        BBPunfix(right->batCacheid);
+       if (escape)
+               BBPunfix(escape->batCacheid);
        if (candleft)
                BBPunfix(candleft->batCacheid);
        if (candright)
@@ -2391,6 +2402,8 @@ PCREjoin(bat *r1, bat *r2, bat lid, bat 
                BBPunfix(left->batCacheid);
        if (right)
                BBPunfix(right->batCacheid);
+       if (escape)
+               BBPunfix(escape->batCacheid);
        if (candleft)
                BBPunfix(candleft->batCacheid);
        if (candright)
@@ -2405,19 +2418,19 @@ PCREjoin(bat *r1, bat *r2, bat lid, bat 
 }
 
 static str
-LIKEjoin_esc(bat *r1, bat *r2, const bat *lid, const bat *rid, const str *esc, 
const bat *slid, const bat *srid, const bit *nil_matches, const lng *estimate, 
const bit *anti)
+LIKEjoin_esc(bat *r1, bat *r2, const bat *lid, const bat *rid, const bat 
*elid, const bat *slid, const bat *srid, const bit *nil_matches, const lng 
*estimate, const bit *anti)
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
*esc, 0, *anti);
+       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
elid ? *elid : 0, 0, *anti);
 }
 
 static str
-LIKEjoin_esc1(bat *r1, const bat *lid, const bat *rid, const str *esc, const 
bat *slid, const bat *srid, const bit *nil_matches, const lng *estimate, const 
bit *anti)
+LIKEjoin_esc1(bat *r1, const bat *lid, const bat *rid, const bat *elid, const 
bat *slid, const bat *srid, const bit *nil_matches, const lng *estimate, const 
bit *anti)
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, *esc, 0, *anti);
+       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, elid ? *elid : 0, 0, *anti);
 }
 
 static str
@@ -2425,7 +2438,7 @@ LIKEjoin(bat *r1, bat *r2, const bat *li
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
"", 0, *anti);
+       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
0, 0, *anti);
 }
 
 static str
@@ -2433,23 +2446,23 @@ LIKEjoin1(bat *r1, const bat *lid, const
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, "", 0, *anti);
+       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, 0, 0, *anti);
 }
 
 static str
-ILIKEjoin_esc(bat *r1, bat *r2, const bat *lid, const bat *rid, const str 
*esc, const bat *slid, const bat *srid, const bit *nil_matches, const lng 
*estimate, const bit *anti)
+ILIKEjoin_esc(bat *r1, bat *r2, const bat *lid, const bat *rid, const bat 
*elid, const bat *slid, const bat *srid, const bit *nil_matches, const lng 
*estimate, const bit *anti)
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
*esc, 1, *anti);
+       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
elid ? *elid : 0, 1, *anti);
 }
 
 static str
-ILIKEjoin_esc1(bat *r1, const bat *lid, const bat *rid, const str *esc, const 
bat *slid, const bat *srid, const bit *nil_matches, const lng *estimate, const 
bit *anti)
+ILIKEjoin_esc1(bat *r1, const bat *lid, const bat *rid, const bat *elid, const 
bat *slid, const bat *srid, const bit *nil_matches, const lng *estimate, const 
bit *anti)
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, *esc, 1, *anti);
+       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, elid ? *elid : 0, 1, *anti);
 }
 
 static str
@@ -2457,7 +2470,7 @@ ILIKEjoin(bat *r1, bat *r2, const bat *l
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
"", 1, *anti);
+       return PCREjoin(r1, r2, *lid, *rid, slid ? *slid : 0, srid ? *srid : 0, 
0, 1, *anti);
 }
 
 static str
@@ -2465,7 +2478,7 @@ ILIKEjoin1(bat *r1, const bat *lid, cons
 {
        (void) nil_matches;
        (void) estimate;
-       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, "", 1, *anti);
+       return PCREjoin(r1, NULL, *lid, *rid, slid ? *slid : 0, srid ? *srid : 
0, 0, 1, *anti);
 }
 
 #include "mel.h"
@@ -2522,10 +2535,10 @@ mel_func pcre_init_funcs[] = {
  command("algebra", "ilikeselect", PCRElikeselect1, false, "", args(1,6, 
batarg("",oid),batarg("b",str),batarg("cand",oid),arg("pat",str),arg("esc",str),arg("anti",bit))),
  command("algebra", "likeselect", PCRElikeselect5, false, "", args(1,5, 
batarg("",oid),batarg("b",str),batarg("cand",oid),arg("pat",str),arg("anti",bit))),
  command("algebra", "ilikeselect", PCRElikeselect4, false, "", args(1,5, 
batarg("",oid),batarg("b",str),batarg("cand",oid),arg("pat",str),arg("anti",bit))),
- command("algebra", "likejoin", LIKEjoin_esc, false, "Join the string bat L 
with the pattern bat R\nwith optional candidate lists SL and SR using pattern 
escape string ESC\nand doing a case sensitive match.\nThe result is two aligned 
bats with oids of matching rows.", args(2,10, 
batarg("",oid),batarg("",oid),batarg("l",str),batarg("r",str),arg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
- command("algebra", "likejoin", LIKEjoin_esc1, false, "The same as 
LIKEjoin_esc, but only produce one output", 
args(1,9,batarg("",oid),batarg("l",str),batarg("r",str),arg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),
 arg("anti",bit))),
- command("algebra", "ilikejoin", ILIKEjoin_esc, false, "Join the string bat L 
with the pattern bat R\nwith optional candidate lists SL and SR using pattern 
escape string ESC\nand doing a case insensitive match.\nThe result is two 
aligned bats with oids of matching rows.", args(2,10, 
batarg("",oid),batarg("",oid),batarg("l",str),batarg("r",str),arg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
- command("algebra", "ilikejoin", ILIKEjoin_esc1, false, "The same as 
ILIKEjoin_esc, but only produce one output", args(1,9, 
batarg("",oid),batarg("l",str),batarg("r",str),arg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
+ command("algebra", "likejoin", LIKEjoin_esc, false, "Join the string bat L 
with the pattern bat R\nwith optional candidate lists SL and SR using pattern 
escape string ESC\nand doing a case sensitive match.\nThe result is two aligned 
bats with oids of matching rows.", args(2,10, 
batarg("",oid),batarg("",oid),batarg("l",str),batarg("r",str),batarg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
+ command("algebra", "likejoin", LIKEjoin_esc1, false, "The same as 
LIKEjoin_esc, but only produce one output", 
args(1,9,batarg("",oid),batarg("l",str),batarg("r",str),batarg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),
 arg("anti",bit))),
+ command("algebra", "ilikejoin", ILIKEjoin_esc, false, "Join the string bat L 
with the pattern bat R\nwith optional candidate lists SL and SR using pattern 
escape string ESC\nand doing a case insensitive match.\nThe result is two 
aligned bats with oids of matching rows.", args(2,10, 
batarg("",oid),batarg("",oid),batarg("l",str),batarg("r",str),batarg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
+ command("algebra", "ilikejoin", ILIKEjoin_esc1, false, "The same as 
ILIKEjoin_esc, but only produce one output", args(1,9, 
batarg("",oid),batarg("l",str),batarg("r",str),batarg("esc",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
  command("algebra", "likejoin", LIKEjoin, false, "", args(2,9, 
batarg("",oid),batarg("",oid),batarg("l",str),batarg("r",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
  command("algebra", "likejoin", LIKEjoin1, false, "", args(1,8, 
batarg("",oid),batarg("l",str),batarg("r",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
  command("algebra", "ilikejoin", ILIKEjoin, false, "", args(2,9, 
batarg("",oid),batarg("",oid),batarg("l",str),batarg("r",str),batarg("sl",oid),batarg("sr",oid),arg("nil_matches",bit),arg("estimate",lng),arg("anti",bit))),
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
@@ -1216,6 +1216,10 @@ exp_bin(backend *be, sql_exp *e, stmt *l
 
                        if (left && right && (exps_card(e->r) != CARD_ATOM || 
!exps_are_atoms(e->r))) {
                                sql_subfunc *f = e->f;
+                               for (node *n = l->op4.lval->h ; n ; n = n->next)
+                                       n->data = column(be, n->data);
+                               for (node *n = r->op4.lval->h ; n ; n = n->next)
+                                       n->data = column(be, n->data);
                                return stmt_genjoin(be, l, r, f, is_anti(e), 
swapped);
                        }
                        assert(!swapped);
diff --git a/sql/test/SQLancer/Tests/sqlancer04.sql 
b/sql/test/SQLancer/Tests/sqlancer04.sql
--- a/sql/test/SQLancer/Tests/sqlancer04.sql
+++ b/sql/test/SQLancer/Tests/sqlancer04.sql
@@ -352,3 +352,37 @@ then 0.8350239383024128 when r'6r' then 
 from v40, v3 where (0.4906208915598539999081140194903127849102020263671875) 
not in (1654919043, 6)) as sub1
 on ((trim(v37.vc0))>=(substr(v37.vc0, 9, 8)))) as res;
 ROLLBACK;
+
+START TRANSACTION;
+create view v3(vc0, vc1) as (select distinct r'', cast(cast(-1197336362 as 
int) as decimal) where greatest(false, true))
+with check option;
+
+create view v7(vc0, vc1, vc2) as (values (1307331776, 
((0.8065742163429374)||(0.1829829)),
+((floor(23898.0))-(cast(16268 as double)))), (least(cast(r'1' as bigint), 
ifthenelse(true, 7769,
+0.52628413232100446084160694226738996803760528564453125)), 2092106435, case 
when ((((((((r'TRUE')or(true)))and(false)))
+or(false)))and(false)) then pi() when false then sql_max(10246889, 
0.038412724) else cast(1556011470 as bigint) end))
+with check option;
+
+create view v28(vc0, vc1, vc2) as (values (-595506138, ((nullif(-1.09922038E8, 
24510))*(coalesce(-1802237644,
+0.7125421032644879, 662707145))), "week"(greatest(timestamp '1970-01-11 
12:58:57', timestamp '1969-12-24 00:21:39'))))
+with check option;
+
+create view v32(vc0, vc1) as (values (cast(-330282362 as bigint), 
((((674023637)||(-1856487129)))<=(case -1983844154
+when 122 then 11 when 1381635703 then -367942232 when -1208650057 then 
713851705 else 0.40289348 end))),
+(sql_max(((10)>>(18833)), - (-1088048958)), (not (true)) = true));
+
+create view v38(vc0) as (select all cast(cast(11149 as bigint) as real) where 
"isauuid"(r'0.962687263902831'));
+
+create view v43(vc0, vc1) as (select distinct cast(case 
0.635420284843984273237538218381814658641815185546875 when
+0.94514286975825123615635448004468344151973724365234375 then 0.8788786 end as 
bigint), null
+where ((-1975284152)<=(17772))) with check option;
+
+SELECT 1 FROM v7, v43 WHERE v7.vc1 ILIKE v43.vc1;
+
+SELECT median(ALL least(+ 
(0.26910993823565487748084024133277125656604766845703125),
+((0.5744001734384440727154697015066631138324737548828125)&(-1283341470)))), 
CASE WHEN NOT (FALSE) THEN
+least(-650735786, -1123683253) ELSE 1414135574 END FROM v7, v38, v43 RIGHT 
OUTER JOIN 
+(SELECT ALL sql_max(CAST(v28.vc0 AS REAL), ifthenelse(v32.vc1, 56, 104)), 
((CAST(v28.vc1 AS DOUBLE))*
+(CAST(TRUE AS TINYINT))), r'u''A#{' FROM v28, v32, v3) AS sub0 ON 
(((TRUE)AND(TRUE))) = TRUE
+WHERE ((v7.vc1)ILIKE(upper(v43.vc1))) GROUP BY "second"(TIME '10:50:47');
+ROLLBACK;
diff --git a/sql/test/SQLancer/Tests/sqlancer04.stable.out 
b/sql/test/SQLancer/Tests/sqlancer04.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer04.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer04.stable.out
@@ -454,6 +454,40 @@ stdout of test 'sqlancer04` in directory
 % 1 # length
 [ 8    ]
 #ROLLBACK;
+#START TRANSACTION;
+#create view v3(vc0, vc1) as (select distinct r'', cast(cast(-1197336362 as 
int) as decimal) where greatest(false, true))
+#with check option;
+#create view v7(vc0, vc1, vc2) as (values (1307331776, 
((0.8065742163429374)||(0.1829829)),
+#((floor(23898.0))-(cast(16268 as double)))), (least(cast(r'1' as bigint), 
ifthenelse(true, 7769,
+#0.52628413232100446084160694226738996803760528564453125)), 2092106435, case 
when ((((((((r'TRUE')or(true)))and(false)))
+#or(false)))and(false)) then pi() when false then sql_max(10246889, 
0.038412724) else cast(1556011470 as bigint) end))
+#with check option;
+#create view v28(vc0, vc1, vc2) as (values (-595506138, 
((nullif(-1.09922038E8, 24510))*(coalesce(-1802237644,
+#0.7125421032644879, 662707145))), "week"(greatest(timestamp '1970-01-11 
12:58:57', timestamp '1969-12-24 00:21:39'))))
+#with check option;
+#create view v32(vc0, vc1) as (values (cast(-330282362 as bigint), 
((((674023637)||(-1856487129)))<=(case -1983844154
+#when 122 then 11 when 1381635703 then -367942232 when -1208650057 then 
713851705 else 0.40289348 end))),
+#(sql_max(((10)>>(18833)), - (-1088048958)), (not (true)) = true));
+#create view v38(vc0) as (select all cast(cast(11149 as bigint) as real) where 
"isauuid"(r'0.962687263902831'));
+#create view v43(vc0, vc1) as (select distinct cast(case 
0.635420284843984273237538218381814658641815185546875 when
+#0.94514286975825123615635448004468344151973724365234375 then 0.8788786 end as 
bigint), null
+#where ((-1975284152)<=(17772))) with check option;
+#SELECT 1 FROM v7, v43 WHERE v7.vc1 ILIKE v43.vc1;
+% .%15 # table_name
+% %15 # name
+% tinyint # type
+% 1 # length
+#SELECT median(ALL least(+ 
(0.26910993823565487748084024133277125656604766845703125),
+#((0.5744001734384440727154697015066631138324737548828125)&(-1283341470)))), 
CASE WHEN NOT (FALSE) THEN
+#least(-650735786, -1123683253) ELSE 1414135574 END FROM v7, v38, v43 RIGHT 
OUTER JOIN 
+#(SELECT ALL sql_max(CAST(v28.vc0 AS REAL), ifthenelse(v32.vc1, 56, 104)), 
((CAST(v28.vc1 AS DOUBLE))*
+#(CAST(TRUE AS TINYINT))), r'u''A#{' FROM v28, v32, v3) AS sub0 ON 
(((TRUE)AND(TRUE))) = TRUE
+#WHERE ((v7.vc1)ILIKE(upper(v43.vc1))) GROUP BY "second"(TIME '10:50:47');
+% .%40,        .%47 # table_name
+% %40, %47 # name
+% double,      int # type
+% 24,  1 # length
+#ROLLBACK;
 
 # 09:44:50 >  
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to