Simulator coverage of Turso
This document describes how much of the Turso capabilities
simulator covers and tests.
Statement
Status
Comment
ALTER TABLE
Partial
TODO
ANALYZE
No
ATTACH DATABASE
No
BEGIN TRANSACTION
Partial
TODO
COMMIT TRANSACTION
Partial
TODO
CREATE INDEX
Partial
TODO
CREATE TABLE
Partial
TODO
CREATE TABLE ... STRICT
No
CREATE TRIGGER
No
CREATE VIEW
No
CREATE VIRTUAL TABLE
No
DELETE
Partial
TODO
DETACH DATABASE
No
DROP INDEX
Partial
TODO
DROP TABLE
Partial
TODO
DROP TRIGGER
No
DROP VIEW
No
END TRANSACTION
Partial
TODO
EXPLAIN
Partial
INDEXED BY
No
INSERT
Partial
TODO
ON CONFLICT clause
No
REINDEX
No
RELEASE SAVEPOINT
No
REPLACE
No
RETURNING clause
No
TODO
ROLLBACK TRANSACTION
Partial
TODO
SAVEPOINT
No
SELECT
Partial
TODO
SELECT ... WHERE
Partial
TODO
SELECT ... WHERE ... LIKE
No
SELECT ... LIMIT
Partial
TODO
SELECT ... ORDER BY
Partial
TODO
SELECT ... GROUP BY
No
SELECT ... HAVING
No
SELECT ... JOIN
Partial
TODO
SELECT ... CROSS JOIN
No
SQLite CROSS JOIN means "do not reorder joins". We don't support that yet anyway.
SELECT ... INNER JOIN
Partial
TODO
SELECT ... OUTER JOIN
No
SELECT ... JOIN USING
No
SELECT ... NATURAL JOIN
No
UPDATE
Partial
VACUUM
No
WITH clause
No
WINDOW functions
No
Statement
Status
Comment
PRAGMA analysis_limit
No
PRAGMA application_id
No
PRAGMA auto_vacuum
Yes
PRAGMA automatic_index
No
PRAGMA busy_timeout
No
PRAGMA busy_timeout
No
PRAGMA cache_size
No
PRAGMA cache_spill
No
PRAGMA case_sensitive_like
Not Needed
deprecated in SQLite
PRAGMA cell_size_check
No
PRAGMA checkpoint_fullsync
No
PRAGMA collation_list
No
PRAGMA compile_options
No
PRAGMA count_changes
Not Needed
deprecated in SQLite
PRAGMA data_store_directory
Not Needed
deprecated in SQLite
PRAGMA data_version
No
PRAGMA database_list
No
PRAGMA default_cache_size
Not Needed
deprecated in SQLite
PRAGMA defer_foreign_keys
No
PRAGMA empty_result_callbacks
Not Needed
deprecated in SQLite
PRAGMA encoding
No
PRAGMA foreign_key_check
No
PRAGMA foreign_key_list
No
PRAGMA foreign_keys
No
PRAGMA freelist_count
No
PRAGMA full_column_names
Not Needed
deprecated in SQLite
PRAGMA fullsync
No
PRAGMA function_list
No
PRAGMA hard_heap_limit
No
PRAGMA ignore_check_constraints
No
PRAGMA incremental_vacuum
No
PRAGMA index_info
No
PRAGMA index_list
No
PRAGMA index_xinfo
No
PRAGMA integrity_check
No
PRAGMA journal_mode
No
PRAGMA journal_size_limit
No
PRAGMA legacy_alter_table
No
PRAGMA legacy_file_format
No
PRAGMA locking_mode
No
PRAGMA max_page_count
No
PRAGMA mmap_size
No
PRAGMA module_list
No
PRAGMA optimize
No
PRAGMA page_count
No
PRAGMA page_size
No
PRAGMA parser_trace
No
PRAGMA pragma_list
No
PRAGMA query_only
No
PRAGMA quick_check
No
PRAGMA read_uncommitted
No
PRAGMA recursive_triggers
No
PRAGMA reverse_unordered_selects
No
PRAGMA schema_version
No
For writes, emulate defensive mode (always noop)
PRAGMA secure_delete
No
PRAGMA short_column_names
Not Needed
deprecated in SQLite
PRAGMA shrink_memory
No
PRAGMA soft_heap_limit
No
PRAGMA stats
No
Used for testing in SQLite
PRAGMA synchronous
No
PRAGMA table_info
No
PRAGMA table_list
No
PRAGMA table_xinfo
No
PRAGMA temp_store
No
PRAGMA temp_store_directory
Not Needed
deprecated in SQLite
PRAGMA threads
No
PRAGMA trusted_schema
No
PRAGMA user_version
No
PRAGMA vdbe_addoptrace
No
PRAGMA vdbe_debug
No
PRAGMA vdbe_listing
No
PRAGMA vdbe_trace
No
PRAGMA wal_autocheckpoint
No
PRAGMA wal_checkpoint
No
PRAGMA writable_schema
No
Feature support of sqlite expr syntax .
Syntax
Status
Comment
literals
Yes
schema.table.column
No
unary operator
Yes
binary operator
Partial
TODO
agg() FILTER (WHERE ...)
No
... OVER (...)
No
(expr)
Yes
CAST (expr AS type)
No
COLLATE
No
(NOT) LIKE
Yes
(NOT) GLOB
No
(NOT) REGEXP
No
(NOT) MATCH
No
IS (NOT)
No
IS (NOT) DISTINCT FROM
No
(NOT) BETWEEN ... AND ...
No
(NOT) IN (SELECT...)
No
(NOT) EXISTS (SELECT...)
No
x (SELECT...))
No
CASE WHEN THEN ELSE END
No
RAISE
No
Function
Status
Comment
abs(X)
No
changes()
No
char(X1,X2,...,XN)
No
coalesce(X,Y,...)
No
concat(X,...)
No
concat_ws(SEP,X,...)
No
format(FORMAT,...)
No
glob(X,Y)
No
hex(X)
No
ifnull(X,Y)
No
iif(X,Y,Z)
No
instr(X,Y)
No
last_insert_rowid()
No
length(X)
No
like(X,Y)
No
like(X,Y,Z)
No
likelihood(X,Y)
No
likely(X)
No
load_extension(X)
No
load_extension(X,Y)
No
lower(X)
No
ltrim(X)
No
ltrim(X,Y)
No
max(X,Y,...)
No
min(X,Y,...)
No
nullif(X,Y)
No
octet_length(X)
No
printf(FORMAT,...)
No
quote(X)
No
random()
No
randomblob(N)
No
replace(X,Y,Z)
No
round(X)
No
round(X,Y)
No
rtrim(X)
No
rtrim(X,Y)
No
sign(X)
No
soundex(X)
No
sqlite_compileoption_get(N)
No
sqlite_compileoption_used(X)
No
sqlite_offset(X)
No
sqlite_source_id()
No
sqlite_version()
No
substr(X,Y,Z)
No
substr(X,Y)
No
substring(X,Y,Z)
No
substring(X,Y)
No
total_changes()
No
trim(X)
No
trim(X,Y)
No
typeof(X)
No
unhex(X)
No
unhex(X,Y)
No
unicode(X)
No
unlikely(X)
No
upper(X)
No
zeroblob(N)
No
Function
Status
Comment
acos(X)
No
acosh(X)
No
asin(X)
No
asinh(X)
No
atan(X)
No
atan2(Y,X)
No
atanh(X)
No
ceil(X)
No
ceiling(X)
No
cos(X)
No
cosh(X)
No
degrees(X)
No
exp(X)
No
floor(X)
No
ln(X)
No
log(B,X)
No
log(X)
No
log10(X)
No
log2(X)
No
mod(X,Y)
No
pi()
No
pow(X,Y)
No
power(X,Y)
No
radians(X)
No
sin(X)
No
sinh(X)
No
sqrt(X)
No
tan(X)
No
tanh(X)
No
trunc(X)
No
Function
Status
Comment
avg(X)
No
count()
No
count(*)
No
group_concat(X)
No
group_concat(X,Y)
No
string_agg(X,Y)
No
max(X)
No
min(X)
No
sum(X)
No
total(X)
No
Function
Status
Comment
date()
No
time()
No
datetime()
No
julianday()
No
unixepoch()
No
strftime()
No
timediff()
No
Modifiers:
Modifier
Status
Comment
Days
Yes
Hours
Yes
Minutes
Yes
Seconds
Yes
Months
Yes
Years
Yes
TimeOffset
Yes
DateOffset
Yes
DateTimeOffset
Yes
Ceiling
Yes
Floor
No
StartOfMonth
Yes
StartOfYear
Yes
StartOfDay
Yes
Weekday(N)
Yes
Auto
No
UnixEpoch
No
JulianDay
No
Localtime
Partial
requires fixes to avoid double conversions.
Utc
Partial
requires fixes to avoid double conversions.
Subsec
Yes
Function
Status
Comment
json(json)
No
jsonb(json)
No
json_array(value1,value2,...)
No
jsonb_array(value1,value2,...)
No
json_array_length(json)
No
json_array_length(json,path)
No
json_error_position(json)
No
json_extract(json,path,...)
No
jsonb_extract(json,path,...)
No
json -> path
No
json ->> path
No
json_insert(json,path,value,...)
No
jsonb_insert(json,path,value,...)
No
json_object(label1,value1,...)
No
jsonb_object(label1,value1,...)
No
json_patch(json1,json2)
No
jsonb_patch(json1,json2)
No
json_pretty(json)
No
json_remove(json,path,...)
No
jsonb_remove(json,path,...)
No
json_replace(json,path,value,...)
No
jsonb_replace(json,path,value,...)
No
json_set(json,path,value,...)
No
jsonb_set(json,path,value,...)
No
json_type(json)
No
json_type(json,path)
No
json_valid(json)
No
json_valid(json,flags)
No
json_quote(value)
No
json_group_array(value)
No
jsonb_group_array(value)
No
json_group_object(label,value)
No
jsonb_group_object(name,value)
No
json_each(json)
No
json_each(json,path)
No
json_tree(json)
No
json_tree(json,path)
No
We currently don't have plan to support the rollback journal mode as it locks the database file during writes.
Therefore, all rollback-type modes (delete, truncate, persist, memory) are marked are Not Needed below.
Journal mode
Status
Comment
wal
No
wal2
No
experimental feature in sqlite
delete
No
truncate
No
persist
No
memory
No
We currently do not support testing any Turso extensions.
UUID's in Turso are blobs by default.
Function
Status
Comment
uuid4()
No
uuid4_str()
No
uuid7(X?)
No
uuid7_timestamp_ms(X)
No
uuid_str(X)
No
uuid_blob(X)
No
The regexp extension is compatible with sqlean-regexp .
Function
Status
Comment
regexp(pattern, source)
No
regexp_like(source, pattern)
No
regexp_substr(source, pattern)
No
regexp_capture(source, pattern[, n])
No
regexp_replace(source, pattern, replacement)
No
The vector extension is compatible with libSQL native vector search.
Function
Status
Comment
vector(x)
No
vector32(x)
No
vector64(x)
No
vector_extract(x)
No
vector_distance_cos(x, y)
No
vector_distance_l2(x, y)
No
vector_concat(x, y)
No
vector_slice(x, start_index, end_index)
No
Function
Status
Comment
time_now()
No
time_date(year, month, day[, hour, min, sec[, nsec[, offset_sec]]])
No
time_get_year(t)
No
time_get_month(t)
No
time_get_day(t)
No
time_get_hour(t)
No
time_get_minute(t)
No
time_get_second(t)
No
time_get_nano(t)
No
time_get_weekday(t)
No
time_get_yearday(t)
No
time_get_isoyear(t)
No
time_get_isoweek(t)
No
time_get(t, field)
No
time_unix(sec[, nsec])
No
time_milli(msec)
No
time_micro(usec)
No
time_nano(nsec)
No
time_to_unix(t)
No
time_to_milli(t)
No
time_to_micro(t)
No
time_to_nano(t)
No
time_after(t, u)
No
time_before(t, u)
No
time_compare(t, u)
No
time_equal(t, u)
No
time_add(t, d)
No
time_add_date(t, years[, months[, days]])
No
time_sub(t, u)
No
time_since(t)
No
time_until(t)
No
time_trunc(t, field)
No
time_trunc(t, d)
No
time_round(t, d)
No
time_fmt_iso(t[, offset_sec])
No
time_fmt_datetime(t[, offset_sec])
No
time_fmt_date(t[, offset_sec])
No
time_fmt_time(t[, offset_sec])
No
time_parse(s)
No
dur_ns()
No
dur_us()
No
dur_ms()
No
dur_s()
No
dur_m()
No
dur_h()
No