Changeset: 4784d7f2b200 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4784d7f2b200
Modified Files:
sql/storage/bat/bat_storage.c
sql/storage/objectset.c
sql/storage/store.c
testing/sqllogictest.py
Branch: default
Log Message:
Merge with Dec2023 branch.
diffs (129 lines):
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -3492,7 +3492,6 @@ log_segments(sql_trans *tr, segments *se
unlock_table(tr->store, id);
if (seg->ts == tr->tid && seg->end-seg->start) {
if (log_segment(tr, seg, id) != LOG_OK) {
- unlock_table(tr->store, id);
return LOG_ERR;
}
}
diff --git a/sql/storage/objectset.c b/sql/storage/objectset.c
--- a/sql/storage/objectset.c
+++ b/sql/storage/objectset.c
@@ -55,6 +55,7 @@ typedef struct objectset {
allocator *sa;
destroy_fptr destroy;
MT_RWLock rw_lock; /*readers-writer lock to protect the links
(chains) in the objectversion chain.*/
+ MT_Lock lock; /* global objectset lock for os_add/del */
versionhead *name_based_h;
versionhead *name_based_t;
versionhead *id_based_h;
@@ -668,6 +669,7 @@ os_new(allocator *sa, destroy_fptr destr
};
os->destroy = destroy;
MT_rwlock_init(&os->rw_lock, "sa_readers_lock");
+ MT_lock_init(&os->lock, "single_writer_lock");
}
return os;
@@ -685,6 +687,7 @@ os_destroy(objectset *os, sql_store stor
{
if (ATOMIC_DEC(&os->refcnt) > 0)
return;
+ MT_lock_destroy(&os->lock);
MT_rwlock_destroy(&os->rw_lock);
versionhead* n=os->id_based_h;
while(n) {
@@ -927,9 +930,9 @@ os_add_(objectset *os, struct sql_trans
int
os_add(objectset *os, struct sql_trans *tr, const char *name, sql_base *b)
{
- store_lock(tr->store);
+ MT_lock_set(&os->lock);
int res = os_add_(os, tr, name, b);
- store_unlock(tr->store);
+ MT_lock_unset(&os->lock);
return res;
}
@@ -1032,9 +1035,9 @@ os_del_(objectset *os, struct sql_trans
int
os_del(objectset *os, sql_trans *tr, const char *name, sql_base *b)
{
- store_lock(tr->store);
+ MT_lock_set(&os->lock);
int res = os_del_(os, tr, name, b);
- store_unlock(tr->store);
+ MT_lock_unset(&os->lock);
return res;
}
diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -3816,8 +3816,6 @@ sql_trans_destroy(sql_trans *tr)
sql_trans_rollback(tr, false);
sqlstore *store = tr->store;
os_destroy(tr->localtmps, store);
- store_lock(store);
- store_unlock(store);
MT_lock_destroy(&tr->lock);
if (!list_empty(tr->dropped))
list_destroy(tr->dropped);
diff --git a/testing/sqllogictest.py b/testing/sqllogictest.py
--- a/testing/sqllogictest.py
+++ b/testing/sqllogictest.py
@@ -656,10 +656,11 @@ class SQLLogic:
result2 = result
return result1, result2
- def initfile(self, f, defines):
+ def initfile(self, f, defines, run_until=None):
self.name = f
self.file = open(f, 'r', encoding='utf-8', errors='replace')
self.line = 0
+ self.run_until = run_until
self.hashes = {}
defs = []
if defines:
@@ -674,6 +675,8 @@ class SQLLogic:
def readline(self):
self.line += 1
+ if self.run_until and self.line >= self.run_until:
+ return ''
origline = line = self.file.readline()
for reg, val, key in self.defines:
line = reg.sub(val.replace('\\', r'\\'), line)
@@ -736,9 +739,9 @@ class SQLLogic:
self.raise_error('invalid connection parameters definition,
username or password missing!')
return res
- def parse(self, f, approve=None, verbose=False, defines=None):
+ def parse(self, f, approve=None, verbose=False, defines=None,
run_until=None):
self.approve = approve
- self.initfile(f, defines)
+ self.initfile(f, defines, run_until=run_until)
nthreads = None
if self.language == 'sql':
self.crs.execute(f'call sys.setsessiontimeout({self.timeout or
0})')
@@ -945,6 +948,8 @@ if __name__ == '__main__':
' (can be repeated)')
parser.add_argument('--alltests', action='store_true',
help='also executed "knownfail" tests')
+ parser.add_argument('--run-until', action='store', type=int,
+ help='run tests until specified line')
parser.add_argument('tests', nargs='*', help='tests to be run')
opts = parser.parse_args()
args = opts.tests
@@ -959,7 +964,7 @@ if __name__ == '__main__':
print('now testing {}'. format(test))
try:
sql.parse(test, approve=opts.approve, verbose=opts.verbose,
- defines=opts.define)
+ defines=opts.define, run_until=opts.run_until)
except SQLLogicSyntaxError:
pass
except BrokenPipeError:
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]