Merge branch 'operation-separation' into 'main'
Make interpreter a library See merge request x433485/minisql!6
This commit is contained in:
commit
29527e92ff
8 changed files with 20 additions and 20 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::internals::row::ColumnPosition;
|
use crate::internals::row::ColumnPosition;
|
||||||
use crate::internals::schema::{ColumnName, TableName};
|
use crate::schema::{ColumnName, TableName};
|
||||||
use crate::operation::InsertionValues;
|
use crate::operation::InsertionValues;
|
||||||
use crate::type_system::{DbType, Uuid, Value};
|
use crate::type_system::{DbType, Uuid, Value};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
pub mod column_index;
|
pub mod column_index;
|
||||||
pub mod row;
|
pub mod row;
|
||||||
pub mod schema;
|
|
||||||
pub mod table;
|
pub mod table;
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ use std::collections::{BTreeMap, HashMap, HashSet};
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use crate::internals::column_index::ColumnIndex;
|
use crate::internals::column_index::ColumnIndex;
|
||||||
use crate::internals::row::{ColumnPosition, Row};
|
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::result::DbResult;
|
||||||
use crate::type_system::{IndexableValue, Uuid, Value};
|
use crate::type_system::{IndexableValue, Uuid, Value};
|
||||||
|
|
||||||
|
|
@ -206,7 +206,7 @@ impl Table {
|
||||||
let column_name: ColumnName = self
|
let column_name: ColumnName = self
|
||||||
.schema
|
.schema
|
||||||
.column_name_from_column_position(column_position)?;
|
.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(
|
Err(Error::ValueDoesNotMatchExpectedType(
|
||||||
self.table_name().clone(),
|
self.table_name().clone(),
|
||||||
column_name,
|
column_name,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
use crate::error::Error;
|
use crate::error::Error;
|
||||||
use crate::internals::row::{ColumnPosition, Row};
|
use crate::internals::row::{ColumnPosition, Row};
|
||||||
use crate::internals::schema::{TableName, TableSchema};
|
use crate::schema::{TableName, TableSchema};
|
||||||
use crate::internals::table::Table;
|
use crate::internals::table::Table;
|
||||||
use crate::operation::{ColumnSelection, Condition, Operation};
|
use crate::operation::{ColumnSelection, Condition, Operation};
|
||||||
use crate::result::DbResult;
|
use crate::result::DbResult;
|
||||||
|
|
|
||||||
7
minisql/src/lib.rs
Normal file
7
minisql/src/lib.rs
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
pub mod schema;
|
||||||
|
pub mod interpreter;
|
||||||
|
pub mod operation;
|
||||||
|
pub mod type_system;
|
||||||
|
mod error;
|
||||||
|
mod internals;
|
||||||
|
mod result;
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
mod error;
|
|
||||||
mod internals;
|
|
||||||
mod interpreter;
|
|
||||||
mod operation;
|
|
||||||
mod result;
|
|
||||||
mod type_system;
|
|
||||||
|
|
||||||
fn main() {
|
|
||||||
interpreter::example();
|
|
||||||
}
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::internals::schema::{ColumnName, TableName, TableSchema};
|
use crate::schema::{ColumnName, TableName, TableSchema};
|
||||||
use crate::type_system::Value;
|
use crate::type_system::Value;
|
||||||
|
|
||||||
// ==============SQL operations================
|
// ==============SQL operations================
|
||||||
|
|
|
||||||
|
|
@ -11,16 +11,16 @@ use std::collections::HashMap;
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub struct TableSchema {
|
pub struct TableSchema {
|
||||||
table_name: TableName, // used for descriptive errors
|
table_name: TableName, // used for descriptive errors
|
||||||
pub primary_key: ColumnPosition,
|
primary_key: ColumnPosition,
|
||||||
pub column_name_position_mapping: BiMap<ColumnName, ColumnPosition>,
|
column_name_position_mapping: BiMap<ColumnName, ColumnPosition>,
|
||||||
pub types: Vec<DbType>,
|
types: Vec<DbType>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type TableName = String;
|
pub type TableName = String;
|
||||||
pub type ColumnName = String;
|
pub type ColumnName = String;
|
||||||
|
|
||||||
impl TableSchema {
|
impl TableSchema {
|
||||||
pub fn new(table_name: TableName, primary_key: ColumnPosition, column_name_position_map: Vec<(ColumnName, ColumnPosition)>, types: Vec<DbType>) -> Self {
|
pub(crate) fn new(table_name: TableName, primary_key: ColumnPosition, column_name_position_map: Vec<(ColumnName, ColumnPosition)>, types: Vec<DbType>) -> Self {
|
||||||
let mut column_name_position_mapping: BiMap<ColumnName, ColumnPosition> = BiMap::new();
|
let mut column_name_position_mapping: BiMap<ColumnName, ColumnPosition> = BiMap::new();
|
||||||
for (column_name, column_position) in column_name_position_map {
|
for (column_name, column_position) in column_name_position_map {
|
||||||
column_name_position_mapping.insert(column_name, column_position);
|
column_name_position_mapping.insert(column_name, column_position);
|
||||||
|
|
@ -32,6 +32,10 @@ impl TableSchema {
|
||||||
&self.table_name
|
&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)> {
|
fn get_column(&self, column_name: &ColumnName) -> DbResult<(DbType, ColumnPosition)> {
|
||||||
match self.column_name_position_mapping.get_by_left(column_name) {
|
match self.column_name_position_mapping.get_by_left(column_name) {
|
||||||
Some(column_position) => match self.types.get(*column_position) {
|
Some(column_position) => match self.types.get(*column_position) {
|
||||||
Loading…
Add table
Add a link
Reference in a new issue