# 2015-09-10 # # 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_value_subtype() and # sqlite3_result_subtype() interfaces. # set testdir [file dirname $argv0] source $testdir/tester.tcl do_execsql_test subtype1-100 { SELECT test_getsubtype('hello'); } {0} do_execsql_test subtype1-110 { SELECT test_getsubtype(test_setsubtype('hello',123)); } {123} do_execsql_test subtype1-120 { SELECT typeof(test_setsubtype('hello',123)); } {text} do_execsql_test subtype1-130 { SELECT test_setsubtype('hello',123); } {hello} # 2022-06-09 # https://sqlite.org/forum/forumpost/3d9caa45cbe38c78 # # Avoid carrying subtypes through into a subquery that has been flattened # or to which the outer WHERE clause has been pushed down. # reset_db do_execsql_test subtype1-200 { CREATE TABLE t1(a); INSERT INTO t1 VALUES ('x'); CREATE VIEW t2(b) AS SELECT json(TRUE); CREATE TABLE t3(b); INSERT INTO t3 VALUES(json(TRUE)); } do_execsql_test subtype1-210 { SELECT * FROM t3, t1 WHERE NOT json_quote(b); } {1 x} do_execsql_test subtype1-220 { SELECT * FROM t2, t1 WHERE NOT json_quote(b); } {1 x} do_execsql_test subtype1-230 { WITH t4(a) AS MATERIALIZED (SELECT json(1)) SELECT subtype(a) FROM t4; } {0} do_execsql_test subtype1-231 { WITH t4(a) AS NOT MATERIALIZED (SELECT json(1)) SELECT subtype(a) FROM t4; } {0} # 2023-03-01 # https://sqlite.org/forum/forumpost/37dd14a538 # # Additional tests to show that subtypes do not traverse subquery boundaries. # do_execsql_test subtype1-300 { CREATE TABLE t0(c0); INSERT INTO t0 VALUES ('1'); CREATE VIEW v0(c0) AS SELECT CASE WHEN 1 THEN json_patch('1', '1') END FROM t0 GROUP BY t0.c0; SELECT * FROM v0 WHERE json_quote(v0.c0) != '1'; } {1} do_execsql_test subtype1-310 { SELECT *, json_quote(y) FROM (SELECT +json('1') AS y); } {1 {"1"}} do_execsql_test subtype1-320 { SELECT *, json_quote(y) FROM (SELECT +json('1') AS y) WHERE json_quote(y)='"1"'; } {1 {"1"}} finish_test