Compaction

main
Ziyang Hu 2 years ago
parent 3c0a3a6baa
commit 8f347e5099

@ -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

@ -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"}

@ -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<CompactTarget>),
Compact,
ListRelation(Symbol),
ListRelations,
ListRunning,
@ -44,16 +27,7 @@ struct ProcessIdError(String, #[label] SourceSpan);
pub(crate) fn parse_sys(mut src: Pairs<'_>) -> Result<SysOp> {
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<SysOp> {
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)

@ -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<JsonValue> {
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"]}))
}
}

@ -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('<urllib3.connection.HTTPConnection object at 0x7f4ef9730280>: 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 *******"

Loading…
Cancel
Save