]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Fix a (harmless) assertion fault on nested views where the inner views
authordrh <drh@noemail.net>
Fri, 26 Jan 2007 19:04:00 +0000 (19:04 +0000)
committerdrh <drh@noemail.net>
Fri, 26 Jan 2007 19:04:00 +0000 (19:04 +0000)
are compound selects.  Ticket #2192. (CVS 3605)

FossilOrigin-Name: 942e7193bbf1ffe9a703891d175e016631e2ad5c

manifest
manifest.uuid
src/select.c
test/tkt2192.test [new file with mode: 0644]

index 62ca0700433615280ac8c31ef1e43520d435bac9..8220096739b04ef33dd64e15352d18bcd450b7c7 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Make\ssure\sthe\sloadext.c\smodule\sworks\seven\sif\sall\sSQLITE_OMIT\smacros\sare\ndefined.\s\sTickets\s#2184\sand\s#2069.\s(CVS\s3604)
-D 2007-01-26T13:08:25
+C Fix\sa\s(harmless)\sassertion\sfault\son\snested\sviews\swhere\sthe\sinner\sviews\nare\scompound\sselects.\s\sTicket\s#2192.\s(CVS\s3605)
+D 2007-01-26T19:04:00
 F Makefile.in 7fa74bf4359aa899da5586e394d17735f221315f
 F Makefile.linux-gcc 2d8574d1ba75f129aba2019f0b959db380a90935
 F README 9c4e2d6706bdcc3efdd773ce752a8cdab4f90028
@@ -92,7 +92,7 @@ F src/pragma.c fd4df6cf0857dd78a7cb5be5f9805419b53ae7a0
 F src/prepare.c 484389c6811415b8f23d259ac9c029613e1c72c3
 F src/printf.c b179b6ed12f793e028dd169e2e2e2b2a37eedc63
 F src/random.c 6119474a6f6917f708c1dee25b9a8e519a620e88
-F src/select.c 52f09127b53697b1a95835a9b0db9309cca8079f
+F src/select.c d46aceb4eb0c3e9ca7d6c9a2b65f4c19723f9763
 F src/server.c 087b92a39d883e3fa113cae259d64e4c7438bc96
 F src/shell.c d13ca007cd18192c07a668aeddcdd6a9fe639be9
 F src/sqlite.h.in 6b7383baf76070214f6381f603328ca9b22a7fae
@@ -321,6 +321,7 @@ F test/tkt1644.test 80b6a2bb17885f3cf1cb886d97cdad13232bb869
 F test/tkt1667.test ef52c857940755ea5eab24d68f808826e7dcdc94
 F test/tkt1873.test 7159a1c1bf627bbb03f11362e4ad4de11d6ff316
 F test/tkt2141.test 78fb8ea2e7e38f7e5b3e649ca9426928056ef55c
+F test/tkt2192.test 480d0e017ddb01a46ee20809427370f343bb3c03
 F test/trace.test 75ffc1b992c780d054748a656e3e7fd674f18567
 F test/trans.test 06bff0246886858793fca3748721936e2f65e3df
 F test/trigger1.test 2c79e2bf76350811e362814e98779c120b6a9421
@@ -427,7 +428,7 @@ F www/tclsqlite.tcl bb0d1357328a42b1993d78573e587c6dcbc964b9
 F www/vdbe.tcl 87a31ace769f20d3627a64fa1fade7fed47b90d0
 F www/version3.tcl 890248cf7b70e60c383b0e84d77d5132b3ead42b
 F www/whentouse.tcl 97e2b5cd296f7d8057e11f44427dea8a4c2db513
-P 31e8cf7f30afe14f0866ea71eebbda9755ddedf8
-R c4d7447c5dddc9c909ddd6d336d299b3
+P e1fae43c89253fe5ca85bd149cd7697234f9aa91
+R 740aa5a4d6cddbb1dfb22766971a0377
 U drh
-Z 3768f5eec85dfa8aa18c5475656cb57c
+Z 72ba24e0b38388758e3d22c3170f3238
index 1727363569de697fd94db6d341ade6851306923c..5c03de31d9ff522cb3a93417eeb8605e51f5be78 100644 (file)
@@ -1 +1 @@
-e1fae43c89253fe5ca85bd149cd7697234f9aa91
\ No newline at end of file
+942e7193bbf1ffe9a703891d175e016631e2ad5c
\ No newline at end of file
index 343a3055891e1a3fa147a025e6533d776149b883..9e3833629f451bb928f0f115834bb8b056e61a20 100644 (file)
@@ -12,7 +12,7 @@
 ** This file contains C code routines that are called by the parser
 ** to handle SELECT statements in SQLite.
 **
-** $Id: select.c,v 1.323 2006/12/16 16:25:15 drh Exp $
+** $Id: select.c,v 1.324 2007/01/26 19:04:00 drh Exp $
 */
 #include "sqliteInt.h"
 
