Changeset: 762809db0879 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=762809db0879
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql_optimizer.c
        sql/backends/monet5/sql_optimizer.h
Branch: Mar2018
Log Message:

Proper way to calculate the number of rows in a table in a middle of a 
transaction


diffs (38 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4619,7 +4619,10 @@ check_for_foreign_key_references(mvc *sq
                                                if (k->t != t && !cascade) {
                                                        node *n = 
t->columns.set->h;
                                                        sql_column *c = n->data;
-                                                       
if(SQLgetColumnSize(sql->session->tr, c, 2) > 0) {
+                                                       size_t n_rows = 
store_funcs.count_col(sql->session->tr, c, 1);
+                                                       size_t n_deletes = 
store_funcs.count_del(sql->session->tr, c->t);
+                                                       assert (n_rows >= 
n_deletes);
+                                                       if(n_rows - n_deletes > 
0) {
                                                                *error = 
sql_error(sql, 02, SQLSTATE(42000) "TRUNCATE: FOREIGN KEY %s.%s depends on %s", 
k->t->base.name, k->base.name, t->base.name);
                                                                return;
                                                        }
diff --git a/sql/backends/monet5/sql_optimizer.c 
b/sql/backends/monet5/sql_optimizer.c
--- a/sql/backends/monet5/sql_optimizer.c
+++ b/sql/backends/monet5/sql_optimizer.c
@@ -25,7 +25,7 @@
 /* calculate the footprint for optimizer pipe line choices
  * and identify empty columns upfront for just in time optimizers.
  */
-lng
+static lng
 SQLgetColumnSize(sql_trans *tr, sql_column *c, int access)
 {
        lng size = 0;
diff --git a/sql/backends/monet5/sql_optimizer.h 
b/sql/backends/monet5/sql_optimizer.h
--- a/sql/backends/monet5/sql_optimizer.h
+++ b/sql/backends/monet5/sql_optimizer.h
@@ -11,7 +11,6 @@
 #include "sql.h"
 
 //#define _SQL_OPTIMIZER_DEBUG
-sql5_export lng SQLgetColumnSize(sql_trans *tr, sql_column *c, int access);
 sql5_export str SQLoptimizeQuery(Client c, MalBlkPtr mb);
 sql5_export str SQLoptimizeFunction(Client c, MalBlkPtr mb);
 sql5_export void SQLaddQueryToCache(Client c);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to