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

Reply via email to