MonetDB: oscar - Merged with Jun2020

2020-08-11 Thread Pedro Ferreira
Changeset: 6f48637e6076 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6f48637e6076
Modified Files:
sql/backends/monet5/sql_statistics.c
Branch: oscar
Log Message:

Merged with Jun2020


diffs (158 lines):

diff --git a/sql/backends/monet5/sql_statistics.c 
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -34,9 +34,7 @@ sql_drop_statistics(mvc *m, sql_table *t
tr = m->session->tr;
sys = mvc_bind_schema(m, "sys");
if (sys == NULL)
-   throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "Internal 
error");
-   if (!mvc_schema_privs(m, sys))
-   throw(SQL, "sql.sql_drop_statistics", SQLSTATE(42000) "Access 
denied for %s to schema '%s'", sqlvar_get_string(find_global_var(m, 
mvc_bind_schema(m, "sys"), "current_user")), sys->base.name);
+   throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "Internal 
error: No schema sys");
sysstats = mvc_bind_table(m, sys, "statistics");
if (sysstats == NULL)
throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "No table 
sys.statistics");
@@ -44,6 +42,22 @@ sql_drop_statistics(mvc *m, sql_table *t
if (statsid == NULL)
throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "No table 
sys.statistics");
 
+   /* Do all the validations before any drop */
+   if (!isTable(t))
+   throw(SQL, "sql_drop_statistics", SQLSTATE(42S02) "DROP 
STATISTICS: %s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, 
t->properties), t->base.name);
+   if (!table_privs(m, t, PRIV_SELECT))
+   throw(SQL, "sql_drop_statistics", SQLSTATE(42000) "DROP 
STATISTICS: access denied for %s to table '%s.%s'", 
+ sqlvar_get_string(find_global_var(m, 
mvc_bind_schema(m, "sys"), "current_user")), t->s->base.name, t->base.name);
+   if (isTable(t) && t->columns.set) {
+   for (ncol = (t)->columns.set->h; ncol; ncol = ncol->next) {
+   sql_column *c = (sql_column *) ncol->data;
+
+   if (!column_privs(m, c, PRIV_SELECT))
+   throw(SQL, "sql_drop_statistics", 
SQLSTATE(42000) "DROP STATISTICS: access denied for %s to column '%s' on table 
'%s.%s'", 
+ sqlvar_get_string(find_global_var(m, 
mvc_bind_schema(m, "sys"), "current_user")), c->base.name, t->s->base.name, 
t->base.name);
+   }
+   }
+
if (isTable(t) && t->columns.set) {
for (ncol = (t)->columns.set->h; ncol; ncol = ncol->next) {
sql_column *c = ncol->data;
@@ -51,7 +65,7 @@ sql_drop_statistics(mvc *m, sql_table *t
rid = table_funcs.column_find_row(tr, statsid, 
>base.id, NULL);
if (!is_oid_nil(rid) &&
table_funcs.table_delete(tr, sysstats, rid) != 
LOG_OK)
-   throw(SQL, "analyze", "delete failed");
+   throw(SQL, "sql_drop_statistics", "delete 
failed");
}
}
return MAL_SUCCEED;
@@ -87,8 +101,6 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
sys = mvc_bind_schema(m, "sys");
if (sys == NULL)
throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No 
schema sys");
-   if (!mvc_schema_privs(m, sys))
-   throw(SQL, "sql.analyze", SQLSTATE(42000) "Access denied for %s 
to schema '%s'", sqlvar_get_string(find_global_var(m, mvc_bind_schema(m, 
"sys"), "current_user")), sys->base.name);
sysstats = mvc_bind_table(m, sys, "statistics");
if (sysstats == NULL)
throw(SQL, "sql.analyze", SQLSTATE(3F000) "Internal error: No 
table sys.statistics");
@@ -109,6 +121,48 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
 
TRC_DEBUG(SQL_PARSER, "analyze %s.%s.%s sample " LLFMT "%s\n", (sch ? 
sch : ""), (tbl ? tbl : " "), (col ? col : " "), samplesize, 
(minmax)?"MinMax":"");
 
+   /* Do all the validations before doing any analyze */
+   for (nsch = tr->schemas.set->h; nsch; nsch = nsch->next) {
+   sql_schema *s = (sql_schema *) nsch->data;
+   if (!isalpha((unsigned char) s->base.name[0]))
+   continue;
+
+   if (sch && strcmp(s->base.name, sch))
+   continue;
+   sfnd = 1;
+   if (s->tables.set)
+   for (ntab = (s)->tables.set->h; ntab; ntab = 
ntab->next) {
+   sql_table *t = (sql_table *) ntab->data;
+
+   if (tbl && strcmp(t->base.name, tbl))
+   continue;
+   tfnd = 1;
+   if (tbl && !isTable(t))
+   throw(SQL, "analyze", SQLSTATE(42S02) 
"%s '%s' is 

MonetDB: oscar - Merged with Jun2020

2020-08-06 Thread Pedro Ferreira
Changeset: 9f25e78c28dc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9f25e78c28dc
Modified Files:
gdk/gdk_select.c
sql/server/rel_select.c
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (297 lines):

diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
--- a/gdk/gdk_select.c
+++ b/gdk/gdk_select.c
@@ -306,7 +306,7 @@ hashselect(BAT *b, struct canditer *rest
 buninsfix(bn, dst, cnt, o, \
   (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p) \
  * (dbl) (ci->ncand-p) * 1.1 + 
1024), \
-  BATcapacity(bn) + ci->ncand - p, 
BUN_NONE)); \
+  maximum, BUN_NONE)); \
} else {\
impsloop(ISDENSE, TEST, quickins(dst, cnt, o, bn)); \
}   \
@@ -361,7 +361,7 @@ hashselect(BAT *b, struct canditer *rest
buninsfix(bn, dst, cnt, o,  \
  (BUN) ((dbl) cnt / (dbl) (p 
== 0 ? 1 : p) \
 * (dbl) (ci->ncand-p) 
* 1.1 + 1024), \
- BATcapacity(bn) + ci->ncand - 
p, BUN_NONE); \
+ maximum, BUN_NONE); \
cnt++;  \
}   \
}   \
@@ -526,7 +526,7 @@ fullscan_any(BAT *b, struct canditer *re
buninsfix(bn, dst, cnt, o,
  (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
- BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+ maximum, BUN_NONE);
cnt++;
}
}
@@ -545,7 +545,7 @@ fullscan_any(BAT *b, struct canditer *re
buninsfix(bn, dst, cnt, o,
  (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
- BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+ maximum, BUN_NONE);
cnt++;
}
}
@@ -564,7 +564,7 @@ fullscan_any(BAT *b, struct canditer *re
buninsfix(bn, dst, cnt, o,
  (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
- BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+ maximum, BUN_NONE);
cnt++;
}
}
@@ -603,7 +603,7 @@ fullscan_str(BAT *b, struct canditer *re
buninsfix(bn, dst, cnt, o,
  (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
- BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+ maximum, BUN_NONE);
cnt++;
}
}
@@ -618,7 +618,7 @@ fullscan_str(BAT *b, struct canditer *re
buninsfix(bn, dst, cnt, o,
  (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
- BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+ maximum, BUN_NONE);
cnt++;
}
}
@@ -633,7 +633,7 @@ fullscan_str(BAT *b, struct canditer *re
buninsfix(bn, dst, cnt, o,
  (BUN) ((dbl) cnt / (dbl) (p == 0 ? 1 
: p)
 * (dbl) (ci->ncand-p) * 1.1 + 
1024),
- BATcapacity(bn) + ci->ncand - p, 
BUN_NONE);
+ maximum, BUN_NONE);
cnt++;

MonetDB: oscar - Merged with Jun2020

2020-07-31 Thread Pedro Ferreira
Changeset: 792f708ba3df for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=792f708ba3df
Modified Files:
sql/server/rel_optimizer.c
Branch: oscar
Log Message:

Merged with Jun2020


