Skip to content

Commit 3d1c39b

Browse files
committed
sqllogictest continue
1 parent d06b02a commit 3d1c39b

10 files changed

Lines changed: 184 additions & 32 deletions

File tree

src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ pub mod parser;
1414
pub mod planner;
1515
pub mod storage;
1616
pub mod types;
17+
pub mod util;
1718
mod execution_v1;

src/util/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
pub mod util;
21

32
use arrow::record_batch::RecordBatch;
43
use arrow::datatypes::{DataType, Field, Schema, SchemaRef};
54
use arrow::error::ArrowError;
5+
use arrow::util::display::array_value_to_string;
66

77
pub fn record_batch_to_string(batch: &RecordBatch) -> Result<String, ArrowError> {
88
let mut output = String::new();

tests/slt/csv/csv.slt

Lines changed: 0 additions & 20 deletions
This file was deleted.

tests/slt/csv/state1.csv

Lines changed: 0 additions & 5 deletions
This file was deleted.

tests/slt/csv/state2.csv

Lines changed: 0 additions & 2 deletions
This file was deleted.

tests/slt/insert_table.slt

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# Test common insert case
2+
onlyif sqlrs_v2
3+
statement ok
4+
create table t1(v1 varchar, v2 varchar, v3 varchar);
5+
6+
onlyif sqlrs_v2
7+
statement error
8+
insert into t1(v3) values ('0','4');
9+
10+
onlyif sqlrs_v2
11+
statement ok
12+
insert into t1(v3, v2) values ('0','4'), ('1','5');
13+
14+
onlyif sqlrs_v2
15+
statement ok
16+
insert into t1 values ('2','7','9');
17+
18+
onlyif sqlrs_v2
19+
query III
20+
select v1, v3, v2 from t1;
21+
----
22+
NULL 0 4
23+
NULL 1 5
24+
2 9 7
25+
26+
27+
# Test insert value cast type
28+
onlyif sqlrs_v2
29+
statement ok
30+
create table t2(v1 int, v2 int, v3 int);
31+
32+
onlyif sqlrs_v2
33+
statement ok
34+
insert into t2(v3, v2, v1) values (0, 4, 1), (1, 5, 2);
35+
36+
onlyif sqlrs_v2
37+
query III
38+
select v3, v2, v1 from t2;
39+
----
40+
0 4 1
41+
1 5 2
42+
43+
44+
# Test insert type cast
45+
onlyif sqlrs_v2
46+
statement ok
47+
create table t3(v1 TINYINT UNSIGNED);
48+
49+
onlyif sqlrs_v2
50+
statement error
51+
insert into t3(v1) values (1481);
52+
53+
54+
# Test insert null values
55+
onlyif sqlrs_v2
56+
statement ok
57+
create table t4(v1 varchar, v2 smallint unsigned, v3 bigint unsigned);
58+
59+
onlyif sqlrs_v2
60+
statement ok
61+
insert into t4 values (NULL, 1, 2), ('', 3, NULL);
62+
63+
onlyif sqlrs_v2
64+
statement ok
65+
insert into t4 values (NULL, NULL, NULL);
66+
67+
onlyif sqlrs_v2
68+
query III
69+
select v1, v2, v3 from t4;
70+
----
71+
NULL 1 2
72+
(empty) 3 NULL
73+
NULL NULL NULL
74+
75+
76+
# Test insert from select
77+
onlyif sqlrs_v2
78+
statement ok
79+
CREATE TABLE integers(i INTEGER);
80+
81+
onlyif sqlrs_v2
82+
statement ok
83+
INSERT INTO integers SELECT 42;
84+
INSERT INTO integers SELECT null;
85+
86+
onlyif sqlrs_v2
87+
query I
88+
SELECT * FROM integers
89+
----
90+
42
91+
NULL

tests/slt/select.slt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
skipif sqlrs_v2
2+
query IIII
3+
select first_name, state, id, salary from employee;
4+
----
5+
Bill CA 1 12000
6+
Gregg CO 2 10000
7+
John CO 3 11500
8+
Von (empty) 4 NULL
9+
10+
# test insert projection with cast expression
11+
onlyif sqlrs_v2
12+
statement ok
13+
create table t2(v1 tinyint);
14+
insert into t2(v1) values (1), (5);
15+
16+
onlyif sqlrs_v2
17+
statement ok
18+
create table t1(v1 int, v2 int, v3 int);
19+
insert into t1(v3, v2, v1) values (0, 4, 1), (1, 5, 2);
20+
21+
22+
onlyif sqlrs_v2
23+
query III
24+
select t1.v1, v2 from t1;
25+
----
26+
1 4
27+
2 5
28+
29+
30+
onlyif sqlrs_v2
31+
query III
32+
select *, t1.* from t1;
33+
----
34+
1 4 0 1 4 0
35+
2 5 1 2 5 1
36+
37+
38+
# TODO: use alias function to verify output column names
39+
onlyif sqlrs_v2
40+
query III
41+
select t.v1 as a, v2 as b from t1 as t;
42+
----
43+
1 4
44+
2 5
45+
46+
47+
onlyif sqlrs_v2
48+
query III
49+
select 1, 2.3, '😇', true, null;
50+
----
51+
1 2.3 😇 true NULL

tests/sqllogictest/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ sqllogictest = "0.6"
99
glob = "0.3"
1010
async-trait = "0.1"
1111
libtest-mimic = "0.6"
12-
12+
anyhow = { version = "1.0.71", features = ["std"] }
1313
[[test]]
1414
name = "sqllogictest"
1515
harness = false

tests/sqllogictest/src/lib.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
1+
#![feature(iterator_try_collect)]
22
use std::sync::Arc;
33

44
use sqllogictest::{AsyncDB, Runner};
55
use kip_sql::db::{Database,DatabaseError};
66
use kip_sql::util::record_batch_to_string;
7-
fn init_tables(){
7+
pub fn test_run(sqlfile: &str){
88

99
let db = Arc::new( Database::new_on_mem());
1010
let mut tester = Runner::new(DatabaseWrapper {db});
@@ -32,8 +32,9 @@ struct DatabaseWrapper {
3232
impl AsyncDB for DatabaseWrapper {
3333
type Error = DatabaseError;
3434
async fn run(&mut self, sql: &str) -> Result<String, Self::Error> {
35-
let chunks = self.db.run(sql).await?;
35+
let chunks = self.db.run(sql).await.unwrap();
3636
let output = chunks.iter().map(record_batch_to_string).try_collect();
3737
Ok(output?)
3838
}
39+
3940
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
use std::path::Path;
2+
3+
use libtest_mimic::{Arguments, Trial};
4+
use sqllogictest_test::{test_run};
5+
6+
fn main() {
7+
let path = Path::new(env!("CARGO_MANIFEST_DIR")).join("..").join("..");
8+
std::env::set_current_dir(path).unwrap();
9+
10+
const SLT_PATTERN: &str = "tests/slt/**/*.slt";
11+
12+
let args = Arguments::from_args();
13+
let mut tests = vec![];
14+
15+
let slt_files = glob::glob(SLT_PATTERN).expect("failed to find slt files");
16+
for slt_file in slt_files {
17+
let filepath = slt_file.expect("failed to read slt file");
18+
let filename = filepath
19+
.file_stem()
20+
.expect("failed to get file name")
21+
.to_str()
22+
.unwrap()
23+
.to_string();
24+
let filepath = filepath.to_str().unwrap().to_string();
25+
26+
let test = Trial::test(filename, move || {
27+
test_run(filepath.as_str());
28+
Ok(())
29+
});
30+
31+
tests.push(test);
32+
}
33+
34+
libtest_mimic::run(&args, tests).exit();
35+
}

0 commit comments

Comments
 (0)