From 6c18b6e0f4ecc2abb5333fc7dc0ee00fdd2b6283 Mon Sep 17 00:00:00 2001 From: danielk1977 Date: Sun, 30 Jan 2005 09:17:58 +0000 Subject: [PATCH] Have the optimization introduced in (2170) deal with OP_NullRow as well as OP_Column and OP_Recno. Fix for #1086. (CVS 2290) FossilOrigin-Name: 356d31e03fe856642c5637f5ea5665947ff681fc --- manifest | 16 ++++++++-------- manifest.uuid | 2 +- src/expr.c | 3 ++- src/where.c | 4 +++- test/misc4.test | 17 ++++++++++++++++- 5 files changed, 30 insertions(+), 12 deletions(-) diff --git a/manifest b/manifest index a000304987..f623043654 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Update\sto\stest\sfiles\sto\ssupport\sbuilds\swith\sOMIT\smacros\sdefined.\s(CVS\s2289) -D 2005-01-29T09:14:05 +C Have\sthe\soptimization\sintroduced\sin\s(2170)\sdeal\swith\sOP_NullRow\sas\swell\sas\sOP_Column\sand\sOP_Recno.\sFix\sfor\s#1086.\s(CVS\s2290) +D 2005-01-30T09:17:59 F Makefile.in ffd81f5e926d40b457071b4de8d7c1fa18f39b5a F Makefile.linux-gcc a9e5a0d309fa7c38e7c14d3ecf7690879d3a5457 F README a01693e454a00cc117967e3f9fdab2d4d52e9bc1 @@ -36,7 +36,7 @@ F src/cursor.c de73c00aefc4747ad59b5105cf38bbff0667922e F src/date.c f3d1f5cd1503dabf426a198f3ebef5afbc122a7f F src/delete.c 4b94395b52a8f7785acd71135c2ce54f3f5550b3 F src/experimental.c 8cc66b2be6a011055d75ef19ed2584bcfbb585ad -F src/expr.c 9965ce8a6f416377ddcace8fb1d796101cf02ea9 +F src/expr.c 06b7ab3d09a5f709744f142263e13b2b1d7c6372 F src/func.c f096b6771cc0aaa11790aca95773a50a8f74ba73 F src/hash.c a97721a55440b7bea31ffe471bb2f6b4123cddd5 F src/hash.h 1b0c445e1c89ff2aaad9b4605ba61375af001e84 @@ -81,7 +81,7 @@ F src/vdbeInt.h e80721cd8ff611789e20743eec43363a9fb5a48e F src/vdbeapi.c 467caa6e6fb9247528b1c7ab9132ae1b4748e8ac F src/vdbeaux.c 8d8cc8992cb78cab35e034fa81ad0c1a771c39f1 F src/vdbemem.c 62fe89471b656a922e9879be005abf690509ead3 -F src/where.c b733d3a2e866bb31a3c5d0acf94d8dc599d55a81 +F src/where.c 94d847e07b07110c9097fbd3efb630ab8fb19edf F tclinstaller.tcl 36478c3bbfc5b93ceac42d94e3c736937b808432 F test/all.test 7f0988442ab811dfa41793b5b550f5828ce316f3 F test/alter.test b146ddd669b45a880d40bfdacd6037666137c3f4 @@ -157,7 +157,7 @@ F test/minmax.test 9429a06f1f93acf76fcacafd17160a4392e88526 F test/misc1.test ff817d3740458884fea535b44821ec7e84700457 F test/misc2.test fc052267d5178367f955538ae34aae1b2f696a92 F test/misc3.test 7bd937e2c62bcc6be71939faf068d506467b1e03 -F test/misc4.test f44ad10982592bb77f1ae6d7876890b3af9605c1 +F test/misc4.test 98e5fb5544aeac6cbbc529c79d4144b0936c22de F test/misuse.test 1c7fee3c4c0cb4008717ecccf5c72281fac0008e F test/notnull.test 7a08117a71e74b0321aaa937dbeb41a09d6eb1d0 F test/null.test 69c62daf1630bf54c87bbc7ef2e22012e58d6da8 @@ -272,7 +272,7 @@ F www/tclsqlite.tcl e73f8f8e5f20e8277619433f7970060ab01088fc F www/vdbe.tcl 095f106d93875c94b47367384ebc870517431618 F www/version3.tcl 092a01f5ef430d2c4acc0ae558d74c4bb89638a0 F www/whentouse.tcl 3e522a06ad41992023c80ca29a048ae2331ca5bd -P a8b921d45ec9ef4d16ef7b5bf09aabaf02ebc70b -R 23cc5d602d973c6da38d5c947af10e17 +P 808e16a7dda048c214df24170da282087042ee3a +R df5f8dcf1c9648630223cb55d1b73f5c U danielk1977 -Z be67e3ff70386bba354e06b0c7e33e08 +Z edf636493d9bcd569445cc58d2b9e854 diff --git a/manifest.uuid b/manifest.uuid index 951d7ab7c5..20dd9d6d37 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -808e16a7dda048c214df24170da282087042ee3a \ No newline at end of file +356d31e03fe856642c5637f5ea5665947ff681fc \ No newline at end of file diff --git a/src/expr.c b/src/expr.c index 815d0b064f..7c19904278 100644 --- a/src/expr.c +++ b/src/expr.c @@ -12,7 +12,7 @@ ** This file contains routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** -** $Id: expr.c,v 1.189 2005/01/29 08:32:45 danielk1977 Exp $ +** $Id: expr.c,v 1.190 2005/01/30 09:17:59 danielk1977 Exp $ */ #include "sqliteInt.h" #include @@ -476,6 +476,7 @@ SrcList *sqlite3SrcListDup(SrcList *p){ pNewItem->pSelect = sqlite3SelectDup(pOldItem->pSelect); pNewItem->pOn = sqlite3ExprDup(pOldItem->pOn); pNewItem->pUsing = sqlite3IdListDup(pOldItem->pUsing); + pNewItem->colUsed = pOldItem->colUsed; } return pNew; } diff --git a/src/where.c b/src/where.c index 86d539a392..4c6386c231 100644 --- a/src/where.c +++ b/src/where.c @@ -16,7 +16,7 @@ ** so is applicable. Because this module is responsible for selecting ** indices, you might also think of this module as the "query optimizer". ** -** $Id: where.c,v 1.132 2005/01/29 08:32:45 danielk1977 Exp $ +** $Id: where.c,v 1.133 2005/01/30 09:17:59 danielk1977 Exp $ */ #include "sqliteInt.h" @@ -1428,6 +1428,8 @@ void sqlite3WhereEnd(WhereInfo *pWInfo){ }else if( pOp->opcode==OP_Recno ){ pOp->p1 = pLevel->iIdxCur; pOp->opcode = OP_IdxRecno; + }else if( pOp->opcode==OP_NullRow ){ + pOp->opcode = OP_Noop; } } } diff --git a/test/misc4.test b/test/misc4.test index 872d587a5d..cad97ffbb8 100644 --- a/test/misc4.test +++ b/test/misc4.test @@ -13,7 +13,7 @@ # This file implements tests for miscellanous features that were # left out of other test files. # -# $Id: misc4.test,v 1.14 2005/01/29 08:32:46 danielk1977 Exp $ +# $Id: misc4.test,v 1.15 2005/01/30 09:17:59 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -159,4 +159,19 @@ ifcapable view { } {a 1 b 2 a:1 1 c 3} } +# Ticket #1086 +do_test misc4-6.1 { + execsql { + CREATE TABLE abc(a); + INSERT INTO abc VALUES(1); + CREATE TABLE def(d, e, f, PRIMARY KEY(d, e)); + } +} {} +do_test misc4-6.2 { + execsql { + SELECT a FROM abc LEFT JOIN def ON (abc.a=def.d); + } +} {1} + finish_test + -- 2.47.3