# Transactor

Artifact: [androidx.room3:room3-runtime](https://developer.android.com/jetpack/androidx/releases/room3) [View Source](https://cs.android.com/search?q=file:androidx/room3/Transactor.kt+class:androidx.room3.Transactor) Added in [3.0.0](https://developer.android.com/jetpack/androidx/releases/room3#3.0.0)

*** ** * ** ***

Common/AllAndroid/JVMNative/C/iOSJavaScript
- Cmn

  ```
  interface Transactor : PooledConnection
  ```

*** ** * ** ***

A `https://developer.android.com/reference/kotlin/androidx/room3/PooledConnection` that can perform transactions.

## Summary

| ### Nested types |
|---|
| `enum https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-enum/index.html<https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType>` Transaction types. |

| ### Public functions |
|---|---|---|
| `suspend https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` | `https://developer.android.com/reference/kotlin/androidx/room3/Transactor#inTransaction()()` Returns true if this connection has an active transaction, otherwise false. | Cmn |
| `suspend R` | `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/room3/Transactor#withTransaction(androidx.room3.Transactor.SQLiteTransactionType,kotlin.coroutines.SuspendFunction1)( type: https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType, block: suspend https://developer.android.com/reference/kotlin/androidx/room3/TransactionScope<R>.() -> R )` Begins a transaction and runs the `https://developer.android.com/reference/kotlin/androidx/room3/Transactor#withTransaction(androidx.room3.Transactor.SQLiteTransactionType,kotlin.coroutines.SuspendFunction1)` within the transaction. | Cmn |

| ### Extension functions |
|---|---|---|
| `suspend R` | `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/room3/Transactor.https://developer.android.com/reference/kotlin/androidx/room3/Transactor#(androidx.room3.Transactor).deferredTransaction(kotlin.coroutines.SuspendFunction1)(block: suspend https://developer.android.com/reference/kotlin/androidx/room3/TransactionScope<R>.() -> R)` Performs a `https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType#DEFERRED` within the `https://developer.android.com/reference/kotlin/androidx/room3/package-summary#(androidx.room3.Transactor).deferredTransaction(kotlin.coroutines.SuspendFunction1)`. | Cmn |
| `suspend R` | `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/room3/Transactor.https://developer.android.com/reference/kotlin/androidx/room3/Transactor#(androidx.room3.Transactor).exclusiveTransaction(kotlin.coroutines.SuspendFunction1)(block: suspend https://developer.android.com/reference/kotlin/androidx/room3/TransactionScope<R>.() -> R)` Performs a `https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType#EXCLUSIVE` within the `https://developer.android.com/reference/kotlin/androidx/room3/package-summary#(androidx.room3.Transactor).exclusiveTransaction(kotlin.coroutines.SuspendFunction1)`. | Cmn |
| `suspend R` | `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/room3/Transactor.https://developer.android.com/reference/kotlin/androidx/room3/Transactor#(androidx.room3.Transactor).immediateTransaction(kotlin.coroutines.SuspendFunction1)(block: suspend https://developer.android.com/reference/kotlin/androidx/room3/TransactionScope<R>.() -> R)` Performs a `https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType#IMMEDIATE` within the `https://developer.android.com/reference/kotlin/androidx/room3/package-summary#(androidx.room3.Transactor).immediateTransaction(kotlin.coroutines.SuspendFunction1)`. | Cmn |

### Inherited functions

From [androidx.room3.PooledConnection](https://developer.android.com/reference/kotlin/androidx/room3/PooledConnection) `suspend R` `<R : https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?> https://developer.android.com/reference/kotlin/androidx/room3/PooledConnection#usePrepared(kotlin.String,kotlin.coroutines.SuspendFunction1)(sql: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, block: suspend (https://developer.android.com/reference/kotlin/androidx/sqlite/SQLiteStatement) -> R)`

Prepares a new SQL statement and use it within the code `https://developer.android.com/reference/kotlin/androidx/room3/PooledConnection#usePrepared(kotlin.String,kotlin.coroutines.SuspendFunction1)`.
Cmn

## Public functions

### inTransaction

Cmn

```
suspend fun inTransaction(): Boolean
```

Returns true if this connection has an active transaction, otherwise false.

### withTransaction

Cmn

```
suspend fun <R : Any?> withTransaction(
    type: Transactor.SQLiteTransactionType,
    block: suspend TransactionScope<R>.() -> R
): R
```

Begins a transaction and runs the `https://developer.android.com/reference/kotlin/androidx/room3/Transactor#withTransaction(androidx.room3.Transactor.SQLiteTransactionType,kotlin.coroutines.SuspendFunction1)` within the transaction. If `https://developer.android.com/reference/kotlin/androidx/room3/Transactor#withTransaction(androidx.room3.Transactor.SQLiteTransactionType,kotlin.coroutines.SuspendFunction1)` fails to complete normally i.e. an exception is thrown, or `https://developer.android.com/reference/kotlin/androidx/room3/TransactionScope#rollback(kotlin.Any)` is invoked then the transaction will be rollback, otherwise it is committed.

If `https://developer.android.com/reference/kotlin/androidx/room3/Transactor#inTransaction()` returns `true` and this function is invoked it is the equivalent of starting a nested transaction as if `https://developer.android.com/reference/kotlin/androidx/room3/TransactionScope#withNestedTransaction(kotlin.coroutines.SuspendFunction1)` was invoked and the `https://developer.android.com/reference/kotlin/androidx/room3/Transactor#withTransaction(androidx.room3.Transactor.SQLiteTransactionType,kotlin.coroutines.SuspendFunction1)` of the transaction will be ignored since its type will be inherited from the parent transaction.

See also [Transaction](https://www.sqlite.org/lang_transaction.html)

| Parameters |
|---|---|
| `type: https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType` | The type of transaction to begin. |
| `block: suspend https://developer.android.com/reference/kotlin/androidx/room3/TransactionScope<R>.() -> R` | The code that will execute within the transaction. |

## Extension functions

### Transactor.deferredTransaction

Cmn Artifact: [androidx.room3:room3-runtime](https://developer.android.com/jetpack/androidx/releases/room3) [View Source](https://cs.android.com/search?q=file:androidx/room3/Transactor.kt+function:deferredTransaction)

```
suspend fun <R : Any?> Transactor.deferredTransaction(block: suspend TransactionScope<R>.() -> R): R
```

Performs a `https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType#DEFERRED` within the `https://developer.android.com/reference/kotlin/androidx/room3/package-summary#(androidx.room3.Transactor).deferredTransaction(kotlin.coroutines.SuspendFunction1)`.

### Transactor.exclusiveTransaction

Cmn Artifact: [androidx.room3:room3-runtime](https://developer.android.com/jetpack/androidx/releases/room3) [View Source](https://cs.android.com/search?q=file:androidx/room3/Transactor.kt+function:exclusiveTransaction)

```
suspend fun <R : Any?> Transactor.exclusiveTransaction(block: suspend TransactionScope<R>.() -> R): R
```

Performs a `https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType#EXCLUSIVE` within the `https://developer.android.com/reference/kotlin/androidx/room3/package-summary#(androidx.room3.Transactor).exclusiveTransaction(kotlin.coroutines.SuspendFunction1)`.

### Transactor.immediateTransaction

Cmn Artifact: [androidx.room3:room3-runtime](https://developer.android.com/jetpack/androidx/releases/room3) [View Source](https://cs.android.com/search?q=file:androidx/room3/Transactor.kt+function:immediateTransaction)

```
suspend fun <R : Any?> Transactor.immediateTransaction(block: suspend TransactionScope<R>.() -> R): R
```

Performs a `https://developer.android.com/reference/kotlin/androidx/room3/Transactor.SQLiteTransactionType#IMMEDIATE` within the `https://developer.android.com/reference/kotlin/androidx/room3/package-summary#(androidx.room3.Transactor).immediateTransaction(kotlin.coroutines.SuspendFunction1)`.