File: autoindex4.test.lua

package info (click to toggle)
tarantool 2.6.0-1.2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 85,396 kB
  • sloc: ansic: 513,775; cpp: 69,493; sh: 25,650; python: 19,190; perl: 14,973; makefile: 4,176; yacc: 1,329; sql: 1,074; pascal: 620; ruby: 190; awk: 18; lisp: 7
file content (129 lines) | stat: -rwxr-xr-x 3,908 bytes parent folder | download | duplicates (3)
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()