diffs (97 lines):

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
@@ -7651,6 +7651,8 @@ rel_simplify_predicates(visitor *v, sql_
 
if 
(!strcmp(inf->func->base.name, "<>"))
flag = !flag;
+   if (e->flag == 
cmp_notequal)
+   flag = !flag;

assert(list_length(args) == 2);
l = args->h->data;
r = args->h->next->data;
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
@@ -319,6 +319,23 @@ create view v1(c0) as (select distinct t
 select max(all abs(+ (- (- (-1620427795) from v0, t0 join v1 on 
v1.c0)||(t0.c1)))ilike(v1.c0));
 ROLLBACK;
 
+START TRANSACTION;
+CREATE TABLE "sys"."t1" ("c0" VARCHAR(427),"c1" TIME);
+COPY 5 RECORDS INTO "sys"."t1" FROM stdin USING DELIMITERS E'\t',E'\n','"';
+"-"NULL
+"0.9494786438610024"   NULL
+"MA4DƹXb,⻇멫ho\trYmꈋP-aR"   NULL
+NULL   02:45:58
+NULL   05:45:05
+
+SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8);
+SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8) HAVING (NOT 
(MIN(ALL NOT (NOT ((0.7) IS NULL) = TRUE
+UNION ALL
+SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8) HAVING NOT ((NOT 
(MIN(ALL NOT (NOT ((0.7) IS NULL) = TRUE)
+UNION ALL
+SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8) HAVING ((NOT 
(MIN(ALL NOT (NOT ((0.7) IS NULL) = TRUE) IS NULL;
+ROLLBACK;
+
 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
@@ -213,8 +213,8 @@ stdout of test 'sqlancer01` in directory
 % int # type
 % 1 # length
 #select 1 from another_t join integers on (cast(another_t.col4 between 1 and 2 
as int)) where false;
-% .%15 # table_name
-% %15 # name
+% .%11 # table_name
+% %11 # name
 % tinyint # type
 % 1 # length
 #SELECT another_T.col2 FROM tbl_productsales, integers LEFT OUTER JOIN 
another_T ON another_T.col1 > 1 WHERE another_T.col2 > 1 GROUP BY 
another_T.col2 HAVING COUNT((another_T.col2) IN (another_T.col2)) > 0;
@@ -272,8 +272,8 @@ stdout of test 'sqlancer01` in directory
 % 1 # length
 [ 1]
 #select 1 from t0 where (3 in (1, 2)) is null; --simplified
-% .%5 # table_name
-% %5 # name
+% .%4 # table_name
+% %4 # name
 % tinyint # type
 % 1 # length
 #SELECT 1 FROM t0 WHERE t0.c0 BETWEEN SYMMETRIC (1 IN (2, 1)) AND t0.c0;
@@ -625,6 +625,32 @@ stdout of test 'sqlancer01` in directory
 % 1 # length
 [ NULL ]
 #ROLLBACK;
+#START TRANSACTION;
+#CREATE TABLE "sys"."t1" ("c0" VARCHAR(427),"c1" TIME);
+#COPY 5 RECORDS INTO "sys"."t1" FROM stdin USING DELIMITERS E'\t',E'\n','"';
+#"-"   NULL
+#"0.9494786438610024"  NULL
+#"MA4DƹXb,⻇멫ho\trYmꈋP-aR"  NULL
+#NULL  02:45:58
+#NULL  05:45:05
+[ 5]
+#SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8);
+% .%2 # table_name
+% %2 # name
+% tinyint # type
+% 1 # length
+[ NULL ]
+#SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8) HAVING (NOT 
(MIN(ALL NOT (NOT ((0.7) IS NULL) = TRUE
+#UNION ALL
+#SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8) HAVING NOT ((NOT 
(MIN(ALL NOT (NOT ((0.7) IS NULL) = TRUE)
+#UNION ALL
+#SELECT MEDIAN(ALL abs(CASE TIMESTAMP '1970-01-24 09:25:06' WHEN TIMESTAMP 
'1970-01-19 10:35:50' THEN 2 END)) FROM t1 GROUP BY abs(0.8) HAVING ((NOT 
(MIN(ALL NOT (NOT ((0.7) IS NULL) = TRUE) IS NULL;
+% .%23 # table_name
+% %2 # name
+% tinyint # type
+% 1 # length
+[ NULL ]
+#ROLLBACK;
 #DROP TABLE tbl_ProductSales;
 #DROP TABLE another_T;
 #DROP TABLE integers;
___
checkin-list mailing list

MonetDB: oscar - Merged with Jun2020

2020-07-29 Thread Pedro Ferreira
Changeset: 8339385d201d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8339385d201d
Modified Files:
gdk/gdk_calc.c
sql/server/rel_dump.c
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/test/BugTracker-2020/Tests/All
sql/test/BugTracker-2020/Tests/tpch-cube.Bug-6938.stable.out
sql/test/SQLancer/Tests/All
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 860 to 300 lines):

diff --git a/gdk/gdk_calc.c b/gdk/gdk_calc.c
--- a/gdk/gdk_calc.c
+++ b/gdk/gdk_calc.c
@@ -319,11 +319,6 @@ BATcalcnot(BAT *b, BAT *s, BAT *r)
bn->tnonil = nils == 0;
bn->tkey = b->tkey && nils <= 1;
 
-   if (nils != 0 && !b->tnil) {
-   b->tnil = true;
-   b->batDirtydesc = true;
-   }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
  ",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
  ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -449,11 +444,6 @@ BATcalcnegate(BAT *b, BAT *s, BAT *r)
bn->tnonil = nils == 0;
bn->tkey = b->tkey && nils <= 1;
 
-   if (nils != 0 && !b->tnil) {
-   b->tnil = true;
-   b->batDirtydesc = true;
-   }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
  ",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
  ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -589,11 +579,6 @@ BATcalcabsolute(BAT *b, BAT *s, BAT *r)
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
 
-   if (nils && !b->tnil) {
-   b->tnil = true;
-   b->batDirtydesc = true;
-   }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
  ",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
  ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -728,11 +713,6 @@ BATcalciszero(BAT *b, BAT *s, BAT *r)
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
 
-   if (nils != 0 && !b->tnil) {
-   b->tnil = true;
-   b->batDirtydesc = true;
-   }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
  ",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
  ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -871,11 +851,6 @@ BATcalcsign(BAT *b, BAT *s, BAT *r)
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
 
-   if (nils != 0 && !b->tnil) {
-   b->tnil = true;
-   b->batDirtydesc = true;
-   }
-
TRC_DEBUG(ALGO, "b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
  ",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
  ALGOBATPAR(b), ALGOOPTBATPAR(s),
@@ -3809,15 +3784,6 @@ BATcalcincrdecr(BAT *b, BAT *s, BAT *r, 
bn->tnil = nils != 0;
bn->tnonil = nils == 0;
 
-   if (nils && !b->tnil) {
-   b->tnil = true;
-   b->batDirtydesc = true;
-   }
-   if (nils == 0 && !b->tnonil) {
-   b->tnonil = true;
-   b->batDirtydesc = true;
-   }
-
TRC_DEBUG(ALGO, "%s: b=" ALGOBATFMT ",s=" ALGOOPTBATFMT
  ",r=" ALGOOPTBATFMT " -> " ALGOOPTBATFMT " " LLFMT "usec\n",
  func, ALGOBATPAR(b), ALGOOPTBATPAR(s),
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -929,10 +929,22 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
if (!(rexps = read_exps(sql, lrel, rrel, pexps, r, pos, 
'(', 0)))
return NULL;
if (filter) {
-   sql_subfunc *func = sql_find_func(sql->sa, 
mvc_bind_schema(sql, "sys"), fname, 1+list_length(exps), F_FILT, NULL);
-   if (!func)
+   sql_subfunc *func = NULL;
+   list *tl = sa_list(sql->sa);
+
+   for (node *n = lexps->h; n; n = n->next){
+   sql_exp *e = n->data;
+
+   list_append(tl, exp_subtype(e));
+   }
+   for (node *n = rexps->h; n; n = n->next){
+   sql_exp *e = n->data;
+   
+   list_append(tl, exp_subtype(e));
+   }
+
+   if (!(func = sql_bind_func_(sql->sa, 
mvc_bind_schema(sql, "sys"), fname, tl, F_FILT)))
return sql_error(sql, -1, 
SQLSTATE(42000) "Filter: missing function '%s'\n", fname);
-
return exp_filter(sql->sa, lexps, rexps, func, 
anti);
}
return exp_or(sql->sa, lexps, rexps, anti);
@@ -1033,12 +1045,16 @@ exp_read(mvc *sql, sql_rel *lrel, sql_re
if 

MonetDB: oscar - Merged with Jun2020

2020-07-28 Thread Pedro Ferreira
Changeset: a5f61329133c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a5f61329133c
Modified Files:
sql/common/sql_types.c
sql/server/rel_select.c
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/SQLancer/Tests/sqlancer03.stable.out
sql/test/pg_regress/Tests/date.stable.err
sql/test/pg_regress/Tests/date.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 714 to 300 lines):

diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c
--- a/sql/common/sql_types.c
+++ b/sql/common/sql_types.c
@@ -107,7 +107,7 @@ static int convert_matrix[EC_MAX][EC_MAX
 /* EC_FLT */   { 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 
0 },
 /* EC_TIME */  { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 
0 },
 /* EC_TIME_TZ */   { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 
0 },
-/* EC_DATE */  { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 
0 },
+/* EC_DATE */  { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 0, 
0 },
 /* EC_TSTAMP */{ 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 
1, 2, 0, 0 },
 /* EC_TSTAMP_TZ */ { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 
0 },
 /* EC_GEOM */  { 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 
0 },
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3748,40 +3748,39 @@ rel_case(sql_query *query, sql_rel **rel
 {
mvc *sql = query->sql;
sql_subtype *tpe = NULL;
-   list *conds = new_exp_list(sql->sa);
-   list *results = new_exp_list(sql->sa);
-   dnode *dn = when_search_list->h;
-   sql_subtype *restype = NULL, rtype, bt;
-   sql_exp *res = NULL, *else_exp = NULL;
-   node *n, *m;
+   list *conds = new_exp_list(sql->sa), *results = new_exp_list(sql->sa);
+   sql_subtype *restype = NULL, *condtype = NULL, ctype, rtype, bt;
+   sql_exp *res = NULL, *opt_cond_exp = NULL;
exp_kind ek = {type_value, card_column, FALSE};
 
-   sql_find_subtype(, "boolean", 0, 0);
-   for (dn = when_search_list->h; dn; dn = dn->next) {
+   if (opt_cond) {
+   if (!(opt_cond_exp = rel_value_exp(query, rel, opt_cond, f, 
ek)))
+   return NULL;
+   condtype = exp_subtype(opt_cond_exp);
+   }
+
+   for (dnode *dn = when_search_list->h; dn; dn = dn->next) {
sql_exp *cond = NULL, *result = NULL;
dlist *when = dn->data.sym->data.lval;
 
-   if (opt_cond) {
-   sql_exp *l, *r;
-
-   if (!(l = rel_value_exp(query, rel, opt_cond, f, ek)))
-   return NULL;
-   if (!(r = rel_value_exp(query, rel, when->h->data.sym, 
f, ek)))
-   return NULL;
-   if (rel_convert_types(sql, rel ? *rel : NULL, rel ? 
*rel : NULL, , , 1, type_equal) < 0)
-   return NULL;
-   cond = rel_binop_(sql, rel ? *rel : NULL, l, r, NULL, 
"=", card_value);
-   } else {
+   if (opt_cond)
+   cond = rel_value_exp(query, rel, when->h->data.sym, f, 
ek);
+   else
cond = rel_logical_value_exp(query, rel, 
when->h->data.sym, f, ek);
-   }
if (!cond)
return NULL;
-   result = rel_value_exp(query, rel, when->h->next->data.sym, f, 
ek);
-   if (!cond || !result)
+   list_prepend(conds, cond);
+   tpe = exp_subtype(cond);
+   if (tpe && condtype) {
+   supertype(, condtype, tpe);
+   condtype = 
+   } else if (tpe) {
+   condtype = tpe;
+   }
+
+   if (!(result = rel_value_exp(query, rel, 
when->h->next->data.sym, f, ek)))
return NULL;
-   list_prepend(conds, cond);
list_prepend(results, result);
-
tpe = exp_subtype(result);
if (tpe && restype) {
supertype(, restype, tpe);
@@ -3790,13 +3789,11 @@ rel_case(sql_query *query, sql_rel **rel
restype = tpe;
}
}
-   if (opt_else || else_exp) {
-   sql_exp *result = else_exp;
-
-   if (!result && !(result = rel_value_exp(query, rel, opt_else, 
f, ek)))
+   if (opt_else) {
+   if (!(res = rel_value_exp(query, rel, opt_else, f, ek)))
return NULL;
 
-   tpe = exp_subtype(result);
+   tpe = exp_subtype(res);
if (tpe && restype) {
supertype(, restype, tpe);
restype = 
@@ -3809,11 +3806,7 @@ 

MonetDB: oscar - Merged with Jun2020

2020-07-27 Thread Pedro Ferreira
Changeset: a1d8df9fc162 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a1d8df9fc162
Modified Files:
gdk/gdk_utils.c
sql/backends/monet5/sql_upgrades.c
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.ppc64.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.ppc64.int128
sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/emptydb-upgrade/Tests/upgrade.stable.out
sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out.single
sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
sql/test/testdb-upgrade/Tests/upgrade.stable.out
sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 1173 to 300 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1500,11 +1500,7 @@ THRcreate(void (*f) (void *), void *arg,
};
len = snprintf(semname, sizeof(semname), "THRcreate%" PRIu64, 
(uint64_t) ATOMIC_INC());
if (len == -1 || len > (int) sizeof(semname)) {
-   TRC_DEBUG(IO_, "Semaphore name is too large\n");
-   GDKerror("semaphore name is too large\n");
-   GDKfree(t);
-   ATOMIC_SET(>pid, 0); /* deallocate */
-   return 0;
+   TRC_WARNING(IO_, "Semaphore name is too large\n");
}
MT_sema_init(>sem, 0, semname);
if (MT_create_thread(, THRstarter, t, d, name) != 0) {
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -2140,6 +2140,31 @@ sql_update_jun2020_sp1_hugeint(Client c,
 #endif
 
 static str
+sql_update_jun2020_sp2(Client c, mvc *sql, const char *prev_schema, bool 
*systabfixed)
+{
+   /* we need to update the system tables, but only if we haven't done
+* so already, and if we are actually upgrading the database */
+   if (*systabfixed)
+   return MAL_SUCCEED; /* already done */
+
+   char *buf = "select id from sys.functions where name = 'nullif' and 
schema_id = (select id from sys.schemas where name = 'sys');\n";
+   res_table *output;
+   char *err = SQLstatementIntern(c, , "update", 1, 0, );
+   if (err == NULL) {
+   BAT *b = BATdescriptor(output->cols[0].b);
+   if (b) {
+   if (BATcount(b) == 0) {
+   err = sql_fix_system_tables(c, sql, 
prev_schema);
+   *systabfixed = true;
+   }
+   BBPunfix(b->batCacheid);
+   }
+   res_table_destroy(output);
+   }
+   return err;
+}
+
+static str
 sql_update_oscar_lidar(Client c)
 {
char *query =
@@ -2429,6 +2454,7 @@ sql_update_oscar(Client c, mvc *sql, con
GDKfree(buf);
return err; /* usually MAL_SUCCEED */
 }
+
 int
 SQLupgrades(Client c, mvc *m)
 {
@@ -2645,6 +2671,13 @@ SQLupgrades(Client c, mvc *m)
}
 #endif
 
+   if ((err = sql_update_jun2020_sp2(c, m, prev_schema, )) != 
NULL) {
+   TRC_CRITICAL(SQL_PARSER, "%s\n", err);
+   freeException(err);
+   GDKfree(prev_schema);
+   return -1;
+   }
+
sql_find_subtype(, "varchar", 0, 0);
if (sql_bind_func(m->sa, s, "lidarattach", , NULL, F_PROC) &&
(err = sql_update_oscar_lidar(c)) != NULL) {
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1921,20 +1921,6 @@ exps_have_rel_exp( list *exps)
return 0;
 }
 
-int
-exps_have_func(list *exps)
-{
-   if (list_empty(exps))
-   return 0;
-   for(node *n=exps->h; n; n=n->next) {
-   sql_exp *e = n->data;
-
-   if (exp_has_func(e))
-   return 1;
-   }
-   return 0;
-}
-
 static sql_rel *
 exps_rel_get_rel(sql_allocator *sa, list *exps )
 {
@@ -2093,19 +2079,22 @@ exps_are_atoms( list *exps)
   

MonetDB: oscar - Merged with Jun2020

2020-07-22 Thread Pedro Ferreira
Changeset: 67ea7498c34f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67ea7498c34f
Modified Files:
sql/server/rel_optimizer.c
sql/server/sql_atom.c
Branch: oscar
Log Message:

Merged with Jun2020


diffs (43 lines):

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
@@ -5285,7 +5285,7 @@ rel_remove_empty_join(visitor *v, sql_re
 static bool
 find_simple_projection_for_join2semi(sql_rel *rel)
 {
-   if (is_project(rel->op) && list_length(rel->exps) == 1) {
+   if (is_project(rel->op) && !is_union(rel->op) && list_length(rel->exps) 
== 1) {
sql_exp *e = rel->exps->h->data;
 
if (rel->card < CARD_AGGR) /* const or groupby without group by 
exps */
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -329,6 +329,7 @@ atom_general(sql_allocator *sa, sql_subt
/*_DELETE(val);*/
if (p)
GDKfree(p);
+   GDKclrerr();
return NULL;
}
VALset(>data, a->data.vtype, p);
@@ -1238,8 +1239,10 @@ atom_cast(sql_allocator *sa, atom *a, sq
len = sizeof(double);
res = ATOMfromstr(TYPE_dbl, , , s, false);
GDKfree(s);
-   if (res < 0)
+   if (res < 0) {
+   GDKclrerr();
return 0;
+   }
}
if (tp->type->localtype == TYPE_dbl)
a->data.val.dval = a->d;
@@ -1264,6 +1267,7 @@ atom_cast(sql_allocator *sa, atom *a, sq
ATOMcmp(type, p, ATOMnilptr(type)) == 0) {
GDKfree(p);
a->data.len = strlen(a->data.val.sval);
+   GDKclrerr();
return 0;
}
a->tpe = *tp;
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: oscar - Merged with Jun2020

2020-07-22 Thread Pedro Ferreira
Changeset: aed98e315ad4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=aed98e315ad4
Modified Files:
sql/server/rel_optimizer.c
tools/merovingian/client/monetdb.c
Branch: oscar
Log Message:

Merged with Jun2020


diffs (118 lines):

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
@@ -4673,43 +4673,6 @@ rel_push_select_down_join(visitor *v, sq
return rel;
 }
 
-static bool
-find_simple_projection_for_join2semi(sql_rel *rel)
-{
-   if (is_project(rel->op) && list_length(rel->exps) == 1) {
-   sql_exp *e = rel->exps->h->data;
-
-   if (rel->card < CARD_AGGR) /* const or groupby without group by 
exps */
-   return true;
-   /* a single group by column in the projection list from a group 
by relation is guaranteed to be unique, but not an aggregate */
-   if (e->type == e_column) {
-   sql_rel *res = NULL;
-   sql_exp *found = NULL;
-   bool underjoin = false;
-
-   if (is_groupby(rel->op) || need_distinct(rel) || 
find_prop(e->p, PROP_HASHCOL))
-   return true;
-
-   found = rel_find_exp_and_corresponding_rel(rel->l, e, 
, ); /* grouping column on inner relation */
-   if (found && !underjoin) {
-   if (find_prop(found->p, PROP_HASHCOL)) /* 
primary key always unique */
-   return true;
-   if (found->type == e_column && found->card <= 
CARD_AGGR) {
-   if (!(is_groupby(res->op) || 
need_distinct(res)) && list_length(res->exps) != 1)
-   return false;
-   for (node *n = res->exps->h ; n ; n = 
n->next) { /* must be the single column in the group by expression list */
-   sql_exp *e = n->data;
-   if (e != found && e->type == 
e_column)
-   return false;
-   }
-   return true;
-   }
-   }
-   }
-   }
-   return false;
-}
-
 /*
  * Push {semi}joins down, pushes the joins through group by expressions.
  * When the join is on the group by columns, we can push the joins left
@@ -4728,13 +4691,13 @@ rel_push_join_down(visitor *v, sql_rel *
 {
list *exps = NULL;
 
-   if (!rel_is_ref(rel) && ((is_join(rel->op) || is_semi(rel->op)) && 
rel->l && rel->exps)) {
+   if (!rel_is_ref(rel) && ((is_left(rel->op) || rel->op == op_join || 
is_semi(rel->op)) && rel->l && rel->exps)) {
sql_rel *gb = rel->r, *ogb = gb, *l = NULL, *rell = rel->l;
 
if (gb->op == op_project)
gb = gb->l;
 
-   if (rel_is_ref(rell) || 
!find_simple_projection_for_join2semi(rell))
+   if (rel_is_ref(rell))
return rel;
 
exps = rel->exps;
@@ -5319,6 +5282,43 @@ rel_remove_empty_join(visitor *v, sql_re
return rel;
 }
 
+static bool
+find_simple_projection_for_join2semi(sql_rel *rel)
+{
+   if (is_project(rel->op) && list_length(rel->exps) == 1) {
+   sql_exp *e = rel->exps->h->data;
+
+   if (rel->card < CARD_AGGR) /* const or groupby without group by 
exps */
+   return true;
+   /* a single group by column in the projection list from a group 
by relation is guaranteed to be unique, but not an aggregate */
+   if (e->type == e_column) {
+   sql_rel *res = NULL;
+   sql_exp *found = NULL;
+   bool underjoin = false;
+
+   if (is_groupby(rel->op) || need_distinct(rel) || 
find_prop(e->p, PROP_HASHCOL))
+   return true;
+
+   found = rel_find_exp_and_corresponding_rel(rel->l, e, 
, ); /* grouping column on inner relation */
+   if (found && !underjoin) {
+   if (find_prop(found->p, PROP_HASHCOL)) /* 
primary key always unique */
+   return true;
+   if (found->type == e_column && found->card <= 
CARD_AGGR) {
+   if (!(is_groupby(res->op) || 
need_distinct(res)) && list_length(res->exps) != 1)
+   return false;
+   for (node *n = res->exps->h ; n ; n = 
n->next) { /* must be the single column in the group by expression list */
+ 

MonetDB: oscar - Merged with Jun2020

2020-07-21 Thread Pedro Ferreira
Changeset: b9bbc090f66a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b9bbc090f66a
Modified Files:
sql/include/sql_catalog.h
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
sql/server/rel_propagate.c
sql/server/sql_atom.c
sql/server/sql_atom.h
sql/storage/store.c

sql/test/BugTracker-2016/Tests/memory-consumption-query-PLAN-25joins.Bug-3972.stable.out
sql/test/merge-partitions/Tests/All
sql/test/mergetables/Tests/forex1.stable.out
Branch: oscar
Log Message:

Merged with Jun2020

___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: oscar - Merged with Jun2020

2020-07-21 Thread Pedro Ferreira
Changeset: d39245d853c4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d39245d853c4
Modified Files:
gdk/gdk_utils.c
sql/include/sql_catalog.h
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
sql/server/sql_atom.c
sql/storage/store.c
sql/test/BugTracker-2020/Tests/All
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 1540 to 300 lines):

diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -1357,7 +1357,10 @@ GDKusec(void)
return (lng) (f.QuadPart / 10);
 #elif defined(HAVE_CLOCK_GETTIME)
struct timespec ts;
-   clock_gettime(CLOCK_REALTIME, );
+#ifdef CLOCK_REALTIME_COARSE
+   if (clock_gettime(CLOCK_REALTIME_COARSE, ) < 0)
+#endif
+   (void) clock_gettime(CLOCK_REALTIME, );
return (lng) (ts.tv_sec * LL_CONSTANT(100) + ts.tv_nsec / 1000);
 #elif defined(HAVE_GETTIMEOFDAY)
struct timeval tv;
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -309,6 +309,7 @@ typedef enum sql_class {
 #define EC_TEMP_TZ(e)  (e==EC_TIME_TZ||e==EC_TIMESTAMP_TZ)
 #define EC_TEMP(e) 
(e==EC_TIME||e==EC_DATE||e==EC_TIMESTAMP||EC_TEMP_TZ(e))
 #define EC_TEMP_FRAC(e)
(e==EC_TIME||e==EC_TIMESTAMP||EC_TEMP_TZ(e))
+#define EC_TEMP_NOFRAC(e)  (e==EC_TIME||e==EC_TIMESTAMP)
 #define EC_BACKEND_FIXED(e)(EC_NUMBER(e)||e==EC_BIT||EC_TEMP(e))
 
 typedef struct sql_type {
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -18,8 +18,6 @@
 #ifdef HAVE_HGE
 #include "mal.h"   /* for have_hge */
 #endif
-#include "gdk_time.h"
-#include "blob.h"
 
 comp_type
 compare_str2type(const char *compare_op)
@@ -2659,97 +2657,6 @@ exp_sum_scales(sql_subfunc *f, sql_exp *
}
 }
 
-sql_exp *
-create_table_part_atom_exp(mvc *sql, sql_subtype tpe, ptr value)
-{
-   str buf = NULL;
-   size_t len = 0;
-   sql_exp *res = NULL;
-
-   switch (tpe.type->eclass) {
-   case EC_BIT: {
-   bit bval = *((bit*) value);
-   return exp_atom_bool(sql->sa, bval ? 1 : 0);
-   }
-   case EC_POS:
-   case EC_NUM:
-   case EC_DEC:
-   case EC_SEC:
-   case EC_MONTH:
-   switch (tpe.type->localtype) {
-#ifdef HAVE_HGE
-   case TYPE_hge: {
-   hge hval = *((hge*) value);
-   return exp_atom_hge(sql->sa, hval);
-   }
-#endif
-   case TYPE_lng: {
-   lng lval = *((lng*) value);
-   return exp_atom_lng(sql->sa, lval);
-   }
-   case TYPE_int: {
-   int ival = *((int*) value);
-   return exp_atom_int(sql->sa, ival);
-   }
-   case TYPE_sht: {
-   sht sval = *((sht*) value);
-   return exp_atom_sht(sql->sa, sval);
-   }
-   case TYPE_bte: {
-   bte bbval = *((bte *) value);
-   return exp_atom_bte(sql->sa, bbval);
-   }
-   default:
-   return NULL;
-   }
-   case EC_FLT:
-   switch (tpe.type->localtype) {
-   case TYPE_flt: {
-   flt fval = *((flt*) value);
-   return exp_atom_flt(sql->sa, fval);
-   }
-   case TYPE_dbl: {
-   dbl dval = *((dbl*) value);
-   return exp_atom_dbl(sql->sa, dval);
-   }
-   default:
-   return NULL;
-   }
-   case EC_DATE: {
-   if(date_tostr(, , (const date *)value, false) < 
0)
-   return NULL;
-   res = exp_atom(sql->sa, atom_general(sql->sa, , 
buf));
-   break;
-   }
-   case EC_TIME: {
-   if(daytime_tostr(, , (const daytime *)value, 
false) < 0)
-   return NULL;
-   res = exp_atom(sql->sa, 

MonetDB: oscar - Merged with Jun2020

2020-07-17 Thread Pedro Ferreira
Changeset: cf6e79382c27 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=cf6e79382c27
Modified Files:
sql/backends/monet5/sql_statement.c
sql/server/rel_exp.c
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rewriter.c
sql/server/rel_unnest.c
sql/server/rel_updates.c
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/SQLancer/Tests/sqlancer03.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 529 to 300 lines):

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
@@ -3053,7 +3053,7 @@ stmt_convert(backend *be, stmt *v, sql_s
q = pushInt(mb, q, f->scale);
 */ //q = pushInt(mb, q, 
((ValRecord)((atom*)(be->mvc)->args[1])->data).val.ival);
}
-   if (cond && v->nrcols && f->type->eclass != EC_DEC && 
!EC_TEMP_FRAC(t->type->eclass) && !EC_INTERVAL(t->type->eclass))
+   if (cond && v->nrcols && f->type->eclass != EC_DEC && 
!EC_TEMP(t->type->eclass) && !EC_INTERVAL(t->type->eclass))
q = pushArgument(mb, q, cond->nr);
if (q) {
stmt *s = stmt_create(be->mvc->sa, st_convert);
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -861,6 +861,7 @@ exp_setalias(sql_exp *e, const char *rna
 void
 exp_prop_alias(sql_allocator *sa, sql_exp *e, sql_exp *oe )
 {
+   e->ref = oe->ref;
if (oe->alias.name == NULL && exp_has_rel(oe)) {
sql_rel *r = exp_rel_get_rel(sa, oe);
if (!is_project(r->op))
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
@@ -1600,14 +1600,11 @@ rel_push_count_down(visitor *v, sql_rel 
sql_rel *cp;/* Cross Product */
sql_subfunc *mult;
list *args;
-   const char *rname = NULL, *name = NULL;
sql_rel *srel;
 
oce = rel->exps->h->data;
if (oce->l) /* we only handle COUNT(*) */
return rel;
-   rname = exp_relname(oce);
-   name  = exp_name(oce);
 
args = new_exp_list(v->sql->sa);
srel = r->l;
@@ -1640,7 +1637,8 @@ rel_push_count_down(visitor *v, sql_rel 
cp = rel_crossproduct(v->sql->sa, gbl, gbr, op_join);
 
nce = exp_op(v->sql->sa, args, mult);
-   exp_setname(v->sql->sa, nce, rname, name );
+   if (exp_name(oce))
+   exp_prop_alias(v->sql->sa, nce, oce);
 
rel_destroy(rel);
rel = rel_project(v->sql->sa, cp, 
append(new_exp_list(v->sql->sa), nce));
@@ -2849,7 +2847,8 @@ rel_merge_projects(visitor *v, sql_rel *
}
*/
if (ne) {
-   exp_setname(v->sql->sa, ne, exp_relname(e), 
exp_name(e));
+   if (exp_name(e))
+   exp_prop_alias(v->sql->sa, ne, e);
list_append(rel->exps, ne);
} else {
all = 0;
@@ -2865,7 +2864,8 @@ rel_merge_projects(visitor *v, sql_rel *
 
ne = exp_push_down_prj(v->sql, e, prj, 
prj->l);
if (ne) {
-   exp_setname(v->sql->sa, ne, 
exp_relname(e), exp_name(e));
+   if (exp_name(e))
+   
exp_prop_alias(v->sql->sa, ne, e);
list_append(nr, ne);
} else {
all = 0;
@@ -2934,21 +2934,25 @@ exp_simplify_math( mvc *sql, sql_exp *e,
if (exp_is_atom(le) && exp_is_null(sql, le)) {
(*changes)++;
if (f && f->func && f->func->imp && 
strstr(f->func->imp, "_no_nil") != NULL) {
-   exp_setname(sql->sa, re, 
exp_relname(e), exp_name(e));
+   if (exp_name(e))
+   exp_prop_alias(sql->sa, re, e);
return re;
}
le = exp_null(sql->sa, et);
-   exp_setname(sql->sa, le, exp_relname(e), 
exp_name(e));
+   if (exp_name(e))
+   exp_prop_alias(sql->sa, le, e);

MonetDB: oscar - Merged with Jun2020

2020-07-16 Thread Pedro Ferreira
Changeset: 81fd9cd9aaa5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=81fd9cd9aaa5
Modified Files:
sql/backends/monet5/sql_statement.c
sql/server/rel_optimizer.c
sql/server/sql_atom.c
sql/server/sql_atom.h
sql/server/sql_semantic.c
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/SQLancer/Tests/sqlancer03.stable.out
sql/test/pg_regress/Tests/timestamp.stable.out
sql/test/pg_regress/Tests/timestamptz.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 447 to 300 lines):

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
@@ -1501,6 +1501,8 @@ stmt_uselect(backend *be, stmt *op1, stm
q = pushArgument(mb, q, l);
if (sub && !op1->cand)
q = pushArgument(mb, q, sub->nr);
+   else
+   sub = NULL;
q = pushArgument(mb, q, r);
q = pushArgument(mb, q, r);
q = pushBit(mb, q, TRUE);
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
@@ -1740,6 +1740,11 @@ rel_simplify_count_fk_join(mvc *sql, sql
if (oce->l) /* we only handle COUNT(*) */
return r;
 
+   /* primary side must be a full table */
+   if ((fk_left && (!is_left(r->op) && !is_full(r->op)) && 
!is_basetable(rr->op)) ||
+   (!fk_left && (!is_right(r->op) && !is_full(r->op)) && 
!is_basetable(rl->op)))
+   return r;
+
if (fk_left && is_join(rl->op) && !rel_is_ref(rl)) {
rl = rel_simplify_count_fk_join(sql, rl, gexps, changes);
r->l = rl;
@@ -1748,10 +1753,6 @@ rel_simplify_count_fk_join(mvc *sql, sql
rr = rel_simplify_count_fk_join(sql, rr, gexps, changes);
r->r = rr;
}
-   /* primary side must be a full table */
-   if ((fk_left && (!is_left(r->op) && !is_full(r->op)) && 
!is_basetable(rr->op)) ||
-   (!fk_left && (!is_right(r->op) && !is_full(r->op)) && 
!is_basetable(rl->op)))
-   return r;
 
(*changes)++;
/* rewrite, ie remove pkey side */
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -429,7 +429,7 @@ atom2string(sql_allocator *sa, atom *a)
 }
 
 char *
-atom2sql(atom *a)
+atom2sql(atom *a, int timezone)
 {
sql_class ec = a->tpe.type->eclass;
char buf[BUFSIZ];
@@ -567,26 +567,101 @@ atom2sql(atom *a)
sprintf(buf, "%f", a->data.val.fval);
break;
case EC_TIME:
+   case EC_TIME_TZ:
case EC_DATE:
case EC_TIMESTAMP:
-   if (a->data.vtype == TYPE_str) {
-   char *val1 = sql_escape_str(a->tpe.type->sqlname), 
*val2 = sql_escape_str(a->data.val.sval), *res;
+   case EC_TIMESTAMP_TZ: {
+   char val1[64], sbuf[64], *val2 = sbuf, *res;
+   size_t len = sizeof(sbuf);
 
-   if (!val1 || !val2) {
-   c_delete(val1);
-   c_delete(val2);
-   return NULL;
+   switch (ec) {
+   case EC_TIME:
+   case EC_TIME_TZ:
+   case EC_TIMESTAMP:
+   case EC_TIMESTAMP_TZ: {
+   char *n = stpcpy(val1, (ec == EC_TIME || ec == 
EC_TIME_TZ) ? "TIME" : "TIMESTAMP");
+   if (a->tpe.digits) {
+   char str[16];
+   sprintf(str, "%u", a->tpe.digits);
+   n = stpcpy(stpcpy(stpcpy(n, " ("), str), ")");
}
+   if (ec == EC_TIME_TZ || ec == EC_TIMESTAMP_TZ)
+   stpcpy(n, " WITH TIME ZONE");
+   } break;
+   case EC_DATE:
+   strcpy(val1, "DATE");
+   break;
+   default:
+   assert(0);
+   }
+
+   switch (ec) {
+   case EC_TIME:
+   case EC_TIME_TZ: {
+   daytime dt = a->data.val.lval;
+   int digits = a->tpe.digits ? a->tpe.digits - 1 : 0;
+   char *s = val2;
+   ssize_t lens;
+
+   if (ec == EC_TIME_TZ)
+   dt = daytime_add_usec_modulo(dt, timezone * 
1000);
+   if ((lens = daytime_precision_tostr(, , dt, 
digits, true)) < 0)
+   assert(0);
+
+   if (ec == EC_TIME_TZ) {
+   lng 

MonetDB: oscar - Merged with Jun2020

2020-07-15 Thread Pedro Ferreira
Changeset: 8f10367ee2b6 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8f10367ee2b6
Modified Files:
sql/storage/store.c
sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out

sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
sql/test/miscellaneous/Tests/groupby_error.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (124 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -4612,13 +4612,18 @@ validate_tables(sql_schema *s, sql_schem
if (cs_size(>tables))
for (n = s->tables.set->h; n; n = n->next) {
sql_table *t = n->data;
-   sql_table *ot;
+   sql_table *ot = NULL;
 
if (!t->base.wtime && !t->base.rtime)
continue;
 
-   ot = find_sql_table(os, t->base.name);
-   if (ot && isKindOfTable(ot) && isKindOfTable(t) && 
!isDeclaredTable(ot) && !isDeclaredTable(t)) {
+   o = list_find_base_id(os->tables.set, t->base.id);
+   if (o)
+   ot = o->data;
+   if (!ot && os->tables.dset && 
list_find_base_id(os->tables.dset, t->base.id) != NULL) {
+   /* dropped table */
+   return 0;
+   } else if (ot && isKindOfTable(ot) && isKindOfTable(t) 
&& !isDeclaredTable(ot) && !isDeclaredTable(t)) {
if ((t->base.wtime && (t->base.wtime < 
ot->base.rtime || t->base.wtime < ot->base.wtime)) ||
(t->base.rtime && (t->base.rtime < 
ot->base.wtime)))
return 0;
@@ -4877,7 +4882,8 @@ reset_table(sql_trans *tr, sql_table *ft
ft->access = pft->access;
if (pft->p) {
ft->p = find_sql_table(ft->s, pft->p->base.name);
-   assert(isMergeTable(ft->p) || isReplicaTable(ft->p));
+   //the parent (merge or replica table) maybe created 
later!
+   //assert(isMergeTable(ft->p) || isReplicaTable(ft->p));
} else
ft->p = NULL;
 
@@ -4986,6 +4992,12 @@ reset_trans(sql_trans *tr, sql_trans *pt
 {
int res = reset_changeset(tr, >schemas, >schemas, (sql_base 
*)tr->parent, (resetf) _schema, (dupfunc) _dup);
TRC_DEBUG(SQL_STORE, "Reset transaction: %d\n", tr->wtime);
+
+   for (node *n = tr->schemas.set->h; n; n = n->next) { /* Set table 
members */
+   sql_schema *s = n->data;
+
+   set_members(>tables);
+   }
return res;
 }
 
diff --git a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out 
b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
--- a/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
+++ b/sql/test/BugTracker-2015/Tests/crash.Bug-3736.stable.out
@@ -97,7 +97,7 @@ single project (
 | ) [ "o"."open_auction_id" NOT NULL * = "%32"."%32" NOT NULL ]
 ) [ "o"."id" NOT NULL HASHCOL , "o"."open_auction_id" NOT NULL, "o"."initial" 
NOT NULL, "o"."reserve" NOT NULL, "o"."aktuell" NOT NULL, "o"."privacy" NOT 
NULL, "o"."itemref" NOT NULL, "o"."seller" NOT NULL, "o"."quantity" NOT NULL, 
"o"."type" NOT NULL, "o"."start" NOT NULL, "o"."ende" NOT NULL, "o"."%TID%" NOT 
NULL, "b"."id" NOT NULL HASHCOL , "b"."open_auction_id" NOT NULL, "b"."date" 
NOT NULL, "b"."time" NOT NULL, "b"."personref" NOT NULL, "b"."increase" NOT 
NULL, "b"."%TID%" NOT NULL, "b3"."increase" NOT NULL as "%2"."%2" ]
 project (
-| select (
+| single select (
 | | single join (
 | | | & REF 2 ,
 | | | project (
diff --git 
a/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
 
b/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
--- 
a/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
+++ 
b/sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
@@ -92,29 +92,25 @@ project (
 | | | | | project (
 | | | | | | project (
 | | | | | | | project (
-| | | | | | | | project (
-| | | | | | | | | project (
-| | | | | | | | | | left outer join (
-| | | | | | | | | | | left outer join (
-| | | | | | | | | | | | join (
-| | | | | | | | | | | | | join (
-| | | | | | | | | | | | | | table(sys.functions) [ "functions"."id" as 
"f"."id", "functions"."schema_id" as "f"."schema_id" ] COUNT ,
-| | | | | | | | | | | | | | table(sys.comments) [ "comments"."id" NOT NULL 
HASHCOL  as "c"."id" ] COUNT 
-| | | | | | | | | | | | | ) [ "f"."id" = "c"."id" NOT NULL HASHCOL  ],
-| | | | | | | | | | | | | table(sys.schemas) [ "schemas"."id" as "s"."id" ] 
COUNT 
-| | | | | | | | | | | | ) [ 

MonetDB: oscar - Merged with Jun2020

2020-07-13 Thread Pedro Ferreira
Changeset: 772de296974d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=772de296974d
Modified Files:
sql/common/sql_list.c
sql/include/sql_list.h
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_rewriter.c
sql/server/rel_rewriter.h
sql/server/rel_unnest.c
sql/test/miscellaneous/Tests/groupby_error.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out.single
testing/Mtest.py.bat
testing/Mtest.py.in
Branch: oscar
Log Message:

Merged with Jun2020


diffs (72 lines):

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
@@ -1652,7 +1652,6 @@ rel_push_count_down(visitor *v, sql_rel 
return rel;
 }
 
-
 static sql_rel *
 rel_simplify_project_fk_join(mvc *sql, sql_rel *r, list *pexps, int *changes)
 {
@@ -3686,7 +3685,6 @@ merge_notequal(mvc *sql, list *exps, int
return nexps;
 }
 
-
 static sql_rel *
 rel_select_cse(visitor *v, sql_rel *rel)
 {
diff --git a/testing/Mtest.py.bat b/testing/Mtest.py.bat
--- a/testing/Mtest.py.bat
+++ b/testing/Mtest.py.bat
@@ -4,4 +4,4 @@
 @REM
 @REM Copyright 1997 - July 2008 CWI, August 2008 - 2020 MonetDB B.V.
 
-@python3 "%~dpn0" %*
+@python "%~dpn0" %*
diff --git a/testing/Mtest.py.in b/testing/Mtest.py.in
--- a/testing/Mtest.py.in
+++ b/testing/Mtest.py.in
@@ -104,22 +104,37 @@ if isatty:
 left, top, right, bottom, maxx, maxy) = 
struct.unpack("Hhh", csbi.raw)
 return wattr
 reset = get_csbi_attributes(handle)
-def prred(str, write = sys.stdout.write, scta = 
ctypes.windll.kernel32.SetConsoleTextAttribute):
+def prred(str,
+  write=sys.stdout.write,
+  flush=sys.stdout.flush,
+  scta=ctypes.windll.kernel32.SetConsoleTextAttribute):
 try:
+flush()
 scta(handle, 0x4)
 write(str)
+flush()
 finally:
 scta(handle, reset)
-def prgreen(str, write = sys.stdout.write, scta = 
ctypes.windll.kernel32.SetConsoleTextAttribute):
+def prgreen(str,
+write=sys.stdout.write,
+flush=sys.stdout.flush,
+
scta=ctypes.windll.kernel32.SetConsoleTextAttribute):
 try:
+flush()
 scta(handle, 0x2)
 write(str)
+flush()
 finally:
 scta(handle, reset)
-def prpurple(str, write = sys.stdout.write, scta = 
ctypes.windll.kernel32.SetConsoleTextAttribute):
+def prpurple(str,
+ write=sys.stdout.write,
+ flush=sys.stdout.flush,
+ 
scta=ctypes.windll.kernel32.SetConsoleTextAttribute):
 try:
+flush()
 scta(handle, 0x5)
 write(str)
+flush()
 finally:
 scta(handle, reset)
 
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: oscar - Merged with Jun2020

2020-07-13 Thread Pedro Ferreira
Changeset: 075a94ddd322 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=075a94ddd322
Modified Files:
sql/backends/monet5/rel_bin.c
sql/backends/monet5/sql_scenario.c
sql/server/rel_dump.c
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimizer.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_select.c
sql/server/rel_unnest.c
sql/server/rel_updates.c
sql/server/sql_atom.c
sql/storage/bat/bat_storage.c
sql/storage/store.c
sql/test/BugTracker-2016/Tests/storagemodel.stable.out
sql/test/SQLancer/Tests/sqlancer03.stable.out
sql/test/subquery/Tests/subquery6.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 884 to 300 lines):

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
@@ -3807,13 +3807,13 @@ insert_check_ukey(backend *be, list *ins
stmt *sel = NULL;
 
/* remove any nils as in stmt_order NULL = NULL, 
instead of NULL != NULL */
-   if ((k->type == ukey) && stmt_has_null(col)) {
-
+   if (k->type == ukey) {
for (m = k->columns->h; m; m = m->next) {
sql_kc *c = m->data;
stmt *cs = list_fetch(inserts, 
c->c->colnr);
 
-   sel = stmt_selectnonil(be, cs, sel);
+   if (stmt_has_null(cs))
+   sel = stmt_selectnonil(be, cs, 
sel);
}
}
/* implementation uses sort key check */
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1233,10 +1233,12 @@ SQLparser(Client c)
msg = SQLoptimizeQuery(c, c->curprg->def);
 
if (msg != MAL_SUCCEED) {
+   str other = c->curprg->def->errors;
c->curprg->def->errors = 0;
MSresetInstructions(c->curprg->def, 
oldstop);
freeVariables(c, c->curprg->def, NULL, 
oldvtop);
-   sqlcleanup(m, err);
+   if (other != msg)
+   freeException(other);
goto finalize;
}
}
diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1810,7 +1810,7 @@ rel_read(mvc *sql, char *r, int *pos, li
if (!(exps = read_exps(sql, NULL, NULL, NULL, r, pos, '[', 0)))
return NULL;
rel = rel_setop(sql->sa, lrel, rrel, j);
-   rel->exps = exps;
+   rel_setop_set_exps(sql, rel, exps);
if (rel_set_types(sql, rel) < 0)
return sql_error(sql, -1, SQLSTATE(42000) "Setop: 
number of expressions don't match\n");
set_processed(rel);
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -687,16 +687,16 @@ exp_alias_or_copy( mvc *sql, const char 
tname = exp_relname(old);
 
if (!cname && exp_name(old) && has_label(old)) {
-   ne = exp_column(sql->sa, exp_relname(old), exp_name(old), 
exp_subtype(old), orel?orel->card:CARD_ATOM, has_nil(old), is_intern(old));
+   ne = exp_column(sql->sa, exp_relname(old), exp_name(old), 
exp_subtype(old), orel && old->card != CARD_ATOM?orel->card:CARD_ATOM, 
has_nil(old), is_intern(old));
return exp_propagate(sql->sa, ne, old);
} else if (!cname) {
exp_label(sql->sa, old, ++sql->label);
-   ne = exp_column(sql->sa, exp_relname(old), exp_name(old), 
exp_subtype(old), orel?orel->card:CARD_ATOM, has_nil(old), is_intern(old));
+   ne = exp_column(sql->sa, exp_relname(old), exp_name(old), 
exp_subtype(old), orel && old->card != CARD_ATOM?orel->card:CARD_ATOM, 
has_nil(old), is_intern(old));
return exp_propagate(sql->sa, ne, old);
} else if (cname && !old->alias.name) {
exp_setname(sql->sa, old, tname, cname);
}
-   ne = exp_column(sql->sa, tname, cname, exp_subtype(old), 
orel?orel->card:CARD_ATOM, has_nil(old), is_intern(old));
+   ne = exp_column(sql->sa, tname, cname, exp_subtype(old), orel && 
old->card != CARD_ATOM?orel->card:CARD_ATOM, 

MonetDB: oscar - Merged with Jun2020

2020-07-10 Thread Pedro Ferreira
Changeset: 5b8c17917c35 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5b8c17917c35
Added Files:

sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin
Modified Files:
sql/server/rel_optimizer.c
sql/server/rel_select.c
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/SQLancer/Tests/sqlancer03.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (188 lines):

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
@@ -1389,8 +1389,11 @@ exp_needs_push_down(sql_exp *e)
case e_convert:
return exp_needs_push_down(e->l);
case e_aggr:
-   case e_func:
+   case e_func: {
+   if (!e->l || exps_are_atoms(e->l))
+   return 0;
return 1;
+   } break;
case e_column:
case e_atom:
default:
@@ -1458,6 +1461,8 @@ exp_push_single_func_down(visitor *v, sq
 
if (exp_unsafe(e, 0))
return e;
+   if (!e->l || exps_are_atoms(e->l))
+   return e;
if ((is_joinop(rel->op) && ((can_push_func(e, l, ) && 
mustl) || (can_push_func(e, r, ) && mustr))) ||
(is_select(rel->op) && can_push_func(e, l, ) && 
must)) {
exp_label(v->sql->sa, e, ++v->sql->label);
@@ -7672,7 +7677,7 @@ rel_simplify_predicates(visitor *v, sql_
}
} else if (is_atom(l->type) && is_atom(r->type) && 
!is_semantics(e)) {
if (exp_is_null(v->sql, l) || 
exp_is_null(v->sql, r)) {
-   e = exp_null(v->sql->sa, 
exp_subtype(l));
+   e = exp_null(v->sql->sa, 
sql_bind_localtype("bit"));
v->changes++;
} else if (l->l && r->l) {
int res = atom_cmp(l->l, r->l);
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2765,14 +2765,6 @@ rel_op(sql_query *query, sql_rel **rel, 
return sql_error(sql, 02, SQLSTATE(3F000) "SELECT: no such 
schema '%s'", sname);
 
sf = find_func(sql, s, fname, 0, F_AGGR, NULL);
-   if (!sf && *rel && (*rel)->card == CARD_AGGR) {
-   if (is_sql_having(f) || is_sql_orderby(f))
-   return NULL;
-   /* reset error */
-   sql->session->status = 0;
-   sql->errstr[0] = '\0';
-   return sql_error(sql, 02, SQLSTATE(42000) "SELECT: no such 
aggregate '%s'", fname);
-   }
if (sf)
return _rel_aggr(query, rel, 0, s, fname, NULL, f);
return rel_op_(sql, s, fname, ek);
diff --git 
a/sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin
 
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin
new file mode 100644
--- /dev/null
+++ 
b/sql/test/BugDay_2005-10-06_2.9.3/Tests/parser_crashes_server.SF-921996.stable.err.Darwin
@@ -0,0 +1,24 @@
+stderr of test 'parser_crashes_server.SF-921996` in directory 
'sql/test/BugDay_2005-10-06_2.9.3` itself:
+
+
+# 14:52:27 >  
+# 14:52:27 >  Mtimeout -timeout 180 Mserver 
"--config=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./etc/MonetDB.conf"
 --debug=10 --set 
"monet_mod_path=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./lib/MonetDB:/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./lib/bin"
 --set 
"gdk_dbfarm=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./var/MonetDB/dbfarm"
 --set 
"sql_logdir=/home/manegold/Monet/Testing/Current/.GNU.32.32.d.--enable-debug.PREFIX./var/MonetDB/log"
 --set mapi_port=38897 --set sql_port=49478 --set xquery_port=59231 --set 
monet_prompt= --trace "--dbname=mTests_src_test_BugDay_2005-10-06_2.9.3" 
--dbinit="module(sql_server); sql_server_start();" ; echo ; echo Over..
+# 14:52:27 >  
+
+
+# 14:52:27 >  
+# 14:52:27 >  Mtimeout -timeout 60 MapiClient -lsql -u monetdb -P monetdb 
--host=localhost --port=49478  < parser_crashes_server.SF-921996.sql
+# 14:52:27 >  
+
+MAPI  = (monetdb) /var/tmp/mtest-23209/.s.monetdb.33225
+QUERY = CREATE TABLE bounds_test (
+id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ERROR = !syntax error: 42000!end of input stream in "create table bounds_test (
+!id int not null auto_increment primary key,
+!"
+CODE  = 42000
+
+# 14:52:27 >  
+# 14:52:27 >  Done.
+# 14:52:27 >  
+
diff --git a/sql/test/SQLancer/Tests/sqlancer03.sql 
b/sql/test/SQLancer/Tests/sqlancer03.sql
--- a/sql/test/SQLancer/Tests/sqlancer03.sql
+++ b/sql/test/SQLancer/Tests/sqlancer03.sql
@@ -142,3 

MonetDB: oscar - Merged with Jun2020

2020-07-10 Thread Pedro Ferreira
Changeset: 1a6a69063cab for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=1a6a69063cab
Modified Files:
gdk/gdk_bbp.c
sql/server/sql_atom.c
testing/mktest.py
testing/sqllogictest.py
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 338 to 300 lines):

diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -504,6 +504,12 @@ fixdateheap(BAT *b, const char *anme)
bnme = nme;
sprintf(filename, "BACKUP%c%s", DIR_SEP, bnme);
 
+   /* we don't maintain index structures */
+   HASHdestroy(b);
+   IMPSdestroy(b);
+   OIDXdestroy(b);
+   PROPdestroy(b);
+
/* make backup of heap */
if (GDKmove(b->theap.farmid, srcdir, bnme, "tail", BAKDIR, bnme, 
"tail") != GDK_SUCCEED) {
GDKfree(srcdir);
@@ -661,18 +667,11 @@ fixdatebats(void)
}
fclose(fp);
}
-   /* The date type is not known in GDK when reading the BBP */
-   if (b->ttype < 0) {
-   const char *anme;
-
-   /* as yet unknown tail column type */
-   anme = ATOMunknown_name(b->ttype);
-   /* known string types */
-   if ((strcmp(anme, "date") == 0 ||
-strcmp(anme, "timestamp") == 0 ||
-strcmp(anme, "daytime") == 0) &&
-   fixdateheap(b, anme) != GDK_SUCCEED)
-   return GDK_FAIL;
+   if ((b->ttype == TYPE_date ||
+b->ttype == TYPE_timestamp ||
+b->ttype == TYPE_daytime) &&
+   fixdateheap(b, ATOMname(b->ttype)) != GDK_SUCCEED) {
+   return GDK_FAIL;
}
}
return GDK_SUCCEED;
diff --git a/sql/server/sql_atom.c b/sql/server/sql_atom.c
--- a/sql/server/sql_atom.c
+++ b/sql/server/sql_atom.c
@@ -1337,67 +1337,7 @@ atom_is_zero(atom *a)
 {
if (a->isnull)
return 0;
-   switch (a->tpe.type->localtype) {
-   case TYPE_bte:
-   return a->data.val.btval == 0;
-   case TYPE_sht:
-   return a->data.val.shval == 0;
-   case TYPE_int:
-   return a->data.val.ival == 0;
-   case TYPE_lng:
-   return a->data.val.lval == 0;
-#ifdef HAVE_HGE
-   case TYPE_hge:
-   return a->data.val.hval == 0;
-#endif
-   case TYPE_flt:
-   return a->data.val.fval == 0;
-   case TYPE_dbl:
-   return a->data.val.dval == 0;
-   default:
-   break;
-   }
-   return 0;
-}
-
-int
-atom_is_true(atom *a)
-{
-   if (a->isnull)
-   return 0;
-   switch (a->tpe.type->localtype) {
-   case TYPE_bit:
-   return a->data.val.btval != 0;
-   case TYPE_bte:
-   return a->data.val.btval != 0;
-   case TYPE_sht:
-   return a->data.val.shval != 0;
-   case TYPE_int:
-   return a->data.val.ival != 0;
-   case TYPE_lng:
-   return a->data.val.lval != 0;
-#ifdef HAVE_HGE
-   case TYPE_hge:
-   return a->data.val.hval != 0;
-#endif
-   case TYPE_flt:
-   return a->data.val.fval != 0;
-   case TYPE_dbl:
-   return a->data.val.dval != 0;
-   default:
-   break;
-   }
-   return 0;
-}
-
-int
-atom_is_false( atom *a )
-{
-   if (a->isnull)
-   return 0;
-   switch(a->tpe.type->localtype) {
-   case TYPE_bit:
-   return a->data.val.btval == 0;
+   switch (ATOMstorage(a->tpe.type->localtype)) {
case TYPE_bte:
return a->data.val.btval == 0;
case TYPE_sht:
@@ -1415,9 +1355,66 @@ atom_is_false( atom *a )
case TYPE_dbl:
return a->data.val.dval == 0;
default:
-   break;
+   return 0;
}
-   return 0;
+}
+
+int
+atom_is_true(atom *a)
+{
+   if (a->isnull)
+   return 0;
+   switch (ATOMstorage(a->tpe.type->localtype)) {
+   case TYPE_bte:
+   return a->data.val.btval != 0;
+   case TYPE_sht:
+   return a->data.val.shval != 0;
+   case TYPE_int:
+   return a->data.val.ival != 0;
+   case TYPE_lng:
+   return a->data.val.lval != 0;
+#ifdef HAVE_HGE
+   case TYPE_hge:
+   return a->data.val.hval != 0;
+#endif
+   case TYPE_flt:
+   return a->data.val.fval != 0;
+   case TYPE_dbl:
+   return a->data.val.dval != 0;
+   case TYPE_str:
+   return strcmp(a->data.val.sval, "") != 0;
+   default:
+   return 0;
+   }
+}
+
+int
+atom_is_false(atom *a)
+{
+   if (a->isnull)
+   return 0;
+   switch 

MonetDB: oscar - Merged with Jun2020

2020-07-09 Thread Pedro Ferreira
Changeset: ea657c85c07d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ea657c85c07d
Modified Files:
sql/server/rel_select.c
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/SQLancer/Tests/sqlancer03.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (88 lines):

diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -2102,9 +2102,17 @@ negate_symbol_tree(mvc *sql, symbol *sc)
case SQL_IS_NOT_NULL:
sc->token = SQL_IS_NULL;
break;
-   case SQL_NOT: /* nested NOTs eliminate each other */
-   memmove(sc, sc->data.sym, sizeof(symbol));
-   break;
+   case SQL_NOT: { /* nested NOTs eliminate each other */
+   if (sc->data.sym->token == SQL_ATOM) {
+   AtomNode *an = (AtomNode*) sc->data.sym;
+   memmove(sc, an, sizeof(AtomNode));
+   } else if (sc->data.sym->token == SQL_SELECT) {
+   SelectNode *sn = (SelectNode*) sc->data.sym;
+   memmove(sc, sn, sizeof(SelectNode));
+   } else {
+   memmove(sc, sc->data.sym, sizeof(symbol));
+   }
+   } break;
case SQL_COMPARE: {
dnode *cmp_n = sc->data.lval->h;
comp_type neg_cmp_type = 
negate_compare(compare_str2type(cmp_n->next->data.sval)); /* negate the 
comparator */
@@ -2117,8 +2125,7 @@ negate_symbol_tree(mvc *sql, symbol *sc)
negate_symbol_tree(sql, sc->data.lval->h->data.sym);
negate_symbol_tree(sql, sc->data.lval->h->next->data.sym);
sc->token = sc->token == SQL_AND ? SQL_OR : SQL_AND;
-   break;
-   }
+   } break;
default:
break;
}
diff --git a/sql/test/SQLancer/Tests/sqlancer03.sql 
b/sql/test/SQLancer/Tests/sqlancer03.sql
--- a/sql/test/SQLancer/Tests/sqlancer03.sql
+++ b/sql/test/SQLancer/Tests/sqlancer03.sql
@@ -125,3 +125,20 @@ NULL   NULL22
 false  true23
 
 DROP TABLE t0;
+
+START TRANSACTION;
+CREATE TABLE "sys"."t0" (
+   "c0" DECIMAL(18,3) NOT NULL DEFAULT 
cast(cast("sys"."sql_sub"("sys"."sql_neg"(1933820187),"sys"."charindex"(cast(0.235784
 as 
clob(182)),"sys"."concat"('rt\\b',1174691962),"sys"."locate"('!oLqvKg恺','!G+tZ9\'A\'LZ*滻mW^',1174691962)))
 as int) as decimal(18,3)),
+   "c1" DECIMAL(18,3),
+   "c2" CHARACTER LARGE OBJECT,
+   CONSTRAINT "t0_c0_pkey" PRIMARY KEY ("c0"),
+   CONSTRAINT "t0_c0_unique" UNIQUE ("c0"),
+   CONSTRAINT "t0_c2_unique" UNIQUE ("c2"),
+   CONSTRAINT "t0_c0_c2_c1_unique" UNIQUE ("c0", "c2", "c1")
+);
+COMMENT ON COLUMN "sys"."t0"."c2" IS 'vi';
+COPY 1 RECORDS INTO "sys"."t0" FROM stdin USING DELIMITERS E'\t',E'\n','"';
+-1933820187.000NULL"-1554387152"
+
+select t0.c0 from t0 where not (true) union all select all t0.c0 from t0 where 
not (not (true)) union all select t0.c0 from t0 where (not (true)) is null;
+ROLLBACK;
diff --git a/sql/test/SQLancer/Tests/sqlancer03.stable.out 
b/sql/test/SQLancer/Tests/sqlancer03.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer03.stable.out
+++ b/sql/test/SQLancer/Tests/sqlancer03.stable.out
@@ -211,6 +211,26 @@ stdout of test 'sqlancer03` in directory
 #false true23
 [ 14   ]
 #DROP TABLE t0;
+#START TRANSACTION;
+#CREATE TABLE "sys"."t0" (
+#  "c0" DECIMAL(18,3) NOT NULL DEFAULT 
cast(cast("sys"."sql_sub"("sys"."sql_neg"(1933820187),"sys"."charindex"(cast(0.235784
 as 
clob(182)),"sys"."concat"('rt\\b',1174691962),"sys"."locate"('!oLqvKg恺','!G+tZ9\'A\'LZ*滻mW^',1174691962)))
 as int) as decimal(18,3)),
+#  "c1" DECIMAL(18,3),
+#  "c2" CHARACTER LARGE OBJECT,
+#  CONSTRAINT "t0_c0_pkey" PRIMARY KEY ("c0"),
+#  CONSTRAINT "t0_c0_unique" UNIQUE ("c0"),
+#  CONSTRAINT "t0_c2_unique" UNIQUE ("c2"),
+#  CONSTRAINT "t0_c0_c2_c1_unique" UNIQUE ("c0", "c2", "c1")
+#COMMENT ON COLUMN "sys"."t0"."c2" IS 'vi';
+#COPY 1 RECORDS INTO "sys"."t0" FROM stdin USING DELIMITERS E'\t',E'\n','"';
+#-1933820187.000   NULL"-1554387152"
+[ 1]
+#select t0.c0 from t0 where not (true) union all select all t0.c0 from t0 
where not (not (true)) union all select t0.c0 from t0 where (not (true)) is 
null;
+% .%12 # table_name
+% c0 # name
+% decimal # type
+% 20 # length
+[ -1933820187.000  ]
+#ROLLBACK;
 
 # 17:14:16 >  
 # 17:14:16 >  "Done."
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: oscar - Merged with Jun2020

2020-07-09 Thread Pedro Ferreira
Changeset: 67f12d1935be for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=67f12d1935be
Modified Files:
monetdb5/optimizer/opt_mergetable.c
sql/backends/monet5/sql_scenario.c
sql/include/sql_catalog.h
sql/server/rel_optimizer.c
testing/mktest.py
testing/sqllogictest.py
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 409 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
@@ -1985,7 +1985,7 @@ OPTmergetableImplementation(Client cntxt
int input = getArg(p, p->retc); /* argument one is 
first input */
 
if (group_input[input]) {
-   TRC_WARNING(MAL_OPTIMIZER, "Mergetable bailout 
on group input reuse in group statement\n");
+   TRC_INFO(MAL_OPTIMIZER, "Mergetable bailout on 
group input reuse in group statement\n");
bailout = 1;
}
 
diff --git a/sql/backends/monet5/sql_scenario.c 
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -1233,6 +1233,9 @@ SQLparser(Client c)
msg = SQLoptimizeQuery(c, c->curprg->def);
 
if (msg != MAL_SUCCEED) {
+   c->curprg->def->errors = 0;
+   MSresetInstructions(c->curprg->def, 
oldstop);
+   freeVariables(c, c->curprg->def, NULL, 
oldvtop);
sqlcleanup(m, err);
goto finalize;
}
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -305,9 +305,9 @@ typedef enum sql_class {
 #define EC_COMPUTE(e)  (e==EC_NUM||e==EC_FLT)
 #define EC_BOOLEAN(e)  (e==EC_BIT||e==EC_NUM||e==EC_FLT)
 #define EC_TEMP_TZ(e)  (e==EC_TIME_TZ||e==EC_TIMESTAMP_TZ)
-#define EC_TEMP(e) 
(e==EC_TIME||e==EC_DATE||e==EC_TIMESTAMP||EC_TEMP_TZ(e))
+#define EC_TEMP(e) 
(e==EC_TIME||e==EC_DATE||e==EC_TIMESTAMP||EC_TEMP_TZ(e))
 #define EC_TEMP_FRAC(e)
(e==EC_TIME||e==EC_TIMESTAMP||EC_TEMP_TZ(e))
-#define EC_FIXED(e)
(e==EC_BIT||e==EC_CHAR||e==EC_POS||e==EC_NUM||EC_INTERVAL(e)||e==EC_DEC||EC_TEMP(e))
+#define EC_BACKEND_FIXED(e)(EC_NUMBER(e)||e==EC_BIT||EC_TEMP(e))
 
 typedef struct sql_type {
sql_base base;
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
@@ -4648,6 +4648,42 @@ rel_push_select_down_join(visitor *v, sq
return rel;
 }
 
+static bool
+find_simple_projection_for_join2semi(sql_rel *rel)
+{
+   if (is_project(rel->op) && list_length(rel->exps) == 1) {
+   sql_exp *e = rel->exps->h->data;
+
+   if (rel->card < CARD_AGGR) /* const or groupby without group by 
exps */
+   return true;
+   /* a single group by column in the projection list from a group 
by relation is guaranteed to be unique, but not an aggregate */
+   if (e->type == e_column) {
+   sql_rel *res = NULL;
+   sql_exp *found = NULL;
+
+   if (is_groupby(rel->op) || need_distinct(rel) || 
find_prop(e->p, PROP_HASHCOL))
+   return true;
+
+   found = rel_find_exp_and_corresponding_rel(rel->l, e, 
); /* grouping column on inner relation */
+   if (found) {
+   if (find_prop(found->p, PROP_HASHCOL)) /* 
primary key always unique */
+   return true;
+   if (found->type == e_column && found->card <= 
CARD_AGGR) {
+   if (!(is_groupby(res->op) || 
need_distinct(res)) && list_length(res->exps) != 1)
+   return false;
+   for (node *n = res->exps->h ; n ; n = 
n->next) { /* must be the single column in the group by expression list */
+   sql_exp *e = n->data;
+   if (e != found && e->type == 
e_column)
+   return false;
+   }
+   return true;
+   }
+   }
+   }
+   }
+   return false;
+}
+
 /*
  * Push {semi}joins down, pushes the joins through group by expressions.
  * When the join is 

MonetDB: oscar - Merged with Jun2020

2020-07-08 Thread Pedro Ferreira
Changeset: 2f417e9487c5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2f417e9487c5
Modified Files:
gdk/gdk_analytic_bounds.c
sql/backends/monet5/sql_cast.c
sql/backends/monet5/sql_optimizer.c
sql/backends/monet5/sql_time.c
sql/server/rel_optimizer.c
sql/server/rel_rewriter.c
sql/server/rel_rewriter.h
sql/server/rel_unnest.c
sql/storage/bat/bat_storage.c
sql/storage/bat/bat_storage.h
sql/storage/store.c
sql/test/BugTracker-2013/Tests/timestamp.Bug-3401.stable.err
sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err

sql/test/BugTracker-2016/Tests/convert-function-test.Bug-3460.stable.err.int128

sql/test/BugTracker/Tests/inserting_invalid_timestamp.SF-1363557.stable.err
sql/test/miscellaneous/Tests/select_groupby.stable.err
sql/test/pg_regress/Tests/date.stable.err
sql/test/pg_regress/Tests/time.stable.err
sql/test/pg_regress/Tests/timestamp.stable.err
sql/test/pg_regress/Tests/timestamptz.stable.err
sql/test/pg_regress/Tests/timetz.stable.err
sql/test/sys-schema/Tests/systemfunctions.stable.out
sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
sql/test/wlcr/Tests/wlr110.stable.err
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 1861 to 300 lines):

diff --git a/gdk/gdk_analytic_bounds.c b/gdk/gdk_analytic_bounds.c
--- a/gdk/gdk_analytic_bounds.c
+++ b/gdk/gdk_analytic_bounds.c
@@ -548,10 +548,7 @@
 
 #define ANALYTICAL_WINDOW_BOUNDS_BRANCHES_GROUPS(IMP, LIMIT, TPE)  \
do {\
-   switch (tp1) {  \
-   case TYPE_bit:  \
-   ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bit, 
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
-   break;  \
+   switch (ATOMbasetype(tp1)) {\
case TYPE_bte:  \
ANALYTICAL_WINDOW_BOUNDS_CALC_FIXED(bte, 
ANALYTICAL_WINDOW_BOUNDS_FIXED_GROUPS##IMP, LIMIT, TPE); \
break;  \
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -30,7 +30,6 @@ SQLgetColumnSize(sql_trans *tr, sql_colu
 {
lng size = 0;
BAT *b;
-   store_lock();
switch(access){
case 0:
b= store_funcs.bind_col(tr, c, RDONLY);
@@ -58,7 +57,6 @@ SQLgetColumnSize(sql_trans *tr, sql_colu
BBPunfix(b->batCacheid);
}
}
-   store_unlock();
return size;
 }
 
diff --git a/sql/backends/monet5/sql_time.c b/sql/backends/monet5/sql_time.c
--- a/sql/backends/monet5/sql_time.c
+++ b/sql/backends/monet5/sql_time.c
@@ -222,13 +222,12 @@ lng shift, lng divider, lng multiplier
 )
 {
ssize_t pos = 0;
-   daytime *conv = NULL;
+   daytime dt = 0, *conv = 
 
pos = fromstr_func(next, &(size_t){sizeof(daytime)}, , false);
if (pos < (ssize_t) strlen(next) || /* includes pos < 0 */ 
ATOMcmp(TYPE_daytime, conv, ATOMnilptr(TYPE_daytime)) == 0)
-   return createException(SQL, "batcalc.str_2time_daytimetz", 
SQLSTATE(22007) "Daytime (%s) has incorrect format", next);
-   else
-   *ret = daytime_2time_daytime_imp(*conv, shift, divider, 
multiplier);
+   return createException(SQL, "batcalc.str_2time_daytimetz", 
SQLSTATE(22007) "Daytime '%s' has incorrect format", next);
+   *ret = daytime_2time_daytime_imp(*conv, shift, divider, multiplier);
return MAL_SUCCEED;
 }
 
@@ -608,13 +607,12 @@ lng shift, lng divider, lng multiplier
 )
 {
ssize_t pos = 0;
-   timestamp *conv = NULL;
+   timestamp tp = 0, *conv = 
 
pos = fromstr_func(next, &(size_t){sizeof(timestamp)}, , false);
if (!pos || pos < (ssize_t) strlen(next) || ATOMcmp(TYPE_timestamp, 
conv, ATOMnilptr(TYPE_timestamp)) == 0)
-   return createException(SQL, 
"batcalc.str_2time_timestamptz_internal", SQLSTATE(22007) "Timestamp (%s) has 
incorrect format", next);
-   else
-   *ret = timestamp_2time_timestamp_imp(*conv, shift, divider, 
multiplier);
+   return createException(SQL, 
"batcalc.str_2time_timestamptz_internal", SQLSTATE(22007) "Timestamp '%s' has 
incorrect format", next);
+   *ret = timestamp_2time_timestamp_imp(*conv, shift, divider, multiplier);
return MAL_SUCCEED;
 }
 
@@ -1257,21 +1255,19 @@ nil_2_date(Client cntxt, MalBlkPtr mb, M
 }
 
 static inline str
-str_2_date_internal_imp(date *res, str next, bit ce, bit *hasnil)

MonetDB: oscar - Merged with Jun2020

2020-07-07 Thread Pedro Ferreira
Changeset: 3230620bae43 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3230620bae43
Modified Files:
sql/server/rel_optimizer.c
sql/test/SQLancer/Tests/sqlancer03.sql
sql/test/SQLancer/Tests/sqlancer03.stable.out
sql/test/mergetables/Tests/sqlsmith-exists2.sql
sql/test/mergetables/Tests/sqlsmith-exists2.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out.single
sql/test/xquery/Tests/q01.stable.out
Branch: oscar
Log Message:

Merged with Jun2020


diffs (truncated from 353 to 300 lines):

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
@@ -1449,6 +1449,9 @@ exp_push_single_func_down(visitor *v, sq
}
} break;
case e_convert:
+   if ((e->l = exp_push_single_func_down(v, rel, l, r, e->l)) == 
NULL)
+   return NULL;
+   break;
case e_aggr:
case e_func: {
int must = 0, mustl = 0, mustr = 0;
@@ -3753,6 +3756,7 @@ rel_project_cse(visitor *v, sql_rel *rel
sql_exp *ne = 
exp_alias(v->sql->sa, exp_relname(e1), exp_name(e1), exp_relname(e2), 
exp_name(e2), exp_subtype(e2), e2->card, has_nil(e2), is_intern(e1));
 
ne = exp_propagate(v->sql->sa, 
ne, e1);
+   exp_setname(v->sql->sa, ne, 
exp_relname(e1), exp_name(e1));
e1 = ne;
break;
}
diff --git a/sql/test/SQLancer/Tests/sqlancer03.sql 
b/sql/test/SQLancer/Tests/sqlancer03.sql
--- a/sql/test/SQLancer/Tests/sqlancer03.sql
+++ b/sql/test/SQLancer/Tests/sqlancer03.sql
@@ -66,20 +66,20 @@ select "insert"('屁{珙', 1, 1, '1'), "insert"('屁{珙', 1, 1, 
'抔'), "insert"('屁抔珙', 1, 1, 'ಜ'), "insert"('a', 0, 1, 'ಜ'), "insert"('a', 0, 0, 
'ಜ');
 select "insert"('屁{珙', 1, 1, '1'), "insert"('屁{珙', 1, 1, '抔'), "insert"('屁抔珙', 
1, 1, 'ಜ') from t0;
 ROLLBACK;
 
-CREATE TABLE t0(c0 boolean, c1 boolean, c2 serial, UNIQUE(c0, c1)); -- Bug 6920
-INSERT INTO t0(c1) VALUES((0.5968066098520423) NOT  BETWEEN SYMMETRIC 
(CAST(length(upper(r'z')) AS INT)) AND (1347145665)), (FALSE);
+CREATE TABLE t0(c0 boolean, c1 boolean, c2 int, UNIQUE(c0, c1)); -- Bug 6920
+INSERT INTO t0(c1) VALUES((0.5) NOT  BETWEEN SYMMETRIC 
(CAST(length(upper(r'z')) AS INT)) AND (2)), (FALSE);
 INSERT INTO t0(c0) VALUES(TRUE);
 INSERT INTO t0(c1) VALUES(FALSE), (TRUE);
-INSERT INTO t0(c2, c0, c1) VALUES(1347145665, (ltrim(lower(r'K'), 
((upper(r'296348087'))||(- (1582370739) IS NOT NULL, (((lower(r'ö
-eg#K,纗HSJw!{cOw⇒l/l!B*H'))||(((CAST(0.12411368110083143 AS 
INT))+(-1795901173) IN (lower(CAST(TRUE AS STRING, (-1795901173, NULL, 
(0.9575114678279173) NOT IN (2.96348087E8, 0.501053365665)), (1922411524, 
TRUE, (0.5020325273627405) NOT IN (-1388966352, 1163825182));
+INSERT INTO t0(c2, c0, c1) VALUES(2, (ltrim(lower(r'K'), ((upper(r'4'))||(- 
(7) IS NOT NULL, (((lower(r'ö
+eg#K,纗HSJw!{cOw⇒l/l!B*H'))||(((CAST(0.1 AS INT))+(-5) IN (lower(CAST(TRUE 
AS STRING, (-9, NULL, (0.3) NOT IN (2.96348087E8, 0.3)), (4, TRUE, (0.5) 
NOT IN (-3, 4));
 INSERT INTO t0(c1) VALUES(TRUE);
 INSERT INTO t0(c1, c2) VALUES(FALSE, 623585248);
-INSERT INTO t0(c0) VALUES(NOT (NOT -1388966352)*(-984145454))) NOT IN 
(0.7356286, (FALSE);
+INSERT INTO t0(c0) VALUES(NOT (NOT -1)*(-9))) NOT IN (0.7, (FALSE);
 INSERT INTO t0(c0) VALUES(TRUE);
-INSERT INTO t0(c2) VALUES(-1235619315);
+INSERT INTO t0(c2) VALUES(-1);
 DELETE FROM t0 WHERE (t0.c0) = FALSE;
-INSERT INTO t0(c1, c0, c2) VALUES(TRUE, ((+ (- 
(1580722914)))>(charindex(CAST(0.347536126443453330381316845887340605258941650390625
 AS STRING), ((CAST(TRUE AS 
STRING(771)))||(0.2182260714120349831546263885684311389923095703125)), 
length(r'd', -1819817735);
-UPDATE t0 SET c2 = DEFAULT WHERE t0.c1)OR(CAST(t0.c2 AS 
BOOLEANOR((CAST(0.6873694879073857 AS DECIMAL)) NOT IN 
(0.10021624439224552371996423971722833812236785888671875)));
+INSERT INTO t0(c1, c0, c2) VALUES(TRUE, ((+ (- (1)))>(charindex(CAST(0.3 AS 
STRING), ((CAST(TRUE AS STRING(771)))||(0.2)), length(r'd', -1);
+UPDATE t0 SET c2 = 1 WHERE t0.c1)OR(CAST(t0.c2 AS BOOLEANOR((CAST(0.6 
AS DECIMAL)) NOT IN (0.1)));
 SELECT t0.c0 FROM t0 WHERE ((CAST(t0.c2 AS INT)) NOT  BETWEEN ASYMMETRIC 
(abs(t0.c2)) AND (((t0.c2)/(t0.c2 NOT  BETWEEN ASYMMETRIC (t0.c0) AND 
((t0.c2) NOT IN (t0.c2));
 SELECT t0.c0 FROM t0 WHERE (t0.c2) BETWEEN (t0.c0) AND ((t0.c2) NOT IN 
(t0.c2));
 DROP TABLE t0;
diff --git a/sql/test/SQLancer/Tests/sqlancer03.stable.out 
b/sql/test/SQLancer/Tests/sqlancer03.stable.out
--- a/sql/test/SQLancer/Tests/sqlancer03.stable.out
+++