Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix incorrect type conversions when copying from a table into itself. Ticket #1536. (CVS 2773) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
a2e55a3828d74d78b0b76f956a537a0d |
User & Date: | drh 2005-11-24 13:15:33.000 |
Context
2005-11-24
| ||
14:24 | Fix a comment in btree.c. No code changes. (CVS 2774) (check-in: 0d8bd133a7 user: drh tags: trunk) | |
13:15 | Fix incorrect type conversions when copying from a table into itself. Ticket #1536. (CVS 2773) (check-in: a2e55a3828 user: drh tags: trunk) | |
2005-11-21
| ||
12:48 | Less verbose output when EXPLAIN QUERY PLAN identifies use of the primary key. (CVS 2772) (check-in: 5045f09933 user: drh tags: trunk) | |
Changes
Changes to src/insert.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 INSERT statements in SQLite. ** | | > > | | | | 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 | ** 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 INSERT statements in SQLite. ** ** $Id: insert.c,v 1.149 2005/11/24 13:15:33 drh Exp $ */ #include "sqliteInt.h" /* ** Set P3 of the most recently inserted opcode to a column affinity ** string for index pIdx. A column affinity string has one character ** for each column in the table, according to the affinity of the column: ** ** Character Column affinity ** ------------------------------ ** 'a' TEXT ** 'b' NONE ** 'c' NUMERIC ** 'd' INTEGER ** 'e' REAL */ void sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){ if( !pIdx->zColAff ){ /* The first time a column affinity string for a particular index is ** required, it is allocated and populated here. It is then stored as ** a member of the Index structure for subsequent use. ** |
︙ | ︙ | |||
56 57 58 59 60 61 62 | ** Set P3 of the most recently inserted opcode to a column affinity ** string for table pTab. A column affinity string has one character ** for each column indexed by the index, according to the affinity of the ** column: ** ** Character Column affinity ** ------------------------------ | > > | | | | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | ** Set P3 of the most recently inserted opcode to a column affinity ** string for table pTab. A column affinity string has one character ** for each column indexed by the index, according to the affinity of the ** column: ** ** Character Column affinity ** ------------------------------ ** 'a' TEXT ** 'b' NONE ** 'c' NUMERIC ** 'd' INTEGER ** 'e' REAL */ void sqlite3TableAffinityStr(Vdbe *v, Table *pTab){ /* The first time a column affinity string for a particular table ** is required, it is allocated and populated here. It is then ** stored as a member of the Table structure for subsequent use. ** ** The column affinity string will eventually be deleted by |
︙ | ︙ | |||
356 357 358 359 360 361 362 | if( useTempTable ){ /* Generate the subroutine that SELECT calls to process each row of ** the result. Store the result in a temporary table */ srcTab = pParse->nTab++; sqlite3VdbeResolveLabel(v, iInsertBlock); sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0); | < | 360 361 362 363 364 365 366 367 368 369 370 371 372 373 | if( useTempTable ){ /* Generate the subroutine that SELECT calls to process each row of ** the result. Store the result in a temporary table */ srcTab = pParse->nTab++; sqlite3VdbeResolveLabel(v, iInsertBlock); sqlite3VdbeAddOp(v, OP_MakeRecord, nColumn, 0); sqlite3VdbeAddOp(v, OP_NewRowid, srcTab, 0); sqlite3VdbeAddOp(v, OP_Pull, 1, 0); sqlite3VdbeAddOp(v, OP_Insert, srcTab, 0); sqlite3VdbeAddOp(v, OP_Return, 0, 0); /* The following code runs first because the GOTO at the very top ** of the program jumps to it. Create the temporary table, then jump |
︙ | ︙ |
Added test/tkt1536.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 | # 2005 November 24 # # 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 implements regression tests for SQLite library. # # This file implements tests to verify that ticket #1536 is # fixed. # set testdir [file dirname $argv0] source $testdir/tester.tcl do_test tkt1536-1.1 { execsql { CREATE TABLE t1( a INTEGER PRIMARY KEY, b TEXT ); INSERT INTO t1 VALUES(1,'01'); SELECT typeof(a), typeof(b) FROM t1; } } {integer text} do_test tkt1536-1.2 { execsql { INSERT INTO t1(b) SELECT b FROM t1; SELECT b FROM t1 WHERE rowid=2; } } {01} finish_test |
Changes to www/optoverview.tcl.
1 2 3 | # # Run this TCL script to generate HTML for the goals.html file. # | | | 1 2 3 4 5 6 7 8 9 10 11 | # # Run this TCL script to generate HTML for the goals.html file. # set rcsid {$Id: optoverview.tcl,v 1.5 2005/11/24 13:15:34 drh Exp $} source common.tcl header {The SQLite Query Optimizer Overview} proc CODE {text} { puts "<blockquote><pre>" puts $text puts "</pre></blockquote>" |
︙ | ︙ | |||
84 85 86 87 88 89 90 | The analysis of a term might cause new "virtual" terms to be added to the WHERE clause. Virtual terms can be used with indices to restrict a search. But virtual terms never generate code that is tested against input rows. } PARAGRAPH { | | | 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | The analysis of a term might cause new "virtual" terms to be added to the WHERE clause. Virtual terms can be used with indices to restrict a search. But virtual terms never generate code that is tested against input rows. } PARAGRAPH { To be usable by an index a term must be of one of the following forms: } SYNTAX { /column/ = /expression/ /column/ > /expression/ /column/ >= /expression/ /column/ < /expression/ |
︙ | ︙ |