summaryrefslogtreecommitdiffstats
path: root/test/vtabrhs1.test
diff options
context:
space:
mode:
Diffstat (limited to 'test/vtabrhs1.test')
-rw-r--r--test/vtabrhs1.test76
1 files changed, 76 insertions, 0 deletions
diff --git a/test/vtabrhs1.test b/test/vtabrhs1.test
new file mode 100644
index 0000000..0476a36
--- /dev/null
+++ b/test/vtabrhs1.test
@@ -0,0 +1,76 @@
+# 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