From 8f347e50999864d5885b01b679de5d407f7374a0 Mon Sep 17 00:00:00 2001 From: Ziyang Hu Date: Thu, 29 Sep 2022 19:37:06 +0800 Subject: [PATCH] Compaction --- README.md | 4 ++-- src/cozoscript.pest | 3 +-- src/parse/sys.rs | 32 +++----------------------------- src/runtime/db.rs | 18 +++++------------- tutorial/1-acrobatics.ipynb | 13 ++++++++++++- 5 files changed, 23 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 6ed7d5ed..bd829857 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # The Cozo Database -Cozo is a graph-focused, dual-storage transactional database designed by and for data hackers. It's free and open-source software. +Cozo is a graph-focused relational database designed by and for data hackers. It's free and open-source software. ## Another database?! @@ -24,4 +24,4 @@ At the moment, the following are non-goals (but may change in the future) * Sharding, distributed system. This would greatly increase the complexity of the system, and we don't think it is appropriate to pour energy into it at this experimentation stage. * Additional query languages, e.g. SQL, GraphQL. -* Support for more paradigms, e.g. a document store. +* Support for more paradigms, e.g. a document store. many a date diff --git a/src/cozoscript.pest b/src/cozoscript.pest index d2d7974f..50b66266 100644 --- a/src/cozoscript.pest +++ b/src/cozoscript.pest @@ -5,8 +5,7 @@ multi_script = {SOI ~ query_script_inner+ ~ EOI} sys_script = {SOI ~ "::" ~ (compact_op | list_relations_op | list_relation_op | remove_relations_op | trigger_relation_op | trigger_relation_show_op | rename_relations_op | running_op | kill_op) ~ EOI} -compact_op = {"compact" ~ compact_opt_relations+} -compact_opt_relations = {"relations"} +compact_op = {"compact"} running_op = {"running"} kill_op = {"kill" ~ int} list_relations_op = {"relations"} diff --git a/src/parse/sys.rs b/src/parse/sys.rs index 2396cc8b..25db904e 100644 --- a/src/parse/sys.rs +++ b/src/parse/sys.rs @@ -1,5 +1,3 @@ -use std::collections::BTreeSet; - use itertools::Itertools; use miette::{Diagnostic, Result}; use thiserror::Error; @@ -8,24 +6,9 @@ use crate::data::symb::Symbol; use crate::parse::query::parse_query; use crate::parse::{ExtractSpan, Pairs, Rule, SourceSpan}; -#[derive( - Debug, - Eq, - PartialEq, - Ord, - PartialOrd, - Copy, - Clone, - serde_derive::Serialize, - serde_derive::Deserialize, -)] -pub(crate) enum CompactTarget { - Relations, -} - #[derive(serde_derive::Serialize, serde_derive::Deserialize)] pub(crate) enum SysOp { - Compact(BTreeSet), + Compact, ListRelation(Symbol), ListRelations, ListRunning, @@ -44,16 +27,7 @@ struct ProcessIdError(String, #[label] SourceSpan); pub(crate) fn parse_sys(mut src: Pairs<'_>) -> Result { let inner = src.next().unwrap(); Ok(match inner.as_rule() { - Rule::compact_op => { - let ops = inner - .into_inner() - .map(|v| match v.as_rule() { - Rule::compact_opt_relations => CompactTarget::Relations, - _ => unreachable!(), - }) - .collect(); - SysOp::Compact(ops) - } + Rule::compact_op => SysOp::Compact, Rule::running_op => SysOp::ListRunning, Rule::kill_op => { let i_str = inner.into_inner().next().unwrap(); @@ -111,7 +85,7 @@ pub(crate) fn parse_sys(mut src: Pairs<'_>) -> Result { Rule::trigger_put => puts.push(script_str.to_string()), Rule::trigger_rm => rms.push(script_str.to_string()), Rule::trigger_replace => replaces.push(script_str.to_string()), - r => unreachable!("{:?}", r) + r => unreachable!("{:?}", r), } } SysOp::SetTriggers(rel, puts, rms, replaces) diff --git a/src/runtime/db.rs b/src/runtime/db.rs index a3157746..c3a952ae 100644 --- a/src/runtime/db.rs +++ b/src/runtime/db.rs @@ -24,7 +24,7 @@ use crate::data::tuple::{ compare_tuple_keys, rusty_scratch_cmp, EncodedTuple, Tuple, SCRATCH_DB_KEY_PREFIX_LEN, }; use crate::data::value::{DataValue, LARGEST_UTF_CHAR}; -use crate::parse::sys::{CompactTarget, SysOp}; +use crate::parse::sys::SysOp; use crate::parse::{parse_script, CozoScript, SourceSpan}; use crate::runtime::relation::{RelationHandle, RelationId}; use crate::runtime::transact::SessionTx; @@ -232,14 +232,8 @@ impl Db { } fn run_sys_op(&self, op: SysOp) -> Result { match op { - SysOp::Compact(opts) => { - for opt in opts { - match opt { - CompactTarget::Relations => { - self.compact_relation()?; - } - } - } + SysOp::Compact => { + self.compact_relation()?; Ok(json!({"headers": ["status"], "rows": [["OK"]]})) } SysOp::ListRelations => self.list_relations(), @@ -655,10 +649,8 @@ impl Db { ])); it.next(); } - Ok( - json!({"rows": collected, "headers": - ["name", "arity", "n_keys", "n_non_keys", "n_put_triggers", "n_rm_triggers", "n_replace_triggers"]}), - ) + Ok(json!({"rows": collected, "headers": + ["name", "arity", "n_keys", "n_non_keys", "n_put_triggers", "n_rm_triggers", "n_replace_triggers"]})) } } diff --git a/tutorial/1-acrobatics.ipynb b/tutorial/1-acrobatics.ipynb index 1efb3c0c..aa4a4d47 100644 --- a/tutorial/1-acrobatics.ipynb +++ b/tutorial/1-acrobatics.ipynb @@ -11,7 +11,18 @@ "cell_type": "code", "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "requests.exceptions.ConnectionError(urllib3.exceptions.MaxRetryError(\"HTTPConnectionPool(host='127.0.0.1', port=9070): Max retries exceeded with url: /text-query (Caused by NewConnectionError(': Failed to establish a new connection: [Errno 111] Connection refused'))\"))" + ] + }, + "execution_count": 1, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "%reload_ext pycozo.ipyext_direct\n", "%cozo_auth tutorial *******"