Changeset: e3536473d5fc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e3536473d5fc
Modified Files:
monetdb5/mal/mal_profiler.c
sql/backends/monet5/wlr.c
Branch: default
Log Message:
Merged with Jul2021
diffs (258 lines):
diff --git a/gdk/gdk_project.c b/gdk/gdk_project.c
--- a/gdk/gdk_project.c
+++ b/gdk/gdk_project.c
@@ -371,7 +371,7 @@ project_any(BAT *restrict bn, BAT *restr
}
static BAT *
-project_str(BAT *restrict l, struct canditer *restrict ci,
+project_str(BAT *restrict l, struct canditer *restrict ci, int tpe,
BAT *restrict r1, BAT *restrict r2,
BATiter *restrict r1i, BATiter *restrict r2i,
lng t0)
@@ -386,7 +386,7 @@ project_str(BAT *restrict l, struct cand
var_t v;
BATiter *ri;
- if ((bn = COLnew(l->hseqbase, TYPE_str, ci ? ci->ncand : BATcount(l),
+ if ((bn = COLnew(l->hseqbase, tpe, ci ? ci->ncand : BATcount(l),
TRANSIENT)) == NULL)
return NULL;
@@ -591,7 +591,7 @@ BATproject2(BAT *restrict l, BAT *restri
BAT *or1 = r1, *or2 = r2, *ol = l;
oid lo, hi;
gdk_return res;
- int tpe = ATOMtype(r1->ttype);
+ int tpe = ATOMtype(r1->ttype), otpe = tpe;
bool stringtrick = false;
BUN lcount = BATcount(l);
struct canditer ci, *lci = NULL;
@@ -690,7 +690,7 @@ BATproject2(BAT *restrict l, BAT *restri
* vheap; this also means that for this case we
* don't care about duplicate elimination: it
* will remain the same */
- bn = project_str(l, lci, r1, r2, &r1i, &r2i, t0);
+ bn = project_str(l, lci, tpe, r1, r2, &r1i, &r2i, t0);
bat_iterator_end(&r1i);
bat_iterator_end(&r2i);
return bn;
@@ -787,7 +787,7 @@ BATproject2(BAT *restrict l, BAT *restri
} else {
/* make copy of string heap */
bn->tvheap->parentid = bn->batCacheid;
- bn->tvheap->farmid = BBPselectfarm(bn->batRole,
TYPE_str, varheap);
+ bn->tvheap->farmid = BBPselectfarm(bn->batRole, otpe,
varheap);
strconcat_len(bn->tvheap->filename,
sizeof(bn->tvheap->filename),
BBP_physical(bn->batCacheid), ".theap",
@@ -965,14 +965,14 @@ BATprojectchain(BAT **bats)
bi = bat_iterator(b);
if (nonil && ATOMstorage(tpe) == TYPE_str && b->batRestricted ==
BAT_READ) {
stringtrick = true;
- tpe = bi.width == 1 ? TYPE_bte : (bi.width == 2 ? TYPE_sht :
(bi.width == 4 ? TYPE_int : TYPE_lng));
- bn = COLnew_intern(ba[0].hlo, TYPE_str, ba[0].cnt, TRANSIENT,
bi.width);
+ bn = COLnew_intern(ba[0].hlo, tpe, ba[0].cnt, TRANSIENT,
bi.width);
if (bn && bn->tvheap) {
/* no need to remove any files since they were
* never created for this bat */
HEAPdecref(bn->tvheap, false);
bn->tvheap = NULL;
}
+ tpe = bi.width == 1 ? TYPE_bte : (bi.width == 2 ? TYPE_sht :
(bi.width == 4 ? TYPE_int : TYPE_lng));
} else {
bn = COLnew(ba[0].hlo, tpe, ba[0].cnt, TRANSIENT);
}
diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -884,6 +884,7 @@ sqlProfilerEvent(Client cntxt, MalBlkPtr
MT_lock_set(&mal_profileLock);
if (cntxt->profticks == NULL) {
MT_lock_unset(&mal_profileLock);
+ GDKfree(stmt);
return;
}
errors += BUNappend(cntxt->profticks, &pci->ticks, false) !=
GDK_SUCCEED;
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
@@ -1153,7 +1153,10 @@ bailout:
} \
} else { \
TPE_IN next = *(TPE_IN*)getArgReference(stk, pci, 1); \
- FUNC(*ret, TPE_IN, FUNC_NAME, MAX_VALUE,
CAST_VALIDATION, MUL_VALIDATION); \
+ if (is_##TPE_IN##_nil(next)) \
+ *ret = TPE_OUT##_nil; \
+ else \
+ FUNC(*ret, TPE_IN, FUNC_NAME, MAX_VALUE,
CAST_VALIDATION, MUL_VALIDATION); \
} \
} while(0)
diff --git a/sql/backends/monet5/wlr.c b/sql/backends/monet5/wlr.c
--- a/sql/backends/monet5/wlr.c
+++ b/sql/backends/monet5/wlr.c
@@ -319,7 +319,9 @@ WLRprocessBatch(Client cntxt)
}
q= getInstrPtr(mb, mb->stop - 1);
if( getModuleId(q) != wlrRef){
- msg =createException(MAL,"wlr.process", "batch
%d:improper wlr instruction: %s\n", i, instruction2str(mb,0, q, LIST_MAL_CALL));
+ char *s = instruction2str(mb,0, q,
LIST_MAL_CALL);
+ msg = createException(MAL,"wlr.process", "batch
%d:improper wlr instruction: %s\n", i, s);
+ GDKfree(s);
cleanup();
break;
}
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
@@ -1558,19 +1558,23 @@ rel_filter(mvc *sql, sql_rel *rel, list
if (exps_one_is_rel(l) || exps_one_is_rel(r)) /* uncorrelated subquery
case */
return rel_select(sql->sa, rel, e);
/* atom or row => select */
- if (exps_card(l) > rel->card) {
- sql_exp *ls = l->h->data;
- if (exp_name(ls))
- return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column '%s' in query results without an
aggregate function", exp_name(ls));
- else
+ for (node *n=l->h; n; n = n->next) {
+ sql_exp *ls = n->data;
+
+ if (ls->card > rel->card) {
+ if (exp_name(ls))
+ return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s' in query results
without an aggregate function", exp_name(ls));
return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column in query results without an aggregate
function");
- }
- if (exps_card(r) > rel->card) {
- sql_exp *rs = l->h->data;
- if (exp_name(rs))
- return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column '%s' in query results without an
aggregate function", exp_name(rs));
- else
+ }
+ }
+ for (node *n=r->h; n; n = n->next) {
+ sql_exp *rs = n->data;
+
+ if (rs->card > rel->card) {
+ if (exp_name(rs))
+ return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s' in query results
without an aggregate function", exp_name(rs));
return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column in query results without an aggregate
function");
+ }
}
if (!is_join(rel->op) && !is_select(rel->op))
return rel_select(sql->sa, rel, e);
@@ -1665,17 +1669,11 @@ rel_compare_exp_(sql_query *query, sql_r
return rel_select(sql->sa, rel_project_exp(sql->sa,
exp_atom_bool(sql->sa, 1)), e);
/* atom or row => select */
- if (ls->card > rel->card) {
- if (exp_name(ls))
- return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column '%s' in query results without an
aggregate function", exp_name(ls));
- else
- return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column in query results without an aggregate
function");
- }
- if (rs->card > rel->card || (rs2 && rs2->card > rel->card)) {
- if (exp_name(rs))
- return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column '%s' in query results without an
aggregate function", exp_name(rs));
- else
- return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column in query results without an aggregate
function");
+ if (ls->card > rel->card || rs->card > rel->card || (rs2 && rs2->card >
rel->card)) {
+ sql_exp *e = ls->card > rel->card ? ls : rs->card > rel->card ?
rs : rs2;
+ if (exp_name(e))
+ return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000)
"SELECT: cannot use non GROUP BY column '%s' in query results without an
aggregate function", exp_name(e));
+ return sql_error(sql, ERR_GROUPBY, SQLSTATE(42000) "SELECT:
cannot use non GROUP BY column in query results without an aggregate function");
}
return rel_select_push_exp_down(sql, rel, e, ls, rs, rs2, f);
}
@@ -3571,8 +3569,7 @@ static sql_exp *
sql_exp *lu = query_outer_last_used(query,
all_freevar-1);
if (lu->type == e_column)
return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: subquery uses ungrouped column \"%s.%s\" from outer
query", (char*)lu->l, (char*)lu->r);
- else
- return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: subquery uses ungrouped column \"%s.%s\" from outer
query", exp_relname(lu), exp_name(lu));
+ return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: subquery uses ungrouped column \"%s.%s\" from outer
query", exp_relname(lu), exp_name(lu));
}
if (is_outer(groupby))
return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: subquery uses ungrouped column from outer query");
@@ -4433,8 +4430,7 @@ rel_order_by_column_exp(sql_query *query
if (ee->card > r->card) {
if (exp_name(ee))
return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s' in
query results without an aggregate function", exp_name(ee));
- else
- return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query
results without an aggregate function");
+ return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query results
without an aggregate function");
}
}
}
@@ -4518,8 +4514,7 @@ rel_order_by(sql_query *query, sql_rel *
} else if (e && exp_card(e) > rel->card) {
if (exp_name(e))
return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s' in
query results without an aggregate function", exp_name(e));
- else
- return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query
results without an aggregate function");
+ return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query results
without an aggregate function");
}
if (e && !exp_name(e))
exp_label(sql->sa, e, ++sql->label);
@@ -5407,8 +5402,7 @@ rel_table_exp(sql_query *query, sql_rel
if (e->card > groupby->card) {
if (exp_name(e))
return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s' in
query results without an aggregate function", exp_name(e));
- else
- return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query
results without an aggregate function");
+ return sql_error(sql,
ERR_GROUPBY, SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query
results without an aggregate function");
}
}
}
@@ -5686,11 +5680,9 @@ rel_select_exp(sql_query *query, sql_rel
for (node *n=pexps->h; n; n = n->next) {
sql_exp *ce = n->data;
if (rel->card < ce->card) {
- if (exp_name(ce) && !has_label(ce)) {
+ if (exp_name(ce) && !has_label(ce))
return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: cannot use non GROUP BY column '%s' in query results
without an aggregate function", exp_name(ce));
- } else {
- return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query results
without an aggregate function");
- }
+ return sql_error(sql, ERR_GROUPBY,
SQLSTATE(42000) "SELECT: cannot use non GROUP BY column in query results
without an aggregate function");
}
}
set_processed(rel);
diff --git a/sql/test/SQLancer/Tests/sqlancer18.test
b/sql/test/SQLancer/Tests/sqlancer18.test
--- a/sql/test/SQLancer/Tests/sqlancer18.test
+++ b/sql/test/SQLancer/Tests/sqlancer18.test
@@ -262,3 +262,24 @@ 135 values hashing to 39898748a4604c294a
statement ok
ROLLBACK
+statement ok
+CREATE TABLE t1(c1 BLOB)
+
+statement ok
+ALTER TABLE t1 ADD CONSTRAINT con2 PRIMARY KEY(c1)
+
+statement ok rowcount 4
+INSERT INTO t1(c1) VALUES(BLOB 'D8d4F0'), (BLOB 'B135'), (BLOB 'C0'), (BLOB '')
+
+statement ok rowcount 4
+UPDATE t1 SET c1 = t1.c1
+
+statement ok
+ALTER TABLE t1 DROP CONSTRAINT con2
+
+statement ok rowcount 4
+UPDATE t1 SET c1 = t1.c1
+
+statement ok
+DROP TABLE t1
+
diff --git a/sql/test/miscellaneous/Tests/simple_selects.test
b/sql/test/miscellaneous/Tests/simple_selects.test
--- a/sql/test/miscellaneous/Tests/simple_selects.test
+++ b/sql/test/miscellaneous/Tests/simple_selects.test
@@ -871,3 +871,6 @@ BEGIN
RETURN 1;
END WHILE;
END
+
+statement error 42000!Null step size not allowed
+select * from generate_series(timestamp '2010-01-01', timestamp '2010-01-01',
null)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list