Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Make sure the iteration counter on aggregate functions is reset each time the aggregate is used in an correlated subquery. Ticket #3841. (CVS 6616) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4a86de35d57a0c8720772c29431c86cd |
User & Date: | drh 2009-05-07 12:17:34.000 |
Context
2009-05-07
| ||
13:43 | Change the sqlite3_create_function() family of routines to return SQLITE_MISUSE instead of SQLITE_ERROR if their parameters are incorrect. (CVS 6617) (check-in: 866f13e28c user: drh tags: trunk) | |
12:17 | Make sure the iteration counter on aggregate functions is reset each time the aggregate is used in an correlated subquery. Ticket #3841. (CVS 6616) (check-in: 4a86de35d5 user: drh tags: trunk) | |
02:26 | Version 3.6.14 (CVS 6615) (check-in: 469ad1ded3 user: drh tags: trunk, release) | |
Changes
Changes to src/vdbe.c.
︙ | ︙ | |||
39 40 41 42 43 44 45 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** in this file for details. If in doubt, do not deviate from existing ** commenting and indentation practices when changing or adding code. ** | | | 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | ** ** Various scripts scan this source file in order to generate HTML ** documentation, headers files, or other derived files. The formatting ** of the code in this file is, therefore, important. See other comments ** 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.843 2009/05/07 12:17:34 drh Exp $ */ #include "sqliteInt.h" #include "vdbeInt.h" /* ** The following global variable is incremented every time a cursor ** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test |
︙ | ︙ | |||
672 673 674 675 676 677 678 679 680 681 682 683 684 685 | opProperty = opcodeProperty[pOp->opcode]; if( (opProperty & OPFLG_OUT2_PRERELEASE)!=0 ){ assert( pOp->p2>0 ); assert( pOp->p2<=p->nMem ); pOut = &p->aMem[pOp->p2]; sqlite3VdbeMemReleaseExternal(pOut); pOut->flags = MEM_Null; }else /* Do common setup for opcodes marked with one of the following ** combinations of properties. ** ** in1 ** in1 in2 | > | 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 | opProperty = opcodeProperty[pOp->opcode]; if( (opProperty & OPFLG_OUT2_PRERELEASE)!=0 ){ assert( pOp->p2>0 ); assert( pOp->p2<=p->nMem ); pOut = &p->aMem[pOp->p2]; sqlite3VdbeMemReleaseExternal(pOut); pOut->flags = MEM_Null; pOut->n = 0; }else /* Do common setup for opcodes marked with one of the following ** combinations of properties. ** ** in1 ** in1 in2 |
︙ | ︙ |
Added test/tkt3841.test.
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | # 2009 May 7 # # 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. # #*********************************************************************** # # Ticket #3841 # # The sqlite3_aggregate_count() is not being reset when an aggregate # functio is used in a correlated subquery. # set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable !subquery { finish_test return } do_test tkt3841.1 { execsql { CREATE TABLE table2 (key TEXT, x TEXT); CREATE TABLE list (key TEXT, value TEXT); INSERT INTO table2 VALUES ("a", "alist"); INSERT INTO table2 VALUES ("b", "blist"); INSERT INTO list VALUES ("a", 1); INSERT INTO list VALUES ("a", 2); INSERT INTO list VALUES ("a", 3); INSERT INTO list VALUES ("b", 4); INSERT INTO list VALUES ("b", 5); INSERT INTO list VALUES ("b", 6); pragma vdbe_listing=on; pragma vdbe_trace=on; SELECT table2.x, (SELECT group_concat(list.value) FROM list WHERE list.key = table2.key) FROM table2; } } {alist 1,2,3 blist 4,5,6} finish_test |