tkt3527.test 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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. set testdir [file dirname $argv0]
  18. source $testdir/tester.tcl
  19. ifcapable !compound {
  20. finish_test
  21. return
  22. }
  23. do_test tkt3527-1.1 {
  24. db eval {
  25. CREATE TABLE Element (
  26. Code INTEGER PRIMARY KEY,
  27. Name VARCHAR(60)
  28. );
  29. CREATE TABLE ElemOr (
  30. CodeOr INTEGER NOT NULL,
  31. Code INTEGER NOT NULL,
  32. PRIMARY KEY(CodeOr,Code)
  33. );
  34. CREATE TABLE ElemAnd (
  35. CodeAnd INTEGER,
  36. Code INTEGER,
  37. Attr1 INTEGER,
  38. Attr2 INTEGER,
  39. Attr3 INTEGER,
  40. PRIMARY KEY(CodeAnd,Code)
  41. );
  42. INSERT INTO Element VALUES(1,'Elem1');
  43. INSERT INTO Element VALUES(2,'Elem2');
  44. INSERT INTO Element VALUES(3,'Elem3');
  45. INSERT INTO Element VALUES(4,'Elem4');
  46. INSERT INTO Element VALUES(5,'Elem5');
  47. INSERT INTO ElemOr Values(3,4);
  48. INSERT INTO ElemOr Values(3,5);
  49. INSERT INTO ElemAnd VALUES(1,3,'a','b','c');
  50. INSERT INTO ElemAnd VALUES(1,2,'x','y','z');
  51. CREATE VIEW ElemView1 AS
  52. SELECT
  53. CAST(Element.Code AS VARCHAR(50)) AS ElemId,
  54. Element.Code AS ElemCode,
  55. Element.Name AS ElemName,
  56. ElemAnd.Code AS InnerCode,
  57. ElemAnd.Attr1 AS Attr1,
  58. ElemAnd.Attr2 AS Attr2,
  59. ElemAnd.Attr3 AS Attr3,
  60. 0 AS Level,
  61. 0 AS IsOrElem
  62. FROM Element JOIN ElemAnd ON ElemAnd.CodeAnd=Element.Code
  63. WHERE ElemAnd.CodeAnd NOT IN (SELECT CodeOr FROM ElemOr)
  64. UNION ALL
  65. SELECT
  66. CAST(ElemOr.CodeOr AS VARCHAR(50)) AS ElemId,
  67. Element.Code AS ElemCode,
  68. Element.Name AS ElemName,
  69. ElemOr.Code AS InnerCode,
  70. NULL AS Attr1,
  71. NULL AS Attr2,
  72. NULL AS Attr3,
  73. 0 AS Level,
  74. 1 AS IsOrElem
  75. FROM ElemOr JOIN Element ON Element.Code=ElemOr.CodeOr
  76. ORDER BY ElemId, InnerCode;
  77. CREATE VIEW ElemView2 AS
  78. SELECT
  79. ElemId,
  80. ElemCode,
  81. ElemName,
  82. InnerCode,
  83. Attr1,
  84. Attr2,
  85. Attr3,
  86. Level,
  87. IsOrElem
  88. FROM ElemView1
  89. UNION ALL
  90. SELECT
  91. Element.ElemId || '.' || InnerElem.ElemId AS ElemId,
  92. InnerElem.ElemCode,
  93. InnerElem.ElemName,
  94. InnerElem.InnerCode,
  95. InnerElem.Attr1,
  96. InnerElem.Attr2,
  97. InnerElem.Attr3,
  98. InnerElem.Level+1,
  99. InnerElem.IsOrElem
  100. FROM ElemView1 AS Element
  101. JOIN ElemView1 AS InnerElem
  102. ON Element.Level=0 AND Element.InnerCode=InnerElem.ElemCode
  103. ORDER BY ElemId, InnerCode;
  104. SELECT * FROM ElemView1;
  105. }
  106. } {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 Elem3 5 {} {} {} 0 1}
  107. do_test tkt3527-1.2 {
  108. db eval {
  109. SELECT * FROM ElemView2;
  110. }
  111. } {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}
  112. finish_test