diff --git a/src/sql/engine/engine.rs b/src/sql/engine/engine.rs index aa3871b7d..e09f6f0fd 100644 --- a/src/sql/engine/engine.rs +++ b/src/sql/engine/engine.rs @@ -12,7 +12,7 @@ use std::collections::{HashMap, HashSet}; /// The SQL engine interface. pub trait Engine<'a>: Sized { /// The transaction type. - type Transaction: Transaction + 'a; + type Transaction: Transaction + Catalog + 'a; /// Begins a read-write transaction. fn begin(&self) -> Result; @@ -32,11 +32,7 @@ pub trait Engine<'a>: Sized { /// All methods operate on row batches rather than single rows to amortize the /// cost. We have to do a Raft roundtrip for every call, and we'd rather not /// have to do a Raft roundtrip for every row. -/// -/// TODO: split out Catalog trait and don't have Transaction depend on it. This -/// enforces cleaner separation of when catalog access is valid (i.e. during -/// planning but not execution). -pub trait Transaction: Catalog { +pub trait Transaction { /// The transaction's MVCC version. fn version(&self) -> mvcc::Version; /// Whether the transaction is read-only. @@ -68,15 +64,13 @@ pub trait Transaction: Catalog { /// An index scan iterator. pub type IndexScan = Box)>>>; -/// The catalog stores schema information +/// The catalog stores schema information. pub trait Catalog { /// Creates a new table. fn create_table(&self, table: Table) -> Result<()>; - /// Drops a table. Errors if it does not exist. - /// - /// TODO: consider taking an if_exists parameter, but that will incur a Raft - /// roundtrip. - fn drop_table(&self, table: &str) -> Result<()>; + /// Drops a table. Errors if it does not exist, unless if_exists is true. + /// Returns true if the table existed and was deleted. + fn drop_table(&self, table: &str, if_exists: bool) -> Result; /// Fetches a table schema. fn get_table(&self, table: &str) -> Result>; /// Lists tables. diff --git a/src/sql/engine/local.rs b/src/sql/engine/local.rs index f8d097b8e..7be35f9ae 100644 --- a/src/sql/engine/local.rs +++ b/src/sql/engine/local.rs @@ -296,8 +296,14 @@ impl Catalog for Transaction { self.txn.set(&Key::Table((&table.name).into()).encode(), table.encode()) } - fn drop_table(&self, table: &str) -> Result<()> { - let table = self.must_get_table(table)?; + fn drop_table(&self, table: &str, if_exists: bool) -> Result { + let table = if !if_exists { + self.must_get_table(table)? + } else if let Some(table) = self.get_table(table)? { + table + } else { + return Ok(false); + }; if let Some((t, cs)) = self.references(&table.name, false)?.first() { return errinput!("table {} is referenced by table {} column {}", table.name, t, cs[0]); } @@ -305,7 +311,8 @@ impl Catalog for Transaction { while let Some(row) = scan.next().transpose()? { self.delete(&table.name, &[table.get_row_key(&row)?])? } - self.txn.delete(&Key::Table(table.name.into()).encode()) + self.txn.delete(&Key::Table(table.name.into()).encode())?; + Ok(true) } fn get_table(&self, table: &str) -> Result> { diff --git a/src/sql/engine/raft.rs b/src/sql/engine/raft.rs index 1dac78b87..f948476b4 100644 --- a/src/sql/engine/raft.rs +++ b/src/sql/engine/raft.rs @@ -33,7 +33,7 @@ enum Mutation { /// Creates a table CreateTable { txn: TransactionState, schema: Table }, /// Deletes a table - DeleteTable { txn: TransactionState, table: String }, + DeleteTable { txn: TransactionState, table: String, if_exists: bool }, } impl encoding::Value for Mutation {} @@ -270,9 +270,12 @@ impl Catalog for Transaction { self.client.mutate(Mutation::CreateTable { txn: self.state.clone(), schema: table }) } - fn drop_table(&self, table: &str) -> Result<()> { - self.client - .mutate(Mutation::DeleteTable { txn: self.state.clone(), table: table.to_string() }) + fn drop_table(&self, table: &str, if_exists: bool) -> Result { + self.client.mutate(Mutation::DeleteTable { + txn: self.state.clone(), + table: table.to_string(), + if_exists, + }) } fn get_table(&self, table: &str) -> Result> { @@ -323,8 +326,8 @@ impl State { Mutation::CreateTable { txn, schema } => { bincode::serialize(&self.engine.resume(txn)?.create_table(schema)?) } - Mutation::DeleteTable { txn, table } => { - bincode::serialize(&self.engine.resume(txn)?.drop_table(&table)?) + Mutation::DeleteTable { txn, table, if_exists } => { + bincode::serialize(&self.engine.resume(txn)?.drop_table(&table, if_exists)?) } }; Ok(response) diff --git a/src/sql/engine/session.rs b/src/sql/engine/session.rs index 98ac103af..e901b8e7c 100644 --- a/src/sql/engine/session.rs +++ b/src/sql/engine/session.rs @@ -69,7 +69,7 @@ impl<'a, E: Engine<'a>> Session<'a, E> { } // TODO: this needs testing. ast::Statement::Explain(statement) => self.with_txn_read_only(|txn| { - Ok(StatementResult::Explain(Plan::build(*statement, txn)?.optimize(txn)?)) + Ok(StatementResult::Explain(Plan::build(*statement, txn)?.optimize()?)) }), statement if self.txn.is_some() => { Self::execute_with(statement, self.txn.as_mut().unwrap()) @@ -101,7 +101,7 @@ impl<'a, E: Engine<'a>> Session<'a, E> { statement: ast::Statement, txn: &mut E::Transaction, ) -> Result { - Plan::build(statement, txn)?.optimize(txn)?.execute(txn)?.try_into() + Plan::build(statement, txn)?.optimize()?.execute(txn)?.try_into() } /// Runs a read-only closure in the session's transaction, or a new diff --git a/src/sql/execution/execute.rs b/src/sql/execution/execute.rs index 3ce47281f..17404d068 100644 --- a/src/sql/execution/execute.rs +++ b/src/sql/execution/execute.rs @@ -5,41 +5,45 @@ use super::source; use super::transform; use super::write; use crate::error::Result; -use crate::sql::engine::Transaction; +use crate::sql::engine::{Catalog, Transaction}; use crate::sql::plan::{Node, Plan}; use crate::sql::types::{Columns, Row, Rows}; /// Executes a plan, returning an execution result. -pub fn execute_plan(plan: Plan, txn: &impl Transaction) -> Result { +pub fn execute_plan( + plan: Plan, + txn: &impl Transaction, + catalog: &impl Catalog, +) -> Result { Ok(match plan { Plan::CreateTable { schema } => { let name = schema.name.clone(); - schema::create_table(txn, schema)?; + schema::create_table(catalog, schema)?; ExecutionResult::CreateTable { name } } Plan::DropTable { table, if_exists } => { - let existed = schema::drop_table(txn, &table, if_exists)?; + let existed = schema::drop_table(catalog, &table, if_exists)?; ExecutionResult::DropTable { name: table, existed } } - Plan::Delete { table, source } => { + Plan::Delete { table, key_index, source } => { let source = execute(source, txn)?; - let count = write::delete(txn, &table, source)?; + let count = write::delete(txn, table, key_index, source)?; ExecutionResult::Delete { count } } Plan::Insert { table, columns, expressions } => { - let count = write::insert(txn, &table, columns, expressions)?; + let count = write::insert(txn, table, columns, expressions)?; ExecutionResult::Insert { count } } Plan::Select(node) => ExecutionResult::Select { iter: execute(node, txn)? }, - Plan::Update { table, source, expressions } => { + Plan::Update { table, key_index, source, expressions } => { let source = execute(source, txn)?; let expressions = expressions.into_iter().map(|(i, _, expr)| (i, expr)).collect(); - let count = write::update(txn, &table, source, expressions)?; + let count = write::update(txn, table, key_index, source, expressions)?; ExecutionResult::Update { count } } }) @@ -68,10 +72,10 @@ pub fn execute(node: Node, txn: &impl Transaction) -> Result { } Node::IndexLookup { table, alias: _, column, values } => { - source::lookup_index(txn, &table, &column, values) + source::lookup_index(txn, table, column, values) } - Node::KeyLookup { table, alias: _, keys } => source::lookup_key(txn, &table, keys), + Node::KeyLookup { table, alias: _, keys } => source::lookup_key(txn, table, keys), Node::Limit { source, limit } => { let source = execute(*source, txn)?; @@ -101,7 +105,7 @@ pub fn execute(node: Node, txn: &impl Transaction) -> Result { Ok(transform::project(source, expressions)) } - Node::Scan { table, alias: _, filter } => source::scan(txn, &table, filter), + Node::Scan { table, alias: _, filter } => source::scan(txn, table, filter), } } diff --git a/src/sql/execution/schema.rs b/src/sql/execution/schema.rs index a060dffe6..9b7811718 100644 --- a/src/sql/execution/schema.rs +++ b/src/sql/execution/schema.rs @@ -1,18 +1,13 @@ use crate::error::Result; -use crate::sql::engine::Transaction; +use crate::sql::engine::Catalog; use crate::sql::types::schema::Table; // Creates a table (i.e. CREATE TABLE). -pub(super) fn create_table(txn: &impl Transaction, schema: Table) -> Result<()> { - txn.create_table(schema) +pub(super) fn create_table(catalog: &impl Catalog, schema: Table) -> Result<()> { + catalog.create_table(schema) } /// Deletes a table (i.e. DROP TABLE). Returns true if the table existed. -pub(super) fn drop_table(txn: &impl Transaction, table: &str, if_exists: bool) -> Result { - // TODO the planner should deal with this. - if if_exists && txn.get_table(table)?.is_none() { - return Ok(false); - } - txn.drop_table(table)?; - Ok(true) +pub(super) fn drop_table(catalog: &impl Catalog, table: &str, if_exists: bool) -> Result { + catalog.drop_table(table, if_exists) } diff --git a/src/sql/execution/source.rs b/src/sql/execution/source.rs index 608a5b6e7..fc5ea7502 100644 --- a/src/sql/execution/source.rs +++ b/src/sql/execution/source.rs @@ -1,16 +1,15 @@ use super::QueryIterator; use crate::error::Result; use crate::sql::engine::Transaction; +use crate::sql::types::schema::Table; use crate::sql::types::{Column, Expression, Row, Value}; /// A table scan source. pub(super) fn scan( txn: &impl Transaction, - table: &str, + table: Table, filter: Option, ) -> Result { - // TODO: this should not be fallible. Pass the schema in the plan node. - let table = txn.must_get_table(table)?; Ok(QueryIterator { columns: table.columns.into_iter().map(|c| Column { name: Some(c.name) }).collect(), rows: Box::new(txn.scan(&table.name, filter)?), @@ -20,11 +19,9 @@ pub(super) fn scan( /// A primary key lookup source. pub(super) fn lookup_key( txn: &impl Transaction, - table: &str, + table: Table, keys: Vec, ) -> Result { - // TODO: move catalog lookup elsewhere and make this infallible. - let table = txn.must_get_table(table)?; Ok(QueryIterator { columns: table.columns.iter().map(|c| Column { name: Some(c.name.clone()) }).collect(), rows: Box::new(txn.get(&table.name, &keys)?.into_iter().map(Ok)), @@ -34,13 +31,11 @@ pub(super) fn lookup_key( /// An index lookup source. pub(super) fn lookup_index( txn: &impl Transaction, - table: &str, - column: &str, + table: Table, + column: String, values: Vec, ) -> Result { - // TODO: pass in from planner. - let table = txn.must_get_table(table)?; - let pks: Vec<_> = txn.lookup_index(&table.name, column, &values)?.into_iter().collect(); + let pks: Vec<_> = txn.lookup_index(&table.name, &column, &values)?.into_iter().collect(); let rows = txn.get(&table.name, &pks)?; Ok(QueryIterator { diff --git a/src/sql/execution/write.rs b/src/sql/execution/write.rs index c1a94c123..8ba9723ef 100644 --- a/src/sql/execution/write.rs +++ b/src/sql/execution/write.rs @@ -7,13 +7,15 @@ use crate::sql::types::{Expression, Row, Value}; /// Deletes rows, taking primary keys from the source (i.e. DELETE). /// Returns the number of rows deleted. -pub(super) fn delete(txn: &impl Transaction, table: &str, source: QueryIterator) -> Result { - // TODO: should be prepared by planner. - let table = txn.must_get_table(table)?; - let ids: Vec<_> = - source.map(|r| r.and_then(|row| table.get_row_key(&row))).collect::>()?; +pub(super) fn delete( + txn: &impl Transaction, + table: String, + key_index: usize, + source: QueryIterator, +) -> Result { + let ids: Vec<_> = source.map(|r| r.map(|row| row[key_index].clone())).collect::>()?; let count = ids.len() as u64; - txn.delete(&table.name, &ids)?; + txn.delete(&table, &ids)?; Ok(count) } @@ -22,11 +24,10 @@ pub(super) fn delete(txn: &impl Transaction, table: &str, source: QueryIterator) /// TODO: this should take rows from a values source. pub(super) fn insert( txn: &impl Transaction, - table: &str, + table: Table, columns: Vec, values: Vec>, ) -> Result { - let table = txn.must_get_table(table)?; let mut rows = Vec::with_capacity(values.len()); for expressions in values { let mut row = @@ -47,14 +48,14 @@ pub(super) fn insert( /// rows updated. pub(super) fn update( txn: &impl Transaction, - table: &str, + table: String, + key_index: usize, mut source: QueryIterator, expressions: Vec<(usize, Expression)>, ) -> Result { - let table = txn.must_get_table(table)?; let mut update = std::collections::HashMap::new(); while let Some(row) = source.next().transpose()? { - let id = table.get_row_key(&row)?; + let id = row[key_index].clone(); let mut new = row.clone(); for (field, expr) in &expressions { new[*field] = expr.evaluate(Some(&row))?; @@ -62,7 +63,7 @@ pub(super) fn update( update.insert(id, new); } let count = update.len() as u64; - txn.update(&table.name, update)?; + txn.update(&table, update)?; Ok(count) } diff --git a/src/sql/plan/optimizer.rs b/src/sql/plan/optimizer.rs index 4b3ea822c..ae34377c2 100644 --- a/src/sql/plan/optimizer.rs +++ b/src/sql/plan/optimizer.rs @@ -1,7 +1,6 @@ use super::super::types::{Expression, Value}; use super::plan::Node; use crate::error::Result; -use crate::sql::engine::Catalog; use std::mem::replace; @@ -158,15 +157,9 @@ impl FilterPushdown { } /// An index lookup optimizer, which converts table scans to index lookups. -pub struct IndexLookup<'a, C: Catalog> { - catalog: &'a mut C, -} - -impl<'a, C: Catalog> IndexLookup<'a, C> { - pub fn new(catalog: &'a mut C) -> Self { - Self { catalog } - } +pub struct IndexLookup; +impl IndexLookup { // Wraps a node in a filter for the given CNF vector, if any, otherwise returns the bare node. fn wrap_cnf(&self, node: Node, cnf: Vec) -> Node { if let Some(predicate) = Expression::from_cnf_vec(cnf) { @@ -177,12 +170,11 @@ impl<'a, C: Catalog> IndexLookup<'a, C> { } } -impl<'a, C: Catalog> Optimizer for IndexLookup<'a, C> { +impl Optimizer for IndexLookup { fn optimize(&self, node: Node) -> Result { node.transform(&Ok, &|n| match n { Node::Scan { table, alias, filter: Some(filter) } => { - let columns = self.catalog.must_get_table(&table)?.columns; - let pk = columns.iter().position(|c| c.primary_key).unwrap(); + let pk = table.columns.iter().position(|c| c.primary_key).unwrap(); // Convert the filter into conjunctive normal form, and try to convert each // sub-expression into a lookup. If a lookup is found, return a lookup node and then @@ -193,12 +185,12 @@ impl<'a, C: Catalog> Optimizer for IndexLookup<'a, C> { cnf.remove(i); return Ok(self.wrap_cnf(Node::KeyLookup { table, alias, keys }, cnf)); } - for (ci, column) in columns.iter().enumerate().filter(|(_, c)| c.index) { + for (ci, column) in table.columns.iter().enumerate().filter(|(_, c)| c.index) { if let Some(values) = cnf[i].as_lookup(ci) { cnf.remove(i); return Ok(self.wrap_cnf( Node::IndexLookup { - table, + table: table.clone(), alias, column: column.name.clone(), values, diff --git a/src/sql/plan/plan.rs b/src/sql/plan/plan.rs index ca3a9f7b1..5c8997dcd 100644 --- a/src/sql/plan/plan.rs +++ b/src/sql/plan/plan.rs @@ -21,42 +21,49 @@ pub enum Plan { /// A DROP TABLE plan. DropTable { table: String, if_exists: bool }, /// A DELETE plan. - Delete { table: String, source: Node }, + Delete { table: String, key_index: usize, source: Node }, /// An INSERT plan. /// TODO: consider using a source which generates expression rows. - Insert { table: String, columns: Vec, expressions: Vec> }, + Insert { table: Table, columns: Vec, expressions: Vec> }, /// An UPDATE plan. - Update { table: String, source: Node, expressions: Vec<(usize, Option, Expression)> }, + Update { + table: String, + key_index: usize, + source: Node, + expressions: Vec<(usize, Option, Expression)>, + }, /// A SELECT plan. Select(Node), } impl Plan { /// Builds a plan from an AST statement. - pub fn build(statement: ast::Statement, catalog: &mut C) -> Result { + pub fn build(statement: ast::Statement, catalog: &impl Catalog) -> Result { Planner::new(catalog).build(statement) } /// Executes the plan, consuming it. - pub fn execute(self, txn: &mut impl Transaction) -> Result { - execution::execute_plan(self, txn) + pub fn execute(self, txn: &(impl Transaction + Catalog)) -> Result { + execution::execute_plan(self, txn, txn) } /// Optimizes the plan, consuming it. - pub fn optimize(self, catalog: &mut C) -> Result { - let mut optimize = |mut node| -> Result { + pub fn optimize(self) -> Result { + let optimize = |mut node| -> Result { node = optimizer::ConstantFolder.optimize(node)?; node = optimizer::FilterPushdown.optimize(node)?; - node = optimizer::IndexLookup::new(catalog).optimize(node)?; + node = optimizer::IndexLookup.optimize(node)?; node = optimizer::NoopCleaner.optimize(node)?; node = optimizer::JoinType.optimize(node)?; Ok(node) }; Ok(match self { Self::CreateTable { .. } | Self::DropTable { .. } | Self::Insert { .. } => self, - Self::Delete { table, source } => Self::Delete { table, source: optimize(source)? }, - Self::Update { table, source, expressions } => { - Self::Update { table, source: optimize(source)?, expressions } + Self::Delete { table, key_index, source } => { + Self::Delete { table, key_index, source: optimize(source)? } + } + Self::Update { table, key_index, source, expressions } => { + Self::Update { table, key_index, source: optimize(source)?, expressions } } Self::Select(root) => Self::Select(optimize(root)?), }) @@ -69,7 +76,7 @@ impl std::fmt::Display for Plan { match self { Self::CreateTable { schema } => write!(f, "CreateTable: {}", schema.name), Self::DropTable { table, if_exists: _ } => write!(f, "DropTable: {table}"), - Self::Delete { source, table } => { + Self::Delete { table, key_index: _, source } => { write!( f, "Delete: {table}\n{}", @@ -77,10 +84,10 @@ impl std::fmt::Display for Plan { ) } Self::Insert { table, columns: _, expressions } => { - write!(f, "Insert: {table} ({} rows)", expressions.len()) + write!(f, "Insert: {} ({} rows)", table.name, expressions.len()) } Self::Select(root) => root.fmt(f), - Self::Update { source, table, expressions } => { + Self::Update { table, key_index: _, source, expressions } => { write!( f, "Update: {table} ({})\n{}", @@ -119,13 +126,13 @@ pub enum Node { outer: bool, }, IndexLookup { - table: String, + table: Table, alias: Option, column: String, values: Vec, }, KeyLookup { - table: String, + table: Table, alias: Option, keys: Vec, }, @@ -154,7 +161,7 @@ pub enum Node { expressions: Vec<(Expression, Option)>, }, Scan { - table: String, + table: Table, alias: Option, filter: Option, }, @@ -305,7 +312,7 @@ impl Node { s += &right.format(indent, false, true); } Self::IndexLookup { table, column, alias, values } => { - s += &format!("IndexLookup: {}", table); + s += &format!("IndexLookup: {}", table.name); if let Some(alias) = alias { s += &format!(" as {}", alias); } @@ -321,7 +328,7 @@ impl Node { s += "\n"; } Self::KeyLookup { table, alias, keys } => { - s += &format!("KeyLookup: {}", table); + s += &format!("KeyLookup: {}", table.name); if let Some(alias) = alias { s += &format!(" as {}", alias); } @@ -378,7 +385,7 @@ impl Node { s += &source.format(indent, false, true); } Self::Scan { table, alias, filter } => { - s += &format!("Scan: {}", table); + s += &format!("Scan: {}", table.name); if let Some(alias) = alias { s += &format!(" as {}", alias); } diff --git a/src/sql/plan/planner.rs b/src/sql/plan/planner.rs index af09a0014..1ebd1606b 100644 --- a/src/sql/plan/planner.rs +++ b/src/sql/plan/planner.rs @@ -11,12 +11,12 @@ use std::mem::replace; /// A query plan builder. pub struct Planner<'a, C: Catalog> { - catalog: &'a mut C, + catalog: &'a C, } impl<'a, C: Catalog> Planner<'a, C> { /// Creates a new planner. - pub fn new(catalog: &'a mut C) -> Self { + pub fn new(catalog: &'a C) -> Self { Self { catalog } } @@ -69,9 +69,11 @@ impl<'a, C: Catalog> Planner<'a, C> { // DML statements (mutations). ast::Statement::Delete { table, r#where } => { - let scope = &mut Scope::from_table(self.catalog.must_get_table(&table)?)?; + let table = self.catalog.must_get_table(&table)?; + let scope = &mut Scope::from_table(table.clone())?; Plan::Delete { - table: table.clone(), + table: table.name.clone(), + key_index: table.get_row_key_index()?, source: Node::Scan { table, alias: None, @@ -80,24 +82,30 @@ impl<'a, C: Catalog> Planner<'a, C> { } } - ast::Statement::Insert { table, columns, values } => Plan::Insert { - table, - columns: columns.unwrap_or_default(), - expressions: values - .into_iter() - .map(|exprs| { - exprs - .into_iter() - .map(|expr| self.build_expression(&mut Scope::constant(), expr)) - .collect::>() - }) - .collect::>()?, - }, + ast::Statement::Insert { table, columns, values } => { + let table = self.catalog.must_get_table(&table)?; + Plan::Insert { + table, + columns: columns.unwrap_or_default(), + expressions: values + .into_iter() + .map(|exprs| { + exprs + .into_iter() + .map(|expr| self.build_expression(&mut Scope::constant(), expr)) + .collect::>() + }) + .collect::>()?, + } + } ast::Statement::Update { table, set, r#where } => { - let scope = &mut Scope::from_table(self.catalog.must_get_table(&table)?)?; + let table = self.catalog.must_get_table(&table)?; + let key_index = table.get_row_key_index()?; + let scope = &mut Scope::from_table(table.clone())?; Plan::Update { - table: table.clone(), + table: table.name.clone(), + key_index, source: Node::Scan { table, alias: None, @@ -285,11 +293,9 @@ impl<'a, C: Catalog> Planner<'a, C> { fn build_from_item(&self, scope: &mut Scope, item: ast::FromItem) -> Result { Ok(match item { ast::FromItem::Table { name, alias } => { - scope.add_table( - alias.clone().unwrap_or_else(|| name.clone()), - self.catalog.must_get_table(&name)?, - )?; - Node::Scan { table: name, alias, filter: None } + let table = self.catalog.must_get_table(&name)?; + scope.add_table(alias.clone().unwrap_or_else(|| name.clone()), table.clone())?; + Node::Scan { table, alias, filter: None } } ast::FromItem::Join { left, right, r#type, predicate } => { diff --git a/src/sql/types/schema.rs b/src/sql/types/schema.rs index 4d7de5383..9b5862416 100644 --- a/src/sql/types/schema.rs +++ b/src/sql/types/schema.rs @@ -1,7 +1,8 @@ use super::{DataType, Value}; use crate::encoding; use crate::errinput; -use crate::error::{Error, Result}; +use crate::error::Result; +use crate::sql::engine::Catalog; use crate::sql::engine::Transaction; use crate::sql::parser::format_ident; @@ -50,18 +51,21 @@ impl Table { /// Returns the primary key value of a row pub fn get_row_key(&self, row: &[Value]) -> Result { - row.get( - self.columns - .iter() - .position(|c| c.primary_key) - .ok_or::(errinput!("primary key not found"))?, - ) - .cloned() - .ok_or(errinput!("primary key value not found for row")) + self.get_row_key_at(row, self.get_row_key_index()?) + } + + /// Returns the primary key value at the given index. + pub fn get_row_key_at(&self, row: &[Value], index: usize) -> Result { + row.get(index).cloned().ok_or(errinput!("primary key value not found for row")) + } + + /// Returns the index of the primary key field. + pub fn get_row_key_index(&self) -> Result { + self.columns.iter().position(|c| c.primary_key).ok_or(errinput!("primary key not found")) } /// Validates the table schema - pub fn validate(&self, txn: &dyn Transaction) -> Result<()> { + pub fn validate(&self, catalog: &dyn Catalog) -> Result<()> { if self.columns.is_empty() { return errinput!("table {} has no columns", self.name); } @@ -71,7 +75,7 @@ impl Table { _ => return errinput!("multiple primary keys in table {}", self.name), }; for column in &self.columns { - column.validate(self, txn)?; + column.validate(self, catalog)?; } Ok(()) } @@ -123,7 +127,7 @@ pub struct Column { impl Column { /// Validates the column schema - pub fn validate(&self, table: &Table, txn: &dyn Transaction) -> Result<()> { + pub fn validate(&self, table: &Table, catalog: &dyn Catalog) -> Result<()> { // Validate primary key if self.primary_key && self.nullable { return errinput!("primary key {} cannot be nullable", self.name); @@ -156,7 +160,7 @@ impl Column { if let Some(reference) = &self.references { let target = if reference == &table.name { table.clone() - } else if let Some(table) = txn.get_table(reference)? { + } else if let Some(table) = catalog.get_table(reference)? { table } else { return errinput!( diff --git a/tests/sql/query.rs b/tests/sql/query.rs index 45644027e..158ba17fc 100644 --- a/tests/sql/query.rs +++ b/tests/sql/query.rs @@ -80,7 +80,7 @@ macro_rules! test_query { // First, just try to generate a plan and execute it let result = Parser::new($query).parse() .and_then(|ast| Plan::build(ast, &mut txn)) - .and_then(|plan| plan.optimize(&mut txn)) + .and_then(|plan| plan.optimize()) .and_then(|plan| { write!(f, "Explain:\n{}\n\n", plan)?; plan.execute(&mut txn).and_then(|r| r.try_into()) @@ -128,7 +128,7 @@ macro_rules! test_query { write!(f, "{:#?}\n\n", plan)?; write!(f, "Optimized plan: ")?; - let plan = match plan.optimize(&mut txn) { + let plan = match plan.optimize() { Ok(plan) => plan, Err(err) => { write!(f, "{:?}", err)?; diff --git a/tests/sql/query/agg_boolean b/tests/sql/query/agg_boolean index 5276216f7..b4631b1cb 100644 --- a/tests/sql/query/agg_boolean +++ b/tests/sql/query/agg_boolean @@ -105,7 +105,33 @@ Plan: Select( source: Projection { source: Filter { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "b", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -239,7 +265,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "b", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Not( diff --git a/tests/sql/query/agg_boolean_null b/tests/sql/query/agg_boolean_null index 7ad72f667..e42c535ad 100644 --- a/tests/sql/query/agg_boolean_null +++ b/tests/sql/query/agg_boolean_null @@ -91,7 +91,33 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "b", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -211,7 +237,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "b", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/agg_const_from b/tests/sql/query/agg_const_from index 1c1db2226..51022318b 100644 --- a/tests/sql/query/agg_const_from +++ b/tests/sql/query/agg_const_from @@ -96,7 +96,31 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -196,7 +220,31 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/agg_count_star b/tests/sql/query/agg_count_star index 4aa88b036..20b07257e 100644 --- a/tests/sql/query/agg_count_star +++ b/tests/sql/query/agg_count_star @@ -44,7 +44,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -80,7 +162,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/agg_expr b/tests/sql/query/agg_expr index b1bd51bda..bf7ba37ba 100644 --- a/tests/sql/query/agg_expr +++ b/tests/sql/query/agg_expr @@ -66,7 +66,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -128,7 +210,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/agg_float b/tests/sql/query/agg_float index 735cd927e..bb4d94003 100644 --- a/tests/sql/query/agg_float +++ b/tests/sql/query/agg_float @@ -105,7 +105,33 @@ Plan: Select( source: Projection { source: Filter { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "f", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -239,7 +265,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "f", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Not( diff --git a/tests/sql/query/agg_float_null b/tests/sql/query/agg_float_null index 1a97594b4..d7e0b47cb 100644 --- a/tests/sql/query/agg_float_null +++ b/tests/sql/query/agg_float_null @@ -91,7 +91,33 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "f", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -211,7 +237,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "f", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/agg_integer b/tests/sql/query/agg_integer index b0a41b8a1..5aa3da5b4 100644 --- a/tests/sql/query/agg_integer +++ b/tests/sql/query/agg_integer @@ -105,7 +105,33 @@ Plan: Select( source: Projection { source: Filter { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "i", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -239,7 +265,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "i", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Not( diff --git a/tests/sql/query/agg_integer_null b/tests/sql/query/agg_integer_null index dad9b2008..0301abe80 100644 --- a/tests/sql/query/agg_integer_null +++ b/tests/sql/query/agg_integer_null @@ -91,7 +91,33 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "i", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -211,7 +237,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "i", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/agg_norows b/tests/sql/query/agg_norows index adf724285..5f81dcf2b 100644 --- a/tests/sql/query/agg_norows +++ b/tests/sql/query/agg_norows @@ -98,7 +98,89 @@ Plan: Select( source: Projection { source: Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -224,7 +306,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( diff --git a/tests/sql/query/agg_norows_group b/tests/sql/query/agg_norows_group index 207c70076..193de840b 100644 --- a/tests/sql/query/agg_norows_group +++ b/tests/sql/query/agg_norows_group @@ -102,7 +102,89 @@ Plan: Select( source: Projection { source: Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -240,7 +322,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( diff --git a/tests/sql/query/agg_string b/tests/sql/query/agg_string index ba5fd0b3c..9ece3b589 100644 --- a/tests/sql/query/agg_string +++ b/tests/sql/query/agg_string @@ -105,7 +105,33 @@ Plan: Select( source: Projection { source: Filter { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "s", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -239,7 +265,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "s", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Not( diff --git a/tests/sql/query/agg_string_null b/tests/sql/query/agg_string_null index b5f4cc0c7..a99bf3786 100644 --- a/tests/sql/query/agg_string_null +++ b/tests/sql/query/agg_string_null @@ -91,7 +91,33 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "s", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -211,7 +237,33 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "s", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/all b/tests/sql/query/all index fb25af024..d4eb329a9 100644 --- a/tests/sql/query/all +++ b/tests/sql/query/all @@ -33,7 +33,89 @@ AST: Select { Plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -41,7 +123,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/as_ b/tests/sql/query/as_ index 1d1be941a..f1a832cc0 100644 --- a/tests/sql/query/as_ +++ b/tests/sql/query/as_ @@ -83,7 +83,89 @@ AST: Select { Plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -147,7 +229,89 @@ Plan: Select( Optimized plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/expr_mixed b/tests/sql/query/expr_mixed index 22e78af21..38392ec94 100644 --- a/tests/sql/query/expr_mixed +++ b/tests/sql/query/expr_mixed @@ -80,7 +80,89 @@ AST: Select { Plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -135,7 +217,89 @@ Plan: Select( Optimized plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/field_aliased b/tests/sql/query/field_aliased index 8a0685a35..a074e648b 100644 --- a/tests/sql/query/field_aliased +++ b/tests/sql/query/field_aliased @@ -85,7 +85,89 @@ Plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -93,7 +175,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -139,7 +245,89 @@ Optimized plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -147,7 +335,31 @@ Optimized plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/field_multi b/tests/sql/query/field_multi index 9591b9631..02cb3090d 100644 --- a/tests/sql/query/field_multi +++ b/tests/sql/query/field_multi @@ -50,7 +50,89 @@ AST: Select { Plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -86,7 +168,89 @@ Plan: Select( Optimized plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/field_qualified b/tests/sql/query/field_qualified index 7d417d085..d3422f8bc 100644 --- a/tests/sql/query/field_qualified +++ b/tests/sql/query/field_qualified @@ -45,7 +45,89 @@ AST: Select { Plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -71,7 +153,89 @@ Plan: Select( Optimized plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/field_qualified_multi b/tests/sql/query/field_qualified_multi index 05b883ca8..3de4c9f93 100644 --- a/tests/sql/query/field_qualified_multi +++ b/tests/sql/query/field_qualified_multi @@ -81,13 +81,119 @@ Plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -131,13 +237,119 @@ Optimized plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/field_single b/tests/sql/query/field_single index bd5502f7a..866b150f2 100644 --- a/tests/sql/query/field_single +++ b/tests/sql/query/field_single @@ -43,7 +43,89 @@ AST: Select { Plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -67,7 +149,89 @@ Plan: Select( Optimized plan: Select( Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/from_multiple b/tests/sql/query/from_multiple index 76f8cc02f..c8e0e8cbe 100644 --- a/tests/sql/query/from_multiple +++ b/tests/sql/query/from_multiple @@ -127,13 +127,119 @@ Plan: Select( NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -142,7 +248,31 @@ Plan: Select( }, left_size: 9, right: Scan { - table: "countries", + table: Table { + name: "countries", + columns: [ + Column { + name: "id", + datatype: String, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -155,13 +285,119 @@ Optimized plan: Select( NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -170,7 +406,31 @@ Optimized plan: Select( }, left_size: 9, right: Scan { - table: "countries", + table: Table { + name: "countries", + columns: [ + Column { + name: "id", + datatype: String, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_expr b/tests/sql/query/group_expr index cd5a00050..8f92357e3 100644 --- a/tests/sql/query/group_expr +++ b/tests/sql/query/group_expr @@ -72,7 +72,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -149,7 +231,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_expr_aggr b/tests/sql/query/group_expr_aggr index 66a73dee0..89808950f 100644 --- a/tests/sql/query/group_expr_aggr +++ b/tests/sql/query/group_expr_aggr @@ -91,7 +91,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -197,7 +279,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_expr_aggr_selfref b/tests/sql/query/group_expr_aggr_selfref index 98b1b3b91..6a924437c 100644 --- a/tests/sql/query/group_expr_aggr_selfref +++ b/tests/sql/query/group_expr_aggr_selfref @@ -99,7 +99,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -216,7 +298,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_expr_aliased b/tests/sql/query/group_expr_aliased index 6eaf48753..ba5895d6b 100644 --- a/tests/sql/query/group_expr_aliased +++ b/tests/sql/query/group_expr_aliased @@ -79,7 +79,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -170,7 +252,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_expr_both b/tests/sql/query/group_expr_both index 48cf4ac97..9c26d0e19 100644 --- a/tests/sql/query/group_expr_both +++ b/tests/sql/query/group_expr_both @@ -88,7 +88,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -172,7 +254,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_expr_multigroup b/tests/sql/query/group_expr_multigroup index a37c9d44b..b4ca9c218 100644 --- a/tests/sql/query/group_expr_multigroup +++ b/tests/sql/query/group_expr_multigroup @@ -94,7 +94,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -213,7 +295,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_expr_select b/tests/sql/query/group_expr_select index cef6161c4..d3637d62f 100644 --- a/tests/sql/query/group_expr_select +++ b/tests/sql/query/group_expr_select @@ -79,7 +79,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -168,7 +250,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_join b/tests/sql/query/group_join index be408cd79..f7b4d68f1 100644 --- a/tests/sql/query/group_join +++ b/tests/sql/query/group_join @@ -107,7 +107,89 @@ Plan: Select( source: Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -115,7 +197,45 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: Some( "s", ), @@ -228,7 +348,89 @@ Optimized plan: Select( source: Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -246,7 +448,45 @@ Optimized plan: Select( ), ), right: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: Some( "s", ), diff --git a/tests/sql/query/group_noaggregate b/tests/sql/query/group_noaggregate index 6dbf7894b..890e566d1 100644 --- a/tests/sql/query/group_noaggregate +++ b/tests/sql/query/group_noaggregate @@ -62,7 +62,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -125,7 +207,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_noselect b/tests/sql/query/group_noselect index 88a40f278..4e0d4c01d 100644 --- a/tests/sql/query/group_noselect +++ b/tests/sql/query/group_noselect @@ -63,7 +63,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -133,7 +215,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/group_simple b/tests/sql/query/group_simple index 7be4690fa..b965b80a1 100644 --- a/tests/sql/query/group_simple +++ b/tests/sql/query/group_simple @@ -68,7 +68,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -152,7 +234,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/having b/tests/sql/query/having index 5edb1f873..17c99ba81 100644 --- a/tests/sql/query/having +++ b/tests/sql/query/having @@ -84,7 +84,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -188,7 +270,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/having_aggr b/tests/sql/query/having_aggr index 06d44e07b..e238dd294 100644 --- a/tests/sql/query/having_aggr +++ b/tests/sql/query/having_aggr @@ -90,7 +90,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -225,7 +307,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/having_aggr_expr b/tests/sql/query/having_aggr_expr index d231226b1..96bc16821 100644 --- a/tests/sql/query/having_aggr_expr +++ b/tests/sql/query/having_aggr_expr @@ -103,7 +103,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -264,7 +346,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/having_noaggr b/tests/sql/query/having_noaggr index 50a025bf6..af40bb090 100644 --- a/tests/sql/query/having_noaggr +++ b/tests/sql/query/having_noaggr @@ -86,7 +86,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -242,7 +324,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/having_nogroup b/tests/sql/query/having_nogroup index 548dddcf1..89ff3b5b8 100644 --- a/tests/sql/query/having_nogroup +++ b/tests/sql/query/having_nogroup @@ -72,7 +72,89 @@ Plan: Select( source: Filter { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -176,7 +258,89 @@ Optimized plan: Select( source: Filter { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/having_noselect b/tests/sql/query/having_noselect index 81e23968a..edc4fabf1 100644 --- a/tests/sql/query/having_noselect +++ b/tests/sql/query/having_noselect @@ -77,7 +77,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -185,7 +267,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_cross b/tests/sql/query/join_cross index 51023c768..b25f97ee6 100644 --- a/tests/sql/query/join_cross +++ b/tests/sql/query/join_cross @@ -64,13 +64,119 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -82,13 +188,119 @@ Plan: Select( Optimized plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_cross_alias b/tests/sql/query/join_cross_alias index 54fa49d16..bc9d01d06 100644 --- a/tests/sql/query/join_cross_alias +++ b/tests/sql/query/join_cross_alias @@ -183,7 +183,89 @@ Plan: Select( source: NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -191,7 +273,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -202,7 +308,31 @@ Plan: Select( }, left_size: 9, right: Scan { - table: "countries", + table: Table { + name: "countries", + columns: [ + Column { + name: "id", + datatype: String, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "c", ), @@ -386,7 +516,89 @@ Optimized plan: Select( source: NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -433,7 +645,31 @@ Optimized plan: Select( }, left_size: 7, right: KeyLookup { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -448,7 +684,31 @@ Optimized plan: Select( }, left_size: 9, right: Scan { - table: "countries", + table: Table { + name: "countries", + columns: [ + Column { + name: "id", + datatype: String, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "c", ), diff --git a/tests/sql/query/join_cross_multi b/tests/sql/query/join_cross_multi index 41f63bcb5..237ae1255 100644 --- a/tests/sql/query/join_cross_multi +++ b/tests/sql/query/join_cross_multi @@ -416,13 +416,119 @@ Plan: Select( left: NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -431,7 +537,31 @@ Plan: Select( }, left_size: 9, right: Scan { - table: "countries", + table: Table { + name: "countries", + columns: [ + Column { + name: "id", + datatype: String, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -440,7 +570,45 @@ Plan: Select( }, left_size: 11, right: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: None, filter: None, }, @@ -454,13 +622,119 @@ Optimized plan: Select( left: NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -469,7 +743,31 @@ Optimized plan: Select( }, left_size: 9, right: Scan { - table: "countries", + table: Table { + name: "countries", + columns: [ + Column { + name: "id", + datatype: String, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -478,7 +776,45 @@ Optimized plan: Select( }, left_size: 11, right: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_inner b/tests/sql/query/join_inner index 56808cfaf..27b61034e 100644 --- a/tests/sql/query/join_inner +++ b/tests/sql/query/join_inner @@ -61,13 +61,119 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -104,7 +210,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -120,7 +308,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_inner_implicit b/tests/sql/query/join_inner_implicit index c0e9c3a56..131c0733a 100644 --- a/tests/sql/query/join_inner_implicit +++ b/tests/sql/query/join_inner_implicit @@ -61,13 +61,119 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -104,7 +210,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -120,7 +308,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_inner_index_transverse b/tests/sql/query/join_inner_index_transverse index eae4f4baf..9e0347a3a 100644 --- a/tests/sql/query/join_inner_index_transverse +++ b/tests/sql/query/join_inner_index_transverse @@ -74,7 +74,89 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -82,7 +164,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -141,7 +247,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: IndexLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -164,7 +352,31 @@ Optimized plan: Select( ), ), right: KeyLookup { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_inner_index_transverse_where b/tests/sql/query/join_inner_index_transverse_where index cec9fbce0..2c0274c81 100644 --- a/tests/sql/query/join_inner_index_transverse_where +++ b/tests/sql/query/join_inner_index_transverse_where @@ -72,7 +72,89 @@ Plan: Select( Filter { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -80,7 +162,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -138,7 +244,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: IndexLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -161,7 +349,31 @@ Optimized plan: Select( ), ), right: KeyLookup { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_inner_multi b/tests/sql/query/join_inner_multi index aa606567e..73cf74311 100644 --- a/tests/sql/query/join_inner_multi +++ b/tests/sql/query/join_inner_multi @@ -127,13 +127,119 @@ Plan: Select( source: NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -167,7 +273,45 @@ Plan: Select( }, left_size: 9, right: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: None, filter: None, }, @@ -255,7 +399,89 @@ Optimized plan: Select( source: HashJoin { left: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -271,7 +497,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -300,7 +550,45 @@ Optimized plan: Select( ), ), right: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_inner_multi_index b/tests/sql/query/join_inner_multi_index index 1fbf032c7..ef6a13258 100644 --- a/tests/sql/query/join_inner_multi_index +++ b/tests/sql/query/join_inner_multi_index @@ -178,7 +178,89 @@ Plan: Select( source: NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -186,7 +268,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -242,7 +348,45 @@ Plan: Select( }, left_size: 9, right: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: Some( "s", ), @@ -371,7 +515,89 @@ Optimized plan: Select( left: HashJoin { left: Filter { source: IndexLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -413,7 +639,31 @@ Optimized plan: Select( ), ), right: KeyLookup { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -448,7 +698,45 @@ Optimized plan: Select( ), ), right: KeyLookup { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: Some( "s", ), diff --git a/tests/sql/query/join_inner_multi_same b/tests/sql/query/join_inner_multi_same index 026c2a583..ced48e5f2 100644 --- a/tests/sql/query/join_inner_multi_same +++ b/tests/sql/query/join_inner_multi_same @@ -227,7 +227,89 @@ Plan: Select( source: NestedLoopJoin { left: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -235,7 +317,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -272,7 +378,45 @@ Plan: Select( left_size: 9, right: NestedLoopJoin { left: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: Some( "s", ), @@ -280,7 +424,89 @@ Plan: Select( }, left_size: 3, right: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "good", ), @@ -565,7 +791,89 @@ Optimized plan: Select( source: HashJoin { left: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -583,7 +891,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -615,7 +947,45 @@ Optimized plan: Select( ), right: HashJoin { left: Scan { - table: "studios", + table: Table { + name: "studios", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "country_id", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: Some( + "countries", + ), + index: true, + }, + ], + }, alias: Some( "s", ), @@ -633,7 +1003,89 @@ Optimized plan: Select( ), ), right: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "good", ), diff --git a/tests/sql/query/join_inner_on_aliased b/tests/sql/query/join_inner_on_aliased index f4373a2d9..1a3ca6e99 100644 --- a/tests/sql/query/join_inner_on_aliased +++ b/tests/sql/query/join_inner_on_aliased @@ -65,7 +65,89 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -73,7 +155,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -112,7 +218,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -130,7 +318,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_inner_on_false b/tests/sql/query/join_inner_on_false index 3bd086fe1..22d909a37 100644 --- a/tests/sql/query/join_inner_on_false +++ b/tests/sql/query/join_inner_on_false @@ -40,13 +40,119 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -64,7 +170,89 @@ Plan: Select( Optimized plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( @@ -76,7 +264,31 @@ Optimized plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_inner_on_multi b/tests/sql/query/join_inner_on_multi index 604eb7933..965395911 100644 --- a/tests/sql/query/join_inner_on_multi +++ b/tests/sql/query/join_inner_on_multi @@ -73,13 +73,119 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -142,13 +248,119 @@ Plan: Select( Optimized plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_inner_on_true b/tests/sql/query/join_inner_on_true index 859116096..ae45b7877 100644 --- a/tests/sql/query/join_inner_on_true +++ b/tests/sql/query/join_inner_on_true @@ -70,13 +70,119 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -94,7 +200,89 @@ Plan: Select( Optimized plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( @@ -106,7 +294,31 @@ Optimized plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_inner_on_where b/tests/sql/query/join_inner_on_where index d5bbc373a..f1eab10c7 100644 --- a/tests/sql/query/join_inner_on_where +++ b/tests/sql/query/join_inner_on_where @@ -76,13 +76,119 @@ Plan: Select( Filter { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -158,7 +264,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Or( @@ -213,7 +401,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/join_left b/tests/sql/query/join_left index 23fb9b2bc..df10e9189 100644 --- a/tests/sql/query/join_left +++ b/tests/sql/query/join_left @@ -90,7 +90,89 @@ Plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -98,7 +180,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -173,7 +279,89 @@ Optimized plan: Select( Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -191,7 +379,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_left_all b/tests/sql/query/join_left_all index 9af145dc5..0c2931a62 100644 --- a/tests/sql/query/join_left_all +++ b/tests/sql/query/join_left_all @@ -65,7 +65,89 @@ AST: Select { Plan: Select( NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -73,7 +155,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -112,7 +218,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -130,7 +318,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_left_outer b/tests/sql/query/join_left_outer index d1b84bdbe..d943f7a51 100644 --- a/tests/sql/query/join_left_outer +++ b/tests/sql/query/join_left_outer @@ -90,7 +90,89 @@ Plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -98,7 +180,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -173,7 +279,89 @@ Optimized plan: Select( Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -191,7 +379,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_left_truncate b/tests/sql/query/join_left_truncate index 4a627d0fc..f0a121a59 100644 --- a/tests/sql/query/join_left_truncate +++ b/tests/sql/query/join_left_truncate @@ -83,7 +83,31 @@ Plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -91,7 +115,89 @@ Plan: Select( }, left_size: 2, right: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -166,7 +272,31 @@ Optimized plan: Select( Projection { source: HashJoin { left: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -184,7 +314,89 @@ Optimized plan: Select( ), ), right: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), diff --git a/tests/sql/query/join_right b/tests/sql/query/join_right index b1e3fca70..601d2cf8b 100644 --- a/tests/sql/query/join_right +++ b/tests/sql/query/join_right @@ -92,7 +92,89 @@ Plan: Select( source: Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -100,7 +182,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -305,7 +411,89 @@ Optimized plan: Select( source: Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -323,7 +511,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_right_all b/tests/sql/query/join_right_all index 124d97971..763cd7a1d 100644 --- a/tests/sql/query/join_right_all +++ b/tests/sql/query/join_right_all @@ -67,7 +67,89 @@ Plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -75,7 +157,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -244,7 +350,89 @@ Optimized plan: Select( Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -262,7 +450,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_right_outer b/tests/sql/query/join_right_outer index dcb45aa27..e7b0ec6a7 100644 --- a/tests/sql/query/join_right_outer +++ b/tests/sql/query/join_right_outer @@ -92,7 +92,89 @@ Plan: Select( source: Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -100,7 +182,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -305,7 +411,89 @@ Optimized plan: Select( source: Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -323,7 +511,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/join_right_truncate b/tests/sql/query/join_right_truncate index fb5e9ac3e..d307b964d 100644 --- a/tests/sql/query/join_right_truncate +++ b/tests/sql/query/join_right_truncate @@ -85,7 +85,31 @@ Plan: Select( source: Projection { source: NestedLoopJoin { left: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -93,7 +117,89 @@ Plan: Select( }, left_size: 2, right: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -298,7 +404,31 @@ Optimized plan: Select( source: Projection { source: HashJoin { left: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -316,7 +446,89 @@ Optimized plan: Select( ), ), right: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), diff --git a/tests/sql/query/limit b/tests/sql/query/limit index 517717489..c6b3d94bc 100644 --- a/tests/sql/query/limit +++ b/tests/sql/query/limit @@ -34,7 +34,89 @@ AST: Select { Plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -45,7 +127,89 @@ Plan: Select( Optimized plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/limit_expr b/tests/sql/query/limit_expr index ecb6bbcb6..078e235a2 100644 --- a/tests/sql/query/limit_expr +++ b/tests/sql/query/limit_expr @@ -43,7 +43,89 @@ AST: Select { Plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -54,7 +136,89 @@ Plan: Select( Optimized plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/limit_large b/tests/sql/query/limit_large index 9ffca4e2a..65aeaee25 100644 --- a/tests/sql/query/limit_large +++ b/tests/sql/query/limit_large @@ -41,7 +41,89 @@ AST: Select { Plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -52,7 +134,89 @@ Plan: Select( Optimized plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/limit_offset b/tests/sql/query/limit_offset index c24650dd9..c37dc7e71 100644 --- a/tests/sql/query/limit_offset +++ b/tests/sql/query/limit_offset @@ -41,7 +41,89 @@ Plan: Select( Limit { source: Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -55,7 +137,89 @@ Optimized plan: Select( Limit { source: Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/limit_zero b/tests/sql/query/limit_zero index 852c3ccc4..e43cf9eb7 100644 --- a/tests/sql/query/limit_zero +++ b/tests/sql/query/limit_zero @@ -31,7 +31,89 @@ AST: Select { Plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -42,7 +124,89 @@ Plan: Select( Optimized plan: Select( Limit { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/offset b/tests/sql/query/offset index 64c7b1e25..013a54444 100644 --- a/tests/sql/query/offset +++ b/tests/sql/query/offset @@ -38,7 +38,89 @@ AST: Select { Plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -49,7 +131,89 @@ Plan: Select( Optimized plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/offset_expr b/tests/sql/query/offset_expr index ee0ad715e..a0a8bce7d 100644 --- a/tests/sql/query/offset_expr +++ b/tests/sql/query/offset_expr @@ -47,7 +47,89 @@ AST: Select { Plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -58,7 +140,89 @@ Plan: Select( Optimized plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/offset_large b/tests/sql/query/offset_large index eabb86dcb..edd19e0dd 100644 --- a/tests/sql/query/offset_large +++ b/tests/sql/query/offset_large @@ -31,7 +31,89 @@ AST: Select { Plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -42,7 +124,89 @@ Plan: Select( Optimized plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/offset_zero b/tests/sql/query/offset_zero index edbad8dab..143db3981 100644 --- a/tests/sql/query/offset_zero +++ b/tests/sql/query/offset_zero @@ -41,7 +41,89 @@ AST: Select { Plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -52,7 +134,89 @@ Plan: Select( Optimized plan: Select( Offset { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order b/tests/sql/query/order index 1e3b6be7e..1bfa67978 100644 --- a/tests/sql/query/order +++ b/tests/sql/query/order @@ -43,7 +43,89 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -67,7 +149,89 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_aggregate b/tests/sql/query/order_aggregate index 80acc96e0..7b9582522 100644 --- a/tests/sql/query/order_aggregate +++ b/tests/sql/query/order_aggregate @@ -73,7 +73,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -150,7 +232,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_aggregate_noselect b/tests/sql/query/order_aggregate_noselect index 3ddbe1ae1..3650ac690 100644 --- a/tests/sql/query/order_aggregate_noselect +++ b/tests/sql/query/order_aggregate_noselect @@ -75,7 +75,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -190,7 +272,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_asc b/tests/sql/query/order_asc index a1cfd5ab9..9c45b858c 100644 --- a/tests/sql/query/order_asc +++ b/tests/sql/query/order_asc @@ -43,7 +43,89 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -67,7 +149,89 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_asc_lowercase b/tests/sql/query/order_asc_lowercase index 76f17a442..4bd3c6ae1 100644 --- a/tests/sql/query/order_asc_lowercase +++ b/tests/sql/query/order_asc_lowercase @@ -43,7 +43,89 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -67,7 +149,89 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_boolean_asc b/tests/sql/query/order_boolean_asc index b0f4e3263..b9cdb8838 100644 --- a/tests/sql/query/order_boolean_asc +++ b/tests/sql/query/order_boolean_asc @@ -36,7 +36,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -60,7 +86,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_boolean_desc b/tests/sql/query/order_boolean_desc index 87c477930..88b951aa4 100644 --- a/tests/sql/query/order_boolean_desc +++ b/tests/sql/query/order_boolean_desc @@ -36,7 +36,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -60,7 +86,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "booleans", + table: Table { + name: "booleans", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_desc b/tests/sql/query/order_desc index 01c26164c..69c34b087 100644 --- a/tests/sql/query/order_desc +++ b/tests/sql/query/order_desc @@ -43,7 +43,89 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -67,7 +149,89 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_desc_lowercase b/tests/sql/query/order_desc_lowercase index b7b2efb73..3fa3ec5cc 100644 --- a/tests/sql/query/order_desc_lowercase +++ b/tests/sql/query/order_desc_lowercase @@ -43,7 +43,89 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -67,7 +149,89 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_expr b/tests/sql/query/order_expr index 311fb9d35..30546205b 100644 --- a/tests/sql/query/order_expr +++ b/tests/sql/query/order_expr @@ -94,7 +94,89 @@ Plan: Select( Order { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -179,7 +261,89 @@ Optimized plan: Select( Order { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_field_aliased b/tests/sql/query/order_field_aliased index 65097513c..79d7657e4 100644 --- a/tests/sql/query/order_field_aliased +++ b/tests/sql/query/order_field_aliased @@ -105,13 +105,119 @@ Plan: Select( source: Filter { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -224,7 +330,89 @@ Optimized plan: Select( source: Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -240,7 +428,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_field_qualified b/tests/sql/query/order_field_qualified index d0b65ab7f..593f01b08 100644 --- a/tests/sql/query/order_field_qualified +++ b/tests/sql/query/order_field_qualified @@ -107,13 +107,119 @@ Plan: Select( source: Filter { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -277,7 +383,89 @@ Optimized plan: Select( source: Projection { source: HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -293,7 +481,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_float_asc b/tests/sql/query/order_float_asc index 1ea397968..9d71a8d80 100644 --- a/tests/sql/query/order_float_asc +++ b/tests/sql/query/order_float_asc @@ -38,7 +38,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -62,7 +88,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_float_desc b/tests/sql/query/order_float_desc index 9cb2ed604..b101ea0e4 100644 --- a/tests/sql/query/order_float_desc +++ b/tests/sql/query/order_float_desc @@ -38,7 +38,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -62,7 +88,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "floats", + table: Table { + name: "floats", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_group_by_noselect b/tests/sql/query/order_group_by_noselect index b98f3c8c1..456d0e249 100644 --- a/tests/sql/query/order_group_by_noselect +++ b/tests/sql/query/order_group_by_noselect @@ -63,7 +63,89 @@ Plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -158,7 +240,89 @@ Optimized plan: Select( source: Aggregation { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_integer_asc b/tests/sql/query/order_integer_asc index 9ae20db9e..29c4e282b 100644 --- a/tests/sql/query/order_integer_asc +++ b/tests/sql/query/order_integer_asc @@ -38,7 +38,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -62,7 +88,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_integer_desc b/tests/sql/query/order_integer_desc index da6b51790..b13a327b6 100644 --- a/tests/sql/query/order_integer_desc +++ b/tests/sql/query/order_integer_desc @@ -38,7 +38,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -62,7 +88,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "integers", + table: Table { + name: "integers", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: Integer, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_multi b/tests/sql/query/order_multi index c924b0c50..d01fe8288 100644 --- a/tests/sql/query/order_multi +++ b/tests/sql/query/order_multi @@ -50,7 +50,89 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -86,7 +168,89 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_noselect b/tests/sql/query/order_noselect index 2e2c81784..7ec269e05 100644 --- a/tests/sql/query/order_noselect +++ b/tests/sql/query/order_noselect @@ -62,7 +62,89 @@ Plan: Select( source: Order { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -146,7 +228,89 @@ Optimized plan: Select( source: Order { source: Projection { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_string_asc b/tests/sql/query/order_string_asc index 224484ef0..914970eee 100644 --- a/tests/sql/query/order_string_asc +++ b/tests/sql/query/order_string_asc @@ -41,7 +41,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -65,7 +91,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/order_string_desc b/tests/sql/query/order_string_desc index 2a9c3b65d..e13a297b2 100644 --- a/tests/sql/query/order_string_desc +++ b/tests/sql/query/order_string_desc @@ -41,7 +41,33 @@ AST: Select { Plan: Select( Order { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -65,7 +91,33 @@ Plan: Select( Optimized plan: Select( Order { source: Scan { - table: "strings", + table: Table { + name: "strings", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "value", + datatype: String, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/where_expr b/tests/sql/query/where_expr index 5aba33763..c9180e6cb 100644 --- a/tests/sql/query/where_expr +++ b/tests/sql/query/where_expr @@ -51,7 +51,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -105,7 +187,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( And( diff --git a/tests/sql/query/where_false b/tests/sql/query/where_false index 28005ce73..127c035f3 100644 --- a/tests/sql/query/where_false +++ b/tests/sql/query/where_false @@ -30,7 +30,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -44,7 +126,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( diff --git a/tests/sql/query/where_field_aliased_table b/tests/sql/query/where_field_aliased_table index 10d6f307d..669497b8f 100644 --- a/tests/sql/query/where_field_aliased_table +++ b/tests/sql/query/where_field_aliased_table @@ -99,7 +99,89 @@ Plan: Select( source: Filter { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -107,7 +189,31 @@ Plan: Select( }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), @@ -212,7 +318,89 @@ Optimized plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "m", ), @@ -259,7 +447,31 @@ Optimized plan: Select( }, left_size: 7, right: KeyLookup { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: Some( "g", ), diff --git a/tests/sql/query/where_field_qualified b/tests/sql/query/where_field_qualified index ab232684a..9fb6faa0b 100644 --- a/tests/sql/query/where_field_qualified +++ b/tests/sql/query/where_field_qualified @@ -95,13 +95,119 @@ Plan: Select( source: Filter { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -204,7 +310,89 @@ Optimized plan: Select( Projection { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Or( @@ -249,7 +437,31 @@ Optimized plan: Select( }, left_size: 7, right: KeyLookup { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, keys: [ Integer( diff --git a/tests/sql/query/where_float b/tests/sql/query/where_float index f56996949..21fd122a3 100644 --- a/tests/sql/query/where_float +++ b/tests/sql/query/where_float @@ -30,7 +30,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -44,7 +126,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( diff --git a/tests/sql/query/where_index b/tests/sql/query/where_index index c3beb31fc..f02538ce0 100644 --- a/tests/sql/query/where_index +++ b/tests/sql/query/where_index @@ -50,7 +50,89 @@ Plan: Select( Order { source: Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -91,7 +173,89 @@ Plan: Select( Optimized plan: Select( Order { source: IndexLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, column: "genre_id", values: [ diff --git a/tests/sql/query/where_index_or b/tests/sql/query/where_index_or index cd2b88a55..0ea527861 100644 --- a/tests/sql/query/where_index_or +++ b/tests/sql/query/where_index_or @@ -103,7 +103,89 @@ Plan: Select( Order { source: Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -198,7 +280,89 @@ Plan: Select( Optimized plan: Select( Order { source: IndexLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, column: "genre_id", values: [ diff --git a/tests/sql/query/where_index_or_partial b/tests/sql/query/where_index_or_partial index eb7062352..4a410fad3 100644 --- a/tests/sql/query/where_index_or_partial +++ b/tests/sql/query/where_index_or_partial @@ -85,7 +85,89 @@ Plan: Select( Order { source: Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -163,7 +245,89 @@ Optimized plan: Select( Order { source: Filter { source: IndexLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, column: "genre_id", values: [ diff --git a/tests/sql/query/where_integer b/tests/sql/query/where_integer index 6df7f5d6b..71b04d411 100644 --- a/tests/sql/query/where_integer +++ b/tests/sql/query/where_integer @@ -30,7 +30,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -44,7 +126,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( diff --git a/tests/sql/query/where_join_inner b/tests/sql/query/where_join_inner index 3dd01772f..ca0fbdbbf 100644 --- a/tests/sql/query/where_join_inner +++ b/tests/sql/query/where_join_inner @@ -58,13 +58,119 @@ Plan: Select( Filter { source: NestedLoopJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, left_size: 7, right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -101,7 +207,89 @@ Plan: Select( Optimized plan: Select( HashJoin { left: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -117,7 +305,31 @@ Optimized plan: Select( ), ), right: Scan { - table: "genres", + table: Table { + name: "genres", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "name", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, diff --git a/tests/sql/query/where_null b/tests/sql/query/where_null index 6e1259cf7..8208a0660 100644 --- a/tests/sql/query/where_null +++ b/tests/sql/query/where_null @@ -28,7 +28,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -40,7 +122,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( diff --git a/tests/sql/query/where_pk b/tests/sql/query/where_pk index 002603a97..0da079dd8 100644 --- a/tests/sql/query/where_pk +++ b/tests/sql/query/where_pk @@ -39,7 +39,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -64,7 +146,89 @@ Plan: Select( Optimized plan: Select( KeyLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, keys: [ Integer( diff --git a/tests/sql/query/where_pk_or b/tests/sql/query/where_pk_or index 941c57cac..cc5be5dc2 100644 --- a/tests/sql/query/where_pk_or +++ b/tests/sql/query/where_pk_or @@ -75,7 +75,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -136,7 +218,89 @@ Plan: Select( Optimized plan: Select( KeyLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, keys: [ Integer( diff --git a/tests/sql/query/where_pk_or_partial b/tests/sql/query/where_pk_or_partial index ebb4248c1..9bc99aff4 100644 --- a/tests/sql/query/where_pk_or_partial +++ b/tests/sql/query/where_pk_or_partial @@ -109,7 +109,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -207,7 +289,89 @@ Plan: Select( Optimized plan: Select( Filter { source: KeyLookup { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, keys: [ Integer( diff --git a/tests/sql/query/where_string b/tests/sql/query/where_string index bafeedc48..9e5da9b1e 100644 --- a/tests/sql/query/where_string +++ b/tests/sql/query/where_string @@ -30,7 +30,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -44,7 +126,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant( diff --git a/tests/sql/query/where_true b/tests/sql/query/where_true index 07282cf8e..4c7b7e678 100644 --- a/tests/sql/query/where_true +++ b/tests/sql/query/where_true @@ -40,7 +40,89 @@ AST: Select { Plan: Select( Filter { source: Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: None, }, @@ -54,7 +136,89 @@ Plan: Select( Optimized plan: Select( Scan { - table: "movies", + table: Table { + name: "movies", + columns: [ + Column { + name: "id", + datatype: Integer, + primary_key: true, + nullable: false, + default: None, + unique: true, + references: None, + index: false, + }, + Column { + name: "title", + datatype: String, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "studio_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "studios", + ), + index: true, + }, + Column { + name: "genre_id", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: Some( + "genres", + ), + index: true, + }, + Column { + name: "released", + datatype: Integer, + primary_key: false, + nullable: false, + default: None, + unique: false, + references: None, + index: false, + }, + Column { + name: "rating", + datatype: Float, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + Column { + name: "ultrahd", + datatype: Boolean, + primary_key: false, + nullable: true, + default: Some( + Null, + ), + unique: false, + references: None, + index: false, + }, + ], + }, alias: None, filter: Some( Constant(