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..ab5f724e 100644
--- a/src/ast/mod.rs
+++ b/src/ast/mod.rs
@@ -3,5 +3,56 @@ pub mod dcl;
 pub mod ddl;
 pub mod dml;
 pub mod other;
-pub mod predule;
 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,
+    },
+};
+
+#[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/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/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..137f97db 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;
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..f44d9211 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;
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..1e9ef522 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};
diff --git a/src/server/channel.rs b/src/server/channel.rs
index 7d346425..0c4ed993 100644
--- a/src/server/channel.rs
+++ b/src/server/channel.rs
@@ -2,7 +2,7 @@ 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 {