diff --git a/minisql/src/error.rs b/minisql/src/error.rs index 51ca0cf..6000c0e 100644 --- a/minisql/src/error.rs +++ b/minisql/src/error.rs @@ -1,5 +1,5 @@ use crate::internals::row::ColumnPosition; -use crate::internals::schema::{ColumnName, TableName}; +use crate::schema::{ColumnName, TableName}; use crate::operation::InsertionValues; use crate::type_system::{DbType, Uuid, Value}; diff --git a/minisql/src/internals/mod.rs b/minisql/src/internals/mod.rs index 864d9d7..f4723f3 100644 --- a/minisql/src/internals/mod.rs +++ b/minisql/src/internals/mod.rs @@ -1,4 +1,3 @@ pub mod column_index; pub mod row; -pub mod schema; pub mod table; diff --git a/minisql/src/internals/table.rs b/minisql/src/internals/table.rs index e5506e0..914d1ef 100644 --- a/minisql/src/internals/table.rs +++ b/minisql/src/internals/table.rs @@ -3,7 +3,7 @@ use std::collections::{BTreeMap, HashMap, HashSet}; use crate::error::Error; use crate::internals::column_index::ColumnIndex; use crate::internals::row::{ColumnPosition, Row}; -use crate::internals::schema::{ColumnName, TableSchema, TableName}; +use crate::schema::{ColumnName, TableSchema, TableName}; use crate::result::DbResult; use crate::type_system::{IndexableValue, Uuid, Value}; @@ -206,7 +206,7 @@ impl Table { let column_name: ColumnName = self .schema .column_name_from_column_position(column_position)?; - let type_ = self.schema.types[column_position]; + let type_ = self.schema.column_type(column_position); Err(Error::ValueDoesNotMatchExpectedType( self.table_name().clone(), column_name, diff --git a/minisql/src/interpreter.rs b/minisql/src/interpreter.rs index 4bd3f35..7a3bad3 100644 --- a/minisql/src/interpreter.rs +++ b/minisql/src/interpreter.rs @@ -1,6 +1,6 @@ use crate::error::Error; use crate::internals::row::{ColumnPosition, Row}; -use crate::internals::schema::{TableName, TableSchema}; +use crate::schema::{TableName, TableSchema}; use crate::internals::table::Table; use crate::operation::{ColumnSelection, Condition, Operation}; use crate::result::DbResult; diff --git a/minisql/src/lib.rs b/minisql/src/lib.rs new file mode 100644 index 0000000..b8e95c3 --- /dev/null +++ b/minisql/src/lib.rs @@ -0,0 +1,7 @@ +pub mod schema; +pub mod interpreter; +pub mod operation; +pub mod type_system; +mod error; +mod internals; +mod result; diff --git a/minisql/src/main.rs b/minisql/src/main.rs deleted file mode 100644 index 9a4f292..0000000 --- a/minisql/src/main.rs +++ /dev/null @@ -1,10 +0,0 @@ -mod error; -mod internals; -mod interpreter; -mod operation; -mod result; -mod type_system; - -fn main() { - interpreter::example(); -} diff --git a/minisql/src/operation.rs b/minisql/src/operation.rs index a5fd0b7..3b060c9 100644 --- a/minisql/src/operation.rs +++ b/minisql/src/operation.rs @@ -1,4 +1,4 @@ -use crate::internals::schema::{ColumnName, TableName, TableSchema}; +use crate::schema::{ColumnName, TableName, TableSchema}; use crate::type_system::Value; // ==============SQL operations================ diff --git a/minisql/src/internals/schema.rs b/minisql/src/schema.rs similarity index 93% rename from minisql/src/internals/schema.rs rename to minisql/src/schema.rs index c23c24a..c9574ac 100644 --- a/minisql/src/internals/schema.rs +++ b/minisql/src/schema.rs @@ -11,16 +11,16 @@ use std::collections::HashMap; #[derive(Debug)] pub struct TableSchema { table_name: TableName, // used for descriptive errors - pub primary_key: ColumnPosition, - pub column_name_position_mapping: BiMap, - pub types: Vec, + primary_key: ColumnPosition, + column_name_position_mapping: BiMap, + types: Vec, } pub type TableName = String; pub type ColumnName = String; impl TableSchema { - pub fn new(table_name: TableName, primary_key: ColumnPosition, column_name_position_map: Vec<(ColumnName, ColumnPosition)>, types: Vec) -> Self { + pub(crate) fn new(table_name: TableName, primary_key: ColumnPosition, column_name_position_map: Vec<(ColumnName, ColumnPosition)>, types: Vec) -> Self { let mut column_name_position_mapping: BiMap = BiMap::new(); for (column_name, column_position) in column_name_position_map { column_name_position_mapping.insert(column_name, column_position); @@ -32,6 +32,10 @@ impl TableSchema { &self.table_name } + pub fn column_type(&self, column_position: ColumnPosition) -> DbType { + self.types[column_position] + } + fn get_column(&self, column_name: &ColumnName) -> DbResult<(DbType, ColumnPosition)> { match self.column_name_position_mapping.get_by_left(column_name) { Some(column_position) => match self.types.get(*column_position) {