Changeset: 6de0a2989c79 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6de0a2989c79
Added Files:
        sql/test/SQLite_regress/sqllogictest/Tests/test1.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test1.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test1.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test1.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test2.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test2.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test2.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test2.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test3.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test3.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test3.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test3.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test4.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test4.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test4.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test4.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/test5.SQL.bat
        sql/test/SQLite_regress/sqllogictest/Tests/test5.SQL.sh
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.err-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/test5.stable.out-noapprove
        sql/test/SQLite_regress/sqllogictest/Tests/test5.timeout
        sql/test/SQLite_regress/sqllogictest/sqllogictest.py
Removed Files:
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select1.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select1.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select2.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select2.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select3.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select3.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.stable.out
        
sql/test/SQLite_regress/sqllogictest/Tests/select4.test.stable.out.int128
        sql/test/SQLite_regress/sqllogictest/Tests/select4.test.timeout
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.sql
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.stable.err
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/select5.test.timeout
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/wlr.c
        sql/server/rel_optimizer.c
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-algebra-join-not-in.Bug-6519.sql
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-algebra-join-not-in.Bug-6519.stable.out
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-not-in.Bug-6605.sql
        
sql/test/BugTracker-2018/Tests/sqlitelogictest-cast-null-not-in.Bug-6605.stable.out
        sql/test/SQLite_regress/sqllogictest/Tests/All
        sql/test/subquery/Tests/subquery2.sql
        sql/test/wlcr/Tests/wlc01.py
        testing/Mtest.py.bat
        testing/process.py
        tools/merovingian/daemon/forkmserver.c
Branch: default
Log Message:

Merge with Nov2019 branch.


diffs (truncated from 2092959 to 300 lines):

diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -1112,6 +1112,51 @@ mvc_bind_wrap(Client cntxt, MalBlkPtr mb
  *  If the table is cleared, the values RDONLY, RD_INS and RD_UPD_ID and the 
number of deletes will be 0.
  */
 
+static str
+mvc_insert_delta_values(mvc *m, BAT *col1, BAT *col2, BAT *col3, BAT *col4, 
BAT *col5, BAT *col6, BAT *col7, sql_column *c, bit cleared, lng deletes)
+{
+       int level = 0;
+
+       lng inserted = (lng) store_funcs.count_col(m->session->tr, c, 0);
+       lng all = (lng) store_funcs.count_col(m->session->tr, c, 1);
+       lng updates = (lng) store_funcs.count_col_upd(m->session->tr, c);
+       lng readonly = all - inserted;
+
+       assert(all >= inserted);
+
+       if (BUNappend(col1, &c->base.id, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col2, &cleared, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col3, &readonly, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col4, &inserted, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col5, &updates, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       if (BUNappend(col6, &deletes, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       /* compute level using global transaction */
+       if (gtrans) {
+               sql_column *oc = tr_find_column(gtrans, c);
+
+               if (oc) {
+                       for(sql_delta *d = oc->data; d; d = d->next) 
+                               level++;
+               }
+       }
+       if (BUNappend(col7, &level, false) != GDK_SUCCEED) {
+               return createException(SQL,"sql.delta", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
+       }
+       return MAL_SUCCEED;
+}
+
 str
 mvc_delta_values(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
@@ -1128,15 +1173,13 @@ mvc_delta_values(Client cntxt, MalBlkPtr
                *b5 = getArgReference_bat(stk, pci, 4),
                *b6 = getArgReference_bat(stk, pci, 5),
                *b7 = getArgReference_bat(stk, pci, 6);
-       sql_trans *tr;
        sql_schema *s = NULL;
        sql_table *t = NULL;
        sql_column *c = NULL;
        node *n;
        bit cleared;
-       int level = 0;
        BUN nrows = 0;
-       lng all, readonly, inserted, updates, deletes;
+       lng deletes;
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                goto cleanup;
@@ -1204,85 +1247,17 @@ mvc_delta_values(Client cntxt, MalBlkPtr
        }
 
        if (nrows) {
-               tr = m->session->tr;
-               while((tr = tr->parent)) level++;
-
                if (tname) {
                        cleared = (t->cleared != 0);
                        deletes = (lng) store_funcs.count_del(m->session->tr, 
t);
                        if (cname) {
-                               inserted = (lng) 
store_funcs.count_col(m->session->tr, c, 0);
-                               all = (lng) 
store_funcs.count_col(m->session->tr, c, 1);
-                               updates = (lng) 
store_funcs.count_col_upd(m->session->tr, c);
-                               assert(all >= inserted);
-                               readonly = all - inserted;
-
-                               if (BUNappend(col1, &c->base.id, false) != 
GDK_SUCCEED) {
-                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
-                               if (BUNappend(col2, &cleared, false) != 
GDK_SUCCEED) {
-                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
-                               if (BUNappend(col3, &readonly, false) != 
GDK_SUCCEED) {
-                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                               if ((msg=mvc_insert_delta_values(m, col1, col2, 
col3, col4, col5, col6, col7, c, cleared, deletes)) != NULL)
                                        goto cleanup;
-                               }
-                               if (BUNappend(col4, &inserted, false) != 
GDK_SUCCEED) {
-                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
-                               if (BUNappend(col5, &updates, false) != 
GDK_SUCCEED) {
-                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
-                               if (BUNappend(col6, &deletes, false) != 
GDK_SUCCEED) {
-                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
-                               if (BUNappend(col7, &level, false) != 
GDK_SUCCEED) {
-                                       msg = createException(SQL,"sql.delta", 
SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
                        } else {
                                for (n = t->columns.set->h; n ; n = n->next) {
                                        c = (sql_column*) n->data;
-
-                                       inserted = (lng) 
store_funcs.count_col(m->session->tr, c, 0);
-                                       all = (lng) 
store_funcs.count_col(m->session->tr, c, 1);
-                                       updates = (lng) 
store_funcs.count_col_upd(m->session->tr, c);
-                                       assert(all >= inserted);
-                                       readonly = all - inserted;
-
-                                       if (BUNappend(col1, &c->base.id, false) 
!= GDK_SUCCEED) {
-                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                               goto cleanup;
-                                       }
-                                       if (BUNappend(col2, &cleared, false) != 
GDK_SUCCEED) {
-                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                               goto cleanup;
-                                       }
-                                       if (BUNappend(col3, &readonly, false) 
!= GDK_SUCCEED) {
-                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                       if ((msg=mvc_insert_delta_values(m, 
col1, col2, col3, col4, col5, col6, col7, c, cleared, deletes)) != NULL)
                                                goto cleanup;
-                                       }
-                                       if (BUNappend(col4, &inserted, false) 
!= GDK_SUCCEED) {
-                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                               goto cleanup;
-                                       }
-                                       if (BUNappend(col5, &updates, false) != 
GDK_SUCCEED) {
-                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                               goto cleanup;
-                                       }
-                                       if (BUNappend(col6, &deletes, false) != 
GDK_SUCCEED) {
-                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                               goto cleanup;
-                                       }
-                                       if (BUNappend(col7, &level, false) != 
GDK_SUCCEED) {
-                                               msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                               goto cleanup;
-                                       }
                                }
                        }
                } else if (s->tables.set) {
@@ -1295,40 +1270,9 @@ mvc_delta_values(Client cntxt, MalBlkPtr
                                        for (node *nn = t->columns.set->h; nn ; 
nn = nn->next) {
                                                c = (sql_column*) nn->data;
 
-                                               inserted = (lng) 
store_funcs.count_col(m->session->tr, c, 0);
-                                               all = (lng) 
store_funcs.count_col(m->session->tr, c, 1);
-                                               updates = (lng) 
store_funcs.count_col_upd(m->session->tr, c);
-                                               assert(all >= inserted);
-                                               readonly = all - inserted;
-
-                                               if (BUNappend(col1, 
&c->base.id, false) != GDK_SUCCEED) {
-                                                       msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                                       goto cleanup;
-                                               }
-                                               if (BUNappend(col2, &cleared, 
false) != GDK_SUCCEED) {
-                                                       msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                                       goto cleanup;
-                                               }
-                                               if (BUNappend(col3, &readonly, 
false) != GDK_SUCCEED) {
-                                                       msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
+                                               if 
((msg=mvc_insert_delta_values(m, col1, col2, col3, col4, col5, col6, col7, 
+                                                                               
 c, cleared, deletes)) != NULL)
                                                        goto cleanup;
-                                               }
-                                               if (BUNappend(col4, &inserted, 
false) != GDK_SUCCEED) {
-                                                       msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                                       goto cleanup;
-                                               }
-                                               if (BUNappend(col5, &updates, 
false) != GDK_SUCCEED) {
-                                                       msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                                       goto cleanup;
-                                               }
-                                               if (BUNappend(col6, &deletes, 
false) != GDK_SUCCEED) {
-                                                       msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                                       goto cleanup;
-                                               }
-                                               if (BUNappend(col7, &level, 
false) != GDK_SUCCEED) {
-                                                       msg = 
createException(SQL,"sql.delta", SQLSTATE(HY001) MAL_MALLOC_FAIL);
-                                                       goto cleanup;
-                                               }
                                        }
                                }
                        }
diff --git a/sql/backends/monet5/wlr.c b/sql/backends/monet5/wlr.c
--- a/sql/backends/monet5/wlr.c
+++ b/sql/backends/monet5/wlr.c
@@ -7,13 +7,12 @@
  */
 
 /*
- * A master can be replicated by taking a binary copy of the 'bat' directory.
- * This should be done under control of the program monetdb, e.g.
- * monetdb replica <masterlocation> <dbname>+
+ * A master can be replicated by taking a binary copy of the 'bat' directory
+ * when in quiescent mode or a more formal snapshot..
  * Alternatively you start with an empty database.
  * 
  * After restart of a mserver against the newly created image,
- * the log files from the master are processed.
+ * the log files from the master are processed by calling....
  *
  * In replay mode also all queries are executed if they surpass
  * the latest threshold set for by the master.
@@ -39,21 +38,24 @@
 #define WLC_ERROR 60
 
 #define _WLR_DEBUG_
+  
+MT_Lock     wlr_lock = MT_LOCK_INITIALIZER("wlr_lock");
 
 /* The current status of the replica  processing */
 static char wlr_master[IDLENGTH];
-static char wlr_error[FILENAME_MAX];           // errors should stop the 
process
-static int wlr_batches;        // the next file to be processed
-static lng wlr_tag;                    // the next transaction id to be 
processed
-static lng wlr_limit = -1;             // stop re-processing transactions when 
limit is reached
-static char wlr_timelimit[26];         // stop re-processing transactions when 
time limit is reached
-static char wlr_read[26];              // stop re-processing transactions when 
time limit is reached
-static int wlr_state;          // which state RUN/PAUSE
-static int wlr_beat;           // period between successive synchronisations 
with master
+static char wlr_error[FILENAME_MAX];   // errors should stop the process
+static int     wlr_batches;                            // the next file to be 
processed
+static lng     wlr_tag;                                        // the next 
transaction id to be processed
+static lng     wlr_limit = -1;                         // stop re-processing 
transactions when limit is reached
+static char wlr_timelimit[26];                 // stop re-processing 
transactions when time limit is reached
+static char wlr_read[26];                              // stop re-processing 
transactions when time limit is reached
+static int     wlr_state;                                      // which state 
RUN/PAUSE
+static int     wlr_beat;                                       // period 
between successive synchronisations with master
 static MT_Id wlr_thread;
 
 #define MAXLINE 2048
 
+/* Simple read the configuration file */
 static str
 WLRgetConfig(void){
        char *path;
@@ -62,8 +64,10 @@ WLRgetConfig(void){
        int len;
        str msg = MAL_SUCCEED;
 
-       if((path = GDKfilepath(0,0,"wlr.config",0)) == NULL)
-               throw(MAL,"wlr.getConfig","Could not access wlr.config file\n");
+       if((path = GDKfilepath(0, 0, "wlr.config", 0)) == NULL){
+               msg = createException(MAL, "wlr.getConfig","Could not access 
wlr.config file\n");
+               return msg;
+       }
        fd = fopen(path,"r");
        GDKfree(path);
        if( fd == NULL)
@@ -95,11 +99,14 @@ WLRgetConfig(void){
                        }
                }
        }
+       if (msg == MAL_SUCCEED && wlr_limit < wlr_tag)
+                       msg = createException(MAL, "wlr.getConfig", 
"inconsistent config record");
 bailout:
        fclose(fd);
        return msg;
 }
 
+/* Keep the current status in the config file */
 static str
 WLRsetConfig(void){
        char *path;
@@ -109,9 +116,9 @@ WLRsetConfig(void){
                throw(MAL,"wlr.setMaster","Could not access wlr.config file\n");
        fd = open_wastream(path);
        GDKfree(path);
-       if( fd == NULL){
-               return MAL_SUCCEED;
-       }
+       if( fd == NULL)
+               throw(MAL,"wlr.setMaster","Could not create wlr.config file\n");
+
        mnstr_printf(fd,"master=%s\n", wlr_master);
        mnstr_printf(fd,"batches=%d\n", wlr_batches);
        mnstr_printf(fd,"tag="LLFMT"\n", wlr_tag);
@@ -129,14 +136,14 @@ WLRsetConfig(void){
  * When the master database exist, we should set the replica administration.
  * But only once.
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to