Annotation of embedaddon/sqlite3/test/fts3snippet.test, revision 1.1

1.1     ! misho       1: # 2010 January 07
        !             2: #
        !             3: # The author disclaims copyright to this source code.  In place of
        !             4: # a legal notice, here is a blessing:
        !             5: #
        !             6: #    May you do good and not evil.
        !             7: #    May you find forgiveness for yourself and forgive others.
        !             8: #    May you share freely, never taking more than you give.
        !             9: #
        !            10: #*************************************************************************
        !            11: #
        !            12: # The tests in this file test the FTS3 auxillary functions offsets(), 
        !            13: # snippet() and matchinfo() work. At time of writing, running this file 
        !            14: # provides full coverage of fts3_snippet.c.
        !            15: #
        !            16: 
        !            17: set testdir [file dirname $argv0]
        !            18: source $testdir/tester.tcl
        !            19: 
        !            20: # If SQLITE_ENABLE_FTS3 is not defined, omit this file.
        !            21: ifcapable !fts3 { finish_test ; return }
        !            22: source $testdir/fts3_common.tcl
        !            23: 
        !            24: set sqlite_fts3_enable_parentheses 1
        !            25: set DO_MALLOC_TEST 0
        !            26: 
        !            27: # Transform the list $L to its "normal" form. So that it can be compared to
        !            28: # another list with the same set of elements using [string compare].
        !            29: #
        !            30: proc normalize {L} {
        !            31:   set ret [list]
        !            32:   foreach l $L {lappend ret $l}
        !            33:   return $ret
        !            34: }
        !            35: 
        !            36: proc do_offsets_test {name expr args} {
        !            37:   set result [list]
        !            38:   foreach a $args {
        !            39:     lappend result [normalize $a]
        !            40:   }
        !            41:   do_select_test $name {
        !            42:     SELECT offsets(ft) FROM ft WHERE ft MATCH $expr
        !            43:   } $result
        !            44: }
        !            45:   
        !            46: # Document text used by a few tests. Contains the English names of all
        !            47: # integers between 1 and 300.
        !            48: #
        !            49: set numbers [normalize {
        !            50:   one two three four five six seven eight nine ten eleven twelve thirteen
        !            51:   fourteen fifteen sixteen seventeen eighteen nineteen twenty twentyone
        !            52:   twentytwo twentythree twentyfour twentyfive twentysix twentyseven
        !            53:   twentyeight twentynine thirty thirtyone thirtytwo thirtythree thirtyfour
        !            54:   thirtyfive thirtysix thirtyseven thirtyeight thirtynine forty fortyone
        !            55:   fortytwo fortythree fortyfour fortyfive fortysix fortyseven fortyeight
        !            56:   fortynine fifty fiftyone fiftytwo fiftythree fiftyfour fiftyfive fiftysix
        !            57:   fiftyseven fiftyeight fiftynine sixty sixtyone sixtytwo sixtythree sixtyfour
        !            58:   sixtyfive sixtysix sixtyseven sixtyeight sixtynine seventy seventyone
        !            59:   seventytwo seventythree seventyfour seventyfive seventysix seventyseven
        !            60:   seventyeight seventynine eighty eightyone eightytwo eightythree eightyfour
        !            61:   eightyfive eightysix eightyseven eightyeight eightynine ninety ninetyone
        !            62:   ninetytwo ninetythree ninetyfour ninetyfive ninetysix ninetyseven
        !            63:   ninetyeight ninetynine onehundred onehundredone onehundredtwo
        !            64:   onehundredthree onehundredfour onehundredfive onehundredsix onehundredseven
        !            65:   onehundredeight onehundrednine onehundredten onehundredeleven
        !            66:   onehundredtwelve onehundredthirteen onehundredfourteen onehundredfifteen
        !            67:   onehundredsixteen onehundredseventeen onehundredeighteen onehundrednineteen
        !            68:   onehundredtwenty onehundredtwentyone onehundredtwentytwo
        !            69:   onehundredtwentythree onehundredtwentyfour onehundredtwentyfive
        !            70:   onehundredtwentysix onehundredtwentyseven onehundredtwentyeight
        !            71:   onehundredtwentynine onehundredthirty onehundredthirtyone
        !            72:   onehundredthirtytwo onehundredthirtythree onehundredthirtyfour
        !            73:   onehundredthirtyfive onehundredthirtysix onehundredthirtyseven
        !            74:   onehundredthirtyeight onehundredthirtynine onehundredforty
        !            75:   onehundredfortyone onehundredfortytwo onehundredfortythree
        !            76:   onehundredfortyfour onehundredfortyfive onehundredfortysix
        !            77:   onehundredfortyseven onehundredfortyeight onehundredfortynine
        !            78:   onehundredfifty onehundredfiftyone onehundredfiftytwo onehundredfiftythree
        !            79:   onehundredfiftyfour onehundredfiftyfive onehundredfiftysix
        !            80:   onehundredfiftyseven onehundredfiftyeight onehundredfiftynine
        !            81:   onehundredsixty onehundredsixtyone onehundredsixtytwo onehundredsixtythree
        !            82:   onehundredsixtyfour onehundredsixtyfive onehundredsixtysix
        !            83:   onehundredsixtyseven onehundredsixtyeight onehundredsixtynine
        !            84:   onehundredseventy onehundredseventyone onehundredseventytwo
        !            85:   onehundredseventythree onehundredseventyfour onehundredseventyfive
        !            86:   onehundredseventysix onehundredseventyseven onehundredseventyeight
        !            87:   onehundredseventynine onehundredeighty onehundredeightyone
        !            88:   onehundredeightytwo onehundredeightythree onehundredeightyfour
        !            89:   onehundredeightyfive onehundredeightysix onehundredeightyseven
        !            90:   onehundredeightyeight onehundredeightynine onehundredninety
        !            91:   onehundredninetyone onehundredninetytwo onehundredninetythree
        !            92:   onehundredninetyfour onehundredninetyfive onehundredninetysix
        !            93:   onehundredninetyseven onehundredninetyeight onehundredninetynine twohundred
        !            94:   twohundredone twohundredtwo twohundredthree twohundredfour twohundredfive
        !            95:   twohundredsix twohundredseven twohundredeight twohundrednine twohundredten
        !            96:   twohundredeleven twohundredtwelve twohundredthirteen twohundredfourteen
        !            97:   twohundredfifteen twohundredsixteen twohundredseventeen twohundredeighteen
        !            98:   twohundrednineteen twohundredtwenty twohundredtwentyone twohundredtwentytwo
        !            99:   twohundredtwentythree twohundredtwentyfour twohundredtwentyfive
        !           100:   twohundredtwentysix twohundredtwentyseven twohundredtwentyeight
        !           101:   twohundredtwentynine twohundredthirty twohundredthirtyone
        !           102:   twohundredthirtytwo twohundredthirtythree twohundredthirtyfour
        !           103:   twohundredthirtyfive twohundredthirtysix twohundredthirtyseven
        !           104:   twohundredthirtyeight twohundredthirtynine twohundredforty
        !           105:   twohundredfortyone twohundredfortytwo twohundredfortythree
        !           106:   twohundredfortyfour twohundredfortyfive twohundredfortysix
        !           107:   twohundredfortyseven twohundredfortyeight twohundredfortynine
        !           108:   twohundredfifty twohundredfiftyone twohundredfiftytwo twohundredfiftythree
        !           109:   twohundredfiftyfour twohundredfiftyfive twohundredfiftysix
        !           110:   twohundredfiftyseven twohundredfiftyeight twohundredfiftynine
        !           111:   twohundredsixty twohundredsixtyone twohundredsixtytwo twohundredsixtythree
        !           112:   twohundredsixtyfour twohundredsixtyfive twohundredsixtysix
        !           113:   twohundredsixtyseven twohundredsixtyeight twohundredsixtynine
        !           114:   twohundredseventy twohundredseventyone twohundredseventytwo
        !           115:   twohundredseventythree twohundredseventyfour twohundredseventyfive
        !           116:   twohundredseventysix twohundredseventyseven twohundredseventyeight
        !           117:   twohundredseventynine twohundredeighty twohundredeightyone
        !           118:   twohundredeightytwo twohundredeightythree twohundredeightyfour
        !           119:   twohundredeightyfive twohundredeightysix twohundredeightyseven
        !           120:   twohundredeightyeight twohundredeightynine twohundredninety
        !           121:   twohundredninetyone twohundredninetytwo twohundredninetythree
        !           122:   twohundredninetyfour twohundredninetyfive twohundredninetysix
        !           123:   twohundredninetyseven twohundredninetyeight twohundredninetynine
        !           124:   threehundred
        !           125: }]
        !           126: 
        !           127: foreach {DO_MALLOC_TEST enc} {
        !           128:   0 utf8
        !           129:   1 utf8
        !           130:   1 utf16
        !           131: } {
        !           132: 
        !           133:   db close
        !           134:   forcedelete test.db
        !           135:   sqlite3 db test.db
        !           136:   sqlite3_db_config_lookaside db 0 0 0
        !           137:   db eval "PRAGMA encoding = \"$enc\""
        !           138: 
        !           139:   # Set variable $T to the test name prefix for this iteration of the loop.
        !           140:   #
        !           141:   set T "fts3snippet-$enc"
        !           142: 
        !           143:   ##########################################################################
        !           144:   # Test the offset function.
        !           145:   #
        !           146:   do_test $T.1.1 {
        !           147:     execsql {
        !           148:       CREATE VIRTUAL TABLE ft USING fts3;
        !           149:       INSERT INTO ft VALUES('xxx xxx xxx xxx');
        !           150:     }
        !           151:   } {}
        !           152:   do_offsets_test $T.1.2 {xxx} {0 0 0 3 0 0 4 3 0 0 8 3 0 0 12 3}
        !           153:   do_offsets_test $T.1.3 {"xxx xxx"} {
        !           154:       0 0  0 3     0 0  4 3     0 1  4 3     0 0  8 3 
        !           155:       0 1  8 3     0 1 12 3
        !           156:   }
        !           157:   do_offsets_test $T.1.4 {"xxx xxx" xxx} {
        !           158:       0 0  0 3     0 2  0 3     0 0  4 3     0 1  4 3 
        !           159:       0 2  4 3     0 0  8 3     0 1  8 3     0 2  8 3 
        !           160:       0 1 12 3     0 2 12 3
        !           161:   }
        !           162:   do_offsets_test $T.1.5 {xxx "xxx xxx"} {
        !           163:       0 0  0 3     0 1  0 3     0 0  4 3     0 1  4 3 
        !           164:       0 2  4 3     0 0  8 3     0 1  8 3     0 2  8 3 
        !           165:       0 0 12 3     0 2 12 3
        !           166:   }
        !           167: 
        !           168:   do_test $T.2.1 {
        !           169:     set v1 [lrange $numbers 0 99]
        !           170:     execsql {
        !           171:       DROP TABLE IF EXISTS ft;
        !           172:       CREATE VIRTUAL TABLE ft USING fts3(a, b);
        !           173:       INSERT INTO ft VALUES($v1, $numbers);
        !           174:       INSERT INTO ft VALUES($v1, NULL);
        !           175:     }
        !           176:   } {}
        !           177: 
        !           178:   set off [string first "twohundred " $numbers]
        !           179:   do_offsets_test $T.2.1 {twohundred} [list 1 0 $off 10]
        !           180: 
        !           181:   set off [string first "onehundred " $numbers]
        !           182:   do_offsets_test $T.2.2 {onehundred} \
        !           183:     [list 0 0 $off 10 1 0 $off 10] [list 0 0 $off 10]
        !           184: 
        !           185:   # Test a corruption case:
        !           186:   execsql { UPDATE ft_content SET c1b = 'hello world' WHERE c1b = $numbers }
        !           187:   do_error_test $T.2.3 {
        !           188:     SELECT offsets(ft) FROM ft WHERE ft MATCH 'onehundred'
        !           189:   } {database disk image is malformed}
        !           190:   
        !           191:   ##########################################################################
        !           192:   # Test the snippet function.
        !           193:   #
        !           194:   proc do_snippet_test {name expr iCol nTok args} {
        !           195:     set res [list]
        !           196:     foreach a $args { lappend res [string trim $a] }
        !           197:     do_select_test $name {
        !           198:       SELECT snippet(ft,'{','}','...',$iCol,$nTok) FROM ft WHERE ft MATCH $expr
        !           199:     } $res
        !           200:   }
        !           201:   do_test $T.3.1 {
        !           202:     execsql {
        !           203:       DROP TABLE IF EXISTS ft;
        !           204:       CREATE VIRTUAL TABLE ft USING fts3;
        !           205:       INSERT INTO ft VALUES('one two three four five six seven eight nine ten');
        !           206:     }
        !           207:   } {}
        !           208:   do_snippet_test $T.3.2  one    0 5 "{one} two three four five..."
        !           209:   do_snippet_test $T.3.3  two    0 5 "one {two} three four five..."
        !           210:   do_snippet_test $T.3.4  three  0 5 "one two {three} four five..."
        !           211:   do_snippet_test $T.3.5  four   0 5 "...two three {four} five six..."
        !           212:   do_snippet_test $T.3.6  five   0 5 "...three four {five} six seven..."
        !           213:   do_snippet_test $T.3.7  six    0 5 "...four five {six} seven eight..."
        !           214:   do_snippet_test $T.3.8  seven  0 5 "...five six {seven} eight nine..."
        !           215:   do_snippet_test $T.3.9  eight  0 5 "...six seven {eight} nine ten"
        !           216:   do_snippet_test $T.3.10 nine   0 5 "...six seven eight {nine} ten"
        !           217:   do_snippet_test $T.3.11 ten    0 5 "...six seven eight nine {ten}"
        !           218:   
        !           219:   do_test $T.4.1 {
        !           220:     execsql {
        !           221:       INSERT INTO ft VALUES(
        !           222:            'one two three four five '
        !           223:         || 'six seven eight nine ten '
        !           224:         || 'eleven twelve thirteen fourteen fifteen '
        !           225:         || 'sixteen seventeen eighteen nineteen twenty '
        !           226:         || 'one two three four five '
        !           227:         || 'six seven eight nine ten '
        !           228:         || 'eleven twelve thirteen fourteen fifteen '
        !           229:         || 'sixteen seventeen eighteen nineteen twenty'
        !           230:       );
        !           231:     }
        !           232:   } {}
        !           233:   
        !           234:   do_snippet_test $T.4.2 {one nine} 0 5 {
        !           235:      {one} two three...eight {nine} ten
        !           236:   } {
        !           237:      {one} two three...eight {nine} ten...
        !           238:   }
        !           239:   
        !           240:   do_snippet_test $T.4.3 {one nine} 0 -5 {
        !           241:      {one} two three four five...six seven eight {nine} ten
        !           242:   } {
        !           243:      {one} two three four five...seven eight {nine} ten eleven...
        !           244:   }
        !           245:   do_snippet_test $T.4.3 {one nineteen} 0 -5 {
        !           246:      ...eighteen {nineteen} twenty {one} two...
        !           247:   }
        !           248:   do_snippet_test $T.4.4 {two nineteen} 0 -5 {
        !           249:      ...eighteen {nineteen} twenty one {two}...
        !           250:   }
        !           251:   do_snippet_test $T.4.5 {three nineteen} 0 -5 {
        !           252:      ...{nineteen} twenty one two {three}...
        !           253:   }
        !           254:   
        !           255:   do_snippet_test $T.4.6 {four nineteen} 0 -5 {
        !           256:      ...two three {four} five six...seventeen eighteen {nineteen} twenty one...
        !           257:   }
        !           258:   do_snippet_test $T.4.7 {four NEAR nineteen} 0 -5 {
        !           259:      ...seventeen eighteen {nineteen} twenty one...two three {four} five six...
        !           260:   }
        !           261:   
        !           262:   do_snippet_test $T.4.8 {four nineteen} 0 5 {
        !           263:      ...three {four} five...eighteen {nineteen} twenty...
        !           264:   }
        !           265:   do_snippet_test $T.4.9 {four NEAR nineteen} 0 5 {
        !           266:      ...eighteen {nineteen} twenty...three {four} five...
        !           267:   }
        !           268:   do_snippet_test $T.4.10 {four NEAR nineteen} 0 -5 {
        !           269:      ...seventeen eighteen {nineteen} twenty one...two three {four} five six...
        !           270:   }
        !           271:   do_snippet_test $T.4.11 {four NOT (nineteen twentyone)} 0 5 {
        !           272:      ...two three {four} five six...
        !           273:   } {
        !           274:      ...two three {four} five six...
        !           275:   }
        !           276:   do_snippet_test $T.4.12 {four OR nineteen NEAR twentyone} 0 5 {
        !           277:      ...two three {four} five six...
        !           278:   } {
        !           279:      ...two three {four} five six...
        !           280:   }
        !           281:   
        !           282:   do_test $T.5.1 {
        !           283:     execsql {
        !           284:       DROP TABLE IF EXISTS ft;
        !           285:       CREATE VIRTUAL TABLE ft USING fts3(a, b, c);
        !           286:       INSERT INTO ft VALUES(
        !           287:         'one two three four five', 
        !           288:         'four five six seven eight', 
        !           289:         'seven eight nine ten eleven'
        !           290:       );
        !           291:     }
        !           292:   } {}
        !           293:   
        !           294:   do_snippet_test $T.5.2 {five} -1 3 {...three four {five}}
        !           295:   do_snippet_test $T.5.3 {five}  0 3 {...three four {five}}
        !           296:   do_snippet_test $T.5.4 {five}  1 3 {four {five} six...}
        !           297:   do_snippet_test $T.5.5 {five}  2 3 {seven eight nine...}
        !           298:   
        !           299:   do_test $T.5.6 {
        !           300:     execsql { UPDATE ft SET b = NULL }
        !           301:   } {}
        !           302:   
        !           303:   do_snippet_test $T.5.7  {five} -1 3 {...three four {five}}
        !           304:   do_snippet_test $T.5.8  {five}  0 3 {...three four {five}}
        !           305:   do_snippet_test $T.5.9  {five}  1 3 {}
        !           306:   do_snippet_test $T.5.10 {five}  2 3 {seven eight nine...}
        !           307:   
        !           308:   do_snippet_test $T.5.11 {one "seven eight nine"} -1 -3 {
        !           309:     {one} two three...{seven} {eight} {nine}...
        !           310:   }
        !           311: 
        !           312:   do_test $T.6.1 {
        !           313:     execsql {
        !           314:       DROP TABLE IF EXISTS ft;
        !           315:       CREATE VIRTUAL TABLE ft USING fts3(x);
        !           316:       INSERT INTO ft VALUES($numbers);
        !           317:     }
        !           318:   } {}
        !           319:   do_snippet_test $T.6.2 {
        !           320:     one fifty onehundred onehundredfifty twohundredfifty threehundred
        !           321:   } -1 4 {
        !           322:     {one}...{fifty}...{onehundred}...{onehundredfifty}...
        !           323:   }
        !           324:   do_snippet_test $T.6.3 {
        !           325:     one fifty onehundred onehundredfifty twohundredfifty threehundred
        !           326:   } -1 -4 {
        !           327:     {one} two three four...fortyeight fortynine {fifty} fiftyone...ninetyeight ninetynine {onehundred} onehundredone...onehundredfortyeight onehundredfortynine {onehundredfifty} onehundredfiftyone...
        !           328:   }
        !           329: 
        !           330:   do_test $T.7.1 {
        !           331:     execsql {
        !           332:       BEGIN;
        !           333:         DROP TABLE IF EXISTS ft;
        !           334:         CREATE VIRTUAL TABLE ft USING fts3(x);
        !           335:     }
        !           336:     set testresults [list]
        !           337:     for {set i 1} {$i < 150} {incr i} {
        !           338:       set commas [string repeat , $i]
        !           339:       execsql {INSERT INTO ft VALUES('one' || $commas || 'two')}
        !           340:       lappend testresults "{one}$commas{two}"
        !           341:     }
        !           342:     execsql COMMIT
        !           343:   } {}
        !           344:   eval [list do_snippet_test $T.7.2 {one two} -1 3] $testresults
        !           345:   
        !           346:   ##########################################################################
        !           347:   # Test the matchinfo function.
        !           348:   #
        !           349:   proc mit {blob} {
        !           350:     set scan(littleEndian) i*
        !           351:     set scan(bigEndian) I*
        !           352:     binary scan $blob $scan($::tcl_platform(byteOrder)) r
        !           353:     return $r
        !           354:   }
        !           355:   db func mit mit
        !           356:   proc do_matchinfo_test {name expr args} {
        !           357:     set res [list]
        !           358:     foreach a $args { lappend res [normalize $a] }
        !           359:     do_select_test $name {
        !           360:       SELECT mit(matchinfo(ft)) FROM ft WHERE ft MATCH $expr
        !           361:     } $res
        !           362:   }
        !           363:   do_test $T.8.1 {
        !           364:     set ten {one two three four five six seven eight nine ten}
        !           365:     execsql {
        !           366:       DROP TABLE IF EXISTS ft;
        !           367:       CREATE VIRTUAL TABLE ft USING fts3;
        !           368:       INSERT INTO ft VALUES($ten);
        !           369:       INSERT INTO ft VALUES($ten || ' ' || $ten);
        !           370:     }
        !           371:   } {}
        !           372:   
        !           373:   do_matchinfo_test $T.8.2 "one" {1 1  1 3 2} {1 1  2 3 2}
        !           374:   do_matchinfo_test $T.8.3 "one NEAR/3 ten" {2 1  1 1 1 1 1 1}
        !           375:   do_matchinfo_test $T.8.4 "five NEAR/4 ten" \
        !           376:     {2 1  1 3 2  1 3 2} {2 1  2 3 2  2 3 2}
        !           377:   do_matchinfo_test $T.8.5 "six NEAR/3 ten NEAR/3 two" \
        !           378:     {3 1  1 1 1  1 1 1  1 1 1}
        !           379:   do_matchinfo_test $T.8.6 "five NEAR/4 ten NEAR/3 two" \
        !           380:     {3 1  2 2 1  1 1 1  1 1 1}
        !           381: 
        !           382:   do_test $T.9.1 {
        !           383:     execsql {
        !           384:       DROP TABLE IF EXISTS ft;
        !           385:       CREATE VIRTUAL TABLE ft USING fts3(x, y);
        !           386:     }
        !           387:     foreach n {1 2 3} {
        !           388:       set v1 [lrange $numbers 0 [expr $n*100]]
        !           389:       set v2 [string trim [string repeat "$numbers " $n]]
        !           390:       set docid [expr $n * 1000000]
        !           391:       execsql { INSERT INTO ft(docid, x, y) VALUES($docid, $v1, $v2) }
        !           392:     }
        !           393:   } {}
        !           394:   do_matchinfo_test $T.9.2 {two*}     \
        !           395:     { 1 2    1   105 3   101 606 3}   \
        !           396:     { 1 2    3   105 3   202 606 3}   \
        !           397:     { 1 2    101 105 3   303 606 3}
        !           398: 
        !           399:   do_matchinfo_test $T.9.4 {"one* two*"}  \
        !           400:     { 1 2    1 5 3   2 12 3}              \
        !           401:     { 1 2    2 5 3   4 12 3}              \
        !           402:     { 1 2    2 5 3   6 12 3}
        !           403: 
        !           404:   do_matchinfo_test $T.9.5 {twohundredfifty}  \
        !           405:     { 1 2    0 1 1   1 6 3}                   \
        !           406:     { 1 2    0 1 1   2 6 3}                   \
        !           407:     { 1 2    1 1 1   3 6 3}
        !           408: 
        !           409:   do_matchinfo_test $T.9.6 {"threehundred one"} \
        !           410:     { 1 2    0 0 0   1 3 2}                     \
        !           411:     { 1 2    0 0 0   2 3 2}
        !           412: 
        !           413:   do_matchinfo_test $T.9.7 {one OR fivehundred} \
        !           414:     { 2 2    1 3 3   1 6 3   0 0 0   0 0 0 }    \
        !           415:     { 2 2    1 3 3   2 6 3   0 0 0   0 0 0 }    \
        !           416:     { 2 2    1 3 3   3 6 3   0 0 0   0 0 0 }
        !           417: 
        !           418:   do_matchinfo_test $T.9.8 {two OR "threehundred one"} \
        !           419:     { 2 2    1 3 3   1 6 3   0 0 0   0 3 2 }           \
        !           420:     { 2 2    1 3 3   2 6 3   0 0 0   1 3 2 }           \
        !           421:     { 2 2    1 3 3   3 6 3   0 0 0   2 3 2 }
        !           422: 
        !           423:   do_select_test $T.9.9 {
        !           424:     SELECT mit(matchinfo(ft)), mit(matchinfo(ft))
        !           425:     FROM ft WHERE ft MATCH 'two OR "threehundred one"' 
        !           426:   } [normalize {
        !           427:     {2 2 1 3 3 1 6 3 0 0 0 0 3 2}
        !           428:     {2 2 1 3 3 1 6 3 0 0 0 0 3 2}
        !           429:     {2 2 1 3 3 2 6 3 0 0 0 1 3 2}
        !           430:     {2 2 1 3 3 2 6 3 0 0 0 1 3 2}
        !           431:     {2 2 1 3 3 3 6 3 0 0 0 2 3 2}          
        !           432:     {2 2 1 3 3 3 6 3 0 0 0 2 3 2}
        !           433:   }]
        !           434: 
        !           435:   # EVIDENCE-OF: R-40630-02268 If used within a SELECT that uses the
        !           436:   # "query by rowid" or "linear scan" strategies, then the snippet and
        !           437:   # offsets both return an empty string, and the matchinfo function
        !           438:   # returns a blob value zero bytes in size.
        !           439:   #
        !           440:   set r 1000000                   ;# A rowid that exists in table ft
        !           441:   do_select_test $T.10.0 { SELECT rowid FROM ft WHERE rowid = $r } $r
        !           442:   do_select_test $T.10.1 {
        !           443:     SELECT length(offsets(ft)), typeof(offsets(ft)) FROM ft;
        !           444:   } {0 text 0 text 0 text}
        !           445:   do_select_test $T.10.2 {
        !           446:     SELECT length(offsets(ft)), typeof(offsets(ft)) FROM ft WHERE rowid = $r
        !           447:   } {0 text}
        !           448:   do_select_test $T.10.3 {
        !           449:     SELECT length(snippet(ft)), typeof(snippet(ft)) FROM ft;
        !           450:   } {0 text 0 text 0 text}
        !           451:   do_select_test $T.10.4 {
        !           452:     SELECT length(snippet(ft)), typeof(snippet(ft)) FROM ft WHERE rowid = $r;
        !           453:   } {0 text}
        !           454:   do_select_test $T.10.5 {
        !           455:     SELECT length(matchinfo(ft)), typeof(matchinfo(ft)) FROM ft;
        !           456:   } {0 blob 0 blob 0 blob}
        !           457:   do_select_test $T.10.6 {
        !           458:     SELECT length(matchinfo(ft)), typeof(matchinfo(ft)) FROM ft WHERE rowid = $r
        !           459:   } {0 blob}
        !           460: }
        !           461: 
        !           462: set sqlite_fts3_enable_parentheses 0
        !           463: finish_test

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>