Changeset: 9839b16b267a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9839b16b267a Modified Files: sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_statistics.c sql/backends/monet5/sql_statistics.h Branch: Apr2019 Log Message:
Don't go through SQL to delete rows. diffs (94 lines): diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c --- a/sql/backends/monet5/sql_cat.c +++ b/sql/backends/monet5/sql_cat.c @@ -391,7 +391,7 @@ alter_table_del_table(mvc *sql, char *ms } static char * -alter_table_set_access(Client cntxt, mvc *sql, char *sname, char *tname, int access) +alter_table_set_access(mvc *sql, char *sname, char *tname, int access) { sql_schema *s = mvc_bind_schema(sql, sname); sql_table *t = NULL; @@ -407,7 +407,7 @@ alter_table_set_access(Client cntxt, mvc mvc_access(sql, t, access); if (access == 0) - sql_drop_statistics(cntxt, t); + sql_drop_statistics(sql, t); } } else { throw(SQL,"sql.alter_table_set_access",SQLSTATE(42S02) "ALTER TABLE: no such table '%s' in schema '%s'", tname, sname); @@ -1511,7 +1511,7 @@ SQLalter_set_table(Client cntxt, MalBlkP int access = *getArgReference_int(stk, pci, 3); initcontext(); - msg = alter_table_set_access(cntxt, sql, sname, tname, access); + msg = alter_table_set_access(sql, sname, tname, access); return msg; } 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 @@ -22,27 +22,37 @@ analysis by optimizers. #include "sql_execute.h" str -sql_drop_statistics(Client cntxt, sql_table *t) +sql_drop_statistics(mvc *m, sql_table *t) { node *ncol; - char *dquery, *msg = NULL; + sql_trans *tr; + sql_schema *sys; + sql_table *sysstats; + sql_column *statsid; + oid rid; - dquery = (char *) GDKzalloc(96); - if (dquery == NULL) { - throw(SQL, "analyze", SQLSTATE(HY001) MAL_MALLOC_FAIL); - } + tr = m->session->tr; + sys = mvc_bind_schema(m, "sys"); + if (sys == NULL) + throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "Internal error"); + sysstats = mvc_bind_table(m, sys, "statistics"); + if (sysstats == NULL) + throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "No table sys.statistics"); + statsid = mvc_bind_column(m, sysstats, "column_id"); + if (statsid == NULL) + throw(SQL, "sql_drop_statistics", SQLSTATE(3F000) "No table sys.statistics"); + if (isTable(t) && t->columns.set) { for (ncol = (t)->columns.set->h; ncol; ncol = ncol->next) { sql_column *c = ncol->data; - snprintf(dquery, 96, "delete from sys.statistics where \"column_id\" = %d;", c->base.id); - msg = SQLstatementIntern(cntxt, &dquery, "SQLanalyze", TRUE, FALSE, NULL); - if (msg) - break; + rid = table_funcs.column_find_row(tr, statsid, &c->base.id, NULL); + if (!is_oid_nil(rid) && + table_funcs.table_delete(tr, sysstats, rid) != LOG_OK) + throw(SQL, "analyze", "delete failed"); } } - GDKfree(dquery); - return msg; + return MAL_SUCCEED; } str diff --git a/sql/backends/monet5/sql_statistics.h b/sql/backends/monet5/sql_statistics.h --- a/sql/backends/monet5/sql_statistics.h +++ b/sql/backends/monet5/sql_statistics.h @@ -25,6 +25,6 @@ #endif sql5_export str sql_analyze(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); -sql5_export str sql_drop_statistics(Client cntxt, sql_table *t); +sql5_export str sql_drop_statistics(mvc *m, sql_table *t); #endif /* _SQL_STATISTICS_DEF */ _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list