|
|
@ -260,12 +260,12 @@ impl<'s, S: Storage<'s>> Db<S> {
|
|
|
|
) -> Result<NamedRows, Report> {
|
|
|
|
) -> Result<NamedRows, Report> {
|
|
|
|
let mut callback_collector = BTreeMap::new();
|
|
|
|
let mut callback_collector = BTreeMap::new();
|
|
|
|
let mut write_lock_names = BTreeSet::new();
|
|
|
|
let mut write_lock_names = BTreeSet::new();
|
|
|
|
if readonly && !write_lock_names.is_empty() {
|
|
|
|
|
|
|
|
bail!("Read-only imperative program attempted to acquire write locks");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for p in ps {
|
|
|
|
for p in ps {
|
|
|
|
p.needs_write_locks(&mut write_lock_names);
|
|
|
|
p.needs_write_locks(&mut write_lock_names);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if readonly && !write_lock_names.is_empty() {
|
|
|
|
|
|
|
|
bail!("Read-only imperative program attempted to acquire write locks");
|
|
|
|
|
|
|
|
}
|
|
|
|
let is_write = !write_lock_names.is_empty();
|
|
|
|
let is_write = !write_lock_names.is_empty();
|
|
|
|
let write_lock = self.obtain_relation_locks(write_lock_names.iter());
|
|
|
|
let write_lock = self.obtain_relation_locks(write_lock_names.iter());
|
|
|
|
let _write_lock_guards = write_lock.iter().map(|l| l.read().unwrap()).collect_vec();
|
|
|
|
let _write_lock_guards = write_lock.iter().map(|l| l.read().unwrap()).collect_vec();
|
|
|
|