mirror of
https://github.com/aljazceru/turso.git
synced 2025-12-17 08:34:19 +01:00
332 lines
8.6 KiB
Tcl
Executable File
332 lines
8.6 KiB
Tcl
Executable File
#!/usr/bin/env tclsh
|
|
|
|
set testdir [file dirname $argv0]
|
|
source $testdir/tester.tcl
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-cache-size-default {
|
|
PRAGMA cache_size
|
|
} {-2000}
|
|
|
|
do_execsql_test pragma-set-cache-size {
|
|
PRAGMA cache_size = 100;
|
|
PRAGMA cache_size
|
|
} {100}
|
|
|
|
# Even though the cache size was set to 100 in previous test, a new connection defaults back to -2000.
|
|
do_execsql_test pragma-cache-size {
|
|
PRAGMA cache_size
|
|
} {-2000}
|
|
|
|
do_execsql_test pragma-function-cache-size {
|
|
SELECT * FROM pragma_cache_size()
|
|
} {-2000}
|
|
|
|
do_execsql_test pragma-update-journal-mode-wal {
|
|
PRAGMA journal_mode=WAL
|
|
} {wal}
|
|
|
|
do_execsql_test pragma-function-update-journal-mode {
|
|
SELECT * FROM pragma_journal_mode()
|
|
} {wal}
|
|
|
|
do_execsql_test pragma-table-info-equal-syntax {
|
|
PRAGMA table_info=sqlite_schema
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-table-info-call-syntax {
|
|
PRAGMA table_info(sqlite_schema)
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-table-info-alt-name-equal-syntax {
|
|
PRAGMA table_info=sqlite_master
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-table-info-alt-name-call-syntax {
|
|
PRAGMA table_info(sqlite_master)
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-function-table-info-alt-name {
|
|
SELECT * FROM pragma_table_info('sqlite_master')
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-function-table-info {
|
|
SELECT * FROM pragma_table_info('sqlite_schema')
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-vtab-table-info {
|
|
SELECT * FROM pragma_table_info WHERE arg = 'sqlite_schema'
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-table-info-invalid-table {
|
|
PRAGMA table_info=pekka
|
|
} {}
|
|
|
|
do_execsql_test pragma-function-table-info-invalid-table {
|
|
SELECT * FROM pragma_table_info('pekka')
|
|
} {}
|
|
|
|
do_execsql_test pragma-vtab-table-info-invalid-table {
|
|
SELECT * FROM pragma_table_info WHERE arg = 'pekka'
|
|
} {}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-page-count-empty {
|
|
PRAGMA page_count
|
|
} {0}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-page-count-empty {
|
|
PRAGMA user_version=1;
|
|
PRAGMA page_count
|
|
} {1}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-page-count-table {
|
|
CREATE TABLE foo (bar);
|
|
PRAGMA page_count
|
|
} {2}
|
|
|
|
do_execsql_test_on_specific_db "testing/testing_user_version_10.db" pragma-user-version-user-set {
|
|
PRAGMA user_version
|
|
} {10}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-user-version-default {
|
|
PRAGMA user_version
|
|
} {0}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-user-version-update {
|
|
PRAGMA user_version = 42;
|
|
PRAGMA user_version;
|
|
} {42}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-user-version-negative-value {
|
|
PRAGMA user_version = -10;
|
|
PRAGMA user_version;
|
|
} {-10}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-user-version-float-value {
|
|
PRAGMA user_version = 10.9;
|
|
PRAGMA user_version;
|
|
} {10}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-application-id-default {
|
|
PRAGMA application_id
|
|
} {0}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-application-id-update {
|
|
PRAGMA application_id = 12345;
|
|
PRAGMA application_id;
|
|
} {12345}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-application-id-float-value {
|
|
PRAGMA application_id = 10.9;
|
|
PRAGMA application_id;
|
|
} {10}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-application-id-large-value {
|
|
PRAGMA application_id = 2147483647;
|
|
PRAGMA application_id;
|
|
} {2147483647}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-application-id-negative-value {
|
|
PRAGMA application_id = -23;
|
|
PRAGMA application_id;
|
|
} {-23}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-application-id-zero {
|
|
PRAGMA application_id = 0;
|
|
PRAGMA application_id;
|
|
} {0}
|
|
|
|
do_execsql_test pragma-legacy-file-format {
|
|
PRAGMA legacy_file_format
|
|
} {}
|
|
|
|
do_execsql_test_error pragma-function-legacy-file-format {
|
|
SELECT * FROM pragma_legacy_file_format()
|
|
} {(no such table|Table.*not found)}
|
|
|
|
do_execsql_test_error_content pragma-function-too-many-arguments {
|
|
SELECT * FROM pragma_table_info('sqlite_schema', 'main', 'arg3')
|
|
} {"Too many arguments"}
|
|
|
|
do_execsql_test_error pragma-function-update {
|
|
SELECT * FROM pragma_wal_checkpoint()
|
|
} {(no such table|Table.*not found)}
|
|
|
|
do_execsql_test pragma-function-nontext-argument {
|
|
SELECT * FROM pragma_table_info('sqlite_schema', NULL);
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-vtab-nontext-argument {
|
|
SELECT * FROM pragma_table_info WHERE arg ='sqlite_schema' AND schema IS NULL;
|
|
} {0|type|TEXT|0||0
|
|
1|name|TEXT|0||0
|
|
2|tbl_name|TEXT|0||0
|
|
3|rootpage|INT|0||0
|
|
4|sql|TEXT|0||0
|
|
}
|
|
|
|
do_execsql_test pragma-function-no-arguments {
|
|
SELECT * FROM pragma_table_info();
|
|
} {}
|
|
|
|
do_execsql_test pragma-vtab-no-arguments {
|
|
SELECT * FROM pragma_table_info;
|
|
} {}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-function-argument-with-space {
|
|
CREATE TABLE "foo bar"(c0);
|
|
SELECT * FROM pragma_table_info('foo bar')
|
|
} {0|c0||0||0}
|
|
|
|
# If the argument passed to the first function call were simply concatenated with the underlying PRAGMA statement,
|
|
# we would end up with: PRAGMA table_info='sqlite_schema';CREATE TABLE foo (c0);SELECT 'bar'. Depending on how many
|
|
# statements are executed at once, at least one of the following would run:
|
|
# - PRAGMA table_info='sqlite_schema';
|
|
# - CREATE TABLE foo (c0);
|
|
# - SELECT 'bar';
|
|
# No output means that none of them were executed.
|
|
do_execsql_test pragma-function-sql-injection {
|
|
SELECT * FROM pragma_table_info('sqlite_schema'';CREATE TABLE foo (c0);SELECT ''bar');
|
|
SELECT * FROM pragma_table_info('foo');
|
|
} {}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-page-size-default {
|
|
PRAGMA page_size
|
|
} {4096}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-page-size-set {
|
|
PRAGMA page_size=1024;
|
|
PRAGMA page_size
|
|
} {1024}
|
|
|
|
# pragma page_size=xxx doesn't change the page size of an initialized database.
|
|
do_execsql_test_on_specific_db ":memory:" pragma-page-size-set-initialized-db {
|
|
CREATE TABLE "foo bar"(c0);
|
|
|
|
PRAGMA page_size=1024;
|
|
PRAGMA page_size
|
|
} {4096}
|
|
|
|
# pragma page_size=xxx changes the page size of an uninitialized database and persists the change.
|
|
set test_pragma_page_size_db "testing/testing_pragma_page_size.db"
|
|
catch {file delete -force $test_pragma_page_size_db}
|
|
catch {file delete -force "${test_pragma_page_size_db}-wal"}
|
|
# set user_version to trigger database initialization.
|
|
do_execsql_test_on_specific_db $test_pragma_page_size_db pragma-page-size-set-uninitialized-db-1 {
|
|
PRAGMA page_size=1024;
|
|
PRAGMA user_version=1;
|
|
PRAGMA page_size
|
|
} {1024}
|
|
|
|
do_execsql_test_on_specific_db $test_pragma_page_size_db pragma-page-size-set-uninitialized-db-2 {
|
|
PRAGMA page_size
|
|
} {1024}
|
|
catch {file delete -force $test_pragma_page_size_db}
|
|
catch {file delete -force "${test_pragma_page_size_db}-wal"}
|
|
|
|
do_execsql_test pragma-vtab-join {
|
|
SELECT s.name, ti.name FROM sqlite_schema AS s, pragma_table_info(s.name) AS ti;
|
|
} {users|id
|
|
users|first_name
|
|
users|last_name
|
|
users|email
|
|
users|phone_number
|
|
users|address
|
|
users|city
|
|
users|state
|
|
users|zipcode
|
|
users|age
|
|
products|id
|
|
products|name
|
|
products|price
|
|
}
|
|
|
|
do_execsql_test pragma-vtab-reversed-join-order {
|
|
SELECT s.name, ti.name FROM pragma_table_info(s.name) AS ti, sqlite_schema AS s;
|
|
} {users|id
|
|
users|first_name
|
|
users|last_name
|
|
users|email
|
|
users|phone_number
|
|
users|address
|
|
users|city
|
|
users|state
|
|
users|zipcode
|
|
users|age
|
|
products|id
|
|
products|name
|
|
products|price
|
|
}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-max-page-count-default {
|
|
PRAGMA max_page_count
|
|
} {4294967294}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-max-page-count-set-large {
|
|
PRAGMA max_page_count = 1000;
|
|
PRAGMA max_page_count
|
|
} {1000
|
|
1000}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-max-page-count-set-zero-ignored {
|
|
PRAGMA max_page_count = 0;
|
|
PRAGMA max_page_count
|
|
} {4294967294
|
|
4294967294
|
|
}
|
|
|
|
do_execsql_test_on_specific_db ":memory:" pragma-max-page-count-clamping-with-data {
|
|
CREATE TABLE test (id INTEGER);
|
|
PRAGMA page_count;
|
|
PRAGMA max_page_count = 1;
|
|
} {2
|
|
2}
|
|
|
|
do_execsql_test_in_memory_any_error pragma-max-page-count-enforcement-error {
|
|
PRAGMA max_page_count = 1;
|
|
CREATE TABLE test (id INTEGER)
|
|
}
|
|
|
|
do_execsql_test_regex pragma-module-list-nonempty {
|
|
SELECT * FROM pragma_module_list;
|
|
} {\ngenerate_series\n|^generate_series\n|\ngenerate_series$|^generate_series$}
|