Enum Statement
pub enum Statement {
Show 116 variants
Analyze {
table_name: ObjectName,
partitions: Option<Vec<Expr>>,
for_columns: bool,
columns: Vec<Ident>,
cache_metadata: bool,
noscan: bool,
compute_statistics: bool,
has_table_keyword: bool,
},
Set(Set),
Truncate {
table_names: Vec<TruncateTableTarget>,
partitions: Option<Vec<Expr>>,
table: bool,
identity: Option<TruncateIdentityOption>,
cascade: Option<CascadeOption>,
on_cluster: Option<Ident>,
},
Msck {
table_name: ObjectName,
repair: bool,
partition_action: Option<AddDropSync>,
},
Query(Box<Query>),
Insert(Insert),
Install {
extension_name: Ident,
},
Load {
extension_name: Ident,
},
Directory {
overwrite: bool,
local: bool,
path: String,
file_format: Option<FileFormat>,
source: Box<Query>,
},
Case(CaseStatement),
If(IfStatement),
While(WhileStatement),
Raise(RaiseStatement),
Call(Function),
Copy {
source: CopySource,
to: bool,
target: CopyTarget,
options: Vec<CopyOption>,
legacy_options: Vec<CopyLegacyOption>,
values: Vec<Option<String>>,
},
CopyIntoSnowflake {Show 14 fields
kind: CopyIntoSnowflakeKind,
into: ObjectName,
into_columns: Option<Vec<Ident>>,
from_obj: Option<ObjectName>,
from_obj_alias: Option<Ident>,
stage_params: StageParamsObject,
from_transformations: Option<Vec<StageLoadSelectItemKind>>,
from_query: Option<Box<Query>>,
files: Option<Vec<String>>,
pattern: Option<String>,
file_format: KeyValueOptions,
copy_options: KeyValueOptions,
validation_mode: Option<String>,
partition: Option<Box<Expr>>,
},
Open(OpenStatement),
Close {
cursor: CloseCursor,
},
Update {
table: TableWithJoins,
assignments: Vec<Assignment>,
from: Option<UpdateTableFromKind>,
selection: Option<Expr>,
returning: Option<Vec<SelectItem>>,
or: Option<SqliteOnConflict>,
limit: Option<Expr>,
},
Delete(Delete),
CreateView {Show 16 fields
or_alter: bool,
or_replace: bool,
materialized: bool,
secure: bool,
name: ObjectName,
name_before_not_exists: bool,
columns: Vec<ViewColumnDef>,
query: Box<Query>,
options: CreateTableOptions,
cluster_by: Vec<Ident>,
comment: Option<String>,
with_no_schema_binding: bool,
if_not_exists: bool,
temporary: bool,
to: Option<ObjectName>,
params: Option<CreateViewParams>,
},
CreateTable(CreateTable),
CreateVirtualTable {
name: ObjectName,
if_not_exists: bool,
module_name: Ident,
module_args: Vec<Ident>,
},
CreateIndex(CreateIndex),
CreateRole {Show 18 fields
names: Vec<ObjectName>,
if_not_exists: bool,
login: Option<bool>,
inherit: Option<bool>,
bypassrls: Option<bool>,
password: Option<Password>,
superuser: Option<bool>,
create_db: Option<bool>,
create_role: Option<bool>,
replication: Option<bool>,
connection_limit: Option<Expr>,
valid_until: Option<Expr>,
in_role: Vec<Ident>,
in_group: Vec<Ident>,
role: Vec<Ident>,
user: Vec<Ident>,
admin: Vec<Ident>,
authorization_owner: Option<ObjectName>,
},
CreateSecret {
or_replace: bool,
temporary: Option<bool>,
if_not_exists: bool,
name: Option<Ident>,
storage_specifier: Option<Ident>,
secret_type: Ident,
options: Vec<SecretOption>,
},
CreateServer(CreateServerStatement),
CreatePolicy {
name: Ident,
table_name: ObjectName,
policy_type: Option<CreatePolicyType>,
command: Option<CreatePolicyCommand>,
to: Option<Vec<Owner>>,
using: Option<Expr>,
with_check: Option<Expr>,
},
CreateConnector(CreateConnector),
AlterTable {
name: ObjectName,
if_exists: bool,
only: bool,
operations: Vec<AlterTableOperation>,
location: Option<HiveSetLocation>,
on_cluster: Option<Ident>,
iceberg: bool,
end_token: AttachedToken,
},
AlterSchema(AlterSchema),
AlterIndex {
name: ObjectName,
operation: AlterIndexOperation,
},
AlterView {
name: ObjectName,
columns: Vec<Ident>,
query: Box<Query>,
with_options: Vec<SqlOption>,
},
AlterType(AlterType),
AlterRole {
name: Ident,
operation: AlterRoleOperation,
},
AlterPolicy {
name: Ident,
table_name: ObjectName,
operation: AlterPolicyOperation,
},
AlterConnector {
name: Ident,
properties: Option<Vec<SqlOption>>,
url: Option<String>,
owner: Option<AlterConnectorOwner>,
},
AlterSession {
set: bool,
session_params: KeyValueOptions,
},
AttachDatabase {
schema_name: Ident,
database_file_name: Expr,
database: bool,
},
AttachDuckDBDatabase {
if_not_exists: bool,
database: bool,
database_path: Ident,
database_alias: Option<Ident>,
attach_options: Vec<AttachDuckDBDatabaseOption>,
},
DetachDuckDBDatabase {
if_exists: bool,
database: bool,
database_alias: Ident,
},
Drop {
object_type: ObjectType,
if_exists: bool,
names: Vec<ObjectName>,
cascade: bool,
restrict: bool,
purge: bool,
temporary: bool,
table: Option<ObjectName>,
},
DropFunction {
if_exists: bool,
func_desc: Vec<FunctionDesc>,
drop_behavior: Option<DropBehavior>,
},
DropDomain(DropDomain),
DropProcedure {
if_exists: bool,
proc_desc: Vec<FunctionDesc>,
drop_behavior: Option<DropBehavior>,
},
DropSecret {
if_exists: bool,
temporary: Option<bool>,
name: Ident,
storage_specifier: Option<Ident>,
},
DropPolicy {
if_exists: bool,
name: Ident,
table_name: ObjectName,
drop_behavior: Option<DropBehavior>,
},
DropConnector {
if_exists: bool,
name: Ident,
},
Declare {
stmts: Vec<Declare>,
},
CreateExtension {
name: Ident,
if_not_exists: bool,
cascade: bool,
schema: Option<Ident>,
version: Option<Ident>,
},
DropExtension {
names: Vec<Ident>,
if_exists: bool,
cascade_or_restrict: Option<ReferentialAction>,
},
Fetch {
name: Ident,
direction: FetchDirection,
position: FetchPosition,
into: Option<ObjectName>,
},
Flush {
object_type: FlushType,
location: Option<FlushLocation>,
channel: Option<String>,
read_lock: bool,
export: bool,
tables: Vec<ObjectName>,
},
Discard {
object_type: DiscardObject,
},
ShowFunctions {
filter: Option<ShowStatementFilter>,
},
ShowVariable {
variable: Vec<Ident>,
},
ShowStatus {
filter: Option<ShowStatementFilter>,
global: bool,
session: bool,
},
ShowVariables {
filter: Option<ShowStatementFilter>,
global: bool,
session: bool,
},
ShowCreate {
obj_type: ShowCreateObject,
obj_name: ObjectName,
},
ShowColumns {
extended: bool,
full: bool,
show_options: ShowStatementOptions,
},
ShowDatabases {
terse: bool,
history: bool,
show_options: ShowStatementOptions,
},
ShowSchemas {
terse: bool,
history: bool,
show_options: ShowStatementOptions,
},
ShowCharset(ShowCharset),
ShowObjects(ShowObjects),
ShowTables {
terse: bool,
history: bool,
extended: bool,
full: bool,
external: bool,
show_options: ShowStatementOptions,
},
ShowViews {
terse: bool,
materialized: bool,
show_options: ShowStatementOptions,
},
ShowCollation {
filter: Option<ShowStatementFilter>,
},
Use(Use),
StartTransaction {
modes: Vec<TransactionMode>,
begin: bool,
transaction: Option<BeginTransactionKind>,
modifier: Option<TransactionModifier>,
statements: Vec<Statement>,
exception: Option<Vec<ExceptionWhen>>,
has_end_keyword: bool,
},
Comment {
object_type: CommentObject,
object_name: ObjectName,
comment: Option<String>,
if_exists: bool,
},
Commit {
chain: bool,
end: bool,
modifier: Option<TransactionModifier>,
},
Rollback {
chain: bool,
savepoint: Option<Ident>,
},
CreateSchema {
schema_name: SchemaName,
if_not_exists: bool,
with: Option<Vec<SqlOption>>,
options: Option<Vec<SqlOption>>,
default_collate_spec: Option<Expr>,
clone: Option<ObjectName>,
},
CreateDatabase {Show 20 fields
db_name: ObjectName,
if_not_exists: bool,
location: Option<String>,
managed_location: Option<String>,
or_replace: bool,
transient: bool,
clone: Option<ObjectName>,
data_retention_time_in_days: Option<u64>,
max_data_extension_time_in_days: Option<u64>,
external_volume: Option<String>,
catalog: Option<String>,
replace_invalid_characters: Option<bool>,
default_ddl_collation: Option<String>,
storage_serialization_policy: Option<StorageSerializationPolicy>,
comment: Option<String>,
catalog_sync: Option<String>,
catalog_sync_namespace_mode: Option<CatalogSyncNamespaceMode>,
catalog_sync_namespace_flatten_delimiter: Option<String>,
with_tags: Option<Vec<Tag>>,
with_contacts: Option<Vec<ContactEntry>>,
},
CreateFunction(CreateFunction),
CreateTrigger(CreateTrigger),
DropTrigger(DropTrigger),
CreateProcedure {
or_alter: bool,
name: ObjectName,
params: Option<Vec<ProcedureParam>>,
language: Option<Ident>,
body: ConditionalStatements,
},
CreateMacro {
or_replace: bool,
temporary: bool,
name: ObjectName,
args: Option<Vec<MacroArg>>,
definition: MacroDefinition,
},
CreateStage {
or_replace: bool,
temporary: bool,
if_not_exists: bool,
name: ObjectName,
stage_params: StageParamsObject,
directory_table_params: KeyValueOptions,
file_format: KeyValueOptions,
copy_options: KeyValueOptions,
comment: Option<String>,
},
Assert {
condition: Expr,
message: Option<Expr>,
},
Grant {
privileges: Privileges,
objects: Option<GrantObjects>,
grantees: Vec<Grantee>,
with_grant_option: bool,
as_grantor: Option<Ident>,
granted_by: Option<Ident>,
current_grants: Option<CurrentGrantsKind>,
},
Deny(DenyStatement),
Revoke {
privileges: Privileges,
objects: Option<GrantObjects>,
grantees: Vec<Grantee>,
granted_by: Option<Ident>,
cascade: Option<CascadeOption>,
},
Deallocate {
name: Ident,
prepare: bool,
},
Execute {
name: Option<ObjectName>,
parameters: Vec<Expr>,
has_parentheses: bool,
immediate: bool,
into: Vec<Ident>,
using: Vec<ExprWithAlias>,
output: bool,
default: bool,
},
Prepare {
name: Ident,
data_types: Vec<DataType>,
statement: Box<Statement>,
},
Kill {
modifier: Option<KillType>,
id: u64,
},
ExplainTable {
describe_alias: DescribeAlias,
hive_format: Option<HiveDescribeFormat>,
has_table_keyword: bool,
table_name: ObjectName,
},
Explain {
describe_alias: DescribeAlias,
analyze: bool,
verbose: bool,
query_plan: bool,
estimate: bool,
statement: Box<Statement>,
format: Option<AnalyzeFormatKind>,
options: Option<Vec<UtilityOption>>,
},
Savepoint {
name: Ident,
},
ReleaseSavepoint {
name: Ident,
},
Merge {
into: bool,
table: TableFactor,
source: TableFactor,
on: Box<Expr>,
clauses: Vec<MergeClause>,
output: Option<OutputClause>,
},
Cache {
table_flag: Option<ObjectName>,
table_name: ObjectName,
has_as: bool,
options: Vec<SqlOption>,
query: Option<Box<Query>>,
},
UNCache {
table_name: ObjectName,
if_exists: bool,
},
CreateSequence {
temporary: bool,
if_not_exists: bool,
name: ObjectName,
data_type: Option<DataType>,
sequence_options: Vec<SequenceOptions>,
owned_by: Option<ObjectName>,
},
CreateDomain(CreateDomain),
CreateType {
name: ObjectName,
representation: UserDefinedTypeRepresentation,
},
Pragma {
name: ObjectName,
value: Option<Value>,
is_eq: bool,
},
LockTables {
tables: Vec<LockTable>,
},
UnlockTables,
Unload {
query: Option<Box<Query>>,
query_text: Option<String>,
to: Ident,
auth: Option<IamRoleKind>,
with: Vec<SqlOption>,
options: Vec<CopyLegacyOption>,
},
OptimizeTable {
name: ObjectName,
on_cluster: Option<Ident>,
partition: Option<Partition>,
include_final: bool,
deduplicate: Option<Deduplicate>,
},
LISTEN {
channel: Ident,
},
UNLISTEN {
channel: Ident,
},
NOTIFY {
channel: Ident,
payload: Option<String>,
},
LoadData {
local: bool,
inpath: String,
overwrite: bool,
table_name: ObjectName,
partitioned: Option<Vec<Expr>>,
table_format: Option<HiveLoadDataFormat>,
},
RenameTable(Vec<RenameTable>),
List(FileStagingCommand),
Remove(FileStagingCommand),
RaisError {
message: Box<Expr>,
severity: Box<Expr>,
state: Box<Expr>,
arguments: Vec<Expr>,
options: Vec<RaisErrorOption>,
},
Print(PrintStatement),
Return(ReturnStatement),
ExportData(ExportData),
CreateUser(CreateUser),
Vacuum(VacuumStatement),
}Expand description
A top-level statement (SELECT, INSERT, CREATE, etc.)
Variants§
Analyze
ANALYZEAnalyze (Hive)
Fields
table_name: ObjectNameSet(Set)
Truncate
TRUNCATETruncate (Hive)
Fields
table_names: Vec<TruncateTableTarget>identity: Option<TruncateIdentityOption>Postgres-specific option [ RESTART IDENTITY | CONTINUE IDENTITY ]
cascade: Option<CascadeOption>Postgres-specific option [ CASCADE | RESTRICT ]
Msck
MSCKMsck (Hive)
Query(Box<Query>)
SELECTInsert(Insert)
INSERTInstall
INSTALLLoad
LOADDirectory
Case(CaseStatement)
A CASE statement.
If(IfStatement)
An IF statement.
While(WhileStatement)
A WHILE statement.
Raise(RaiseStatement)
A RAISE statement.
Call(Function)
CALL <function>Copy
COPY [TO | FROM] ...Fields
source: CopySourceThe source of ‘COPY TO’, or the target of ‘COPY FROM’
target: CopyTargetThe target of ‘COPY TO’, or the source of ‘COPY FROM’
options: Vec<CopyOption>WITH options (from PostgreSQL version 9.0)
legacy_options: Vec<CopyLegacyOption>WITH options (before PostgreSQL version 9.0)
CopyIntoSnowflake
COPY INTO <table> | <location>See: https://docs.snowflake.com/en/sql-reference/sql/copy-into-table https://docs.snowflake.com/en/sql-reference/sql/copy-into-location
Copy Into syntax available for Snowflake is different than the one implemented in Postgres. Although they share common prefix, it is reasonable to implement them in different enums. This can be refactored later once custom dialects are allowed to have custom Statements.
Fields
kind: CopyIntoSnowflakeKindinto: ObjectNamefrom_obj: Option<ObjectName>stage_params: StageParamsObjectfrom_transformations: Option<Vec<StageLoadSelectItemKind>>file_format: KeyValueOptionscopy_options: KeyValueOptionsOpen(OpenStatement)
OPEN cursor_nameOpens a cursor.
Close
CLOSECloses the portal underlying an open cursor.
Fields
cursor: CloseCursorCursor name
Update
UPDATEFields
table: TableWithJoinsTABLE
assignments: Vec<Assignment>Column assignments
from: Option<UpdateTableFromKind>Table which provide value to be set
returning: Option<Vec<SelectItem>>RETURNING
or: Option<SqliteOnConflict>SQLite-specific conflict resolution clause
Delete(Delete)
DELETECreateView
CREATE VIEWFields
secure: boolSnowflake: SECURE view modifier https://docs.snowflake.com/en/sql-reference/sql/create-view#syntax
name: ObjectNameView name
name_before_not_exists: boolIf if_not_exists is true, this flag is set to true if the view name comes before the IF NOT EXISTS clause.
Example:
CREATE VIEW myview IF NOT EXISTS AS SELECT 1`Otherwise, the flag is set to false if the view name comes after the clause Example:
CREATE VIEW IF NOT EXISTS myview AS SELECT 1`columns: Vec<ViewColumnDef>options: CreateTableOptionscomment: Option<String>Snowflake: Views can have comments in Snowflake. https://docs.snowflake.com/en/sql-reference/sql/create-view#syntax
with_no_schema_binding: boolif true, has RedShift [WITH NO SCHEMA BINDING] clause https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_VIEW.html
if_not_exists: boolif true, has SQLite IF NOT EXISTS clause https://www.sqlite.org/lang_createview.html
temporary: boolif true, has SQLite TEMP or TEMPORARY clause https://www.sqlite.org/lang_createview.html
to: Option<ObjectName>if not None, has Clickhouse TO clause, specify the table into which to insert results
https://clickhouse.com/docs/en/sql-reference/statements/create/view#materialized-view
params: Option<CreateViewParams>MySQL: Optional parameters for the view algorithm, definer, and security context
CreateTable(CreateTable)
CREATE TABLECreateVirtualTable
CREATE VIRTUAL TABLE .. USING <module_name> (<module_args>)`Sqlite specific statement
CreateIndex(CreateIndex)
`CREATE INDEX`CreateRole
CREATE ROLESee PostgreSQL
CreateSecret
CREATE SECRETSee DuckDB
Fields
options: Vec<SecretOption>CreateServer(CreateServerStatement)
A CREATE SERVER statement.
CreatePolicy
CREATE POLICYSee PostgreSQL
Fields
table_name: ObjectNamepolicy_type: Option<CreatePolicyType>command: Option<CreatePolicyCommand>CreateConnector(CreateConnector)
CREATE CONNECTORSee Hive
AlterTable
ALTER TABLEFields
name: ObjectNameTable name
operations: Vec<AlterTableOperation>location: Option<HiveSetLocation>on_cluster: Option<Ident>ClickHouse dialect supports ON CLUSTER clause for ALTER TABLE
For example: ALTER TABLE table_name ON CLUSTER cluster_name ADD COLUMN c UInt32
ClickHouse
iceberg: boolSnowflake “ICEBERG” clause for Iceberg tables https://docs.snowflake.com/en/sql-reference/sql/alter-iceberg-table
end_token: AttachedTokenToken that represents the end of the statement (semicolon or EOF)
AlterSchema(AlterSchema)
ALTER SCHEMASee BigQuery
AlterIndex
ALTER INDEXAlterView
ALTER VIEWFields
name: ObjectNameView name
AlterType(AlterType)
ALTER TYPE
See [PostgreSQL](https://www.postgresql.org/docs/current/sql-altertype.html)AlterRole
ALTER ROLEAlterPolicy
ALTER POLICY <NAME> ON <TABLE NAME> [<OPERATION>](Postgresql-specific)
AlterConnector
ALTER CONNECTOR connector_name SET DCPROPERTIES(property_name=property_value, ...);
or
ALTER CONNECTOR connector_name SET URL new_url;
or
ALTER CONNECTOR connector_name SET OWNER [USER|ROLE] user_or_role;(Hive-specific)
Fields
owner: Option<AlterConnectorOwner>AlterSession
ALTER SESSION SET sessionParam
ALTER SESSION UNSET <param_name> [ , <param_name> , ... ]See https://docs.snowflake.com/en/sql-reference/sql/alter-session
Fields
session_params: KeyValueOptionsThe session parameters to set or unset
AttachDatabase
ATTACH DATABASE 'path/to/file' AS alias(SQLite-specific)
Fields
AttachDuckDBDatabase
(DuckDB-specific)
ATTACH 'sqlite_file.db' AS sqlite_db (READ_ONLY, TYPE SQLITE);Fields
attach_options: Vec<AttachDuckDBDatabaseOption>DetachDuckDBDatabase
Fields
Drop
DROP [TABLE, VIEW, ...]Fields
object_type: ObjectTypeThe type of the object to drop: TABLE, VIEW, etc.
names: Vec<ObjectName>One or more objects to drop. (ANSI SQL requires exactly one.)
cascade: boolWhether CASCADE was specified. This will be false when
RESTRICT or no drop behavior at all was specified.
restrict: boolWhether RESTRICT was specified. This will be false when
CASCADE or no drop behavior at all was specified.
purge: boolHive allows you specify whether the table’s stored data will be deleted along with the dropped table
table: Option<ObjectName>MySQL-specific drop index syntax, which requires table specification See https://dev.mysql.com/doc/refman/8.4/en/drop-index.html
DropFunction
DROP FUNCTIONFields
func_desc: Vec<FunctionDesc>One or more function to drop
drop_behavior: Option<DropBehavior>CASCADE or RESTRICT
DropDomain(DropDomain)
DropProcedure
DROP PROCEDUREFields
proc_desc: Vec<FunctionDesc>One or more function to drop
drop_behavior: Option<DropBehavior>CASCADE or RESTRICT
DropSecret
DROP SECRETDropPolicy
DROP POLICYSee PostgreSQL
DropConnector
DROP CONNECTORSee Hive
Declare
DECLAREDeclare Cursor Variables
Note: this is a PostgreSQL-specific statement, but may also compatible with other SQL.
CreateExtension
CREATE EXTENSION [ IF NOT EXISTS ] extension_name
[ WITH ] [ SCHEMA schema_name ]
[ VERSION version ]
[ CASCADE ]Note: this is a PostgreSQL-specific statement,
DropExtension
DROP EXTENSION [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Note: this is a PostgreSQL-specific statement.
https://www.postgresql.org/docs/current/sql-dropextension.htmlFields
cascade_or_restrict: Option<ReferentialAction>CASCADE or RESTRICT
Fetch
FETCHRetrieve rows from a query using a cursor
Note: this is a PostgreSQL-specific statement, but may also compatible with other SQL.
Fields
direction: FetchDirectionposition: FetchPositioninto: Option<ObjectName>Optional, It’s possible to fetch rows form cursor to the table
Flush
FLUSH [NO_WRITE_TO_BINLOG | LOCAL] flush_option [, flush_option] ... | tables_optionNote: this is a Mysql-specific statement, but may also compatible with other SQL.
Discard
DISCARD [ ALL | PLANS | SEQUENCES | TEMPORARY | TEMP ]Note: this is a PostgreSQL-specific statement, but may also compatible with other SQL.
Fields
object_type: DiscardObjectShowFunctions
SHOW FUNCTIONS
Note: this is a Presto-specific statement.
Fields
filter: Option<ShowStatementFilter>ShowVariable
SHOW <variable>Note: this is a PostgreSQL-specific statement.
ShowStatus
SHOW [GLOBAL | SESSION] STATUS [LIKE 'pattern' | WHERE expr]Note: this is a MySQL-specific statement.
ShowVariables
SHOW VARIABLESNote: this is a MySQL-specific statement.
ShowCreate
SHOW CREATE TABLENote: this is a MySQL-specific statement.
ShowColumns
SHOW COLUMNSShowDatabases
SHOW DATABASESShowSchemas
SHOW SCHEMASShowCharset(ShowCharset)
ShowObjects(ShowObjects)
SHOW OBJECTS LIKE 'line%' IN mydb.publicSnowflake-specific statement https://docs.snowflake.com/en/sql-reference/sql/show-objects
ShowTables
SHOW TABLESFields
show_options: ShowStatementOptionsShowViews
SHOW VIEWSShowCollation
SHOW COLLATIONNote: this is a MySQL-specific statement.
Fields
filter: Option<ShowStatementFilter>Use(Use)
`USE ...`StartTransaction
START [ TRANSACTION | WORK ] | START TRANSACTION } ...If begin is false.
`BEGIN [ TRANSACTION | WORK ] | START TRANSACTION } ...`If begin is true
Fields
modes: Vec<TransactionMode>transaction: Option<BeginTransactionKind>modifier: Option<TransactionModifier>statements: Vec<Statement>List of statements belonging to the BEGIN block.
Example:
BEGIN
SELECT 1;
SELECT 2;
END;exception: Option<Vec<ExceptionWhen>>Exception handling with exception clauses. Example:
EXCEPTION
WHEN EXCEPTION_1 THEN
SELECT 2;
WHEN EXCEPTION_2 OR EXCEPTION_3 THEN
SELECT 3;
WHEN OTHER THEN
SELECT 4;https://cloud.google.com/bigquery/docs/reference/standard-sql/procedural-language#beginexceptionend https://docs.snowflake.com/en/sql-reference/snowflake-scripting/exception
Comment
COMMENT ON ...Note: this is a PostgreSQL-specific statement.
Fields
object_type: CommentObjectobject_name: ObjectNameif_exists: boolAn optional IF EXISTS clause. (Non-standard.)
See https://docs.snowflake.com/en/sql-reference/sql/comment
Commit
COMMIT [ TRANSACTION | WORK ] [ AND [ NO ] CHAIN ]If end is false
END [ TRY | CATCH ]If end is true
Rollback
ROLLBACK [ TRANSACTION | WORK ] [ AND [ NO ] CHAIN ] [ TO [ SAVEPOINT ] savepoint_name ]CreateSchema
CREATE SCHEMAFields
schema_name: SchemaName<schema name> | AUTHORIZATION <schema authorization identifier> | <schema name> AUTHORIZATION <schema authorization identifier>
default_collate_spec: Option<Expr>Default collation specification for the schema.
CREATE SCHEMA myschema DEFAULT COLLATE 'und:ci';clone: Option<ObjectName>CreateDatabase
CREATE DATABASESee: https://docs.snowflake.com/en/sql-reference/sql/create-database
Fields
db_name: ObjectNameclone: Option<ObjectName>storage_serialization_policy: Option<StorageSerializationPolicy>catalog_sync_namespace_mode: Option<CatalogSyncNamespaceMode>with_contacts: Option<Vec<ContactEntry>>CreateFunction(CreateFunction)
CreateTrigger(CreateTrigger)
CREATE TRIGGER statement. See struct CreateTrigger for details.
DropTrigger(DropTrigger)
DROP TRIGGER statement. See struct DropTrigger for details.
CreateProcedure
CREATE PROCEDURECreateMacro
CreateStage
CREATE STAGESee https://docs.snowflake.com/en/sql-reference/sql/create-stage
Fields
name: ObjectNamestage_params: StageParamsObjectdirectory_table_params: KeyValueOptionsfile_format: KeyValueOptionscopy_options: KeyValueOptionsAssert
ASSERT <condition> [AS <message>]Grant
GRANT privileges ON objects TO granteesFields
privileges: Privilegesobjects: Option<GrantObjects>current_grants: Option<CurrentGrantsKind>Deny(DenyStatement)
DENY privileges ON object TO granteesRevoke
REVOKE privileges ON objects FROM granteesDeallocate
DEALLOCATE [ PREPARE ] { name | ALL }Note: this is a PostgreSQL-specific statement.
Execute
An `EXECUTE` statementPostgres: https://www.postgresql.org/docs/current/sql-execute.html MSSQL: https://learn.microsoft.com/en-us/sql/relational-databases/stored-procedures/execute-a-stored-procedure BigQuery: https://cloud.google.com/bigquery/docs/reference/standard-sql/procedural-language#execute_immediate Snowflake: https://docs.snowflake.com/en/sql-reference/sql/execute-immediate
Fields
name: Option<ObjectName>using: Vec<ExprWithAlias>output: boolWhether the last parameter is the return value of the procedure MSSQL: https://learn.microsoft.com/en-us/sql/t-sql/language-elements/execute-transact-sql?view=sql-server-ver17#output
default: boolWhether to invoke the procedure with the default parameter values MSSQL: https://learn.microsoft.com/en-us/sql/t-sql/language-elements/execute-transact-sql?view=sql-server-ver17#default
Prepare
PREPARE name [ ( data_type [, ...] ) ] AS statementNote: this is a PostgreSQL-specific statement.
Kill
KILL [CONNECTION | QUERY | MUTATION]See https://clickhouse.com/docs/en/sql-reference/statements/kill/ See https://dev.mysql.com/doc/refman/8.0/en/kill.html
ExplainTable
[EXPLAIN | DESC | DESCRIBE] TABLENote: this is a MySQL-specific statement. See https://dev.mysql.com/doc/refman/8.0/en/explain.html
Fields
describe_alias: DescribeAliasEXPLAIN | DESC | DESCRIBE
hive_format: Option<HiveDescribeFormat>Hive style FORMATTED | EXTENDED
table_name: ObjectNameTable name
Explain
[EXPLAIN | DESC | DESCRIBE] <statement>Fields
describe_alias: DescribeAliasEXPLAIN | DESC | DESCRIBE
estimate: boolEXPLAIN ESTIMATE
Clickhouse
format: Option<AnalyzeFormatKind>Optional output format of explain
options: Option<Vec<UtilityOption>>Postgres style utility options, (analyze, verbose true)
Savepoint
SAVEPOINTDefine a new savepoint within the current transaction
ReleaseSavepoint
RELEASE [ SAVEPOINT ] savepoint_nameMerge
A MERGE statement.
MERGE INTO <target_table> USING <source> ON <join_expr> { matchedClause | notMatchedClause } [ ... ]Fields
table: TableFactorSpecifies the table to merge
source: TableFactorSpecifies the table or subquery to join with the target table
clauses: Vec<MergeClause>Specifies the actions to perform when values match or do not match.
output: Option<OutputClause>Cache
CACHE [ FLAG ] TABLE <table_name> [ OPTIONS('K1' = 'V1', 'K2' = V2) ] [ AS ] [ <query> ]See Spark SQL docs for more details.
UNCache
UNCACHE TABLE [ IF EXISTS ] <table_name>CreateSequence
CREATE [ { TEMPORARY | TEMP } ] SEQUENCE [ IF NOT EXISTS ] <sequence_name>Define a new sequence:
CreateDomain(CreateDomain)
A CREATE DOMAIN statement.
CreateType
CREATE TYPE <name>Pragma
PRAGMA <schema-name>.<pragma-name> = <pragma-value>LockTables
LOCK TABLES <table_name> [READ [LOCAL] | [LOW_PRIORITY] WRITE]Note: this is a MySQL-specific statement. See https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html
UnlockTables
UNLOCK TABLESNote: this is a MySQL-specific statement. See https://dev.mysql.com/doc/refman/8.0/en/lock-tables.html
Unload
Unloads the result of a query to file
UNLOAD(statement) TO <destination> [ WITH options ]UNLOAD('statement') TO <destination> [ OPTIONS ]OptimizeTable
OPTIMIZE TABLE [db.]name [ON CLUSTER cluster] [PARTITION partition | PARTITION ID 'partition_id'] [FINAL] [DEDUPLICATE [BY expression]]See ClickHouse https://clickhouse.com/docs/en/sql-reference/statements/optimize
LISTEN
LISTENlisten for a notification channel
See Postgres https://www.postgresql.org/docs/current/sql-listen.html
UNLISTEN
UNLISTENstop listening for a notification
See Postgres https://www.postgresql.org/docs/current/sql-unlisten.html
NOTIFY
NOTIFY channel [ , payload ]send a notification event together with an optional “payload” string to channel
See Postgres https://www.postgresql.org/docs/current/sql-notify.html
LoadData
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename
[PARTITION (partcol1=val1, partcol2=val2 ...)]
[INPUTFORMAT 'inputformat' SERDE 'serde']Loading files into tables
RenameTable(Vec<RenameTable>)
Rename TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2] ...Renames one or more tables
See Mysql https://dev.mysql.com/doc/refman/9.1/en/rename-table.html
List(FileStagingCommand)
Snowflake LIST
See: https://docs.snowflake.com/en/sql-reference/sql/list
Remove(FileStagingCommand)
Snowflake REMOVE
See: https://docs.snowflake.com/en/sql-reference/sql/remove
RaisError
RaiseError (MSSQL) RAISERROR ( { msg_id | msg_str | @local_variable } { , severity , state } [ , argument [ , …n ] ] ) [ WITH option [ , …n ] ] See https://learn.microsoft.com/en-us/sql/t-sql/language-elements/raiserror-transact-sql?view=sql-server-ver16
Fields
options: Vec<RaisErrorOption>Print(PrintStatement)
PRINT msg_str | @local_variable | string_exprSee: https://learn.microsoft.com/en-us/sql/t-sql/statements/print-transact-sql
Return(ReturnStatement)
RETURN [ expression ]See ReturnStatement
ExportData(ExportData)
Export data statement
Example:
EXPORT DATA OPTIONS(uri='gs://bucket/folder/*', format='PARQUET', overwrite=true) AS
SELECT field1, field2 FROM mydataset.table1 ORDER BY field1 LIMIT 10CreateUser(CreateUser)
CREATE [OR REPLACE] USER <user> [IF NOT EXISTS]Vacuum(VacuumStatement)
Re-sorts rows and reclaims space in either a specified table or all tables in the current database
VACUUM tblTrait Implementations§
§impl Display for Statement
impl Display for Statement
§fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>
Formats a SQL statement with support for pretty printing.
When using the alternate flag ({:#}), the statement will be formatted with proper
indentation and line breaks. For example:
let sql = "SELECT a, b FROM table_1";
let ast = Parser::parse_sql(&GenericDialect, sql).unwrap();
// Regular formatting
assert_eq!(format!("{}", ast[0]), "SELECT a, b FROM table_1");
// Pretty printing
assert_eq!(format!("{:#}", ast[0]),
r#"SELECT
a,
b
FROM
table_1"#);§impl From<AlterSchema> for Statement
impl From<AlterSchema> for Statement
§fn from(a: AlterSchema) -> Statement
fn from(a: AlterSchema) -> Statement
§impl From<CaseStatement> for Statement
impl From<CaseStatement> for Statement
§fn from(c: CaseStatement) -> Statement
fn from(c: CaseStatement) -> Statement
§impl From<CreateConnector> for Statement
impl From<CreateConnector> for Statement
§fn from(c: CreateConnector) -> Statement
fn from(c: CreateConnector) -> Statement
§impl From<CreateDomain> for Statement
impl From<CreateDomain> for Statement
§fn from(c: CreateDomain) -> Statement
fn from(c: CreateDomain) -> Statement
§impl From<CreateFunction> for Statement
impl From<CreateFunction> for Statement
§fn from(c: CreateFunction) -> Statement
fn from(c: CreateFunction) -> Statement
§impl From<CreateIndex> for Statement
impl From<CreateIndex> for Statement
§fn from(c: CreateIndex) -> Statement
fn from(c: CreateIndex) -> Statement
§impl From<CreateServerStatement> for Statement
impl From<CreateServerStatement> for Statement
§fn from(c: CreateServerStatement) -> Statement
fn from(c: CreateServerStatement) -> Statement
§impl From<CreateTable> for Statement
impl From<CreateTable> for Statement
§fn from(c: CreateTable) -> Statement
fn from(c: CreateTable) -> Statement
§impl From<CreateTrigger> for Statement
impl From<CreateTrigger> for Statement
§fn from(c: CreateTrigger) -> Statement
fn from(c: CreateTrigger) -> Statement
§impl From<CreateUser> for Statement
impl From<CreateUser> for Statement
§fn from(c: CreateUser) -> Statement
fn from(c: CreateUser) -> Statement
§impl From<DenyStatement> for Statement
impl From<DenyStatement> for Statement
§fn from(d: DenyStatement) -> Statement
fn from(d: DenyStatement) -> Statement
§impl From<DropDomain> for Statement
impl From<DropDomain> for Statement
§fn from(d: DropDomain) -> Statement
fn from(d: DropDomain) -> Statement
§impl From<DropTrigger> for Statement
impl From<DropTrigger> for Statement
§fn from(d: DropTrigger) -> Statement
fn from(d: DropTrigger) -> Statement
§impl From<ExportData> for Statement
impl From<ExportData> for Statement
§fn from(e: ExportData) -> Statement
fn from(e: ExportData) -> Statement
§impl From<IfStatement> for Statement
impl From<IfStatement> for Statement
§fn from(i: IfStatement) -> Statement
fn from(i: IfStatement) -> Statement
§impl From<OpenStatement> for Statement
impl From<OpenStatement> for Statement
§fn from(o: OpenStatement) -> Statement
fn from(o: OpenStatement) -> Statement
§impl From<PrintStatement> for Statement
impl From<PrintStatement> for Statement
§fn from(p: PrintStatement) -> Statement
fn from(p: PrintStatement) -> Statement
§impl From<RaiseStatement> for Statement
impl From<RaiseStatement> for Statement
§fn from(r: RaiseStatement) -> Statement
fn from(r: RaiseStatement) -> Statement
§impl From<RenameTable> for Statement
impl From<RenameTable> for Statement
§fn from(r: RenameTable) -> Statement
fn from(r: RenameTable) -> Statement
§impl From<ReturnStatement> for Statement
impl From<ReturnStatement> for Statement
§fn from(r: ReturnStatement) -> Statement
fn from(r: ReturnStatement) -> Statement
§impl From<ShowCharset> for Statement
impl From<ShowCharset> for Statement
§fn from(s: ShowCharset) -> Statement
fn from(s: ShowCharset) -> Statement
§impl From<ShowObjects> for Statement
impl From<ShowObjects> for Statement
§fn from(s: ShowObjects) -> Statement
fn from(s: ShowObjects) -> Statement
§impl From<VacuumStatement> for Statement
impl From<VacuumStatement> for Statement
§fn from(v: VacuumStatement) -> Statement
fn from(v: VacuumStatement) -> Statement
§impl From<Vec<RenameTable>> for Statement
impl From<Vec<RenameTable>> for Statement
§fn from(r: Vec<RenameTable>) -> Statement
fn from(r: Vec<RenameTable>) -> Statement
§impl From<WhileStatement> for Statement
impl From<WhileStatement> for Statement
§fn from(w: WhileStatement) -> Statement
fn from(w: WhileStatement) -> Statement
§impl Ord for Statement
impl Ord for Statement
§impl PartialOrd for Statement
impl PartialOrd for Statement
§impl Spanned for Statement
§partial span
Missing spans:
impl Spanned for Statement
§partial span
Missing spans:
- Statement::CopyIntoSnowflake
- Statement::CreateSecret
- Statement::CreateRole
- Statement::AlterType
- Statement::AlterRole
- Statement::AttachDatabase
- Statement::AttachDuckDBDatabase
- Statement::DetachDuckDBDatabase
- Statement::Drop
- Statement::DropFunction
- Statement::DropProcedure
- Statement::DropSecret
- Statement::Declare
- Statement::CreateExtension
- Statement::Fetch
- Statement::Flush
- Statement::Discard
- Statement::Set
- Statement::ShowFunctions
- Statement::ShowVariable
- Statement::ShowStatus
- Statement::ShowVariables
- Statement::ShowCreate
- Statement::ShowColumns
- Statement::ShowTables
- Statement::ShowCollation
- Statement::StartTransaction
- Statement::Comment
- Statement::Commit
- Statement::Rollback
- Statement::CreateSchema
- Statement::CreateDatabase
- Statement::CreateFunction
- Statement::CreateTrigger
- Statement::DropTrigger
- Statement::CreateProcedure
- Statement::CreateMacro
- Statement::CreateStage
- Statement::Assert
- Statement::Grant
- Statement::Revoke
- Statement::Deallocate
- Statement::Execute
- Statement::Prepare
- Statement::Kill
- Statement::ExplainTable
- Statement::Explain
- Statement::Savepoint
- Statement::ReleaseSavepoint
- Statement::Merge
- Statement::Cache
- Statement::UNCache
- Statement::CreateSequence
- Statement::CreateType
- Statement::Pragma
- Statement::LockTables
- Statement::UnlockTables
- Statement::Unload
- Statement::OptimizeTable
§impl TryFrom<Statement> for CreateDatabaseBuilder
impl TryFrom<Statement> for CreateDatabaseBuilder
§type Error = ParserError
type Error = ParserError
§fn try_from(
stmt: Statement,
) -> Result<CreateDatabaseBuilder, <CreateDatabaseBuilder as TryFrom<Statement>>::Error>
fn try_from( stmt: Statement, ) -> Result<CreateDatabaseBuilder, <CreateDatabaseBuilder as TryFrom<Statement>>::Error>
§impl TryFrom<Statement> for CreateTableBuilder
impl TryFrom<Statement> for CreateTableBuilder
§type Error = ParserError
type Error = ParserError
§fn try_from(
stmt: Statement,
) -> Result<CreateTableBuilder, <CreateTableBuilder as TryFrom<Statement>>::Error>
fn try_from( stmt: Statement, ) -> Result<CreateTableBuilder, <CreateTableBuilder as TryFrom<Statement>>::Error>
§impl VisitMut for Statement
impl VisitMut for Statement
fn visit<V>(&mut self, visitor: &mut V) -> ControlFlow<<V as VisitorMut>::Break>where
V: VisitorMut,
impl Eq for Statement
impl StructuralPartialEq for Statement
Auto Trait Implementations§
impl Freeze for Statement
impl RefUnwindSafe for Statement
impl Send for Statement
impl Sync for Statement
impl Unpin for Statement
impl UnwindSafe for Statement
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<Q, K> Comparable<K> for Q
impl<Q, K> Comparable<K> for Q
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> ToStringFallible for Twhere
T: Display,
impl<T> ToStringFallible for Twhere
T: Display,
§fn try_to_string(&self) -> Result<String, TryReserveError>
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.