Changeset: bf9ff264d592 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bf9ff264d592 Modified Files: monetdb5/modules/atoms/str.c sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_statement.c sql/test/SQLancer/Tests/SingleServer sql/test/SQLancer/Tests/sqlancer01.sql sql/test/SQLancer/Tests/sqlancer01.stable.out Branch: default Log Message:
Merged with Jun2020 diffs (186 lines): diff --git a/monetdb5/modules/atoms/str.c b/monetdb5/modules/atoms/str.c --- a/monetdb5/modules/atoms/str.c +++ b/monetdb5/modules/atoms/str.c @@ -3745,10 +3745,10 @@ STRRtrim(str *res, const str *arg1) /* return a list of codepoints in s */ static int * -trimchars(const char *s, size_t *n) +trimchars(const char *s, size_t *n, size_t len_s) { size_t len = 0; - int *chars = GDKmalloc(strlen(s) * sizeof(int)); + int *chars = GDKmalloc(len_s * sizeof(int)); int c; if (chars == NULL) @@ -3772,15 +3772,15 @@ str STRStrip2(str *res, const str *arg1, const str *arg2) { const char *s = *arg1; - size_t len; - size_t n; - size_t nchars; + size_t len, n, nchars, n2; int *chars; if (strNil(s) || strNil(*arg2)) { *res = GDKstrdup(str_nil); + } else if ((n2 = strlen(*arg2)) == 0) { + *res = GDKstrdup(*arg1); } else { - chars = trimchars(*arg2, &nchars); + chars = trimchars(*arg2, &nchars, n2); if (chars == NULL) throw(MAL, "str.trim", SQLSTATE(HY013) MAL_MALLOC_FAIL); len = strlen(s); @@ -3802,15 +3802,15 @@ str STRLtrim2(str *res, const str *arg1, const str *arg2) { const char *s = *arg1; - size_t len; - size_t n; - size_t nchars; + size_t len, n, nchars, n2; int *chars; if (strNil(s) || strNil(*arg2)) { *res = GDKstrdup(str_nil); + } else if ((n2 = strlen(*arg2)) == 0) { + *res = GDKstrdup(*arg1); } else { - chars = trimchars(*arg2, &nchars); + chars = trimchars(*arg2, &nchars, n2); if (chars == NULL) throw(MAL, "str.trim", SQLSTATE(HY013) MAL_MALLOC_FAIL); len = strlen(s); @@ -3829,15 +3829,15 @@ str STRRtrim2(str *res, const str *arg1, const str *arg2) { const char *s = *arg1; - size_t len; - size_t n; - size_t nchars; + size_t len, n, nchars, n2; int *chars; if (strNil(s) || strNil(*arg2)) { *res = GDKstrdup(str_nil); + } else if ((n2 = strlen(*arg2)) == 0) { + *res = GDKstrdup(*arg1); } else { - chars = trimchars(*arg2, &nchars); + chars = trimchars(*arg2, &nchars, n2); if (chars == NULL) throw(MAL, "str.trim", SQLSTATE(HY013) MAL_MALLOC_FAIL); len = strlen(s); 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 @@ -2213,7 +2213,7 @@ rel2bin_join(backend *be, sql_rel *rel, char *handled = SA_ZNEW_ARRAY(sql->sa, char, list_length(rel->exps)); /* get equi-joins/filters first */ - if (list_length(rel->exps) > 1) { + if (list_length(rel->exps) > 1 || is_outerjoin(rel->op)) { for( en = rel->exps->h, i=0; en; en = en->next, i++) { sql_exp *e = en->data; diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -1918,13 +1918,13 @@ stmt_join_cand(backend *be, stmt *op1, s MalBlkPtr mb = be->mb; InstrPtr q = NULL; int left = (cmptype == cmp_left); - const char *sjt = "join"; + const char *sjt = joinRef; (void)anti; if (left) { cmptype = cmp_equal; - sjt = "leftjoin"; + sjt = leftjoinRef; } if (op1->nr < 0 || op2->nr < 0) return NULL; diff --git a/sql/test/SQLancer/Tests/SingleServer b/sql/test/SQLancer/Tests/SingleServer --- a/sql/test/SQLancer/Tests/SingleServer +++ b/sql/test/SQLancer/Tests/SingleServer @@ -0,0 +1,1 @@ +--set raw_strings=true diff --git a/sql/test/SQLancer/Tests/sqlancer01.sql b/sql/test/SQLancer/Tests/sqlancer01.sql --- a/sql/test/SQLancer/Tests/sqlancer01.sql +++ b/sql/test/SQLancer/Tests/sqlancer01.sql @@ -25,7 +25,7 @@ insert into integers(i) values(((length(reverse('8 \rcr੧[bp1eMY쫺4j5s뮯!<Rn4*}')))>>(((- (- (528640982)))&(ascii('528640982')))))); --Bug 6885 SELECT i from integers order by i; -- NULL -- 0 -select reverse('8 \rcr੧[bp1eMY쫺4j5s뮯!<Rn4*}'); +select reverse(r'8 \rcr੧[bp1eMY쫺4j5s뮯!<Rn4*}'); select true in (1 in (1)); -- true @@ -72,6 +72,17 @@ SELECT v3.c0 FROM v3, v0, tbl_productsal -- empty ROLLBACK; +START TRANSACTION; --Bug 6894 +insert into tbl_productsales(product_name, totalsales) values (((cast(0.1 as string))||(charindex(cast(((((1)*(-1)))&(((-1)|(-1)))) as string), +((((rtrim('0.9407860360743894', ''))||(1)))||(cast(1.44041702E9 as string(75)))), +((- (((1)*(-1))))*(1))))), -1833694753); +select rtrim('0.9407860360743894', ''); +ROLLBACK; + +-- Bug 6895 +SELECT another_t.col1 FROM tbl_productsales CROSS JOIN another_t WHERE ((tbl_productsales.product_category) NOT IN (tbl_productsales.product_category, tbl_productsales.product_category)) IS NULL; + -- empty + DROP TABLE tbl_ProductSales; DROP TABLE another_T; DROP TABLE integers; diff --git a/sql/test/SQLancer/Tests/sqlancer01.stable.out b/sql/test/SQLancer/Tests/sqlancer01.stable.out --- a/sql/test/SQLancer/Tests/sqlancer01.stable.out +++ b/sql/test/SQLancer/Tests/sqlancer01.stable.out @@ -105,8 +105,8 @@ stdout of test 'sqlancer01` in directory % .%2 # table_name % %2 # name % clob # type -% 28 # length -[ "}*4nR<!뮯s5j4쫺YMe1pb[੧rc\r 8" ] +% 29 # length +[ "}*4nR<!뮯s5j4쫺YMe1pb[੧rcr\\ 8" ] #select true in (1 in (1)); % .%6 # table_name % %6 # name @@ -231,6 +231,29 @@ stdout of test 'sqlancer01` in directory % bigint # type % 1 # length [ 1 ] +#START TRANSACTION; --Bug 6893 +#create view v0(c0) as (select distinct - (tbl_productsales.totalsales) from tbl_productsales, another_t); +#create view v1(c0) as (select distinct not (not ((((v0.c0)=(1560867215))) = false)) from integers, another_t, tbl_productsales, v0); +#create view v2(c0, c1) as (select v1.c0, -3.025584E8 from v0, tbl_productsales, v1, another_t); +#create view v3(c0, c1, c2) as (select all 0.9104878744438205107059047804796136915683746337890625, -705263737, 0.7147939 from v2 where (cast(v2.c0 as varchar(32))) is null order by v2.c1 desc, v2.c0 desc); +#SELECT v3.c0 FROM v3, v0, tbl_productsales FULL OUTER JOIN v2 ON v2.c0 RIGHT OUTER JOIN integers ON (tbl_productsales.TotalSales) BETWEEN (NULL) AND (v2.c1) JOIN another_t ON v2.c0; +% .v3 # table_name +% c0 # name +% double # type +% 24 # length +#ROLLBACK; +#START TRANSACTION; --Bug 6894 +#insert into tbl_productsales(product_name, totalsales) values (((cast(0.1 as string))||(charindex(cast(((((1)*(-1)))&(((-1)|(-1)))) as string), +#((((rtrim('0.9407860360743894', ''))||(1)))||(cast(1.44041702E9 as string(75)))), +#((- (((1)*(-1))))*(1))))), -1833694753); +[ 1 ] +#select rtrim('0.9407860360743894', ''); +% .%2 # table_name +% %2 # name +% varchar # type +% 18 # length +[ "0.9407860360743894" ] +#ROLLBACK; #DROP TABLE tbl_ProductSales; #DROP TABLE another_T; #DROP TABLE integers; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list