Guarding against potential leaks in calls to endTransaction() for prepared queries.
In the generated code logic of a prepared query, a finally block is generated with a call to endTransaction() before a query is released. In the case where endTransaction() call fails, the query will not be released resulting in a potential leak. This change conditionally adds a `try-finally` block wrapping the call to `beginTransaction()` and `endTransaction()` in the case where the query will be released. The `finally` block will release the query regardless of whether or not the transaction fails in the `try` block.
Bug: 254343477
Test: DaoWriterTest.kt
Change-Id: I77aa381324045f5f4d34e8c3edb3aef0b5d5d96b
diff --git a/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/result/PreparedQueryResultAdapter.kt b/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/result/PreparedQueryResultAdapter.kt
index 7d6a09d..18406e2 100644
--- a/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/result/PreparedQueryResultAdapter.kt
+++ b/room/room-compiler/src/main/kotlin/androidx/room/solver/prepared/result/PreparedQueryResultAdapter.kt
@@ -73,6 +73,9 @@
} else {
"executeUpdateDelete"
}
+ if (preparedStmtProperty != null) {
+ beginControlFlow("try")
+ }
addStatement("%N.beginTransaction()", dbProperty)
beginControlFlow("try").apply {
if (returnType.isVoid() || returnType.isVoidObject() || returnType.isKotlinUnit()) {
@@ -97,11 +100,13 @@
}
nextControlFlow("finally").apply {
addStatement("%N.endTransaction()", dbProperty)
- if (preparedStmtProperty != null) {
- addStatement("%N.release(%L)", preparedStmtProperty, stmtQueryVal)
- }
}
endControlFlow()
+ if (preparedStmtProperty != null) {
+ nextControlFlow("finally")
+ addStatement("%N.release(%L)", preparedStmtProperty, stmtQueryVal)
+ endControlFlow()
+ }
}
}
}
\ No newline at end of file
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java
index 58b7677..598d267 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/javac/DeletionDao.java
@@ -287,13 +287,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- final int _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final int _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -307,13 +310,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return null;
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return null;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -329,13 +335,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -351,13 +360,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -368,13 +380,16 @@
public int deleteEverything() {
__db.assertNotSuspendingTransaction();
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteEverything.acquire();
- __db.beginTransaction();
try {
- final int _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final int _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteEverything.release(_stmt);
}
}
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java
index 8873083..e3b6103 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/javac/UpdateDao.java
@@ -363,12 +363,15 @@
} else {
_stmt.bindString(_argIndex, uid);
}
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserByUid.release(_stmt);
}
}
@@ -377,12 +380,15 @@
public void ageUserAll() {
__db.assertNotSuspendingTransaction();
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
@@ -394,13 +400,16 @@
@Nullable
public Void call() throws Exception {
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return null;
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return null;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
@@ -414,13 +423,16 @@
@Nullable
public Integer call() throws Exception {
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
@@ -434,13 +446,16 @@
@Nullable
public Integer call() throws Exception {
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java
index a8478f5..4fa7155 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/DeletionDao.java
@@ -281,13 +281,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- final int _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final int _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -301,13 +304,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return null;
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return null;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -323,13 +329,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -345,13 +354,16 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteByUid.acquire();
int _argIndex = 1;
_stmt.bindLong(_argIndex, uid);
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteByUid.release(_stmt);
}
}
@@ -362,13 +374,16 @@
public int deleteEverything() {
__db.assertNotSuspendingTransaction();
final SupportSQLiteStatement _stmt = __preparedStmtOfDeleteEverything.acquire();
- __db.beginTransaction();
try {
- final int _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final int _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfDeleteEverything.release(_stmt);
}
}
diff --git a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java
index a17d135..571e245 100644
--- a/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java
+++ b/room/room-compiler/src/test/test-data/daoWriter/output/ksp/UpdateDao.java
@@ -330,12 +330,15 @@
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserByUid.acquire();
int _argIndex = 1;
_stmt.bindString(_argIndex, uid);
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserByUid.release(_stmt);
}
}
@@ -344,12 +347,15 @@
public void ageUserAll() {
__db.assertNotSuspendingTransaction();
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
@@ -361,13 +367,16 @@
@Nullable
public Void call() throws Exception {
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return null;
+ __db.beginTransaction();
+ try {
+ _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return null;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
@@ -381,13 +390,16 @@
@Nullable
public Integer call() throws Exception {
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
@@ -401,13 +413,16 @@
@Nullable
public Integer call() throws Exception {
final SupportSQLiteStatement _stmt = __preparedStmtOfAgeUserAll.acquire();
- __db.beginTransaction();
try {
- final Integer _result = _stmt.executeUpdateDelete();
- __db.setTransactionSuccessful();
- return _result;
+ __db.beginTransaction();
+ try {
+ final Integer _result = _stmt.executeUpdateDelete();
+ __db.setTransactionSuccessful();
+ return _result;
+ } finally {
+ __db.endTransaction();
+ }
} finally {
- __db.endTransaction();
__preparedStmtOfAgeUserAll.release(_stmt);
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
index c2562be..e7ff72b 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/delegatingFunctions_boxedPrimitiveBridge.kt
@@ -38,13 +38,16 @@
val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertEntity.acquire()
var _argIndex: Int = 1
_stmt.bindLong(_argIndex, id)
- __db.beginTransaction()
try {
- val _result: Long = _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Long = _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertEntity.release(_stmt)
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt
index eeee3c0..9bbf6ad 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx2.kt
@@ -41,13 +41,16 @@
_stmt.bindString(_argIndex, id)
_argIndex = 2
_stmt.bindString(_argIndex, name)
- __db.beginTransaction()
try {
- val _result: Long? = _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Long? = _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertPublisherSingle.release(_stmt)
}
}
@@ -61,13 +64,16 @@
_stmt.bindString(_argIndex, id)
_argIndex = 2
_stmt.bindString(_argIndex, name)
- __db.beginTransaction()
try {
- val _result: Long? = _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Long? = _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertPublisherSingle.release(_stmt)
}
}
@@ -81,13 +87,16 @@
_stmt.bindString(_argIndex, id)
_argIndex = 2
_stmt.bindString(_argIndex, name)
- __db.beginTransaction()
try {
- _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return null
+ __db.beginTransaction()
+ try {
+ _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return null
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertPublisherSingle.release(_stmt)
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt
index f6d72eb..81bb13a 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedCallableQuery_rx3.kt
@@ -41,13 +41,16 @@
_stmt.bindString(_argIndex, id)
_argIndex = 2
_stmt.bindString(_argIndex, name)
- __db.beginTransaction()
try {
- val _result: Long? = _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Long? = _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertPublisherSingle.release(_stmt)
}
}
@@ -61,13 +64,16 @@
_stmt.bindString(_argIndex, id)
_argIndex = 2
_stmt.bindString(_argIndex, name)
- __db.beginTransaction()
try {
- val _result: Long? = _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Long? = _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertPublisherSingle.release(_stmt)
}
}
@@ -81,13 +87,16 @@
_stmt.bindString(_argIndex, id)
_argIndex = 2
_stmt.bindString(_argIndex, name)
- __db.beginTransaction()
try {
- _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return null
+ __db.beginTransaction()
+ try {
+ _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return null
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertPublisherSingle.release(_stmt)
}
}
diff --git a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt
index 65888262..8ce5067 100644
--- a/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt
+++ b/room/room-compiler/src/test/test-data/kotlinCodeGen/preparedQueryAdapter.kt
@@ -58,12 +58,15 @@
val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertEntity.acquire()
var _argIndex: Int = 1
_stmt.bindLong(_argIndex, id)
- __db.beginTransaction()
try {
- _stmt.executeInsert()
- __db.setTransactionSuccessful()
+ __db.beginTransaction()
+ try {
+ _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertEntity.release(_stmt)
}
}
@@ -73,13 +76,16 @@
val _stmt: SupportSQLiteStatement = __preparedStmtOfInsertEntity.acquire()
var _argIndex: Int = 1
_stmt.bindLong(_argIndex, id)
- __db.beginTransaction()
try {
- val _result: Long = _stmt.executeInsert()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Long = _stmt.executeInsert()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfInsertEntity.release(_stmt)
}
}
@@ -89,12 +95,15 @@
val _stmt: SupportSQLiteStatement = __preparedStmtOfUpdateEntity.acquire()
var _argIndex: Int = 1
_stmt.bindString(_argIndex, text)
- __db.beginTransaction()
try {
- _stmt.executeUpdateDelete()
- __db.setTransactionSuccessful()
+ __db.beginTransaction()
+ try {
+ _stmt.executeUpdateDelete()
+ __db.setTransactionSuccessful()
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfUpdateEntity.release(_stmt)
}
}
@@ -106,13 +115,16 @@
_stmt.bindString(_argIndex, text)
_argIndex = 2
_stmt.bindLong(_argIndex, id)
- __db.beginTransaction()
try {
- val _result: Int = _stmt.executeUpdateDelete()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Int = _stmt.executeUpdateDelete()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfUpdateEntityReturnInt.release(_stmt)
}
}
@@ -120,12 +132,15 @@
public override fun deleteEntity(): Unit {
__db.assertNotSuspendingTransaction()
val _stmt: SupportSQLiteStatement = __preparedStmtOfDeleteEntity.acquire()
- __db.beginTransaction()
try {
- _stmt.executeUpdateDelete()
- __db.setTransactionSuccessful()
+ __db.beginTransaction()
+ try {
+ _stmt.executeUpdateDelete()
+ __db.setTransactionSuccessful()
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfDeleteEntity.release(_stmt)
}
}
@@ -133,13 +148,16 @@
public override fun deleteEntityReturnInt(): Int {
__db.assertNotSuspendingTransaction()
val _stmt: SupportSQLiteStatement = __preparedStmtOfDeleteEntity.acquire()
- __db.beginTransaction()
try {
- val _result: Int = _stmt.executeUpdateDelete()
- __db.setTransactionSuccessful()
- return _result
+ __db.beginTransaction()
+ try {
+ val _result: Int = _stmt.executeUpdateDelete()
+ __db.setTransactionSuccessful()
+ return _result
+ } finally {
+ __db.endTransaction()
+ }
} finally {
- __db.endTransaction()
__preparedStmtOfDeleteEntity.release(_stmt)
}
}