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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list