diff --git a/Cargo.lock b/Cargo.lock index c4b2612875..64e3fa91ca 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,23 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "async-trait" +version = "0.1.53" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed6aa3524a2dfcf9fe180c51eae2b58738348d819517ceadf95789c51fff7600" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + [[package]] name = "common" version = "0.1.0" @@ -9,23 +26,136 @@ version = "0.1.0" [[package]] name = "datanode" version = "0.1.0" +dependencies = [ + "snafu", +] [[package]] name = "datatypes" version = "0.1.0" +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "heck" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "log" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6389c490849ff5bc16be905ae24bc913a9c8892e19b2341dbc175e14c341c2b8" +dependencies = [ + "cfg-if", +] + [[package]] name = "log-store" version = "0.1.0" +[[package]] +name = "logical-plans" +version = "0.1.0" + [[package]] name = "object-store" version = "0.1.0" +[[package]] +name = "proc-macro2" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec757218438d5fda206afc041538b2f6d889286160d649a86a24d37e1235afd1" +dependencies = [ + "unicode-xid", +] + [[package]] name = "query" version = "0.1.0" +[[package]] +name = "quote" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1feb54ed693b93a84e14094943b84b7c4eae204c512b7ccb95ab0c66d278ad1" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "snafu" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2eba135d2c579aa65364522eb78590cdf703176ef71ad4c32b00f58f7afb2df5" +dependencies = [ + "doc-comment", + "snafu-derive", +] + +[[package]] +name = "snafu-derive" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a7fe9b0669ef117c5cabc5549638528f36771f058ff977d7689deb517833a75" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "sql" +version = "0.1.0" +dependencies = [ + "sqlparser", +] + +[[package]] +name = "sqlparser" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9a527b68048eb95495a1508f6c8395c8defcff5ecdbe8ad4106d08a2ef2a3c" +dependencies = [ + "log", +] + +[[package]] +name = "syn" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b683b2b825c8eef438b77c36a06dc262294da3d5a5813fac20da149241dcd44d" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + [[package]] name = "table" version = "0.1.0" +dependencies = [ + "async-trait", +] + +[[package]] +name = "unicode-segmentation" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" + +[[package]] +name = "unicode-xid" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" diff --git a/Cargo.toml b/Cargo.toml index 7da6ac97a7..b63440d6e3 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,9 @@ members = [ "src/datanode", "src/datatypes", "src/log-store", + "src/logical-plans", "src/object-store", "src/query", + "src/sql", "src/table", ] diff --git a/src/datanode/Cargo.toml b/src/datanode/Cargo.toml index c8417dd799..ec6162f968 100644 --- a/src/datanode/Cargo.toml +++ b/src/datanode/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +snafu = "0.7" diff --git a/src/datanode/src/catalog.rs b/src/datanode/src/catalog.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/datanode/src/catalog.rs @@ -0,0 +1 @@ + diff --git a/src/datanode/src/error.rs b/src/datanode/src/error.rs new file mode 100644 index 0000000000..d7815b56db --- /dev/null +++ b/src/datanode/src/error.rs @@ -0,0 +1,8 @@ +use snafu::Snafu; + +/// business error of datanode. +#[derive(Debug, Snafu)] +#[snafu(display("DataNode error"))] +pub struct Error; + +pub type Result = std::result::Result; diff --git a/src/datanode/src/lib.rs b/src/datanode/src/lib.rs index 8b13789179..f12076ea06 100644 --- a/src/datanode/src/lib.rs +++ b/src/datanode/src/lib.rs @@ -1 +1,21 @@ +mod catalog; +mod error; +mod processors; +mod rpc; +use crate::error::Result; +use crate::rpc::Services; + +/// DataNode service. +pub struct DataNode { + services: Services, +} + +impl DataNode { + /// Shutdown the datanode service gracefully. + pub async fn shutdown(&self) -> Result<()> { + self.services.shutdown().await?; + + unimplemented!() + } +} diff --git a/src/datanode/src/processors.rs b/src/datanode/src/processors.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/datanode/src/processors.rs @@ -0,0 +1 @@ + diff --git a/src/datanode/src/rpc.rs b/src/datanode/src/rpc.rs new file mode 100644 index 0000000000..ef06c5b171 --- /dev/null +++ b/src/datanode/src/rpc.rs @@ -0,0 +1,10 @@ +use crate::error::Result; + +/// All rpc services. +pub struct Services {} + +impl Services { + pub async fn shutdown(&self) -> Result<()> { + unimplemented!() + } +} diff --git a/src/datatypes/src/lib.rs b/src/datatypes/src/lib.rs index e69de29bb2..6bde67a2b1 100644 --- a/src/datatypes/src/lib.rs +++ b/src/datatypes/src/lib.rs @@ -0,0 +1 @@ +mod schema; diff --git a/src/datatypes/src/schema.rs b/src/datatypes/src/schema.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/datatypes/src/schema.rs @@ -0,0 +1 @@ + diff --git a/src/logical-plans/Cargo.toml b/src/logical-plans/Cargo.toml new file mode 100644 index 0000000000..fd20e3350b --- /dev/null +++ b/src/logical-plans/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "logical-plans" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/src/logical-plans/src/lib.rs b/src/logical-plans/src/lib.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/logical-plans/src/lib.rs @@ -0,0 +1 @@ + diff --git a/src/query/src/executor.rs b/src/query/src/executor.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/query/src/executor.rs @@ -0,0 +1 @@ + diff --git a/src/query/src/lib.rs b/src/query/src/lib.rs index 8b13789179..c7de888be0 100644 --- a/src/query/src/lib.rs +++ b/src/query/src/lib.rs @@ -1 +1,4 @@ - +mod executor; +mod logical_optimizer; +mod physical_optimizer; +mod physical_planner; diff --git a/src/query/src/logical_optimizer.rs b/src/query/src/logical_optimizer.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/query/src/logical_optimizer.rs @@ -0,0 +1 @@ + diff --git a/src/query/src/physical_optimizer.rs b/src/query/src/physical_optimizer.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/query/src/physical_optimizer.rs @@ -0,0 +1 @@ + diff --git a/src/query/src/physical_planner.rs b/src/query/src/physical_planner.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/query/src/physical_planner.rs @@ -0,0 +1 @@ + diff --git a/src/sql/Cargo.toml b/src/sql/Cargo.toml new file mode 100644 index 0000000000..01cdc0da6d --- /dev/null +++ b/src/sql/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "sql" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +sqlparser = "0.16.0" diff --git a/src/sql/src/ast.rs b/src/sql/src/ast.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/sql/src/ast.rs @@ -0,0 +1 @@ + diff --git a/src/sql/src/lib.rs b/src/sql/src/lib.rs new file mode 100644 index 0000000000..c289ce327f --- /dev/null +++ b/src/sql/src/lib.rs @@ -0,0 +1,3 @@ +mod ast; +mod parser; +mod planner; diff --git a/src/sql/src/parser.rs b/src/sql/src/parser.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/sql/src/parser.rs @@ -0,0 +1 @@ + diff --git a/src/sql/src/planner.rs b/src/sql/src/planner.rs new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/src/sql/src/planner.rs @@ -0,0 +1 @@ + diff --git a/src/table/Cargo.toml b/src/table/Cargo.toml index 12933c68f0..6ee53b9861 100644 --- a/src/table/Cargo.toml +++ b/src/table/Cargo.toml @@ -6,3 +6,4 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] +async-trait = "0.1" diff --git a/src/table/src/engine.rs b/src/table/src/engine.rs new file mode 100644 index 0000000000..8b2309192c --- /dev/null +++ b/src/table/src/engine.rs @@ -0,0 +1,3 @@ +/// Table engine abstraction. +#[async_trait::async_trait] +pub trait Engine {} diff --git a/src/table/src/lib.rs b/src/table/src/lib.rs index 8b13789179..804f6c9a68 100644 --- a/src/table/src/lib.rs +++ b/src/table/src/lib.rs @@ -1 +1,5 @@ +mod engine; +/// Table abstraction. +#[async_trait::async_trait] +pub trait Table: Send + Sync {}