Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Bugfixes: Fix a segfault introduced as part of the new vtab code, deallocate memory in the Destroy() method of the echo module. (CVS 3221) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
f9ea9704755eee3fd29af7a47be1d416 |
User & Date: | danielk1977 2006-06-13 04:11:43.975 |
Original User & Date: | danielk1977 2006-06-13 04:11:44.000 |
Context
2006-06-13
| ||
04:11 | Bugfixes: Fix a segfault introduced as part of the new vtab code, deallocate memory in the Destroy() method of the echo module. (CVS 3222) (check-in: 00f3c249bc user: danielk1977 tags: trunk) | |
04:11 | Bugfixes: Fix a segfault introduced as part of the new vtab code, deallocate memory in the Destroy() method of the echo module. (CVS 3221) (check-in: f9ea970475 user: danielk1977 tags: trunk) | |
01:04 | Progress toward getting the virtual-table code generator to work. (CVS 3220) (check-in: 3532f1340f user: drh tags: trunk) | |
Changes
Changes to src/expr.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 routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions 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 routines used for analyzing expressions and ** for generating VDBE code that evaluates expressions in SQLite. ** ** $Id: expr.c,v 1.261 2006/06/13 04:11:44 danielk1977 Exp $ */ #include "sqliteInt.h" #include <ctype.h> /* ** Return the 'affinity' of the expression pExpr if any. ** |
︙ | ︙ | |||
1485 1486 1487 1488 1489 1490 1491 | if( pExpr->iTable<0 ){ /* This only happens when coding check constraints */ assert( pParse->ckOffset>0 ); sqlite3VdbeAddOp(v, OP_Dup, pParse->ckOffset-pExpr->iColumn-1, 1); }else if( pExpr->iColumn>=0 ){ Table *pTab = pExpr->pTab; int iCol = pExpr->iColumn; | | | > | | | 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 | if( pExpr->iTable<0 ){ /* This only happens when coding check constraints */ assert( pParse->ckOffset>0 ); sqlite3VdbeAddOp(v, OP_Dup, pParse->ckOffset-pExpr->iColumn-1, 1); }else if( pExpr->iColumn>=0 ){ Table *pTab = pExpr->pTab; int iCol = pExpr->iColumn; int op = (pTab && pTab->isVirtual) ? OP_VColumn : OP_Column; sqlite3VdbeAddOp(v, op, pExpr->iTable, iCol); sqlite3ColumnDefault(v, pTab, iCol); #ifndef SQLITE_OMIT_FLOATING_POINT if( pTab && pTab->aCol[iCol].affinity==SQLITE_AFF_REAL ){ sqlite3VdbeAddOp(v, OP_RealAffinity, 0, 0); } #endif }else{ Table *pTab = pExpr->pTab; int op = (pTab && pTab->isVirtual) ? OP_VRowid : OP_Rowid; sqlite3VdbeAddOp(v, op, pExpr->iTable, 0); } break; } case TK_INTEGER: { codeInteger(v, (char*)pExpr->token.z, pExpr->token.n); break; } |
︙ | ︙ |
Changes to src/test8.c.
︙ | ︙ | |||
9 10 11 12 13 14 15 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the virtual table interfaces. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** | | < < < < < | 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 | ** May you share freely, never taking more than you give. ** ************************************************************************* ** Code for testing the virtual table interfaces. This code ** is not included in the SQLite library. It is used for automated ** testing of the SQLite library. ** ** $Id: test8.c,v 1.7 2006/06/13 04:11:44 danielk1977 Exp $ */ #include "sqliteInt.h" #include "tcl.h" #include "os.h" #include <stdlib.h> #include <string.h> /* ** Global Tcl variable $echo_module is a list. This routine appends ** the string element zArg to that list in interpreter interp. */ static void appendToEchoModule(Tcl_Interp *interp, const char *zArg){ int flags = (TCL_APPEND_VALUE | TCL_LIST_ELEMENT | TCL_GLOBAL_ONLY); Tcl_SetVar(interp, "echo_module", zArg, flags); } /* ** This function is called from within the echo-modules xCreate and ** xConnect methods. The argc and argv arguments are copies of those |
︙ | ︙ | |||
114 115 116 117 118 119 120 | Tcl_Interp *interp = pModule->pAux; echo_vtab *pVtab; pVtab = sqliteMalloc( sizeof(*pVtab) ); *ppVtab = &pVtab->base; pVtab->base.pModule = pModule; pVtab->interp = pModule->pAux; | | | < | | | | 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | Tcl_Interp *interp = pModule->pAux; echo_vtab *pVtab; pVtab = sqliteMalloc( sizeof(*pVtab) ); *ppVtab = &pVtab->base; pVtab->base.pModule = pModule; pVtab->interp = pModule->pAux; appendToEchoModule(pVtab->interp, "xConnect"); for(i=0; i<argc; i++){ appendToEchoModule(pVtab->interp, argv[i]); } echoDeclareVtab(db, argc, argv); return 0; } static int echoDisconnect(sqlite3_vtab *pVtab){ echo_vtab *p = (echo_vtab*)pVtab; appendToEchoModule(p->interp, "xDisconnect"); sqliteFree(pVtab); return 0; } static int echoDestroy(sqlite3_vtab *pVtab){ echo_vtab *p = (echo_vtab*)pVtab; appendToEchoModule(p->interp, "xDestroy"); sqliteFree(pVtab); return 0; } /* ** The xBestIndex method for the echo module always returns ** an index of 123. */ |
︙ | ︙ |
Changes to test/vtab1.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2006 June 10 # # 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. The # focus of this file is creating and dropping virtual tables. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2006 June 10 # # 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. The # focus of this file is creating and dropping virtual tables. # # $Id: vtab1.test,v 1.7 2006/06/13 04:11:44 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable !vtab { finish_test return |
︙ | ︙ | |||
83 84 85 86 87 88 89 90 91 92 93 94 95 96 | # the xDisconnect() callback each of the two virtual tables - t1 and t2. do_test vtab1-2.3 { set echo_module [list] db close set echo_module } [list xDisconnect xDisconnect] # Re-open the database. Check that the schema of the virtual # table is still correct. do_test vtab1-2.4 { sqlite3 db test.db register_echo_module [sqlite3_connection_pointer db] execsql { PRAGMA table_info(t2); } } [list \ | > | 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | # the xDisconnect() callback each of the two virtual tables - t1 and t2. do_test vtab1-2.3 { set echo_module [list] db close set echo_module } [list xDisconnect xDisconnect] set echo_module [list] # Re-open the database. Check that the schema of the virtual # table is still correct. do_test vtab1-2.4 { sqlite3 db test.db register_echo_module [sqlite3_connection_pointer db] execsql { PRAGMA table_info(t2); } } [list \ |
︙ | ︙ | |||
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | do_test vtab1-2.5 { set echo_module [list] execsql { DROP TABLE t2; } set echo_module } [list xDestroy] do_test vtab1-2.6 { execsql { PRAGMA table_info(t2); } } {} do_test vtab1-2.7 { execsql { SELECT sql FROM sqlite_master; } } [list {CREATE VIRTUAL TABLE t1 USING echo} \ {CREATE TABLE template(a, b, c)} \ ] | > > > > > > > > | > > > > > > > > | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | do_test vtab1-2.5 { set echo_module [list] execsql { DROP TABLE t2; } set echo_module } [list xDestroy] finish_test do_test vtab1-2.6 { execsql { PRAGMA table_info(t2); } } {} do_test vtab1-2.7 { execsql { SELECT sql FROM sqlite_master; } } [list {CREATE VIRTUAL TABLE t1 USING echo} \ {CREATE TABLE template(a, b, c)} \ ] do_test vtab1-2.8 { set echo_module [list] execsql { DROP TABLE t1; DROP TABLE template; } set echo_module } [list] do_test vtab1-2.9 { execsql { SELECT sql FROM sqlite_master; } } [list] finish_test |