# 2022-01-20 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # # This file implements tests for sqlite3_vtab_rhs_value() interface. # set testdir [file dirname $argv0] source $testdir/tester.tcl set testprefix vtabrhs1 ifcapable !vtab { finish_test return } load_static_extension db qpvtab # EVIDENCE-OF: R-60223-49197 When the sqlite3_vtab_rhs_value(P,J,V) # interface is invoked from within the xBestIndex method of a virtual # table implementation, with P being a copy of the sqlite3_index_info # object pointer passed into xBestIndex and J being a 0-based index into # P->aConstraint[], then this routine attempts to set *V to the value # of the right-hand operand of that constraint if the right-hand operand # is known. # do_execsql_test 1.1 { SELECT rhs FROM qpvtab WHERE cn='a' AND a=12345 } {12345} do_execsql_test 1.2 { SELECT rhs FROM qpvtab WHERE cn='a' AND a<>4.5 } {4.5} do_execsql_test 1.3 { SELECT rhs FROM qpvtab WHERE cn='a' AND 'quokka' < a } {'quokka'} do_execsql_test 1.4 { SELECT rhs FROM qpvtab WHERE cn='a' AND a IS NULL } {{}} do_execsql_test 1.5 { SELECT rhs FROM qpvtab WHERE cn='a' AND a GLOB x'0123' } {x'0123'} # EVIDENCE-OF: R-37799-62852 If the right-hand operand is not known, # then *V is set to a NULL pointer. # do_execsql_test 2.1 { SELECT typeof(rhs) FROM qpvtab WHERE cn='a' AND a=format('abc'); } {null} do_execsql_test 2.2 { SELECT typeof(rhs) FROM qpvtab WHERE cn='a' AND a=?2 } {null} # EVIDENCE-OF: R-14553-25174 When xBestIndex returns, the sqlite3_value # object returned by sqlite3_vtab_rhs_value() is automatically # deallocated. # # Where this not the case, the following "finish_test" statement would # report a memory leak. # finish_test