-C Add\sthe\sexperimental\ssqlite3_stmt_status()\sinterface.\s(CVS\s5781)
-D 2008-10-07T23:46:38
+C After\san\sOP_NullRow\sis\sexecuted\son\sa\scursor,\scause\sany\ssubsequent\sOP_Next\sor\sOP_Prev\sto\sbehave\sas\sif\sthere\swere\sno\smore\srows\sto\straverse.\sTicket\s#3424.\s(CVS\s5782)
+D 2008-10-08T17:58:49
F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0
F Makefile.in 7fc26e087207e7a4a7723583dbd7997477af3b13
F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654
F src/auth.c c8b2ab5c8bad4bd90ed7c294694f48269162c627
F src/bitvec.c 95c86bd18d8fedf0533f5af196192546e10a7e7d
F src/btmutex.c 3a90096c3080b9057dc570b8e16e46511e1c788a
-F src/btree.c 64a38df6f0a9997563418ed194984b81e4ab3694
-F src/btree.h 6371c5e599fab391a150c96afbc10062b276d107
+F src/btree.c 3e686f899659df8d79f2587d0f34f51fdf6a6276
+F src/btree.h 903682f2a88da37435f103da00cb915d63bc8015
F src/btreeInt.h e38e9b2b285f40f5bc0a6664f630d4a141622f16
F src/build.c 8714bd809583bbe07bf22d0e1808a3fc31abe330
F src/callback.c 7a40fd44da3eb89e7f6eff30aa6f940c45d73a97
F src/utf.c c63e6f69082f85c19ab88d62dedaf91d71ac1a50
F src/util.c afe659ccc05d1f8af9e8631dabfec3ee3a7144af
F src/vacuum.c fd77433d0c26d3ff1eb96eab017a1787ac5aa642
-F src/vdbe.c 374961d5ac5fe91a1e0acf4ed5519531574b69c6
+F src/vdbe.c b78adf571b9abac4092c641bec148832e8f26f34
F src/vdbe.h 41c99aaad9167c1b5431993db446de74b2f71fc3
F src/vdbeInt.h a20f479ec3bf41c61b0c2bd5176a9bad6b2a07ef
F src/vdbeapi.c fd2c286cee63a146d5110c11c0aa2bf3a9ebe220
F test/tkt3346.test 2f9a2be8621a87cbdb6283177dd419c7c46dd2a1
F test/tkt3357.test b37a51a12ba5e143d6714778276438606f8f9e27
F test/tkt3419.test 1bbf36d7ea03b638c15804251287c2391f5c1f6b
+F test/tkt3424.test 3171193ce340cff6b7ea81c03b8fa1cbc34ec36e
F test/tokenize.test ce430a7aed48fc98301611429595883fdfcab5d7
F test/trace.test 951cd0f5f571e7f36bf7bfe04be70f90fb16fb00
F test/trans.test 2fd24cd7aa0b879d49a224cbd647d698f1e7ac5c
F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff
F tool/speedtest8.c 1dbced29de5f59ba2ebf877edcadf171540374d1
F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e
-P 79df72ee836db91647913055ba6cf55558679b01
-R d426461dcb923755279eeb7df7038b4a
-U drh
-Z 4b26af34158fc50efdf02ed1356ecdbc
+P de473efb35ffdf9a8222a70a84dfd7d3198c87c1
+R 2f077384d5708b8cad084e75cfae98e5
+U danielk1977
+Z 6ddad9a5e2687baf46af1a15bb5e4ff8
-de473efb35ffdf9a8222a70a84dfd7d3198c87c1
\ No newline at end of file
+af679f6170b346fe61df7dae963b2a2853e62a62
\ No newline at end of file
** May you share freely, never taking more than you give.
**
*************************************************************************
-** $Id: btree.c,v 1.524 2008/09/30 17:18:17 drh Exp $
+** $Id: btree.c,v 1.525 2008/10/08 17:58:49 danielk1977 Exp $
**
** This file implements a external (disk-based) database using BTrees.
** See the header comment on "btreeInt.h" for additional information.
/*
** Clear the current cursor position.
*/
-static void clearCursorPosition(BtCursor *pCur){
+void sqlite3BtreeClearCursor(BtCursor *pCur){
assert( cursorHoldsMutex(pCur) );
sqlite3_free(pCur->pKey);
pCur->pKey = 0;
BtCursor *p;
sqlite3BtreeEnter(pBtree);
for(p=pBtree->pBt->pCursor; p; p=p->pNext){
- clearCursorPosition(p);
+ sqlite3BtreeClearCursor(p);
p->eState = CURSOR_FAULT;
p->skip = errCode;
}
BtShared *pBt = pCur->pBt;
sqlite3BtreeEnter(pBtree);
pBt->db = pBtree->db;
- clearCursorPosition(pCur);
+ sqlite3BtreeClearCursor(pCur);
if( pCur->pPrev ){
pCur->pPrev->pNext = pCur->pNext;
}else{
if( pCur->eState==CURSOR_FAULT ){
return pCur->skip;
}
- clearCursorPosition(pCur);
+ sqlite3BtreeClearCursor(pCur);
}
if( pCur->iPage>=0 ){
}
/* Save the positions of any other cursors open on this table */
- clearCursorPosition(pCur);
+ sqlite3BtreeClearCursor(pCur);
if(
SQLITE_OK!=(rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur)) ||
SQLITE_OK!=(rc = sqlite3BtreeMoveto(pCur, pKey, nKey, appendBias, &loc))
** subsystem. See comments in the source code for a detailed description
** of what each interface routine does.
**
-** @(#) $Id: btree.h,v 1.103 2008/08/13 19:11:48 drh Exp $
+** @(#) $Id: btree.h,v 1.104 2008/10/08 17:58:49 danielk1977 Exp $
*/
#ifndef _BTREE_H_
#define _BTREE_H_
int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);
void sqlite3BtreeCacheOverflow(BtCursor *);
+void sqlite3BtreeClearCursor(BtCursor *);
#ifdef SQLITE_TEST
int sqlite3BtreeCursorInfo(BtCursor*, int*, int);
** in this file for details. If in doubt, do not deviate from existing
** commenting and indentation practices when changing or adding code.
**
-** $Id: vdbe.c,v 1.781 2008/10/07 23:46:38 drh Exp $
+** $Id: vdbe.c,v 1.782 2008/10/08 17:58:49 danielk1977 Exp $
*/
#include "sqliteInt.h"
#include <ctype.h>
assert( pC!=0 );
pC->nullRow = 1;
pC->rowidIsValid = 0;
+ if( pC->pCursor ){
+ sqlite3BtreeClearCursor(pC->pCursor);
+ }
break;
}
--- /dev/null
+# 2008 October 06
+#
+# 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.
+#
+#***********************************************************************
+#
+#
+# $Id: tkt3424.test,v 1.1 2008/10/08 17:58:50 danielk1977 Exp $
+
+set testdir [file dirname $argv0]
+source $testdir/tester.tcl
+
+do_test tkt3424-1.1 {
+ execsql {
+ CREATE TABLE names(id INTEGER, data TEXT, code TEXT);
+ INSERT INTO names VALUES(1,'E1','AAA');
+ INSERT INTO names VALUES(2,NULL,'BBB');
+
+ CREATE TABLE orig(code TEXT, data TEXT);
+ INSERT INTO orig VALUES('AAA','E1');
+ INSERT INTO orig VALUES('AAA','E2');
+ INSERT INTO orig VALUES('AAA','E3');
+ INSERT INTO orig VALUES('AAA','E4');
+ INSERT INTO orig VALUES('AAA','E5');
+ }
+} {}
+
+do_test tkt3424-1.2 {
+ execsql {
+ SELECT * FROM
+ names LEFT OUTER JOIN orig
+ ON names.data = orig.data AND names.code = orig.code;
+ }
+} {1 E1 AAA AAA E1 2 {} BBB {} {}}
+
+do_test tkt3424-1.3 {
+ execsql { CREATE INDEX udx_orig_code_data ON orig(code, data) }
+} {}
+
+do_test tkt3424-1.4 {
+ execsql {
+ SELECT * FROM
+ names LEFT OUTER JOIN orig
+ ON names.data = orig.data AND names.code = orig.code;
+ }
+} {1 E1 AAA AAA E1 2 {} BBB {} {}}
+
+finish_test
+