diff --git a/format/FlightSql.proto b/format/FlightSql.proto index 3c9a719f127..56a7d8c5401 100644 --- a/format/FlightSql.proto +++ b/format/FlightSql.proto @@ -817,6 +817,17 @@ enum SqlInfo { * - true: if invoking user-defined or vendor functions using the stored procedure escape syntax is supported. */ SQL_STORED_FUNCTIONS_USING_CALL_SYNTAX_SUPPORTED = 576; + + /* + * Retrieves a boolean value indicating whether transactions are supported for bulk ingestion. If not, invoking + * the method commit in the context of a bulk ingestion is a noop, and the isolation level is + * `arrow.flight.protocol.sql.SqlTransactionIsolationLevel.TRANSACTION_NONE`. + * + * Returns: + * - false: if bulk ingestion transactions are unsupported; + * - true: if bulk ingestion transactions are supported. + */ + INGEST_TRANSACTIONS_SUPPORTED = 577; } // The level of support for Flight SQL transaction RPCs. @@ -1778,6 +1789,47 @@ message CommandPreparedStatementUpdate { bytes prepared_statement_handle = 1; } + /* + * Represents a bulk ingestion request. Used in the command member of FlightDescriptor + * for the the RPC call DoPut to cause the server load the contents of the stream's + * FlightData into the target destination. + */ +message CommandStatementIngest { + option (experimental) = true; + + // Describes the behavior for loading bulk data. + enum IngestMode { + // Ingestion behavior unspecified. + INGEST_MODE_UNSPECIFIED = 0; + // Create the target table. Fail if the target table already exists. + INGEST_MODE_CREATE = 1; + // Append to an existing target table. Fail if the target table does not exist. + INGEST_MODE_APPEND = 2; + // Drop the target table if it exists. Then follow INGEST_MODE_CREATE behavior. + INGEST_MODE_REPLACE = 3; + // Create the target table if it does not exist. Then follow INGEST_MODE_APPEND behavior. + INGEST_MODE_CREATE_APPEND = 4; + } + + // The ingestion behavior. + IngestMode mode = 1; + // The table to load data into. + string table = 2; + // The db_schema of the destination table to load data into. If unset, a backend-specific default may be used. + optional string schema = 3; + // The catalog of the destination table to load data into. If unset, a backend-specific default may be used. + optional string catalog = 4; + // Use a temporary table. + optional bool temporary = 5; + // Perform the ingestion as part of this transaction (if unset, the query is auto-committed). + optional bytes transaction_id = 6; + + // Future extensions to the parameters of CommandStatementIngest should be added here, at a lower index than the generic 'options' parameter. + + // Backend-specific options. + map options = 1000; +} + /* * Returned from the RPC call DoPut when a CommandStatementUpdate * CommandPreparedStatementUpdate was in the request, containing