Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Merge the vtab1 test script fix and the FTS3 memory leak fix from trunk into the apple-osx branch. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | apple-osx |
Files: | files | file ages | folders |
SHA1: |
892d8779cc3c4037d6e21c04c3979628 |
User & Date: | drh 2012-06-08 14:11:30.151 |
Context
2012-07-17
| ||
17:46 | Cherrypick [8c9ee1d78f] and [e416359633] from trunk: Ensure that there is always at least one aReadMark slot usable by an unprivileged reader while a checkpoint is running. Also, if one or more transactions are recovered from a log file, initialize one of the aReadMark slots to contain mxFrame as part of the recovery process. (check-in: 6503591226 user: drh tags: apple-osx) | |
2012-06-08
| ||
14:11 | Merge the vtab1 test script fix and the FTS3 memory leak fix from trunk into the apple-osx branch. (check-in: 892d8779cc user: drh tags: apple-osx) | |
14:01 | Fix an obscure memory leak in FTS3 that can come about when two memory allocations are immediately adjacent to one another. (check-in: 025227be54 user: drh tags: trunk) | |
01:13 | Merge trunk changes into the apple-osx branch. (check-in: 9d1b851562 user: drh tags: apple-osx) | |
Changes
Changes to ext/fts3/fts3_write.c.
︙ | ︙ | |||
132 133 134 135 136 137 138 | ** ** fts3SegReaderNext() ** fts3SegReaderFirstDocid() ** fts3SegReaderNextDocid() */ struct Fts3SegReader { int iIdx; /* Index within level, or 0x7FFFFFFF for PT */ | > | | 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 | ** ** fts3SegReaderNext() ** fts3SegReaderFirstDocid() ** fts3SegReaderNextDocid() */ struct Fts3SegReader { int iIdx; /* Index within level, or 0x7FFFFFFF for PT */ u8 bLookup; /* True for a lookup only */ u8 rootOnly; /* True for a root-only reader */ sqlite3_int64 iStartBlock; /* Rowid of first leaf block to traverse */ sqlite3_int64 iLeafEndBlock; /* Rowid of final leaf block to traverse */ sqlite3_int64 iEndBlock; /* Rowid of final block in segment (or 0) */ sqlite3_int64 iCurrentBlock; /* Current leaf block (or 0) */ char *aNode; /* Pointer to node data (or NULL) */ |
︙ | ︙ | |||
166 167 168 169 170 171 172 | */ char *pOffsetList; int nOffsetList; /* For descending pending seg-readers only */ sqlite3_int64 iDocid; }; #define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0) | | | 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | */ char *pOffsetList; int nOffsetList; /* For descending pending seg-readers only */ sqlite3_int64 iDocid; }; #define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0) #define fts3SegReaderIsRootOnly(p) ((p)->rootOnly!=0) /* ** An instance of this structure is used to create a segment b-tree in the ** database. The internal details of this type are only accessed by the ** following functions: ** ** fts3SegWriterAdd() |
︙ | ︙ | |||
1577 1578 1579 1580 1581 1582 1583 | pReader = (Fts3SegReader *)sqlite3_malloc(sizeof(Fts3SegReader) + nExtra); if( !pReader ){ return SQLITE_NOMEM; } memset(pReader, 0, sizeof(Fts3SegReader)); pReader->iIdx = iAge; | | > | 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 | pReader = (Fts3SegReader *)sqlite3_malloc(sizeof(Fts3SegReader) + nExtra); if( !pReader ){ return SQLITE_NOMEM; } memset(pReader, 0, sizeof(Fts3SegReader)); pReader->iIdx = iAge; pReader->bLookup = bLookup!=0; pReader->iStartBlock = iStartLeaf; pReader->iLeafEndBlock = iEndLeaf; pReader->iEndBlock = iEndBlock; if( nExtra ){ /* The entire segment is stored in the root node. */ pReader->aNode = (char *)&pReader[1]; pReader->rootOnly = 1; pReader->nNode = nRoot; memcpy(pReader->aNode, zRoot, nRoot); memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING); }else{ pReader->iCurrentBlock = iStartLeaf-1; } *ppReader = pReader; |
︙ | ︙ |
Changes to test/vtab1.test.
︙ | ︙ | |||
1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 | INSERT INTO e5 VALUES(1, 2); DROP TABLE e5; SAVEPOINT one; ROLLBACK TO one; COMMIT; } } {} #------------------------------------------------------------------------- # The following tests - vtab1-18.* - test that the optimization of LIKE # constraints in where.c plays well with virtual tables. # # 18.1.*: Case-insensitive LIKE. # 18.2.*: Case-sensitive LIKE. | > > > > | 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 | INSERT INTO e5 VALUES(1, 2); DROP TABLE e5; SAVEPOINT one; ROLLBACK TO one; COMMIT; } } {} do_test vtab1-17.2 { execsql { DELETE FROM sqlite_master WHERE sql LIKE 'insert%' } } {} #------------------------------------------------------------------------- # The following tests - vtab1-18.* - test that the optimization of LIKE # constraints in where.c plays well with virtual tables. # # 18.1.*: Case-insensitive LIKE. # 18.2.*: Case-sensitive LIKE. |
︙ | ︙ |