add flags

main
Ziyang Hu 2 years ago
parent 412c39e764
commit be78a8d3e5

20
Cargo.lock generated

@ -1466,9 +1466,9 @@ dependencies = [
[[package]] [[package]]
name = "pyo3" name = "pyo3"
version = "0.17.2" version = "0.17.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "201b6887e5576bf2f945fe65172c1fcbf3fcf285b23e4d71eb171d9736e38d32" checksum = "268be0c73583c183f2b14052337465768c07726936a260f480f0857cb95ba543"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if 1.0.0",
"indoc", "indoc",
@ -1483,9 +1483,9 @@ dependencies = [
[[package]] [[package]]
name = "pyo3-build-config" name = "pyo3-build-config"
version = "0.17.2" version = "0.17.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bf0708c9ed01692635cbf056e286008e5a2927ab1a5e48cdd3aeb1ba5a6fef47" checksum = "28fcd1e73f06ec85bf3280c48c67e731d8290ad3d730f8be9dc07946923005c8"
dependencies = [ dependencies = [
"once_cell", "once_cell",
"target-lexicon", "target-lexicon",
@ -1493,9 +1493,9 @@ dependencies = [
[[package]] [[package]]
name = "pyo3-ffi" name = "pyo3-ffi"
version = "0.17.2" version = "0.17.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90352dea4f486932b72ddf776264d293f85b79a1d214de1d023927b41461132d" checksum = "0f6cb136e222e49115b3c51c32792886defbfb0adead26a688142b346a0b9ffc"
dependencies = [ dependencies = [
"libc", "libc",
"pyo3-build-config", "pyo3-build-config",
@ -1503,9 +1503,9 @@ dependencies = [
[[package]] [[package]]
name = "pyo3-macros" name = "pyo3-macros"
version = "0.17.2" version = "0.17.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7eb24b804a2d9e88bfcc480a5a6dd76f006c1e3edaf064e8250423336e2cd79d" checksum = "94144a1266e236b1c932682136dc35a9dee8d3589728f68130c7c3861ef96b28"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"pyo3-macros-backend", "pyo3-macros-backend",
@ -1515,9 +1515,9 @@ dependencies = [
[[package]] [[package]]
name = "pyo3-macros-backend" name = "pyo3-macros-backend"
version = "0.17.2" version = "0.17.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f22bb49f6a7348c253d7ac67a6875f2dc65f36c2ae64a82c381d528972bea6d6" checksum = "c8df9be978a2d2f0cdebabb03206ed73b11314701a5bfe71b0d753b81997777f"
dependencies = [ dependencies = [
"proc-macro2", "proc-macro2",
"quote", "quote",

@ -5,18 +5,20 @@
# `cozo` # `cozo`
A general-purpose, transactional, relational database A general-purpose, transactional, relational database
that uses Datalog for query and focuses on graph data and algorithms. that uses Datalog for query, is embeddable, and focuses on graph data and algorithms.
## Features ## Features
* Relational database with [Datalog](https://en.wikipedia.org/wiki/Datalog) as the query language * Relational database with [Datalog](https://en.wikipedia.org/wiki/Datalog) as the query language
* Recursive queries, especially recursion through (safe) aggregation, capable of expressing complex graph operations and algorithms * Recursive queries, recursion through (safe) aggregations, capable of expressing complex graph operations and
* Fixed rules providing efficient whole-graph algorithms which integrate seamlessly with Datalog algorithms
* Rich set of built-in functions and aggregations * Fixed rules for efficient whole-graph algorithms which integrate seamlessly with Datalog
* Only a single executable, trivial to deploy and run * Rich set of built-in functions and aggregations
* [Embeddable](https://cozodb.github.io/current/manual/setup.html#embedding-cozo), can run in the same process as the application * Easy to use from any programming language, or as a standalone program
* Easy to use from any programming language * [Embeddable](https://cozodb.github.io/current/manual/setup.html#embedding-cozo), with ready-to-use bindings for
* Special support for [Jupyter](https://jupyter.org/) notebooks for integration with the Python DataScience ecosystem Python, NodeJS and Java
* Single executable, trivial to deploy and run
* [Jupyter](https://jupyter.org/) notebooks integration, plays well with the DataScience ecosystem
* Modern, clean, flexible syntax, informative error messages * Modern, clean, flexible syntax, informative error messages
## Teasers ## Teasers
@ -26,6 +28,8 @@ representing a route between those airports.
Find airports reachable by one stop from Frankfurt Airport (code `FRA`): Find airports reachable by one stop from Frankfurt Airport (code `FRA`):
TODO replace with images
```js ```js
?[dst] := *route{src: 'FRA', dst: stop}, ?[dst] := *route{src: 'FRA', dst: stop},
*route{src: stop, dst} *route{src: stop, dst}
@ -58,10 +62,30 @@ starting[airport] := airport = 'FRA'
?[src, dst, cost, path] <~ ShortestPathDijkstra(*route[], starting[]) ?[src, dst, cost, path] <~ ShortestPathDijkstra(*route[], starting[])
``` ```
## Learning Cozo Nice error messages when things go wrong:
xxx
## Getting started
First we need to get Cozo installed on the local machine. As Cozo is embeddable,
there are lots of options for how we run Cozo. Follow one of the following guides that suits you best:
* Start with the [Tutorial](https://nbviewer.org/github/cozodb/cozo/blob/main/docs/tutorial/tutorial.ipynb) to learn the basics; * Embedded in Python with JupyterLab (best interactive experience, recommended if you are comfortable with the Python
* Continue with the [Manual](https://cozodb.github.io/current/manual/) to understand the fine points. ecosystem)
* Embedded in Python
* Embedded in NodeJS (Javascript)
* Embedded in Java (or any JVM language)
* Embedded in Rust
* Client/server with HTTP API
* Embedded in C/C++, or any language that has a C FFI
(Golang, R, Haskell, CommonLisp, Julia, Fortran, C#, Swift, ...)
After you have it installed, you can start learning CozoScript:
* Start with the [Tutorial](https://nbviewer.org/github/cozodb/cozo/blob/main/docs/tutorial/tutorial.ipynb) to learn the
basics;
* Continue with the [Manual](https://cozodb.github.io/current/manual/) for the fine points.
## Bug reports, discussions ## Bug reports, discussions
@ -102,7 +126,8 @@ in specific situations:
Furthermore, the deterministic evaluation order makes identifying and solving Furthermore, the deterministic evaluation order makes identifying and solving
performance problems easier. performance problems easier.
* Your data may be simple, even a single table, but it is inherently a graph. * Your data may be simple, even a single table, but it is inherently a graph.
* We have seen an example in the [Tutorial](https://nbviewer.org/github/cozodb/cozo/blob/main/docs/tutorial/tutorial.ipynb): * We have seen an example in
the [Tutorial](https://nbviewer.org/github/cozodb/cozo/blob/main/docs/tutorial/tutorial.ipynb):
the air route dataset, where the key relation contains the routes connecting airports. the air route dataset, where the key relation contains the routes connecting airports.
* In traditional databases, when you are given a new relation, * In traditional databases, when you are given a new relation,
you try to understand it by running aggregations on it to collect statistics: you try to understand it by running aggregations on it to collect statistics:
@ -165,9 +190,11 @@ Further down the road:
* More tuning options * More tuning options
* Streaming/reactive data * Streaming/reactive data
* Extension system * Extension system
* The core of Cozo should be kept small at all times. Additional functionalities should be in extensions for the user to choose from. * The core of Cozo should be kept small at all times. Additional functionalities should be in extensions for the
user to choose from.
* What can be extended: datatypes, functions, aggregations, and fixed algorithms. * What can be extended: datatypes, functions, aggregations, and fixed algorithms.
* Extensions should be written in a compiled language such as Rust or C++ and compiled into a dynamic library, to be loaded by Cozo at runtime. * Extensions should be written in a compiled language such as Rust or C++ and compiled into a dynamic library, to be
loaded by Cozo at runtime.
* There will probably be a few "official" extension bundles, such as * There will probably be a few "official" extension bundles, such as
* arbitrary precision arithmetic * arbitrary precision arithmetic
* full-text "indexing" and searching * full-text "indexing" and searching
@ -186,5 +213,6 @@ We manually wrote the C++/Rust bindings for RocksDB with [cxx](https://cxx.rs/).
## Licensing ## Licensing
The contents of this project are licensed under AGPL-3.0 or later, except: The contents of this project are licensed under AGPL-3.0 or later, except:
* Files under `cozorocks/` are licensed under MIT, or Apache-2.0, or BSD-3-Clause;
* Files under `cozorocks/`, `python/`, `nodejs/`, `java/` and `c/` are licensed under MIT, or Apache-2.0, or BSD-3-Clause;
* Files under `docs/` are licensed under CC BY-SA 4.0. * Files under `docs/` are licensed under CC BY-SA 4.0.

@ -6,6 +6,10 @@ edition = "2021"
[lib] [lib]
crate-type = ["cdylib", "staticlib"] crate-type = ["cdylib", "staticlib"]
[features]
jemalloc = ["cozo/jemalloc"]
io-uring = ["cozo/io-uring"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]

@ -6,6 +6,10 @@ edition = "2021"
[lib] [lib]
crate-type = ["cdylib"] crate-type = ["cdylib"]
[features]
jemalloc = ["cozo/jemalloc"]
io-uring = ["cozo/io-uring"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

@ -10,6 +10,10 @@ exclude = ["index.node"]
[lib] [lib]
crate-type = ["cdylib"] crate-type = ["cdylib"]
[features]
jemalloc = ["cozo/jemalloc"]
io-uring = ["cozo/io-uring"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]

@ -8,8 +8,12 @@ edition = "2021"
name = "cozo_py_module" name = "cozo_py_module"
crate-type = ["cdylib"] crate-type = ["cdylib"]
[features]
jemalloc = ["cozo/jemalloc"]
io-uring = ["cozo/io-uring"]
[dependencies] [dependencies]
pyo3 = { version = "0.17.1", features = ["extension-module"] } pyo3 = { version = "0.17.1", features = ["extension-module", "abi3", "abi3-py37"] }
cozo = { version = "0.1.1", path = ".." } cozo = { version = "0.1.1", path = ".." }
miette = { version = "=5.3.0", features = ["fancy"] } miette = { version = "=5.3.0", features = ["fancy"] }
serde_json = "1.0.81" serde_json = "1.0.81"

@ -10,8 +10,6 @@ use pyo3::prelude::*;
use cozo::Db; use cozo::Db;
#[pyclass(extends=PyException)]
struct ErrorBridge(cozo::Error);
trait PyResultExt<T> { trait PyResultExt<T> {
fn into_py_res(self) -> PyResult<T>; fn into_py_res(self) -> PyResult<T>;
} }
@ -50,6 +48,5 @@ impl CozoDbPy {
#[pymodule] #[pymodule]
fn cozo_py_module(_py: Python<'_>, m: &PyModule) -> PyResult<()> { fn cozo_py_module(_py: Python<'_>, m: &PyModule) -> PyResult<()> {
m.add_class::<CozoDbPy>()?; m.add_class::<CozoDbPy>()?;
m.add_class::<ErrorBridge>()?;
Ok(()) Ok(())
} }

Loading…
Cancel
Save