Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a bug in the handling of the OR operator in FTS1. Test cases added to prevent a repeat. (CVS 3450) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
8cdf1d6ae018dfc93f8f0962b2530e31 |
User & Date: | drh 2006-09-28 19:43:32.000 |
Context
2006-09-29
| ||
14:01 | Make sure memory does not leak when patching up column names so that they are unique in a join or view. Tickets #1952 and #2002. (CVS 3451) (check-in: fcde639119 user: drh tags: trunk) | |
2006-09-28
| ||
19:43 | Fix a bug in the handling of the OR operator in FTS1. Test cases added to prevent a repeat. (CVS 3450) (check-in: 8cdf1d6ae0 user: drh tags: trunk) | |
18:58 | More snippet generator improvements and test cases. (CVS 3449) (check-in: 0934d220b3 user: drh tags: trunk) | |
Changes
Changes to ext/fts1/fts1.c.
︙ | ︙ | |||
2701 2702 2703 2704 2705 2706 2707 | fulltext_vtab *v, /* The full text index */ int iColumn, /* Match against this column by default */ const char *zInput, /* The query string */ int nInput, /* Number of bytes in zInput[] */ DocList **pResult, /* Write the result doclist here */ Query *pQuery /* Put parsed query string here */ ){ | | | | < > | > > > > > > > > > > > > > < < < | < | 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 | fulltext_vtab *v, /* The full text index */ int iColumn, /* Match against this column by default */ const char *zInput, /* The query string */ int nInput, /* Number of bytes in zInput[] */ DocList **pResult, /* Write the result doclist here */ Query *pQuery /* Put parsed query string here */ ){ int i, iNext, rc; DocList *pLeft = NULL; DocList *pRight, *pNew, *pOr; int nNot = 0; QueryTerm *aTerm; rc = parseQuery(v, zInput, nInput, iColumn, pQuery); if( rc!=SQLITE_OK ) return rc; /* Merge AND terms. */ aTerm = pQuery->pTerms; for(i = 0; i<pQuery->nTerms; i=iNext){ if( aTerm[i].isNot ){ /* Handle all NOT terms in a separate pass */ nNot++; iNext = i + aTerm[i].nPhrase+1; continue; } iNext = i + aTerm[i].nPhrase + 1; rc = docListOfTerm(v, aTerm[i].iColumn, &aTerm[i], &pRight); if( rc ){ queryClear(pQuery); return rc; } while( iNext<pQuery->nTerms && aTerm[iNext].isOr ){ rc = docListOfTerm(v, aTerm[iNext].iColumn, &aTerm[iNext], &pOr); iNext += aTerm[iNext].nPhrase + 1; if( rc ){ queryClear(pQuery); return rc; } pNew = docListNew(DL_DOCIDS); docListOrMerge(pRight, pOr, pNew); docListDelete(pRight); docListDelete(pOr); pRight = pNew; } if( pLeft==0 ){ pLeft = pRight; }else{ pNew = docListNew(DL_DOCIDS); docListAndMerge(pLeft, pRight, pNew); docListDelete(pRight); docListDelete(pLeft); pLeft = pNew; } } if( nNot && pLeft==0 ){ |
︙ | ︙ |
Changes to test/fts1a.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2006 September 9 # # 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 script is testing the FTS1 module. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2006 September 9 # # 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 script is testing the FTS1 module. # # $Id: fts1a.test,v 1.4 2006/09/28 19:43:32 drh Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl # If SQLITE_ENABLE_FTS1 is defined, omit this file. ifcapable !fts1 { |
︙ | ︙ | |||
151 152 153 154 155 156 157 158 159 160 161 162 163 164 | } {1 2 3 5 6 7 9 10 11 13 14 15 17 18 19 21 22 23 25 26 27 29 30 31} do_test fts1a-4.2 { execsql {SELECT rowid FROM t1 WHERE content MATCH '"one two" OR three'} } {3 4 5 6 7 11 12 13 14 15 19 20 21 22 23 27 28 29 30 31} do_test fts1a-4.3 { execsql {SELECT rowid FROM t1 WHERE content MATCH 'three OR "one two"'} } {3 4 5 6 7 11 12 13 14 15 19 20 21 22 23 27 28 29 30 31} # Test the ability to handle NULL content # do_test fts1a-5.1 { execsql {INSERT INTO t1(content) VALUES(NULL)} } {} do_test fts1a-5.2 { | > > > > > > > > > > > > | 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | } {1 2 3 5 6 7 9 10 11 13 14 15 17 18 19 21 22 23 25 26 27 29 30 31} do_test fts1a-4.2 { execsql {SELECT rowid FROM t1 WHERE content MATCH '"one two" OR three'} } {3 4 5 6 7 11 12 13 14 15 19 20 21 22 23 27 28 29 30 31} do_test fts1a-4.3 { execsql {SELECT rowid FROM t1 WHERE content MATCH 'three OR "one two"'} } {3 4 5 6 7 11 12 13 14 15 19 20 21 22 23 27 28 29 30 31} do_test fts1a-4.4 { execsql {SELECT rowid FROM t1 WHERE content MATCH 'one two OR three'} } {3 5 7 11 13 15 19 21 23 27 29 31} do_test fts1a-4.5 { execsql {SELECT rowid FROM t1 WHERE content MATCH 'three OR two one'} } {3 5 7 11 13 15 19 21 23 27 29 31} do_test fts1a-4.6 { execsql {SELECT rowid FROM t1 WHERE content MATCH 'one two OR three OR four'} } {3 5 7 9 11 13 15 19 21 23 25 27 29 31} do_test fts1a-4.7 { execsql {SELECT rowid FROM t1 WHERE content MATCH 'two OR three OR four one'} } {3 5 7 9 11 13 15 19 21 23 25 27 29 31} # Test the ability to handle NULL content # do_test fts1a-5.1 { execsql {INSERT INTO t1(content) VALUES(NULL)} } {} do_test fts1a-5.2 { |
︙ | ︙ |
Changes to test/fts1c.test.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2006 September 14 # # 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 script is testing the FTS1 module. # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2006 September 14 # # 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 script is testing the FTS1 module. # # $Id: fts1c.test,v 1.10 2006/09/28 19:43:32 drh Exp $ # set testdir [file dirname $argv0] source $testdir/tester.tcl # If SQLITE_ENABLE_FTS1 is defined, omit this file. ifcapable !fts1 { |
︙ | ︙ | |||
1180 1181 1182 1183 1184 1185 1186 1187 1188 | } {{pete.<b>davis</b>@enron.com Start Date: 4/22/01; HourAhead hour: 3; No <b>ancillary</b> schedules awarded. Variances detected. Variances detected in <b>Load</b> schedule. LOG MESSAGES: PARSING <b>...</b>}} finish_test | > > > > > > > > > > > > > > > > > > > > > > > > > | 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 | } {{pete.<b>davis</b>@enron.com Start Date: 4/22/01; HourAhead hour: 3; No <b>ancillary</b> schedules awarded. Variances detected. Variances detected in <b>Load</b> schedule. LOG MESSAGES: PARSING <b>...</b>}} # Combinations of AND and OR operators: # do_test fts1c-5.1 { execsql { SELECT snippet(email) FROM email WHERE email MATCH 'questar enron OR com' } } {{matt.smith@<b>enron</b>.<b>com</b> <b>...</b> six reports: 31 Keystone Receipts 15 <b>Questar</b> Pipeline 40 Rockies Production 22 West_2 <b>...</b>}} do_test fts1c-5.2 { execsql { SELECT snippet(email) FROM email WHERE email MATCH 'enron OR com questar' } } {{matt.smith@<b>enron</b>.<b>com</b> <b>...</b> six reports: 31 Keystone Receipts 15 <b>Questar</b> Pipeline 40 Rockies Production 22 West_2 <b>...</b>}} finish_test |