Skip to content

Statement Support

tonic matches statements to action classes before execution. Unsupported actions are rejected before a session opens.

ActionPostgresSnowflakeSQLiteMySQLDuckDB
selectyesyesyesyesyes
insertyesyesyesyesyes
updateyesyesyesyesyes
deleteyesyesyesyesyes
mergeyesyesnonoyes
replacenonoyesyesno
createyesyesyesyesyes
copynoyesnonono
alteryesyesyesyesyes
dropyesyesyesyesyes
truncateyesyesnoyesyes
attachnonoyesnoyes
detachnonoyesnoyes
showyesyesnoyesyes
describenoyesnoyesyes
explainyesyesyesyesyes
valuesyesyesyesyesyes
callyesyesnoyesyes
transactionyesyesyesyesyes

Backend support means tonic authorizes and forwards that class of statement. The database can still return native syntax or version errors for unsupported server details.

RETURNING does not turn a write into select.

insert into users (email) values ('a@example.com') returning id;

This is kind=query and action=insert.

WITH is inspected for nested data-modifying statements.

with deleted as (delete from jobs where done returning id)
select count(*) from deleted;

This requires both delete and select.

EXPLAIN requires the explain action plus the inner statement action when recognized.

CREATE ... AS SELECT, CREATE ... AS WITH, and CREATE ... AS VALUES require create plus the recognized read action.

Snowflake COPY INTO ... is kind=command and action=copy.

These map to action=transaction:

  • begin
  • start transaction
  • commit
  • rollback
  • rollback to ...
  • savepoint ...
  • release savepoint ...