678cd3d
Index: ext/fts5/fts5_hash.c
678cd3d
==================================================================
678cd3d
--- ext/fts5/fts5_hash.c
678cd3d
+++ ext/fts5/fts5_hash.c
678cd3d
@@ -454,11 +454,13 @@
678cd3d
   memset(ap, 0, sizeof(Fts5HashEntry*) * nMergeSlot);
678cd3d
 
678cd3d
   for(iSlot=0; iSlot<pHash->nSlot; iSlot++){
678cd3d
     Fts5HashEntry *pIter;
678cd3d
     for(pIter=pHash->aSlot[iSlot]; pIter; pIter=pIter->pHashNext){
678cd3d
-      if( pTerm==0 || 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm) ){
678cd3d
+      if( pTerm==0 
678cd3d
+       || (pIter->nKey+1>=nTerm && 0==memcmp(fts5EntryKey(pIter), pTerm, nTerm))
678cd3d
+      ){
678cd3d
         Fts5HashEntry *pEntry = pIter;
678cd3d
         pEntry->pScanNext = 0;
678cd3d
         for(i=0; ap[i]; i++){
678cd3d
           pEntry = fts5HashEntryMerge(pEntry, ap[i]);
678cd3d
           ap[i] = 0;
678cd3d
678cd3d
Index: ext/fts5/test/fts5aa.test
678cd3d
==================================================================
678cd3d
--- ext/fts5/test/fts5aa.test
678cd3d
+++ ext/fts5/test/fts5aa.test
678cd3d
@@ -619,10 +619,23 @@
678cd3d
   INSERT INTO t12(t12) VALUES('integrity-check');
678cd3d
 }
678cd3d
 do_execsql_test 24.3 {
678cd3d
     SELECT * FROM t12('aaaa');
678cd3d
 } {aaaa}
678cd3d
+
678cd3d
+#-------------------------------------------------------------------------
678cd3d
+do_execsql_test 25.0 {
678cd3d
+  CREATE VIRTUAL TABLE t13 USING fts5(x, detail=%DETAIL%);
678cd3d
+}
678cd3d
+do_execsql_test 25.1 {
678cd3d
+  BEGIN;
678cd3d
+  INSERT INTO t13 VALUES('AAAA');
678cd3d
+SELECT * FROM t13('BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB*');
678cd3d
+
678cd3d
+  END;
678cd3d
+}
678cd3d
+
678cd3d
 
678cd3d
 }
678cd3d
 
678cd3d
 expand_all_sql db
678cd3d
 finish_test