From 5b4bdc8aa3f33103c4a8dacf7af0aee3d196f331 Mon Sep 17 00:00:00 2001 From: Bennett Clement Date: Mon, 22 Jul 2024 11:08:14 +0800 Subject: [PATCH] Fix .schema - Add tests for .schema - Make command line sql arguments to allow .commands --- cli/main.rs | 6 +++++- core/translate/where_clause.rs | 7 ++++++- testing/all.test | 1 + testing/cmdlineshell.test | 28 ++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 testing/cmdlineshell.test diff --git a/cli/main.rs b/cli/main.rs index 48bef70ea..38046cab5 100644 --- a/cli/main.rs +++ b/cli/main.rs @@ -40,7 +40,11 @@ fn main() -> anyhow::Result<()> { let db = Database::open_file(io.clone(), path)?; let conn = db.connect(); if let Some(sql) = opts.sql { - query(io.clone(), &conn, &sql, &opts.output_mode)?; + if sql.trim().starts_with('.') { + handle_dot_command(io.clone(), &conn, &sql)?; + } else { + query(io.clone(), &conn, &sql, &opts.output_mode)?; + } return Ok(()); } let mut rl = DefaultEditor::new()?; diff --git a/core/translate/where_clause.rs b/core/translate/where_clause.rs index 6eef19677..30e29ca25 100644 --- a/core/translate/where_clause.rs +++ b/core/translate/where_clause.rs @@ -42,6 +42,7 @@ pub struct Inner { pub join_clause: Option, } +#[derive(Debug)] pub enum QueryConstraint { Left(Left), Inner(Inner), @@ -572,7 +573,11 @@ fn get_no_match_target_cursor( let cursors = introspect_expression_for_cursors(program, select, expr, cursor_hint).unwrap_or_default(); if cursors.is_empty() { - HARDCODED_CURSOR_LEFT_TABLE + assert!( + select.loops.len() > 0, + "select.loops is populated based on select.src_tables. Expect at least 1 table if this function is called" + ); + select.loops.first().unwrap().open_cursor } else { *cursors.iter().max().unwrap() } diff --git a/testing/all.test b/testing/all.test index 7b5edff5c..ad08d418b 100755 --- a/testing/all.test +++ b/testing/all.test @@ -2,6 +2,7 @@ set testdir [file dirname $argv0] +source $testdir/cmdlineshell.test source $testdir/agg-functions.test source $testdir/coalesce.test source $testdir/join.test diff --git a/testing/cmdlineshell.test b/testing/cmdlineshell.test new file mode 100644 index 000000000..6006956b0 --- /dev/null +++ b/testing/cmdlineshell.test @@ -0,0 +1,28 @@ +#!/usr/bin/env tclsh + +set testdir [file dirname $argv0] +source $testdir/tester.tcl + +do_execsql_test schema-1 { + .schema users +} {{CREATE TABLE users ( + id INTEGER PRIMARY KEY, + first_name TEXT, + last_name TEXT, + email TEXT, + phone_number TEXT, + address TEXT, + city TEXT, + state TEXT, + zipcode TEXT, + age INTEGER + );}} + +do_execsql_test schema-2 { + .schema products +} {{CREATE TABLE products ( + id INTEGER PRIMARY KEY, + name TEXT, + price REAL + );}} + \ No newline at end of file