Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | When flattening a SELECT query, do not discard collation sequences explicitly attached to expressions in the parent query. Fix for #3997. (CVS 6949) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
b2784cf5d8b520fb714efdb2d2746b2c |
User & Date: | danielk1977 2009-07-28 13:30:31.000 |
Context
2009-07-28
| ||
16:44 | Add the experimental API sqlite3_strnicmp(). Modify fts3 so that in terms like 'column_name:token' the column_name is interpreted in a case-insenstive fashion. Ticket #3996. (CVS 6950) (check-in: 4571aa9e91 user: danielk1977 tags: trunk) | |
13:30 | When flattening a SELECT query, do not discard collation sequences explicitly attached to expressions in the parent query. Fix for #3997. (CVS 6949) (check-in: b2784cf5d8 user: danielk1977 tags: trunk) | |
08:43 | Fixed reversed labels in WHERETRACE() statement. Debugging code only. (CVS 6948) (check-in: 614a8d8315 user: shane tags: trunk) | |
Changes
Changes to src/select.c.
︙ | ︙ | |||
8 9 10 11 12 13 14 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** | | | 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** This file contains C code routines that are called by the parser ** to handle SELECT statements in SQLite. ** ** $Id: select.c,v 1.525 2009/07/28 13:30:31 danielk1977 Exp $ */ #include "sqliteInt.h" /* ** Delete all the content of a Select structure but do not deallocate ** the select structure itself. |
︙ | ︙ | |||
2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 | if( pExpr->iColumn<0 ){ pExpr->op = TK_NULL; }else{ Expr *pNew; assert( pEList!=0 && pExpr->iColumn<pEList->nExpr ); assert( pExpr->pLeft==0 && pExpr->pRight==0 ); pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0); sqlite3ExprDelete(db, pExpr); pExpr = pNew; } }else{ pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList); pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList); if( ExprHasProperty(pExpr, EP_xIsSelect) ){ | > > > | 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 | if( pExpr->iColumn<0 ){ pExpr->op = TK_NULL; }else{ Expr *pNew; assert( pEList!=0 && pExpr->iColumn<pEList->nExpr ); assert( pExpr->pLeft==0 && pExpr->pRight==0 ); pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0); if( pExpr->pColl ){ pNew->pColl = pExpr->pColl; } sqlite3ExprDelete(db, pExpr); pExpr = pNew; } }else{ pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList); pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList); if( ExprHasProperty(pExpr, EP_xIsSelect) ){ |
︙ | ︙ |
Added test/tkt3997.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 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | # 2001 September 15 # # 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. # #*********************************************************************** # # Tests to make sure #3997 is fixed. # # $Id: tkt3997.test,v 1.1 2009/07/28 13:30:31 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl proc reverse {lhs rhs} { return [string compare $rhs $lhs] } proc usual {lhs rhs} { return [string compare $lhs $rhs] } db collate reverse reverse db collate usual usual do_test tkt3997-1.1 { execsql { create table mytext(name BLOB); INSERT INTO mytext VALUES('abc'); INSERT INTO mytext VALUES('acd'); INSERT INTO mytext VALUES('afe'); } } {} do_test tkt3997-1.2 { execsql { SELECT name FROM mytext ORDER BY name COLLATE reverse } } {afe acd abc} do_test tkt3997-1.3 { execsql { SELECT name FROM (SELECT name FROM mytext) ORDER BY name COLLATE reverse } } {afe acd abc} do_test tkt3997-2.1 { execsql { CREATE TABLE mytext2(name COLLATE reverse); INSERT INTO mytext2 SELECT name FROM mytext; } } {} do_test tkt3997-2.2 { execsql { SELECT name FROM (SELECT name FROM mytext2) ORDER BY name } } {afe acd abc} do_test tkt3997-2.3 { execsql { SELECT name FROM (SELECT name FROM mytext2) ORDER BY name COLLATE usual } } {abc acd afe} finish_test |