Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Port patches from the trunk into the 3.6.14.1 branch: the group_concat() fix of check-in (6616), ticket #3841 and the pcache fix of check-in (6619), ticket #3844. (CVS 6652) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | branch_3_6_14 |
Files: | files | file ages | folders |
SHA1: |
2a277c55b2f90d53208147423b409bc0 |
User & Date: | drh 2009-05-18 16:14:25.000 |
Context
2009-05-18
| ||
16:22 | Update the configure script for the 3.6.14.1 release. (CVS 6653) (check-in: 4ebb850181 user: drh tags: branch_3_6_14) | |
16:14 | Port patches from the trunk into the 3.6.14.1 branch: the group_concat() fix of check-in (6616), ticket #3841 and the pcache fix of check-in (6619), ticket #3844. (CVS 6652) (check-in: 2a277c55b2 user: drh tags: branch_3_6_14) | |
16:12 | Update the version number for the 3.6.14.1 branch. (CVS 6651) (check-in: f06cae3b5e user: drh tags: branch_3_6_14) | |
Changes
Changes to src/pcache1.c.
︙ | ︙ | |||
12 13 14 15 16 17 18 | ** ** This file implements the default page cache implementation (the ** sqlite3_pcache interface). It also contains part of the implementation ** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features. ** If the default page cache implementation is overriden, then neither of ** these two features are available. ** | | | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | ** ** This file implements the default page cache implementation (the ** sqlite3_pcache interface). It also contains part of the implementation ** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features. ** If the default page cache implementation is overriden, then neither of ** these two features are available. ** ** @(#) $Id: pcache1.c,v 1.11.2.1 2009/05/18 16:14:25 drh Exp $ */ #include "sqliteInt.h" typedef struct PCache1 PCache1; typedef struct PgHdr1 PgHdr1; typedef struct PgFreeslot PgFreeslot; |
︙ | ︙ | |||
356 357 358 359 360 361 362 363 364 365 366 367 368 369 | ** ** The global mutex must be held when this function is called. */ static void pcache1TruncateUnsafe( PCache1 *pCache, unsigned int iLimit ){ unsigned int h; assert( sqlite3_mutex_held(pcache1.mutex) ); for(h=0; h<pCache->nHash; h++){ PgHdr1 **pp = &pCache->apHash[h]; PgHdr1 *pPage; while( (pPage = *pp)!=0 ){ if( pPage->iKey>=iLimit ){ | > | > > > | 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 | ** ** The global mutex must be held when this function is called. */ static void pcache1TruncateUnsafe( PCache1 *pCache, unsigned int iLimit ){ TESTONLY( int nPage = 0; ) /* Used to assert pCache->nPage is correct */ unsigned int h; assert( sqlite3_mutex_held(pcache1.mutex) ); for(h=0; h<pCache->nHash; h++){ PgHdr1 **pp = &pCache->apHash[h]; PgHdr1 *pPage; while( (pPage = *pp)!=0 ){ if( pPage->iKey>=iLimit ){ pCache->nPage--; *pp = pPage->pNext; pcache1PinPage(pPage); pcache1FreePage(pPage); }else{ pp = &pPage->pNext; TESTONLY( nPage++ ); } } } assert( pCache->nPage==nPage ); } /******************************************************************************/ /******** sqlite3_pcache Methods **********************************************/ /* ** Implementation of the sqlite3_pcache.xInit method. |
︙ | ︙ |
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.842.2.1 2009/05/18 16:14:25 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 |
︙ | ︙ |
Changes to test/pcache.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2008 August 29 # # 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 is focused on testing the pcache module. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2008 August 29 # # 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 is focused on testing the pcache module. # # $Id: pcache.test,v 1.4.2.1 2009/05/18 16:14:26 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl # The pcache module limits the number of pages available to purgeable # caches to the sum of the 'cache_size' values for the set of open |
︙ | ︙ | |||
141 142 143 144 145 146 147 148 | } {current 19 max 20 min 10 recyclable 19} do_test pcache-1.13 { execsql { PRAGMA cache_size = 15 } pcache_stats } {current 15 max 15 min 10 recyclable 15} finish_test | > > > > > > > > > > > > > > > > > > > > > | 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 | } {current 19 max 20 min 10 recyclable 19} do_test pcache-1.13 { execsql { PRAGMA cache_size = 15 } pcache_stats } {current 15 max 15 min 10 recyclable 15} do_test pcache-1.14 { hexio_write test.db 24 [hexio_render_int32 1000] execsql { SELECT * FROM sqlite_master } pcache_stats } {current 2 max 15 min 10 recyclable 2} do_test pcache-1.15 { execsql { SELECT * FROM t1 ORDER BY a; SELECT * FROM t1; SELECT * FROM t2 ORDER BY a; SELECT * FROM t2; SELECT * FROM t3 ORDER BY a; SELECT * FROM t3; SELECT * FROM t4 ORDER BY a; SELECT * FROM t4; SELECT * FROM t5 ORDER BY a; SELECT * FROM t5; SELECT * FROM t6 ORDER BY a; SELECT * FROM t6; SELECT * FROM t7 ORDER BY a; SELECT * FROM t7; SELECT * FROM t8 ORDER BY a; SELECT * FROM t8; SELECT * FROM t9 ORDER BY a; SELECT * FROM t9; } pcache_stats } {current 14 max 15 min 10 recyclable 14} finish_test |
Changes to test/tkt2942.test.
︙ | ︙ | |||
17 18 19 20 21 22 23 | # # The ORDER BY would be dropped by the query flattener. This used # to not matter because aggregate functions sum(), min(), max(), avg(), # and so forth give the same result regardless of the order of inputs. # But with the addition of the group_concat() function, suddenly the # order does matter. # | | | 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | # # The ORDER BY would be dropped by the query flattener. This used # to not matter because aggregate functions sum(), min(), max(), avg(), # and so forth give the same result regardless of the order of inputs. # But with the addition of the group_concat() function, suddenly the # order does matter. # # $Id: tkt2942.test,v 1.1.4.1 2009/05/18 16:14:26 drh Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable !subquery { finish_test |
︙ | ︙ | |||
54 55 56 57 58 59 60 | } {2,1,3,4} do_test tkt2942.4 { execsql { SELECT group_concat(num) FROM (SELECT num FROM t1 ORDER BY rowid DESC); } } {4,3,1,2} | > > > > | > > > > > > > > > > > > > > > > > > | 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | } {2,1,3,4} do_test tkt2942.4 { execsql { SELECT group_concat(num) FROM (SELECT num FROM t1 ORDER BY rowid DESC); } } {4,3,1,2} do_test tkt2942-3841.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); 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 |