summaryrefslogtreecommitdiff
path: root/support/texlab/src/server/query.rs
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab/src/server/query.rs')
-rw-r--r--support/texlab/src/server/query.rs32
1 files changed, 32 insertions, 0 deletions
diff --git a/support/texlab/src/server/query.rs b/support/texlab/src/server/query.rs
new file mode 100644
index 0000000000..f19d15f85b
--- /dev/null
+++ b/support/texlab/src/server/query.rs
@@ -0,0 +1,32 @@
+use salsa::{DbWithJar, ParallelDatabase};
+use threadpool::ThreadPool;
+
+use crate::{Database, Db};
+
+#[derive(Default)]
+pub struct Engine {
+ db: Database,
+ pool: ThreadPool,
+}
+
+impl Engine {
+ pub fn read(&self) -> &dyn Db {
+ &self.db
+ }
+
+ pub fn write(&mut self) -> &mut dyn Db {
+ self.pool.join();
+ &mut self.db
+ }
+
+ pub fn fork<F: FnOnce(&dyn Db) + Send + 'static>(&self, action: F) {
+ let snapshot = self.db.snapshot();
+ self.pool.execute(move || {
+ action(snapshot.as_jar_db());
+ });
+ }
+
+ pub fn finish(self) {
+ self.pool.join();
+ }
+}