1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
#!/usr/bin/env tarantool
test = require("sqltester")
test:plan(7)
--!./tcltestrunner.lua
-- 2014-10-24
--
-- The author disclaims copyright to this source code. In place of
-- a legal notice, here is a blessing:
--
-- May you do good and not evil.
-- May you find forgiveness for yourself and forgive others.
-- May you share freely, never taking more than you give.
--
---------------------------------------------------------------------------
--
-- This file implements regression tests for sql library. The
-- focus of this script is testing automatic index creation logic,
-- and specifically creation of automatic partial indexes.
--
-- ["set","testdir",[["file","dirname",["argv0"]]]]
-- ["source",[["testdir"],"\/tester.tcl"]]
test:do_execsql_test(
"autoindex4-1.0",
[[
CREATE TABLE t1(a INT,b TEXT, primary key(a,b));
INSERT INTO t1 VALUES(123,'abc'),(234,'def'),(234,'ghi'),(345,'jkl');
CREATE TABLE t2(x INT,y TEXT, primary key(x,y));
INSERT INTO t2 VALUES(987,'zyx'),(654,'wvu'),(987,'rqp');
SELECT *, '|' FROM t1, t2 WHERE a=234 AND x=987 ORDER BY +b;
]], {
-- <autoindex4-1.0>
234, "def", 987, "rqp", "|", 234, "def", 987, "zyx", "|", 234, "ghi", 987, "rqp", "|", 234, "ghi", 987, "zyx", "|"
-- </autoindex4-1.0>
})
test:do_execsql_test(
"autoindex4-1.1",
[[
SELECT *, '|' FROM t1, t2 WHERE a=234 AND x=555;
]], {
-- <autoindex4-1.1>
-- </autoindex4-1.1>
})
test:do_execsql_test(
"autoindex4-1.2",
[[
SELECT *, '|' FROM t1 LEFT JOIN t2 ON a=234 AND x=555;
]], {
-- <autoindex4-1.2>
123, "abc", "", "", "|", 234, "def", "", "", "|", 234, "ghi", "", "", "|", 345, "jkl", "", "", "|"
-- </autoindex4-1.2>
})
test:do_execsql_test(
"autoindex4-1.3",
[[
SELECT *, '|' FROM t1 LEFT JOIN t2 ON x=555 WHERE a=234;
]], {
-- <autoindex4-1.3>
234, "def", "", "", "|", 234, "ghi", "", "", "|"
-- </autoindex4-1.3>
})
test:do_execsql_test(
"autoindex4-1.4",
[[
SELECT *, '|' FROM t1 LEFT JOIN t2 WHERE a=234 AND x=555;
]], {
-- <autoindex4-1.4>
-- </autoindex4-1.4>
})
-- do_execsql_test autoindex4-2.0 {
-- CREATE TABLE t3(e INT,f INT);
-- INSERT INTO t3 VALUES(123,654),(555,444),(234,987);
-- SELECT (SELECT count(*) FROM t1, t2 WHERE a=e AND x=f), e, f, '|'
-- FROM t3
-- ORDER BY rowid;
-- } {1 123 654 | 0 555 444 | 4 234 987 |}
-- Ticket [2326c258d02ead33d]
-- Two joins, one with and the other without an ORDER BY clause.
-- The one without ORDER BY correctly returns two rows of result.
-- The one with ORDER BY returns no rows.
--
test:do_execsql_test(
"autoindex4-3.0",
[[
CREATE TABLE A(Name text primary key);
CREATE TABLE Items(ItemName text primary key, Name text);
INSERT INTO Items VALUES('Item1','Parent');
INSERT INTO Items VALUES('Item2','Parent');
CREATE TABLE B(Name text primary key);
SELECT Items.ItemName
FROM Items
LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
LEFT JOIN B ON (B.Name = Items.ItemName)
WHERE Items.Name = 'Parent'
ORDER BY Items.ItemName;
]], {
-- <autoindex4-3.0>
"Item1", "Item2"
-- </autoindex4-3.0>
})
test:do_execsql_test(
"autoindex4-3.1",
[[
CREATE INDEX Items_x1 ON Items(ItemName,Name);
SELECT Items.ItemName
FROM Items
LEFT JOIN A ON (A.Name = Items.ItemName and Items.ItemName = 'dummy')
LEFT JOIN B ON (B.Name = Items.ItemName)
WHERE Items.Name = 'Parent'
ORDER BY Items.ItemName;
]], {
-- <autoindex4-3.1>
"Item1", "Item2"
-- </autoindex4-3.1>
})
test:finish_test()
|