...
Syntax
We propose add the following syntax for TRUNCATE TABLE statement.
Code Block | ||
---|---|---|
| ||
TRUNCATE TABLE table_name |
It only supports trucate table, if it's a view or temporary table, it should throw TableException
with message Truncate a view/temporary table is not support
.
Public interfaces Changes
We propose add a inerface for TRUNCATE TABLE statment. The connectors can implement this interface to custom their logic for truncating table.
Code Block | ||
---|---|---|
| ||
/** * Enables to delete all existing data in a {@link DynamicTableSink} table using {@code TRUNCATE * TABLE} statement. * * <p>For {@code TRUNCATE TABLE} statement, if the corresponding {@link DynamicTableSink} have * implemented this interface, then the method {@link #truncateTable()} will be invoked in execution * phase. Otherwise, Flink will throw exception directly. */ @PublicEvolving public interface SupportsTruncate { /** * Execute truncating table. * * @return true if truncate the table successfully otherwise false */ boolean executeTruncation(); } |
...
1: Add a parse rule in parserImpls.ftl to match TRUNCATE TABLE
statement and convert it to SqlTruncateTable
2: Convert Create a SqlTruncateTableConveter
SqlTruncateTable
to TruncateTableOperation in SqlToOperationConverter, and register
SqlTruncateTableConveter to
SqlNodeConverters.
3: In method TableEnvironmentImpl#executeInternal,
if the operation is instance of TruncateTableOperation
, get TruncateTableOperation
should implement ExecutableOperation, and in method
get the #execute(Context ctx), it will
DynamicTableSink
of the table which should implement SupportsTruncate
and then call method SupportsTruncate#executeTruncation
directly to truncate the table.
...