Changeset: 0ebaba24da25 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/0ebaba24da25
Branch: txtsim
Log Message:

Merge with default.


diffs (186 lines):

diff --git a/monetdb5/mal/mal_dataflow.c b/monetdb5/mal/mal_dataflow.c
--- a/monetdb5/mal/mal_dataflow.c
+++ b/monetdb5/mal/mal_dataflow.c
@@ -236,7 +236,6 @@ static FlowEvent
 q_dequeue(Queue *q, Client cntxt)
 {
        FlowEvent r = NULL, s = NULL;
-       //int i;
 
        assert(q);
        MT_sema_down(&q->s);
diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -281,7 +281,10 @@ runtimeProfileFinish(Client cntxt, MalBl
        MT_lock_set(&mal_delayLock);
        for (i = 0; i < qsize; i++) {
                if (QRYqueue[i].stk == stk) {
-                       QRYqueue[i].status = "finished";
+                       if (QRYqueue[i].status[0] == 's')
+                               QRYqueue[i].status = "aborted";
+                       else
+                               QRYqueue[i].status = "finished";
                        QRYqueue[i].finished = time(0);
                        QRYqueue[i].workers = (int) ATOMIC_GET(&mb->workers);
                        /* give the MB upperbound by addition of 1 MB */
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -1209,10 +1209,18 @@ int
 exp_refers( sql_exp *p, sql_exp *c)
 {
        if (c->type == e_column) {
+               // at first they need to have the same expression names
                if (!p->alias.name || !c->r || strcmp(p->alias.name, c->r) != 0)
                        return 0;
-               if (c->l && ((p->alias.rname && strcmp(p->alias.rname, c->l) != 
0) || (!p->alias.rname && strcmp(p->l, c->l) != 0)))
-                       return 0;
+               // then compare the relation names
+               if (c->l) {
+                       // if the parent has an alias for the relation name 
compare with the child's relation name
+                       if (p->alias.rname && strcmp(p->alias.rname, c->l) != 0)
+                               return 0;
+                       // if the parent does NOT have a relation name alias 
compare his relation name with the child's
+                       if (!p->alias.rname && strcmp(p->l, c->l) != 0)
+                               return 0;
+               }
                return 1;
        }
        return 0;
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -917,7 +917,7 @@ rel_groupby(mvc *sql, sql_rel *l, list *
                                list_append(gexps, e);
                        } else {
                                const char *ername = exp_relname(e), *nername = 
exp_relname(ne), *ename = exp_name(e), *nename = exp_name(ne);
-                               if ((ername && !nername) || (!ername && 
nername) || 
+                               if ((ername && !nername) || (!ername && 
nername) ||
                                        (ername && nername && 
strcmp(ername,nername) != 0) || strcmp(ename,nename) != 0)
                                        list_append(gexps, e);
                        }
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -480,11 +480,6 @@ typedef struct sqlstore {
        int catalog_version;    /* software version of the catalog */
        sql_catalog *cat;               /* the catalog of persistent tables 
(what to do with tmp tables ?) */
        sql_schema *tmp;                /* keep pointer to default (empty) tmp 
schema */
-       MT_Lock lock;                   /* lock protecting concurrent writes 
(not reads, ie use rcu) */
-       MT_Lock commit;                 /* protect transactions, only single 
commit (one wal writer) */
-       MT_Lock flush;                  /* flush lock protecting concurrent 
writes (not reads, ie use rcu) */
-       MT_Lock table_locks[NR_TABLE_LOCKS];            /* protecting 
concurrent writes to tables (storage) */
-       MT_Lock column_locks[NR_COLUMN_LOCKS];          /* protecting 
concurrent writes to columns (storage) */
        list *active;                   /* list of running transactions */
 
        ATOMIC_TYPE nr_active;  /* count number of transactions */
@@ -513,6 +508,12 @@ typedef struct sqlstore {
        table_functions table_api;
        logger_functions logger_api;
        void *logger;                   /* space to keep logging structure of 
storage backend */
+
+       MT_Lock lock;                   /* lock protecting concurrent writes 
(not reads, ie use rcu) */
+       MT_Lock commit;                 /* protect transactions, only single 
commit (one wal writer) */
+       MT_Lock flush;                  /* flush lock protecting concurrent 
writes (not reads, ie use rcu) */
+       MT_Lock table_locks[NR_TABLE_LOCKS];            /* protecting 
concurrent writes to tables (storage) */
+       MT_Lock column_locks[NR_COLUMN_LOCKS];          /* protecting 
concurrent writes to columns (storage) */
 } sqlstore;
 
 typedef enum sql_dependency_change_type {
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -1763,6 +1763,7 @@ bootstrap_create_schema(sql_trans *tr, c
        } else {
                base_init(NULL, &s->base, id, true, name);
        }
+       s->base.new = store->first;
        s->auth_id = auth_id;
        s->owner = owner;
        s->system = TRUE;
diff --git a/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py 
b/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py
--- a/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py
+++ b/sql/test/sysmon/Tests/sys_pause_resume_stop.SQL.py
@@ -10,8 +10,10 @@ db  = os.getenv('TSTDB')
 init    =   '''
             create schema s1;
             create user u1 with password \'u1\' name \'u1\' schema s1;
+            create user u2 with password \'u2\' name \'u2\' schema s1;
             create or replace function sleep(msecs int) returns int external 
name alarm.sleep;
             grant execute on function sleep(int) to u1;
+            grant execute on function sleep(int) to u2;
             '''
 
 p_proced  = '''
@@ -45,11 +47,19 @@ u1_qry  =   '''
             select sleep(2000);
             '''
 
-status  =   '''
-            select status from queue(\'ALL\') where query like \'select 
sleep%\';
+st_paused = '''
+            select status from queue(\'u1\') where query like \'select 
sleep%\' and status = \'paused\';
             '''
 
-def execute_qry():
+st_aborted = '''
+             select status from queue(\'u2\') where query like \'select 
sleep%\';
+             '''
+
+st_aborted2 = '''
+             select status from queue() where query like \'select sleep%\';
+             '''
+# and status = \'aborted\';
+def execute_qry_1():
     with SQLTestCase() as client:
         client.connect(username = 'u1', password = 'u1')
         try:
@@ -58,6 +68,16 @@ def execute_qry():
             print(e)
             exit(1)
 
+def execute_qry_2():
+    with SQLTestCase() as client:
+        client.connect(username = 'u2', password = 'u2')
+        try:
+            client.execute(u1_qry)
+            
client.execute(st_aborted2).assertSucceeded().assertDataResultMatch([('aborted',)])
+        except OperationalError as e:
+            print(e)
+            exit(1)
+
 if __name__ == '__main__':
     with SQLTestCase() as mdb:
         mdb.connect(username="monetdb", password="monetdb")
@@ -66,20 +86,20 @@ if __name__ == '__main__':
         mdb.execute(r_proced).assertSucceeded()
         mdb.execute(s_proced).assertSucceeded()
 
-        client_proc1 = mp.Process(target=execute_qry)
+        client_proc1 = mp.Process(target=execute_qry_1)
         client_proc1.start()
 
         time.sleep(1)
         mdb.execute('call pause_sleep();').assertSucceeded()
-        
mdb.execute(status).assertSucceeded().assertDataResultMatch([('paused',)])
+        
mdb.execute(st_paused).assertSucceeded().assertDataResultMatch([('paused',)])
         mdb.execute('call resume_sleep();').assertSucceeded()
         client_proc1.join()
 
-        client_proc2 = mp.Process(target=execute_qry)
+        client_proc2 = mp.Process(target=execute_qry_2)
         client_proc2.start()
         time.sleep(1)
         mdb.execute('call stop_sleep();').assertSucceeded()
-        
mdb.execute(status).assertSucceeded().assertDataResultMatch([('finished',)])
+        
mdb.execute(st_aborted).assertSucceeded().assertDataResultMatch([('stopping',)])
         client_proc2.join()
 
         mdb.execute('drop function sleep;').assertSucceeded()
@@ -87,4 +107,5 @@ if __name__ == '__main__':
         mdb.execute('drop procedure resume_sleep;').assertSucceeded()
         mdb.execute('drop procedure stop_sleep;').assertSucceeded()
         mdb.execute('drop user u1;').assertSucceeded()
+        mdb.execute('drop user u2;').assertSucceeded()
         mdb.execute('drop schema s1;').assertSucceeded()
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to