modernc.org/cc@v1.0.1/v2/testdata/_sqlite/ext/fts5/test/fts5auxdata.test (about)

     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  
    15  source [file join [file dirname [info script]] fts5_common.tcl]
    16  set testprefix fts5auxdata
    17  
    18  # If SQLITE_ENABLE_FTS5 is defined, omit this file.
    19  ifcapable !fts5 {
    20    finish_test
    21    return
    22  }
    23  
    24  do_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  
    33  proc 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  
    59  sqlite3_fts5_create_function db aux_function_1 aux_function_1
    60  db eval { 
    61    SELECT aux_function_1(f1, 1) FROM f1 WHERE f1 MATCH 'a'
    62    ORDER BY rowid ASC
    63  }
    64  
    65  proc 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  
   107  sqlite3_fts5_create_function db aux_function_2 aux_function_2
   108  db 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  
   114  finish_test