@@ -1936,6 +1936,7 @@ static int multiSelect(
         }
         sqlite3VdbeChangeP2(v, addr, nCol);
         sqlite3VdbeChangeP3(v, addr, (char*)pKeyInfo, P3_KEYINFO);
+        pLoop->addrOpenEphm[i] = -1;
       }
     }
 
diff --git a/test/tkt2192.test b/test/tkt2192.test
new file mode 100644 (file)
index 0000000..7d0e354
--- /dev/null
@@ -0,0 +1,136 @@
+# 2007 January 26
+#
+# 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 SQLite library.
+#
+# This file implements tests to verify that ticket #2192 has been
+# fixed.  
+#
+#
+# $Id: tkt2192.test,v 1.1 2007/01/26 19:04:00 drh Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+
+do_test tkt2191-1.1 {
+  execsql {
+    -- Raw data (RBS) --------
+    
+    create table records (
+      date          real,
+      type          text,
+      description   text,
+      value         integer,
+      acc_name      text,
+      acc_no        text
+    );
+    
+    -- Direct Debits ----------------
+    create view direct_debits as
+      select * from records where type = 'D/D';
+    
+    create view monthly_direct_debits as
+      select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
+        from direct_debits
+       group by strftime('%Y-%m', date);
+    
+    -- Expense Categories ---------------
+    create view energy as
+      select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
+        from direct_debits
+       where description like '%NPOWER%'
+       group by strftime('%Y-%m', date);
+    
+    create view phone_internet as
+      select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
+        from direct_debits
+       where description like '%BT DIRECT%'
+          or description like '%SUPANET%'
+          or description like '%ORANGE%'
+       group by strftime('%Y-%m', date);
+    
+    create view credit_cards as
+      select strftime('%Y-%m', date) as date, (-1 * sum(value)) as value
+        from direct_debits where description like '%VISA%'
+       group by strftime('%Y-%m', date);
+    
+    -- Overview ---------------------
+    
+    create view expense_overview as
+      select 'Energy' as expense, date, value from energy
+      union
+      select 'Phone/Internet' as expense, date, value from phone_internet
+      union
+      select 'Credit Card' as expense, date, value from credit_cards;
+    
+    create view jan as
+      select 'jan', expense, value from expense_overview
+       where date like '%-01';
+    
+    create view nov as
+      select 'nov', expense, value from expense_overview
+       where date like '%-11';
+    
+    create view summary as
+      select * from jan join nov on (jan.expense = nov.expense);
+  }
+} {}
+do_test tkt2192-1.2 {
+  # set ::sqlite_addop_trace 1
+  execsql {
+    select * from summary;
+  }
+} {}
+do_test tkt2192-2.1 {
+  execsql {
+    CREATE TABLE t1(a,b);
+    CREATE VIEW v1 AS
+      SELECT * FROM t1 WHERE b%7=0 UNION SELECT * FROM t1 WHERE b%5=0;
+    INSERT INTO t1 VALUES(1,7);
+    INSERT INTO t1 VALUES(2,10);
+    INSERT INTO t1 VALUES(3,14);
+    INSERT INTO t1 VALUES(4,15);
+    INSERT INTO t1 VALUES(1,16);
+    INSERT INTO t1 VALUES(2,17);
+    INSERT INTO t1 VALUES(3,20);
+    INSERT INTO t1 VALUES(4,21);
+    INSERT INTO t1 VALUES(1,22);
+    INSERT INTO t1 VALUES(2,24);
+    INSERT INTO t1 VALUES(3,25);
+    INSERT INTO t1 VALUES(4,26);
+    INSERT INTO t1 VALUES(1,27);
+    SELECT b FROM v1 ORDER BY b;
+  }
+} {7 10 14 15 20 21 25}
+do_test tkt2192-2.2 {
+  execsql {
+    SELECT * FROM v1 ORDER BY a, b;
+  }
+} {1 7 2 10 3 14 3 20 3 25 4 15 4 21}
+do_test tkt2192-2.3 {
+  execsql {
+    SELECT x.a || '/' || x.b || '/' || y.b
+      FROM v1 AS x JOIN v1 AS y ON x.a=y.a AND x.b<y.b
+     ORDER BY x.a, x.b, y.b
+  }
+} {3/14/20 3/14/25 3/20/25 4/15/21}
+do_test tkt2192-2.4 {
+  execsql {
+    CREATE VIEW v2 AS
+    SELECT x.a || '/' || x.b || '/' || y.b AS z
+      FROM v1 AS x JOIN v1 AS y ON x.a=y.a AND x.b<y.b
+     ORDER BY x.a, x.b, y.b;
+    SELECT * FROM v2;
+  }
+} {3/14/20 3/14/25 3/20/25 4/15/21}
+
+finish_test