Changeset: 892b6d4effc0 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=892b6d4effc0
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
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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list