1# 2014 Dec 20 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# Tests focusing on the fts5 xSetAuxdata() and xGetAuxdata() APIs. 13# 14 15source [file join [file dirname [info script]] fts5_common.tcl] 16set testprefix fts5auxdata 17 18# If SQLITE_ENABLE_FTS5 is defined, omit this file. 19ifcapable !fts5 { 20 finish_test 21 return 22} 23 24do_execsql_test 1.0 { 25 CREATE VIRTUAL TABLE f1 USING fts5(a, b); 26 INSERT INTO f1(rowid, a, b) VALUES(1, 'a', 'b1'); 27 INSERT INTO f1(rowid, a, b) VALUES(2, 'a', 'b2'); 28 INSERT INTO f1(rowid, a, b) VALUES(3, 'a', 'b3'); 29 INSERT INTO f1(rowid, a, b) VALUES(4, 'a', 'b4'); 30 INSERT INTO f1(rowid, a, b) VALUES(5, 'a', 'b5'); 31} 32 33proc aux_function_1 {cmd tn} { 34 switch [$cmd xRowid] { 35 1 { 36 do_test $tn.1 [list $cmd xGetAuxdata 0 ] {} 37 $cmd xSetAuxdata "one" 38 } 39 40 2 { 41 do_test $tn.2 [list $cmd xGetAuxdata 0 ] {one} 42 $cmd xSetAuxdata "two" 43 } 44 45 3 { 46 do_test $tn.3 [list $cmd xGetAuxdata 0 ] {two} 47 } 48 49 4 { 50 do_test $tn.4 [list $cmd xGetAuxdata 1 ] {two} 51 } 52 53 5 { 54 do_test $tn.5 [list $cmd xGetAuxdata 0 ] {} 55 } 56 } 57} 58 59sqlite3_fts5_create_function db aux_function_1 aux_function_1 60db eval { 61 SELECT aux_function_1(f1, 1) FROM f1 WHERE f1 MATCH 'a' 62 ORDER BY rowid ASC 63} 64 65proc aux_function_2 {cmd tn inst} { 66 if {$inst == "A"} { 67 switch [$cmd xRowid] { 68 1 { 69 do_test $tn.1.$inst [list $cmd xGetAuxdata 0 ] {} 70 $cmd xSetAuxdata "one $inst" 71 } 72 2 { 73 do_test $tn.2.$inst [list $cmd xGetAuxdata 0 ] "one $inst" 74 $cmd xSetAuxdata "two $inst" 75 } 76 3 { 77 do_test $tn.3.$inst [list $cmd xGetAuxdata 0 ] "two $inst" 78 } 79 4 { 80 do_test $tn.4.$inst [list $cmd xGetAuxdata 1 ] "two $inst" 81 } 82 5 { 83 do_test $tn.5.$inst [list $cmd xGetAuxdata 0 ] {} 84 } 85 } 86 } else { 87 switch [$cmd xRowid] { 88 1 { 89 do_test $tn.1.$inst [list $cmd xGetAuxdata 0 ] "one A" 90 } 91 2 { 92 do_test $tn.2.$inst [list $cmd xGetAuxdata 0 ] "two A" 93 } 94 3 { 95 do_test $tn.3.$inst [list $cmd xGetAuxdata 0 ] "two A" 96 } 97 4 { 98 do_test $tn.4.$inst [list $cmd xGetAuxdata 0 ] {} 99 } 100 5 { 101 do_test $tn.5.$inst [list $cmd xGetAuxdata 0 ] {} 102 } 103 } 104 } 105} 106 107sqlite3_fts5_create_function db aux_function_2 aux_function_2 108db eval { 109 SELECT aux_function_2(f1, 2, 'A'), aux_function_2(f1, 2, 'B') 110 FROM f1 WHERE f1 MATCH 'a' 111 ORDER BY rowid ASC 112} 113 114finish_test 115