github.com/jdgcs/sqlite3@v1.12.1-0.20210908114423-bc5f96e4dd51/testdata/tcl/fts4docid.test (about)

     1  # 2012 March 26
     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  
    13  set testdir [file dirname $argv0]
    14  source $testdir/tester.tcl
    15  source $testdir/fts3_common.tcl
    16  set ::testprefix fts4docid
    17  
    18  # If SQLITE_ENABLE_FTS3 is defined, omit this file.
    19  ifcapable !fts3 {
    20    finish_test
    21    return
    22  }
    23  
    24  # Initialize a table with pseudo-randomly generated data.
    25  #
    26  do_execsql_test 1.0 { CREATE VIRTUAL TABLE t1 USING fts4; }
    27  do_test 1.1 {
    28    foreach {docid content} {
    29      0  {F N K B T I K V B A}    1  {D M J E S P H E L O}
    30      2  {W U T Q T Q T L H G}    3  {D W H M B R S Z B K}
    31      4  {F Q I N P Q J L Z D}    5  {J O Q E Y A O E L B}
    32      6  {O V R A C R K C Y H}    7  {Z J H T Q Q O R A G}
    33      8  {L K J W G D Y W B M}    9  {K E Y I A Q R Q T S}
    34      10 {N P H Y Z M R T I C}    11 {E X H O I S E S Z F}
    35      12 {B Y Q T J X C L L J}    13 {Q D C U U A Q E Z U}
    36      14 {S I T C J R X S J M}    15 {M X M K E X L H Q Y}
    37      16 {O W E I C H U Y S Y}    17 {P V V E M T H C C S}
    38      18 {L Y A M I E N M X O}    19 {S Y R U L S Q Y F P}
    39      20 {U J S T T J J S V X}    21 {T E I W P O V A A P}
    40      22 {W D K H D H F G O J}    23 {T X Y P G M J U I L}
    41      24 {F V X E B C N B K W}    25 {E B A Y N N T Z I C}
    42      26 {G E E B C P U D H G}    27 {J D J K N S B Q T M}
    43      28 {Q T G M D O D Y V G}    29 {P X W I W V P W Z G}
    44    } {
    45      execsql { INSERT INTO t1(docid, content) VALUES($docid, $content) }
    46    }
    47  } {}
    48  
    49  # Quick test regarding affinites and the docid/rowid column.
    50  do_execsql_test 2.1.1 { SELECT docid FROM t1 WHERE docid = 5 } {5}
    51  do_execsql_test 2.1.2 { SELECT docid FROM t1 WHERE docid = '5' } {5}
    52  do_execsql_test 2.1.3 { SELECT docid FROM t1 WHERE docid = +5 } {5}
    53  do_execsql_test 2.1.4 { SELECT docid FROM t1 WHERE docid = +'5' } {5}
    54  do_execsql_test 2.1.5 { SELECT docid FROM t1 WHERE docid < 5 } {0 1 2 3 4}
    55  do_execsql_test 2.1.6 { SELECT docid FROM t1 WHERE docid < '5' } {0 1 2 3 4}
    56  
    57  do_execsql_test 2.2.1 { SELECT rowid FROM t1 WHERE rowid = 5 } {5}
    58  do_execsql_test 2.2.2 { SELECT rowid FROM t1 WHERE rowid = '5' } {5}
    59  do_execsql_test 2.2.3 { SELECT rowid FROM t1 WHERE rowid = +5 } {5}
    60  do_execsql_test 2.2.4 { SELECT rowid FROM t1 WHERE rowid = +'5' } {5}
    61  do_execsql_test 2.2.5 { SELECT rowid FROM t1 WHERE rowid < 5 } {0 1 2 3 4}
    62  do_execsql_test 2.2.6 { SELECT rowid FROM t1 WHERE rowid < '5' } {0 1 2 3 4}
    63  
    64  #-------------------------------------------------------------------------
    65  # Now test a bunch of full-text queries featuring range constraints on
    66  # the docid field. Each query is run so that the range constraint:
    67  #
    68  #   * is on the docid field,
    69  #   * is on the docid field with a unary +,
    70  #   * is on the rowid field,
    71  #   * is on the rowid field with a unary +.
    72  #
    73  # Queries are run with both "ORDER BY docid DESC" and "ORDER BY docid ASC"
    74  # clauses.
    75  #
    76  foreach {tn where result} {
    77    1 {WHERE t1 MATCH 'O' AND xxx < 17}                {1 5 6 7 11 16}
    78    2 {WHERE t1 MATCH 'O' AND xxx < 4123456789123456}  {1 5 6 7 11 16 18 21 22 28}
    79    3 {WHERE t1 MATCH 'O' AND xxx < 1}                 {}
    80    4 {WHERE t1 MATCH 'O' AND xxx < -4123456789123456} {}
    81  
    82    5 {WHERE t1 MATCH 'O' AND xxx > 17}                {18 21 22 28}
    83    6 {WHERE t1 MATCH 'O' AND xxx > 4123456789123456}  {}
    84    7 {WHERE t1 MATCH 'O' AND xxx > 1}                 {5 6 7 11 16 18 21 22 28}
    85    8 {WHERE t1 MATCH 'O' AND xxx > -4123456789123456} {1 5 6 7 11 16 18 21 22 28}
    86  
    87    9 {WHERE t1 MATCH '"Q T"' AND xxx < 27}  {2 9 12}
    88    10 {WHERE t1 MATCH '"Q T"' AND xxx <= 27} {2 9 12 27}
    89    11 {WHERE t1 MATCH '"Q T"' AND xxx > 27}  {28}
    90    12 {WHERE t1 MATCH '"Q T"' AND xxx >= 27} {27 28}
    91  } {
    92    foreach {tn2 ref order} {
    93      1  docid "ORDER BY docid ASC"
    94      2 +docid "ORDER BY docid ASC"
    95      3  rowid "ORDER BY docid ASC"
    96      4 +rowid "ORDER BY docid ASC"
    97  
    98      5  docid "ORDER BY docid DESC"
    99      6 +docid "ORDER BY docid DESC"
   100      7  rowid "ORDER BY docid DESC"
   101      8 +rowid "ORDER BY docid DESC"
   102    } {
   103      set w [string map "xxx $ref" $where]
   104      set q "SELECT docid FROM t1 $w $order"
   105  
   106      if {$tn2<5} {
   107        set r [lsort -integer -increasing $result] 
   108      } else {
   109        set r [lsort -integer -decreasing $result] 
   110      }
   111  
   112      do_execsql_test 3.$tn.$tn2 $q $r
   113    }
   114  }
   115  
   116  finish_test