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]