Changeset: aa2c47f1d56e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/aa2c47f1d56e Modified Files: sql/backends/monet5/sql_statistics.c Branch: Jul2021 Log Message:
Filter deleted rows while analyzing
diffs (98 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
@@ -189,11 +189,19 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
if (tbl && strcmp(b->name, tbl))
continue;
- if (isTable(t) && ol_first_node(t->columns))
+ if (isTable(t) && ol_first_node(t->columns)) {
+ BAT *cands;
+
+ if ((cands = store->storage_api.bind_cands(tr,
t, 1, 0)) == NULL) {
+ GDKfree(maxval);
+ GDKfree(minval);
+ throw(SQL, "analyze", SQLSTATE(HY002)
RUNTIME_OBJECT_MISSING);
+ }
+
for (ncol = ol_first_node((t)->columns); ncol;
ncol = ncol->next) {
sql_base *bc = ncol->data;
sql_column *c = (sql_column *)
ncol->data;
- BAT *bn, *br;
+ BAT *bn, *nbn, *br;
BAT *bsample;
lng sz;
ssize_t (*tostr)(str*,size_t*,const
void*,bool);
@@ -212,6 +220,13 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
/* XXX throw error instead? */
continue;
}
+ nbn = BATproject(cands, bn);
+ BBPunfix(bn->batCacheid);
+ if (!nbn) {
+ /* XXX throw error instead? */
+ continue;
+ }
+ bn = nbn;
sz = BATcount(bn);
tostr = BATatoms[bn->ttype].atomToStr;
@@ -265,6 +280,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
if (maxval == NULL) {
GDKfree(minval);
BBPunfix(bn->batCacheid);
+
BBPunfix(cands->batCacheid);
throw(SQL, "analyze",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
maxlen = 4;
@@ -275,6 +291,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
if (minval == NULL){
GDKfree(maxval);
BBPunfix(bn->batCacheid);
+
BBPunfix(cands->batCacheid);
throw(SQL, "analyze",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
minlen = 4;
@@ -288,6 +305,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
GDKfree(minval);
GDKfree(maxval);
BBPunfix(bn->batCacheid);
+
BBPunfix(cands->batCacheid);
throw(SQL,
"analyze", GDK_EXCEPTION);
}
GDKfree(val);
@@ -300,6 +318,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
GDKfree(minval);
GDKfree(maxval);
BBPunfix(bn->batCacheid);
+
BBPunfix(cands->batCacheid);
throw(SQL,
"analyze", GDK_EXCEPTION);
}
GDKfree(val);
@@ -313,21 +332,26 @@ sql_analyze(Client cntxt, MalBlkPtr mb,
if (!is_oid_nil(rid) && (log_res =
store->table_api.table_delete(tr, sysstats, rid)) != LOG_OK) {
GDKfree(maxval);
GDKfree(minval);
+ BBPunfix(cands->batCacheid);
throw(SQL, "analyze",
SQLSTATE(42000) "ANALYZE: failed%s", log_res == LOG_CONFLICT ? " due to
conflict with another transaction" : "");
}
if ((log_res =
store->table_api.table_insert(tr, sysstats, &c->base.id,
&c->type.type->base.name, &width, &ts, samplesize ? &samplesize : &sz, &sz,
&uniq, &nils, &minval, &maxval, &sorted, &revsorted)) != LOG_OK) {
GDKfree(maxval);
GDKfree(minval);
+ BBPunfix(cands->batCacheid);
throw(SQL, "analyze",
SQLSTATE(42000) "ANALYZE: failed%s", log_res == LOG_CONFLICT ? " due to
conflict with another transaction" : "");
}
if (!isNew(c) && (log_res =
sql_trans_add_dependency(tr, c->base.id, ddl)) != LOG_OK) {
GDKfree(maxval);
GDKfree(minval);
+ BBPunfix(cands->batCacheid);
throw(SQL, "analyze",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
}
}
+ BBPunfix(cands->batCacheid);
}
}
+ }
GDKfree(maxval);
GDKfree(minval);
return MAL_SUCCEED;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list
