blob: 8e73db03c55f5304f22a1e37339f5bd5bd2958b2 [file]
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
= Transactions
This page describes SQL transaction commands supported by the Calcite-based SQL engine.
== SAVEPOINT
Creates a named savepoint in the current transaction.
[source,sql]
----
SAVEPOINT savepointName
----
=== Parameters
- `savepointName` - the name of the savepoint to create.
=== Description
`SAVEPOINT` can be used only inside an explicit `PESSIMISTIC` transaction.
The command records the current transaction state. Later, you can use `ROLLBACK TO SAVEPOINT` to roll back all transaction changes made after the savepoint was created.
If a savepoint with the same name already exists, `SAVEPOINT` replaces it. The command does not roll back any transaction changes. It removes the previous savepoint with that name and makes the name refer to the current transaction state.
== ROLLBACK TO SAVEPOINT
Rolls back transaction changes to a previously created savepoint.
[source,sql]
----
ROLLBACK TO SAVEPOINT savepointName
----
=== Parameters
- `savepointName` - the name of the savepoint to roll back to.
=== Description
`ROLLBACK TO SAVEPOINT` can be used only inside an explicit `PESSIMISTIC` transaction.
The command rolls back all transaction changes made after the specified savepoint was created. The transaction remains active and can be committed or rolled back later.
When a transaction is rolled back to a savepoint, savepoints created after the target savepoint are released. The target savepoint remains available and can be used again.
If the specified savepoint does not exist, the command fails.
== Example
[source,sql]
----
INSERT INTO Person(id, name) VALUES (1, 'John');
SAVEPOINT before_update;
UPDATE Person SET name = 'Jane' WHERE id = 1;
ROLLBACK TO SAVEPOINT before_update;
----
After `ROLLBACK TO SAVEPOINT before_update`, the `UPDATE` statement is rolled back, but the preceding `INSERT` statement remains part of the active transaction.