diff --git a/.gitignore b/.gitignore index 9c0dc7db..2370ccbb 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ Cargo.lock /target -.rrdb.config \ No newline at end of file +.rrdb.config + +.vscode \ No newline at end of file diff --git a/rrdb/database.config b/rrdb/database.config new file mode 100644 index 00000000..3ce2be93 Binary files /dev/null and b/rrdb/database.config differ diff --git a/src/ast/ddl/alter_database.rs b/src/ast/ddl/alter_database.rs index 14fee83e..215975b9 100644 --- a/src/ast/ddl/alter_database.rs +++ b/src/ast/ddl/alter_database.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{DDLStatement, SQLStatement}; +use crate::ast::{DDLStatement, SQLStatement}; /* ALTER DATABASE database_name diff --git a/src/ast/ddl/alter_table.rs b/src/ast/ddl/alter_table.rs index 2521cfdd..cb70a277 100644 --- a/src/ast/ddl/alter_table.rs +++ b/src/ast/ddl/alter_table.rs @@ -1,5 +1,8 @@ //use crate::ast::enums::SQLStatement; -use crate::ast::predule::{Column, DataType, SQLExpression, SQLStatement, TableName}; +use crate::ast::{ + types::{Column, DataType, SQLExpression, TableName}, + SQLStatement, +}; use super::drop_database::DDLStatement; diff --git a/src/ast/ddl/create_database.rs b/src/ast/ddl/create_database.rs index c567f35a..c8a8f323 100644 --- a/src/ast/ddl/create_database.rs +++ b/src/ast/ddl/create_database.rs @@ -1,4 +1,4 @@ -pub use crate::ast::predule::{Column, DDLStatement, SQLStatement}; +pub use crate::ast::{DDLStatement, SQLStatement}; /* CREATE DATABASE [IF NOT EXISTS] database_name; diff --git a/src/ast/ddl/create_index.rs b/src/ast/ddl/create_index.rs index 37591f1f..b3c26cff 100644 --- a/src/ast/ddl/create_index.rs +++ b/src/ast/ddl/create_index.rs @@ -1,4 +1,7 @@ -use crate::ast::predule::{Column, DDLStatement, SQLStatement, TableName}; +use crate::ast::{ + types::{Column, TableName}, + DDLStatement, SQLStatement, +}; /* CREATE [ UNIQUE ] INDEX [ IF NOT EXISTS ] name ON table_name diff --git a/src/ast/ddl/create_table.rs b/src/ast/ddl/create_table.rs index ec6b43c8..a84fd1ca 100644 --- a/src/ast/ddl/create_table.rs +++ b/src/ast/ddl/create_table.rs @@ -1,5 +1,6 @@ -use crate::ast::predule::{ - Column, DDLStatement, ForeignKey, SQLStatement, TableName, TableOptions, UniqueKey, +use crate::ast::{ + types::{Column, ForeignKey, TableName, TableOptions, UniqueKey}, + DDLStatement, SQLStatement, }; /* diff --git a/src/ast/ddl/drop_database.rs b/src/ast/ddl/drop_database.rs index f504d607..262e1aea 100644 --- a/src/ast/ddl/drop_database.rs +++ b/src/ast/ddl/drop_database.rs @@ -1,4 +1,4 @@ -pub use crate::ast::predule::{Column, DDLStatement, SQLStatement}; +pub use crate::ast::{DDLStatement, SQLStatement}; /* DROP DATABASE [IF EXISTS] database_name; diff --git a/src/ast/ddl/drop_table.rs b/src/ast/ddl/drop_table.rs index daa1a695..8e5728fc 100644 --- a/src/ast/ddl/drop_table.rs +++ b/src/ast/ddl/drop_table.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{DDLStatement, SQLStatement, TableName}; +use crate::ast::{types::TableName, DDLStatement, SQLStatement}; /* DROP TABLE [IF EXISTS] [database_name.]table_name; diff --git a/src/ast/dml/delete.rs b/src/ast/dml/delete.rs index 604e4007..c3f9c654 100644 --- a/src/ast/dml/delete.rs +++ b/src/ast/dml/delete.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{DMLStatement, SQLStatement, TableName}; +use crate::ast::{types::TableName, DMLStatement, SQLStatement}; use super::parts::{_where::WhereClause, target::UpdateTarget}; diff --git a/src/ast/dml/expressions/between.rs b/src/ast/dml/expressions/between.rs index 602b9728..353437d5 100644 --- a/src/ast/dml/expressions/between.rs +++ b/src/ast/dml/expressions/between.rs @@ -1,6 +1,6 @@ use std::ops::Not; -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; use super::not_between::NotBetweenExpression; diff --git a/src/ast/dml/expressions/binary.rs b/src/ast/dml/expressions/binary.rs index 28940ac3..03ca5204 100644 --- a/src/ast/dml/expressions/binary.rs +++ b/src/ast/dml/expressions/binary.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; use super::operators::BinaryOperator; diff --git a/src/ast/dml/expressions/call.rs b/src/ast/dml/expressions/call.rs index b9532fc2..f4ff7824 100644 --- a/src/ast/dml/expressions/call.rs +++ b/src/ast/dml/expressions/call.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{Function, SQLExpression}; +use crate::ast::types::{Function, SQLExpression}; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/expressions/list.rs b/src/ast/dml/expressions/list.rs index fdf90f6b..5bafadff 100644 --- a/src/ast/dml/expressions/list.rs +++ b/src/ast/dml/expressions/list.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/expressions/not_between.rs b/src/ast/dml/expressions/not_between.rs index eebb963a..f743a245 100644 --- a/src/ast/dml/expressions/not_between.rs +++ b/src/ast/dml/expressions/not_between.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/expressions/parentheses.rs b/src/ast/dml/expressions/parentheses.rs index 7e06f142..2d51f078 100644 --- a/src/ast/dml/expressions/parentheses.rs +++ b/src/ast/dml/expressions/parentheses.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/expressions/subquery.rs b/src/ast/dml/expressions/subquery.rs index 146f2ac2..dc27bf5e 100644 --- a/src/ast/dml/expressions/subquery.rs +++ b/src/ast/dml/expressions/subquery.rs @@ -1,4 +1,4 @@ -use crate::ast::{dml::select::SelectQuery, predule::SQLExpression}; +use crate::ast::{dml::select::SelectQuery, types::SQLExpression}; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/expressions/unary.rs b/src/ast/dml/expressions/unary.rs index ecb3abfd..66127575 100644 --- a/src/ast/dml/expressions/unary.rs +++ b/src/ast/dml/expressions/unary.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; use super::operators::UnaryOperator; diff --git a/src/ast/dml/insert.rs b/src/ast/dml/insert.rs index 6a73e3e9..e0d27266 100644 --- a/src/ast/dml/insert.rs +++ b/src/ast/dml/insert.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{DMLStatement, SQLStatement, TableName}; +use crate::ast::{types::TableName, DMLStatement, SQLStatement}; use super::{parts::insert_values::InsertValue, select::SelectQuery}; diff --git a/src/ast/dml/parts/from.rs b/src/ast/dml/parts/from.rs index 417d96d2..c5a1793f 100644 --- a/src/ast/dml/parts/from.rs +++ b/src/ast/dml/parts/from.rs @@ -1,4 +1,4 @@ -use crate::ast::{dml::expressions::subquery::SubqueryExpression, predule::TableName}; +use crate::ast::{dml::expressions::subquery::SubqueryExpression, types::TableName}; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/parts/group_by.rs b/src/ast/dml/parts/group_by.rs index f9d704c0..51587d00 100644 --- a/src/ast/dml/parts/group_by.rs +++ b/src/ast/dml/parts/group_by.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SelectColumn; +use crate::ast::types::SelectColumn; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/parts/having.rs b/src/ast/dml/parts/having.rs index 07a3fec4..8cbfa4a3 100644 --- a/src/ast/dml/parts/having.rs +++ b/src/ast/dml/parts/having.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/parts/insert_values.rs b/src/ast/dml/parts/insert_values.rs index 7882b05b..377283a3 100644 --- a/src/ast/dml/parts/insert_values.rs +++ b/src/ast/dml/parts/insert_values.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; #[derive(Clone, Debug, PartialEq)] pub struct InsertValue { diff --git a/src/ast/dml/parts/join.rs b/src/ast/dml/parts/join.rs index e799c7e9..2d8d3bdb 100644 --- a/src/ast/dml/parts/join.rs +++ b/src/ast/dml/parts/join.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{SQLExpression, TableName}; +use crate::ast::types::{SQLExpression, TableName}; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/parts/order_by.rs b/src/ast/dml/parts/order_by.rs index 73e9e5c9..4214911c 100644 --- a/src/ast/dml/parts/order_by.rs +++ b/src/ast/dml/parts/order_by.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/parts/select_item.rs b/src/ast/dml/parts/select_item.rs index d7b9900f..83bb74bc 100644 --- a/src/ast/dml/parts/select_item.rs +++ b/src/ast/dml/parts/select_item.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/parts/target.rs b/src/ast/dml/parts/target.rs index 74b05c55..f7308edd 100644 --- a/src/ast/dml/parts/target.rs +++ b/src/ast/dml/parts/target.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/parts/update_item.rs b/src/ast/dml/parts/update_item.rs index bb9a8cae..23e84b37 100644 --- a/src/ast/dml/parts/update_item.rs +++ b/src/ast/dml/parts/update_item.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; #[derive(Clone, Debug, PartialEq)] pub struct UpdateItem { diff --git a/src/ast/dml/parts/where.rs b/src/ast/dml/parts/where.rs index 56105f67..acca1ba9 100644 --- a/src/ast/dml/parts/where.rs +++ b/src/ast/dml/parts/where.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; diff --git a/src/ast/dml/plan/delete/from.rs b/src/ast/dml/plan/delete/from.rs index fa9a89be..bf6baaf4 100644 --- a/src/ast/dml/plan/delete/from.rs +++ b/src/ast/dml/plan/delete/from.rs @@ -1,4 +1,4 @@ -use crate::ast::{dml::plan::select::scan::ScanType, predule::TableName}; +use crate::ast::{dml::plan::select::scan::ScanType, types::TableName}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct DeleteFromPlan { diff --git a/src/ast/dml/plan/select/filter.rs b/src/ast/dml/plan/select/filter.rs index 85f77ee9..4317c600 100644 --- a/src/ast/dml/plan/select/filter.rs +++ b/src/ast/dml/plan/select/filter.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; #[derive(Clone, Debug, PartialEq)] pub struct FilterPlan { diff --git a/src/ast/dml/plan/select/from.rs b/src/ast/dml/plan/select/from.rs index 5c484061..308df638 100644 --- a/src/ast/dml/plan/select/from.rs +++ b/src/ast/dml/plan/select/from.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use super::scan::ScanType; diff --git a/src/ast/dml/plan/select/join.rs b/src/ast/dml/plan/select/join.rs index 5a881b67..d874d13b 100644 --- a/src/ast/dml/plan/select/join.rs +++ b/src/ast/dml/plan/select/join.rs @@ -1,6 +1,6 @@ use crate::ast::{ dml::parts::join::JoinType, - predule::{Index, SQLExpression, TableName}, + types::{Index, SQLExpression, TableName}, }; #[derive(Clone, Debug, PartialEq)] diff --git a/src/ast/dml/plan/select/scan.rs b/src/ast/dml/plan/select/scan.rs index 75dc040a..0ece5a2a 100644 --- a/src/ast/dml/plan/select/scan.rs +++ b/src/ast/dml/plan/select/scan.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::Index; +use crate::ast::types::Index; #[derive(Clone, Debug, PartialEq, Eq)] pub enum ScanType { diff --git a/src/ast/dml/plan/select/subquery.rs b/src/ast/dml/plan/select/subquery.rs index 30f81ad7..77a8ea31 100644 --- a/src/ast/dml/plan/select/subquery.rs +++ b/src/ast/dml/plan/select/subquery.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{Index, SQLExpression, TableName}; +use crate::ast::types::{Index, SQLExpression, TableName}; #[derive(Clone, Debug, PartialEq)] pub struct SelectSubqueryPlan { diff --git a/src/ast/dml/plan/update/from.rs b/src/ast/dml/plan/update/from.rs index 94657818..322f32f3 100644 --- a/src/ast/dml/plan/update/from.rs +++ b/src/ast/dml/plan/update/from.rs @@ -1,4 +1,4 @@ -use crate::ast::{dml::plan::select::scan::ScanType, predule::TableName}; +use crate::ast::{dml::plan::select::scan::ScanType, types::TableName}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct UpdateFromPlan { diff --git a/src/ast/dml/select.rs b/src/ast/dml/select.rs index d0411b5c..b6a159c2 100644 --- a/src/ast/dml/select.rs +++ b/src/ast/dml/select.rs @@ -2,7 +2,8 @@ use serde::{Deserialize, Serialize}; use crate::ast::{ ddl::drop_database::SQLStatement, - predule::{DMLStatement, SQLExpression, SelectColumn, TableName}, + types::{SQLExpression, SelectColumn, TableName}, + DMLStatement, }; use super::{ diff --git a/src/ast/dml/update.rs b/src/ast/dml/update.rs index 5dfd932a..52c3556a 100644 --- a/src/ast/dml/update.rs +++ b/src/ast/dml/update.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{DMLStatement, SQLStatement, TableName}; +use crate::ast::{types::TableName, DMLStatement, SQLStatement}; use super::parts::{_where::WhereClause, target::UpdateTarget, update_item::UpdateItem}; diff --git a/src/ast/mod.rs b/src/ast/mod.rs index 45b0fe2d..b1c95973 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -3,5 +3,67 @@ pub mod dcl; pub mod ddl; pub mod dml; pub mod other; -pub mod predule; +pub mod tcl; pub mod types; + +use crate::ast::{ + ddl::{ + alter_database::AlterDatabaseQuery, alter_table::AlterTableQuery, + create_database::CreateDatabaseQuery, create_index::CreateIndexQuery, + create_table::CreateTableQuery, drop_database::DropDatabaseQuery, + drop_table::DropTableQuery, + }, + dml::{delete::DeleteQuery, insert::InsertQuery, select::SelectQuery, update::UpdateQuery}, + other::{ + desc_table::DescTableQuery, show_databases::ShowDatabasesQuery, + show_tables::ShowTablesQuery, use_database::UseDatabaseQuery, + }, +}; + +use self::tcl::{BeginTransactionQuery, CommitQuery, RollbackQuery}; + +#[derive(Clone, Debug, PartialEq)] +pub enum SQLStatement { + DDL(DDLStatement), + DML(DMLStatement), + DCL(DCLStatement), + TCL(TCLStatement), + Other(OtherStatement), +} + +#[derive(Clone, Debug, PartialEq)] +pub enum DDLStatement { + CreateDatabaseQuery(CreateDatabaseQuery), + AlterDatabase(AlterDatabaseQuery), + DropDatabaseQuery(DropDatabaseQuery), + CreateTableQuery(CreateTableQuery), + AlterTableQuery(AlterTableQuery), + DropTableQuery(DropTableQuery), + CreateIndexQuery(CreateIndexQuery), +} + +#[derive(Clone, Debug, PartialEq)] +pub enum DMLStatement { + InsertQuery(InsertQuery), + UpdateQuery(UpdateQuery), + DeleteQuery(DeleteQuery), + SelectQuery(SelectQuery), +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum DCLStatement {} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum OtherStatement { + ShowDatabases(ShowDatabasesQuery), + UseDatabase(UseDatabaseQuery), + ShowTables(ShowTablesQuery), + DescTable(DescTableQuery), +} + +#[derive(Clone, Debug, PartialEq, Eq)] +pub enum TCLStatement { + BeginTransaction(BeginTransactionQuery), + Commit(CommitQuery), + Rollback(RollbackQuery), +} diff --git a/src/ast/other/desc_table.rs b/src/ast/other/desc_table.rs index 26ec3f1a..7ad99ee7 100644 --- a/src/ast/other/desc_table.rs +++ b/src/ast/other/desc_table.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{OtherStatement, SQLStatement, TableName}; +use crate::ast::{types::TableName, OtherStatement, SQLStatement}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct DescTableQuery { diff --git a/src/ast/other/show_databases.rs b/src/ast/other/show_databases.rs index c33b9800..af1b2841 100644 --- a/src/ast/other/show_databases.rs +++ b/src/ast/other/show_databases.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{OtherStatement, SQLStatement}; +use crate::ast::{OtherStatement, SQLStatement}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct ShowDatabasesQuery {} diff --git a/src/ast/other/show_tables.rs b/src/ast/other/show_tables.rs index 1cbaf1dd..4a921a97 100644 --- a/src/ast/other/show_tables.rs +++ b/src/ast/other/show_tables.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{OtherStatement, SQLStatement}; +use crate::ast::{OtherStatement, SQLStatement}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct ShowTablesQuery { diff --git a/src/ast/other/use_database.rs b/src/ast/other/use_database.rs index 756a9e73..f77550a8 100644 --- a/src/ast/other/use_database.rs +++ b/src/ast/other/use_database.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::{OtherStatement, SQLStatement}; +use crate::ast::{OtherStatement, SQLStatement}; #[derive(Clone, Debug, PartialEq, Eq)] pub struct UseDatabaseQuery { diff --git a/src/ast/predule.rs b/src/ast/predule.rs deleted file mode 100644 index 4affccd2..00000000 --- a/src/ast/predule.rs +++ /dev/null @@ -1,7 +0,0 @@ -#![allow(unused_imports)] -pub use super::commands::*; -pub use super::dcl::*; -pub use super::ddl::*; -pub use super::dml::*; -pub use super::other::*; -pub use super::types::*; diff --git a/src/ast/tcl/begin_transaction.rs b/src/ast/tcl/begin_transaction.rs new file mode 100644 index 00000000..3ac7c204 --- /dev/null +++ b/src/ast/tcl/begin_transaction.rs @@ -0,0 +1,2 @@ +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct BeginTransactionQuery {} diff --git a/src/ast/tcl/commit.rs b/src/ast/tcl/commit.rs new file mode 100644 index 00000000..e7186dc1 --- /dev/null +++ b/src/ast/tcl/commit.rs @@ -0,0 +1,2 @@ +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct CommitQuery {} diff --git a/src/ast/tcl/mod.rs b/src/ast/tcl/mod.rs new file mode 100644 index 00000000..919b3c8a --- /dev/null +++ b/src/ast/tcl/mod.rs @@ -0,0 +1,7 @@ +mod begin_transaction; +mod commit; +mod rollback; + +pub use begin_transaction::*; +pub use commit::*; +pub use rollback::*; diff --git a/src/ast/tcl/rollback.rs b/src/ast/tcl/rollback.rs new file mode 100644 index 00000000..28639340 --- /dev/null +++ b/src/ast/tcl/rollback.rs @@ -0,0 +1,2 @@ +#[derive(Clone, Debug, PartialEq, Eq)] +pub struct RollbackQuery {} diff --git a/src/ast/types/column.rs b/src/ast/types/column.rs index b8be2e51..3ea63977 100644 --- a/src/ast/types/column.rs +++ b/src/ast/types/column.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::DataType; +use crate::ast::types::DataType; use serde::{Deserialize, Serialize}; use super::expression::SQLExpression; diff --git a/src/ast/types/foreign_key.rs b/src/ast/types/foreign_key.rs index a4904c42..53e0a0e8 100644 --- a/src/ast/types/foreign_key.rs +++ b/src/ast/types/foreign_key.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use serde::{Deserialize, Serialize}; #[derive(Deserialize, Serialize, Clone, Debug, PartialEq, Eq)] diff --git a/src/ast/types/mod.rs b/src/ast/types/mod.rs index ba1d3b8c..98aa3428 100644 --- a/src/ast/types/mod.rs +++ b/src/ast/types/mod.rs @@ -22,9 +22,6 @@ pub use select_column::*; pub mod function; pub use function::*; -pub mod statement; -pub use statement::*; - pub mod expression; pub use expression::*; diff --git a/src/ast/types/select_column.rs b/src/ast/types/select_column.rs index 277a4f13..4a4d7d9e 100644 --- a/src/ast/types/select_column.rs +++ b/src/ast/types/select_column.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use serde::{Deserialize, Serialize}; // [table_alias.]column_name diff --git a/src/ast/types/statement.rs b/src/ast/types/statement.rs deleted file mode 100644 index b2f942a6..00000000 --- a/src/ast/types/statement.rs +++ /dev/null @@ -1,51 +0,0 @@ -use crate::ast::{ - ddl::{ - alter_database::AlterDatabaseQuery, alter_table::AlterTableQuery, - create_database::CreateDatabaseQuery, create_index::CreateIndexQuery, - create_table::CreateTableQuery, drop_database::DropDatabaseQuery, - drop_table::DropTableQuery, - }, - dml::{delete::DeleteQuery, insert::InsertQuery, select::SelectQuery, update::UpdateQuery}, - other::{ - desc_table::DescTableQuery, show_databases::ShowDatabasesQuery, - show_tables::ShowTablesQuery, use_database::UseDatabaseQuery, - }, -}; - -#[derive(Clone, Debug, PartialEq)] -pub enum SQLStatement { - DDL(DDLStatement), - DML(DMLStatement), - DCL(DCLStatement), - Other(OtherStatement), -} - -#[derive(Clone, Debug, PartialEq)] -pub enum DDLStatement { - CreateDatabaseQuery(CreateDatabaseQuery), - AlterDatabase(AlterDatabaseQuery), - DropDatabaseQuery(DropDatabaseQuery), - CreateTableQuery(CreateTableQuery), - AlterTableQuery(AlterTableQuery), - DropTableQuery(DropTableQuery), - CreateIndexQuery(CreateIndexQuery), -} - -#[derive(Clone, Debug, PartialEq)] -pub enum DMLStatement { - InsertQuery(InsertQuery), - UpdateQuery(UpdateQuery), - DeleteQuery(DeleteQuery), - SelectQuery(SelectQuery), -} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum DCLStatement {} - -#[derive(Clone, Debug, PartialEq, Eq)] -pub enum OtherStatement { - ShowDatabases(ShowDatabasesQuery), - UseDatabase(UseDatabaseQuery), - ShowTables(ShowTablesQuery), - DescTable(DescTableQuery), -} diff --git a/src/executor/common.rs b/src/executor/common.rs index a7c7ec19..597cec41 100644 --- a/src/executor/common.rs +++ b/src/executor/common.rs @@ -4,7 +4,7 @@ use std::io::ErrorKind; use super::config::table::TableConfig; use super::encoder::storage::StorageEncoder; use super::predule::Executor; -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use crate::errors::execute_error::ExecuteError; impl Executor { diff --git a/src/executor/config/row.rs b/src/executor/config/row.rs index 1b314f44..56b37c06 100644 --- a/src/executor/config/row.rs +++ b/src/executor/config/row.rs @@ -1,7 +1,7 @@ use itertools::Itertools; use serde::{Deserialize, Serialize}; -use crate::{ast::predule::TableName, utils::float::Float64}; +use crate::{ast::types::TableName, utils::float::Float64}; #[derive(Deserialize, Serialize, Clone, Debug, PartialEq, PartialOrd, Eq, Hash)] pub enum TableDataFieldType { diff --git a/src/executor/config/table.rs b/src/executor/config/table.rs index 572908b4..063bc49a 100644 --- a/src/executor/config/table.rs +++ b/src/executor/config/table.rs @@ -3,8 +3,8 @@ use std::{collections::HashMap, iter::FromIterator}; use serde::{Deserialize, Serialize}; use crate::ast::{ - ddl::{create_table::CreateTableQuery, drop_database::Column}, - predule::{ForeignKey, TableName, UniqueKey}, + ddl::create_table::CreateTableQuery, + types::{Column, ForeignKey, TableName, UniqueKey}, }; #[derive(Deserialize, Serialize, Debug, Clone)] diff --git a/src/executor/executor.rs b/src/executor/executor.rs index ba95fd56..a6e28a87 100644 --- a/src/executor/executor.rs +++ b/src/executor/executor.rs @@ -3,7 +3,7 @@ use std::error::Error; use std::path::PathBuf; use crate::ast::ddl::create_database::CreateDatabaseQuery; -use crate::ast::predule::{DDLStatement, DMLStatement, OtherStatement, SQLStatement}; +use crate::ast::{DDLStatement, DMLStatement, OtherStatement, SQLStatement}; use crate::errors::execute_error::ExecuteError; use crate::executor::predule::ExecuteResult; use crate::logger::predule::Logger; @@ -69,6 +69,7 @@ impl Executor { pub async fn process_query( &self, statement: SQLStatement, + _connection_id: String, ) -> Result> { Logger::info(format!("AST echo: {:?}", statement)); diff --git a/src/executor/implements/ddl/alter_table.rs b/src/executor/implements/ddl/alter_table.rs index d2c6a5b0..6236ae30 100644 --- a/src/executor/implements/ddl/alter_table.rs +++ b/src/executor/implements/ddl/alter_table.rs @@ -2,7 +2,7 @@ use std::error::Error; use std::io::ErrorKind; use crate::ast::ddl::alter_table::{AlterColumnAction, AlterTableAction, AlterTableQuery}; -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use crate::errors::predule::ExecuteError; use crate::executor::config::table::TableConfig; use crate::executor::encoder::storage::StorageEncoder; diff --git a/src/executor/implements/ddl/drop_table.rs b/src/executor/implements/ddl/drop_table.rs index 0660ee91..4e4a1158 100644 --- a/src/executor/implements/ddl/drop_table.rs +++ b/src/executor/implements/ddl/drop_table.rs @@ -2,7 +2,7 @@ use std::error::Error; use std::io::ErrorKind; use crate::ast::ddl::drop_table::DropTableQuery; -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use crate::errors::predule::ExecuteError; use crate::executor::predule::{ExecuteResult, Executor}; use crate::executor::result::{ExecuteColumn, ExecuteColumnType, ExecuteField, ExecuteRow}; diff --git a/src/executor/implements/dml/insert.rs b/src/executor/implements/dml/insert.rs index 5805c800..e6f6ae78 100644 --- a/src/executor/implements/dml/insert.rs +++ b/src/executor/implements/dml/insert.rs @@ -4,7 +4,7 @@ use std::io::ErrorKind; use std::iter::FromIterator; use crate::ast::dml::insert::{InsertData, InsertQuery}; -use crate::ast::predule::SQLExpression; +use crate::ast::types::SQLExpression; use crate::errors::predule::ExecuteError; use crate::executor::config::row::{TableDataField, TableDataRow}; use crate::executor::config::table::TableConfig; diff --git a/src/executor/implements/dml/scan.rs b/src/executor/implements/dml/scan.rs index 43adcf86..a89863f1 100644 --- a/src/executor/implements/dml/scan.rs +++ b/src/executor/implements/dml/scan.rs @@ -4,7 +4,7 @@ use std::path::PathBuf; use futures::future::join_all; -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use crate::errors::predule::ExecuteError; use crate::executor::config::row::TableDataRow; use crate::executor::encoder::storage::StorageEncoder; @@ -79,7 +79,7 @@ impl Executor { } } Err(error) => match error.kind() { - ErrorKind::NotFound => Err(ExecuteError::boxed("base path not exists")), + ErrorKind::NotFound => Err(ExecuteError::boxed("base path not exists (3)")), _ => Err(ExecuteError::boxed("full scan failed")), }, } diff --git a/src/executor/implements/dml/select.rs b/src/executor/implements/dml/select.rs index 459de818..b5b7336c 100644 --- a/src/executor/implements/dml/select.rs +++ b/src/executor/implements/dml/select.rs @@ -9,7 +9,7 @@ use crate::ast::dml::parts::select_item::{SelectItem, SelectKind}; use crate::ast::dml::plan::select::scan::ScanType; use crate::ast::dml::plan::select::select_plan::SelectPlanItem; use crate::ast::dml::select::SelectQuery; -use crate::ast::predule::{SQLExpression, SelectColumn}; +use crate::ast::types::{SQLExpression, SelectColumn}; use crate::errors::type_error::TypeError; use crate::executor::config::row::{TableDataField, TableDataFieldType, TableDataRow}; use crate::executor::predule::{ diff --git a/src/executor/reduce.rs b/src/executor/reduce.rs index 6afe2392..e04dad6d 100644 --- a/src/executor/reduce.rs +++ b/src/executor/reduce.rs @@ -8,7 +8,7 @@ use itertools::Itertools; use crate::ast::dml::expressions::binary::BinaryOperatorExpression; use crate::ast::dml::expressions::operators::{BinaryOperator, UnaryOperator}; -use crate::ast::predule::{SQLExpression, TableName, Column, BuiltInFunction, Function, AggregateFunction}; +use crate::ast::types::{ AggregateFunction, BuiltInFunction, Column, Function, SQLExpression, TableName}; use crate::errors::predule::{TypeError, ExecuteError}; use crate::executor::predule::{ Executor, ExecuteColumnType}; diff --git a/src/executor/result.rs b/src/executor/result.rs index f04bd97c..dd4e623a 100644 --- a/src/executor/result.rs +++ b/src/executor/result.rs @@ -1,6 +1,6 @@ use itertools::Itertools; -use crate::{ast::predule::DataType, pgwire::protocol::DataTypeOid}; +use crate::{ast::types::DataType, pgwire::protocol::DataTypeOid}; use super::config::row::TableDataFieldType; diff --git a/src/parser/implements/common.rs b/src/parser/implements/common.rs index a485e527..263b4b2a 100644 --- a/src/parser/implements/common.rs +++ b/src/parser/implements/common.rs @@ -2,7 +2,7 @@ use std::error::Error; use crate::ast::dml::expressions::subquery::SubqueryExpression; use crate::ast::dml::parts::join::JoinType; -use crate::ast::predule::{Column, DataType, SelectColumn, TableName}; +use crate::ast::types::{Column, DataType, SelectColumn, TableName}; use crate::errors::predule::ParsingError; use crate::lexer::predule::{OperatorToken, Token}; use crate::parser::predule::{Parser, ParserContext}; diff --git a/src/parser/implements/ddl/top_level.rs b/src/parser/implements/ddl/top_level.rs index 5e750a83..27e42dfa 100644 --- a/src/parser/implements/ddl/top_level.rs +++ b/src/parser/implements/ddl/top_level.rs @@ -1,4 +1,4 @@ -use crate::ast::predule::SQLStatement; +use crate::ast::SQLStatement; use crate::errors::predule::ParsingError; use crate::lexer::predule::Token; use crate::parser::context::ParserContext; diff --git a/src/parser/implements/dml/expression.rs b/src/parser/implements/dml/expression.rs index e2f6ff23..b7989669 100644 --- a/src/parser/implements/dml/expression.rs +++ b/src/parser/implements/dml/expression.rs @@ -9,7 +9,7 @@ use crate::ast::dml::expressions::not_between::NotBetweenExpression; use crate::ast::dml::expressions::operators::{BinaryOperator, UnaryOperator}; use crate::ast::dml::expressions::parentheses::ParenthesesExpression; use crate::ast::dml::expressions::unary::UnaryOperatorExpression; -use crate::ast::predule::{BuiltInFunction, SQLExpression, SelectColumn, UserDefinedFunction}; +use crate::ast::types::{BuiltInFunction, SQLExpression, SelectColumn, UserDefinedFunction}; use crate::errors::predule::ParsingError; use crate::lexer::predule::Token; use crate::parser::predule::Parser; diff --git a/src/parser/implements/other/backslash_command.rs b/src/parser/implements/other/backslash_command.rs index 4d0107da..9361b13f 100644 --- a/src/parser/implements/other/backslash_command.rs +++ b/src/parser/implements/other/backslash_command.rs @@ -1,7 +1,7 @@ use std::error::Error; use crate::ast::other::show_databases::ShowDatabasesQuery; -use crate::ast::predule::SQLStatement; +use crate::ast::SQLStatement; use crate::errors::predule::ParsingError; use crate::lexer::predule::Token; use crate::parser::predule::{Parser, ParserContext}; diff --git a/src/parser/implements/other/desc.rs b/src/parser/implements/other/desc.rs index dda67d21..cc4bda97 100644 --- a/src/parser/implements/other/desc.rs +++ b/src/parser/implements/other/desc.rs @@ -1,7 +1,7 @@ use std::error::Error; use crate::ast::other::desc_table::DescTableQuery; -use crate::ast::predule::SQLStatement; +use crate::ast::SQLStatement; use crate::errors::predule::ParsingError; use crate::parser::predule::{Parser, ParserContext}; diff --git a/src/parser/implements/other/show.rs b/src/parser/implements/other/show.rs index fa3b5a6a..783d0021 100644 --- a/src/parser/implements/other/show.rs +++ b/src/parser/implements/other/show.rs @@ -2,7 +2,7 @@ use std::error::Error; use crate::ast::other::show_databases::ShowDatabasesQuery; use crate::ast::other::show_tables::ShowTablesQuery; -use crate::ast::predule::SQLStatement; +use crate::ast::SQLStatement; use crate::errors::predule::ParsingError; use crate::lexer::predule::Token; use crate::parser::predule::{Parser, ParserContext}; diff --git a/src/parser/implements/other/use.rs b/src/parser/implements/other/use.rs index 00a48e01..d3ac4eac 100644 --- a/src/parser/implements/other/use.rs +++ b/src/parser/implements/other/use.rs @@ -1,7 +1,7 @@ use std::error::Error; use crate::ast::other::use_database::UseDatabaseQuery; -use crate::ast::predule::SQLStatement; +use crate::ast::SQLStatement; use crate::errors::predule::ParsingError; use crate::lexer::predule::Token; use crate::parser::predule::{Parser, ParserContext}; diff --git a/src/parser/parser.rs b/src/parser/parser.rs index 9d51510c..def9ccfa 100644 --- a/src/parser/parser.rs +++ b/src/parser/parser.rs @@ -1,6 +1,6 @@ use std::{collections::VecDeque, error::Error}; -use crate::ast::predule::SQLStatement; +use crate::ast::SQLStatement; use crate::lexer::predule::{Token, Tokenizer}; use crate::parser::predule::ParserContext; diff --git a/src/parser/test/alter_table.rs b/src/parser/test/alter_table.rs index 15992e9a..e99accf5 100644 --- a/src/parser/test/alter_table.rs +++ b/src/parser/test/alter_table.rs @@ -2,16 +2,12 @@ use crate::{ ast::{ - ddl::{ - alter_table::{ - AlterColumnDropDefault, AlterColumnDropNotNull, AlterColumnSetDefault, - AlterColumnSetNotNull, AlterColumnSetType, AlterTableAddColumn, - AlterTableAlterColumn, AlterTableDropColumn, AlterTableQuery, - AlterTableRenameColumn, AlterTableRenameTo, - }, - drop_database::Column, + ddl::alter_table::{ + AlterColumnDropDefault, AlterColumnDropNotNull, AlterColumnSetDefault, + AlterColumnSetNotNull, AlterColumnSetType, AlterTableAddColumn, AlterTableAlterColumn, + AlterTableDropColumn, AlterTableQuery, AlterTableRenameColumn, AlterTableRenameTo, }, - predule::{DataType, SQLExpression, TableName}, + types::{Column, DataType, SQLExpression, TableName}, }, parser::predule::{Parser, ParserContext}, }; diff --git a/src/parser/test/delete.rs b/src/parser/test/delete.rs index b9bbc96c..d1b38484 100644 --- a/src/parser/test/delete.rs +++ b/src/parser/test/delete.rs @@ -4,7 +4,7 @@ use crate::ast::dml::delete::DeleteQuery; use crate::ast::dml::expressions::binary::BinaryOperatorExpression; use crate::ast::dml::expressions::operators::BinaryOperator; use crate::ast::dml::parts::_where::WhereClause; -use crate::ast::predule::{SQLExpression, SelectColumn, TableName}; +use crate::ast::types::{SQLExpression, SelectColumn, TableName}; use crate::parser::context::ParserContext; use crate::parser::predule::Parser; diff --git a/src/parser/test/expressions.rs b/src/parser/test/expressions.rs index b0dd0d63..f81e6879 100644 --- a/src/parser/test/expressions.rs +++ b/src/parser/test/expressions.rs @@ -10,7 +10,7 @@ use crate::ast::dml::expressions::parentheses::ParenthesesExpression; use crate::ast::dml::expressions::unary::UnaryOperatorExpression; use crate::ast::dml::parts::select_item::SelectItem; use crate::ast::dml::select::SelectQuery; -use crate::ast::predule::{ConditionalFunction, SQLExpression, UserDefinedFunction}; +use crate::ast::types::{ConditionalFunction, SQLExpression, UserDefinedFunction}; use crate::parser::context::ParserContext; use crate::parser::predule::Parser; diff --git a/src/parser/test/insert.rs b/src/parser/test/insert.rs index 76479268..901b00aa 100644 --- a/src/parser/test/insert.rs +++ b/src/parser/test/insert.rs @@ -4,7 +4,7 @@ use crate::ast::dml::insert::InsertQuery; use crate::ast::dml::parts::insert_values::InsertValue; use crate::ast::dml::parts::select_item::SelectItem; use crate::ast::dml::select::SelectQuery; -use crate::ast::predule::{SQLExpression, SelectColumn, TableName}; +use crate::ast::types::{SQLExpression, SelectColumn, TableName}; use crate::parser::context::ParserContext; use crate::parser::predule::Parser; diff --git a/src/parser/test/other.rs b/src/parser/test/other.rs index b542263a..aec70f2a 100644 --- a/src/parser/test/other.rs +++ b/src/parser/test/other.rs @@ -4,7 +4,7 @@ use crate::ast::other::desc_table::DescTableQuery; use crate::ast::other::show_databases::ShowDatabasesQuery; use crate::ast::other::show_tables::ShowTablesQuery; use crate::ast::other::use_database::UseDatabaseQuery; -use crate::ast::predule::TableName; +use crate::ast::types::TableName; use crate::parser::context::ParserContext; use crate::parser::predule::Parser; diff --git a/src/parser/test/select.rs b/src/parser/test/select.rs index b89b033b..e444db1c 100644 --- a/src/parser/test/select.rs +++ b/src/parser/test/select.rs @@ -9,7 +9,7 @@ use crate::ast::dml::parts::join::{JoinClause, JoinType}; use crate::ast::dml::parts::order_by::{OrderByItem, OrderByNulls, OrderByType}; use crate::ast::dml::parts::select_item::{SelectItem, SelectWildCard}; use crate::ast::dml::select::SelectQuery; -use crate::ast::predule::{SQLExpression, SelectColumn, TableName}; +use crate::ast::types::{SQLExpression, SelectColumn, TableName}; use crate::parser::context::ParserContext; use crate::parser::predule::Parser; diff --git a/src/parser/test/update.rs b/src/parser/test/update.rs index 54480e9d..e78dd122 100644 --- a/src/parser/test/update.rs +++ b/src/parser/test/update.rs @@ -5,7 +5,7 @@ use crate::ast::dml::expressions::operators::BinaryOperator; use crate::ast::dml::parts::_where::WhereClause; use crate::ast::dml::parts::update_item::UpdateItem; use crate::ast::dml::update::UpdateQuery; -use crate::ast::predule::{SQLExpression, SelectColumn, TableName}; +use crate::ast::types::{SQLExpression, SelectColumn, TableName}; use crate::parser::context::ParserContext; use crate::parser::predule::Parser; diff --git a/src/pgwire/connection/connection.rs b/src/pgwire/connection/connection.rs index be43d544..b3da5a5f 100644 --- a/src/pgwire/connection/connection.rs +++ b/src/pgwire/connection/connection.rs @@ -6,7 +6,7 @@ use tokio::io::{AsyncRead, AsyncWrite}; use tokio_util::codec::Framed; use crate::{ - ast::predule::{OtherStatement, SQLStatement}, + ast::{OtherStatement, SQLStatement}, executor::executor::Executor, logger::predule::Logger, parser::{context::ParserContext, predule::Parser}, diff --git a/src/pgwire/connection/prepared_statement.rs b/src/pgwire/connection/prepared_statement.rs index 425e5142..8558eb8d 100644 --- a/src/pgwire/connection/prepared_statement.rs +++ b/src/pgwire/connection/prepared_statement.rs @@ -1,4 +1,4 @@ -use crate::{ast::predule::SQLStatement, pgwire::protocol::backend::FieldDescription}; +use crate::{ast::SQLStatement, pgwire::protocol::backend::FieldDescription}; #[derive(Debug, Clone)] pub struct PreparedStatement { diff --git a/src/pgwire/engine/engine.rs b/src/pgwire/engine/engine.rs index 708c35dd..369edd18 100644 --- a/src/pgwire/engine/engine.rs +++ b/src/pgwire/engine/engine.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use crate::{ - ast::predule::SQLStatement, + ast::SQLStatement, pgwire::protocol::backend::{ErrorResponse, FieldDescription}, }; diff --git a/src/pgwire/engine/rrdb.rs b/src/pgwire/engine/rrdb.rs index 566cc336..036b070a 100644 --- a/src/pgwire/engine/rrdb.rs +++ b/src/pgwire/engine/rrdb.rs @@ -1,7 +1,7 @@ use async_trait::async_trait; use tokio::sync::oneshot; -use crate::ast::predule::SQLStatement; +use crate::ast::SQLStatement; use crate::executor::predule::ExecuteResult; use crate::executor::result::ExecuteField; use crate::pgwire::engine::{Engine, Portal}; @@ -70,6 +70,7 @@ impl Engine for RRDBEngine { .send(ChannelRequest { statement: statement.to_owned(), response_sender, + connection_id: self.shared_state.client_info.connection_id.clone(), }) .await { diff --git a/src/server/channel.rs b/src/server/channel.rs index 7d346425..b21ee27c 100644 --- a/src/server/channel.rs +++ b/src/server/channel.rs @@ -2,11 +2,12 @@ use std::error::Error; use tokio::sync::oneshot::Sender; -use crate::{ast::predule::SQLStatement, executor::result::ExecuteResult}; +use crate::{ast::SQLStatement, executor::result::ExecuteResult}; #[derive(Debug)] pub struct ChannelRequest { pub statement: SQLStatement, + pub connection_id: String, pub response_sender: Sender, } diff --git a/src/server/server.rs b/src/server/server.rs index cd91766c..a5a4b3b2 100644 --- a/src/server/server.rs +++ b/src/server/server.rs @@ -35,7 +35,9 @@ impl Server { while let Some(request) = request_receiver.recv().await { tokio::spawn(async move { let executor = Executor::new(); - let result = executor.process_query(request.statement).await; + let result = executor + .process_query(request.statement, request.connection_id) + .await; match result { Ok(result) => {