1 | #include "catch.hpp" |
2 | #include "test_helpers.hpp" |
3 | |
4 | using namespace duckdb; |
5 | using namespace std; |
6 | |
7 | TEST_CASE("Test simple projection statements" , "[simpleprojection]" ) { |
8 | unique_ptr<QueryResult> result; |
9 | DuckDB db(nullptr); |
10 | Connection con(db); |
11 | con.EnableQueryVerification(); |
12 | |
13 | // create table |
14 | result = con.Query("CREATE TABLE a (i integer, j integer);" ); |
15 | |
16 | // insertion: 1 affected row |
17 | result = con.Query("INSERT INTO a VALUES (42, 84);" ); |
18 | REQUIRE(CHECK_COLUMN(result, 0, {1})); |
19 | |
20 | result = con.Query("SELECT * FROM a;" ); |
21 | REQUIRE(CHECK_COLUMN(result, 0, {42})); |
22 | REQUIRE(CHECK_COLUMN(result, 1, {84})); |
23 | |
24 | // multiple insertions |
25 | REQUIRE_NO_FAIL(con.Query("CREATE TABLE test (a INTEGER, b INTEGER);" )); |
26 | REQUIRE_NO_FAIL(con.Query("INSERT INTO test VALUES (11, 22), (12, 21), (13, 22)" )); |
27 | |
28 | // multiple projections |
29 | result = con.Query("SELECT a, b FROM test;" ); |
30 | REQUIRE(CHECK_COLUMN(result, 0, {11, 12, 13})); |
31 | REQUIRE(CHECK_COLUMN(result, 1, {22, 21, 22})); |
32 | |
33 | // basic expressions and filters |
34 | result = con.Query("SELECT a + 2, b FROM test WHERE a = 11;" ); |
35 | REQUIRE(CHECK_COLUMN(result, 0, {13})); |
36 | REQUIRE(CHECK_COLUMN(result, 1, {22})); |
37 | |
38 | result = con.Query("SELECT a + 2, b FROM test WHERE a = 12;" ); |
39 | REQUIRE(CHECK_COLUMN(result, 0, {14})); |
40 | REQUIRE(CHECK_COLUMN(result, 1, {21})); |
41 | |
42 | // casts |
43 | result = con.Query("SELECT cast(a AS VARCHAR) FROM test;" ); |
44 | REQUIRE(CHECK_COLUMN(result, 0, {"11" , "12" , "13" })); |
45 | |
46 | result = con.Query("SELECT cast(cast(a AS VARCHAR) as INTEGER) FROM test;" ); |
47 | REQUIRE(CHECK_COLUMN(result, 0, {11, 12, 13})); |
48 | } |
49 | |
50 | TEST_CASE("Test table star expressions" , "[simpleprojection]" ) { |
51 | unique_ptr<QueryResult> result; |
52 | DuckDB db(nullptr); |
53 | Connection con(db); |
54 | con.EnableQueryVerification(); |
55 | |
56 | REQUIRE_NO_FAIL(con.Query("CREATE TABLE test (a INTEGER, b INTEGER)" )); |
57 | REQUIRE_NO_FAIL(con.Query("INSERT INTO test VALUES (11, 22), (12, 21), (13, 22)" )); |
58 | |
59 | result = con.Query("SELECT * FROM test" ); |
60 | REQUIRE(CHECK_COLUMN(result, 0, {11, 12, 13})); |
61 | REQUIRE(CHECK_COLUMN(result, 1, {22, 21, 22})); |
62 | |
63 | result = con.Query("SELECT test.* FROM test" ); |
64 | REQUIRE(CHECK_COLUMN(result, 0, {11, 12, 13})); |
65 | REQUIRE(CHECK_COLUMN(result, 1, {22, 21, 22})); |
66 | |
67 | result = con.Query("SELECT t.* FROM test t" ); |
68 | REQUIRE(CHECK_COLUMN(result, 0, {11, 12, 13})); |
69 | REQUIRE(CHECK_COLUMN(result, 1, {22, 21, 22})); |
70 | |
71 | REQUIRE_FAIL(con.Query("SELECT test.* FROM test t" )); |
72 | REQUIRE_FAIL(con.Query("SELECT xyz.* FROM test" )); |
73 | REQUIRE_FAIL(con.Query("SELECT xyz.*" )); |
74 | |
75 | // issue 415 |
76 | REQUIRE_NO_FAIL(con.Query("create table r4 (i int, j int)" )); |
77 | REQUIRE_NO_FAIL(con.Query("insert into r4 (i, j) values (1,1), (1,2), (1,3), (1,4), (1,5)" )); |
78 | |
79 | result = con.Query("select t1.i, t1.j as a, t2.j as b from r4 t1 inner join r4 t2 using(i,j) ORDER BY a" ); |
80 | REQUIRE(CHECK_COLUMN(result, 0, {1, 1, 1, 1, 1})); |
81 | REQUIRE(CHECK_COLUMN(result, 1, {1, 2, 3, 4, 5})); |
82 | REQUIRE(CHECK_COLUMN(result, 2, {1, 2, 3, 4, 5})); |
83 | |
84 | result = con.Query( |
85 | "select t1.i, t1.j as a, t2.j as b from r4 t1 inner join r4 t2 on t1.i=t2.i and t1.j=t2.j ORDER BY a" ); |
86 | REQUIRE(CHECK_COLUMN(result, 0, {1, 1, 1, 1, 1})); |
87 | REQUIRE(CHECK_COLUMN(result, 1, {1, 2, 3, 4, 5})); |
88 | REQUIRE(CHECK_COLUMN(result, 2, {1, 2, 3, 4, 5})); |
89 | |
90 | result = con.Query("select t1.*, t2.j b from r4 t1 inner join r4 t2 using(i,j) ORDER BY t1.j" ); |
91 | REQUIRE(CHECK_COLUMN(result, 0, {1, 1, 1, 1, 1})); |
92 | REQUIRE(CHECK_COLUMN(result, 1, {1, 2, 3, 4, 5})); |
93 | REQUIRE(CHECK_COLUMN(result, 2, {1, 2, 3, 4, 5})); |
94 | |
95 | result = con.Query("select t1.*, t2.j b from r4 t1 inner join r4 t2 on t1.i=t2.i and t1.j=t2.j ORDER BY t1.j" ); |
96 | REQUIRE(CHECK_COLUMN(result, 0, {1, 1, 1, 1, 1})); |
97 | REQUIRE(CHECK_COLUMN(result, 1, {1, 2, 3, 4, 5})); |
98 | REQUIRE(CHECK_COLUMN(result, 2, {1, 2, 3, 4, 5})); |
99 | } |
100 | |