OLD | NEW |
| (Empty) |
1 # 2008 December 8 | |
2 # | |
3 # The author disclaims copyright to this source code. In place of | |
4 # a legal notice, here is a blessing: | |
5 # | |
6 # May you do good and not evil. | |
7 # May you find forgiveness for yourself and forgive others. | |
8 # May you share freely, never taking more than you give. | |
9 # | |
10 #*********************************************************************** | |
11 # This file implements regression tests for SQLite library. | |
12 # | |
13 # This file is a verification that the bugs identified in ticket | |
14 # #3527 have been fixed. | |
15 # | |
16 # $Id: tkt3527.test,v 1.1 2008/12/08 13:42:36 drh Exp $ | |
17 | |
18 set testdir [file dirname $argv0] | |
19 source $testdir/tester.tcl | |
20 | |
21 ifcapable !compound { | |
22 finish_test | |
23 return | |
24 } | |
25 | |
26 do_test tkt3527-1.1 { | |
27 db eval { | |
28 CREATE TABLE Element ( | |
29 Code INTEGER PRIMARY KEY, | |
30 Name VARCHAR(60) | |
31 ); | |
32 | |
33 CREATE TABLE ElemOr ( | |
34 CodeOr INTEGER NOT NULL, | |
35 Code INTEGER NOT NULL, | |
36 PRIMARY KEY(CodeOr,Code) | |
37 ); | |
38 | |
39 CREATE TABLE ElemAnd ( | |
40 CodeAnd INTEGER, | |
41 Code INTEGER, | |
42 Attr1 INTEGER, | |
43 Attr2 INTEGER, | |
44 Attr3 INTEGER, | |
45 PRIMARY KEY(CodeAnd,Code) | |
46 ); | |
47 | |
48 INSERT INTO Element VALUES(1,'Elem1'); | |
49 INSERT INTO Element VALUES(2,'Elem2'); | |
50 INSERT INTO Element VALUES(3,'Elem3'); | |
51 INSERT INTO Element VALUES(4,'Elem4'); | |
52 INSERT INTO Element VALUES(5,'Elem5'); | |
53 INSERT INTO ElemOr Values(3,4); | |
54 INSERT INTO ElemOr Values(3,5); | |
55 INSERT INTO ElemAnd VALUES(1,3,'a','b','c'); | |
56 INSERT INTO ElemAnd VALUES(1,2,'x','y','z'); | |
57 | |
58 CREATE VIEW ElemView1 AS | |
59 SELECT | |
60 CAST(Element.Code AS VARCHAR(50)) AS ElemId, | |
61 Element.Code AS ElemCode, | |
62 Element.Name AS ElemName, | |
63 ElemAnd.Code AS InnerCode, | |
64 ElemAnd.Attr1 AS Attr1, | |
65 ElemAnd.Attr2 AS Attr2, | |
66 ElemAnd.Attr3 AS Attr3, | |
67 0 AS Level, | |
68 0 AS IsOrElem | |
69 FROM Element JOIN ElemAnd ON ElemAnd.CodeAnd=Element.Code | |
70 WHERE ElemAnd.CodeAnd NOT IN (SELECT CodeOr FROM ElemOr) | |
71 UNION ALL | |
72 SELECT | |
73 CAST(ElemOr.CodeOr AS VARCHAR(50)) AS ElemId, | |
74 Element.Code AS ElemCode, | |
75 Element.Name AS ElemName, | |
76 ElemOr.Code AS InnerCode, | |
77 NULL AS Attr1, | |
78 NULL AS Attr2, | |
79 NULL AS Attr3, | |
80 0 AS Level, | |
81 1 AS IsOrElem | |
82 FROM ElemOr JOIN Element ON Element.Code=ElemOr.CodeOr | |
83 ORDER BY ElemId, InnerCode; | |
84 | |
85 CREATE VIEW ElemView2 AS | |
86 SELECT | |
87 ElemId, | |
88 ElemCode, | |
89 ElemName, | |
90 InnerCode, | |
91 Attr1, | |
92 Attr2, | |
93 Attr3, | |
94 Level, | |
95 IsOrElem | |
96 FROM ElemView1 | |
97 UNION ALL | |
98 SELECT | |
99 Element.ElemId || '.' || InnerElem.ElemId AS ElemId, | |
100 InnerElem.ElemCode, | |
101 InnerElem.ElemName, | |
102 InnerElem.InnerCode, | |
103 InnerElem.Attr1, | |
104 InnerElem.Attr2, | |
105 InnerElem.Attr3, | |
106 InnerElem.Level+1, | |
107 InnerElem.IsOrElem | |
108 FROM ElemView1 AS Element | |
109 JOIN ElemView1 AS InnerElem | |
110 ON Element.Level=0 AND Element.InnerCode=InnerElem.ElemCode | |
111 ORDER BY ElemId, InnerCode; | |
112 | |
113 SELECT * FROM ElemView1; | |
114 } | |
115 } {1 1 Elem1 2 x y z 0 0 1 1 Elem1 3 a b c 0 0 3 3 Elem3 4 {} {} {} 0 1 3 3 Elem
3 5 {} {} {} 0 1} | |
116 | |
117 do_test tkt3527-1.2 { | |
118 db eval { | |
119 SELECT * FROM ElemView2; | |
120 } | |
121 } {1 1 Elem1 2 x y z 0 0 1 1 Elem1 3 a b c 0 0 1.3 3 Elem3 4 {} {} {} 1 1 1.3 3
Elem3 5 {} {} {} 1 1 3 3 Elem3 4 {} {} {} 0 1 3 3 Elem3 5 {} {} {} 0 1} | |
122 | |
123 finish_test | |
OLD | NEW |