Skip to content

Commit

Permalink
Review issues: add logger for the failing test, add logging of sql an…
Browse files Browse the repository at this point in the history
…d list of columns on the cached exception
  • Loading branch information
obabichevjb committed Jun 3, 2024
1 parent 5abde5d commit 06ff3cf
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.jetbrains.exposed.sql.statements

import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.statements.api.PreparedStatementApi
import org.jetbrains.exposed.sql.transactions.TransactionManager
import org.jetbrains.exposed.sql.vendors.*
import org.jetbrains.exposed.sql.vendors.inProperCase
import java.sql.ResultSet
Expand Down Expand Up @@ -68,25 +69,32 @@ open class InsertStatement<Key : Any>(
val firstAutoIncColumn = autoIncColumns.firstOrNull { it.autoIncColumnType != null } ?: autoIncColumns.firstOrNull()
if (firstAutoIncColumn != null || returnedColumns.isNotEmpty()) {
while (rs?.next() == true) {
val returnedValues = returnedColumns.associateTo(mutableMapOf()) { it.first to rs.getObject(it.second) }
if (returnedValues.isEmpty() && firstAutoIncColumn != null) {
try {
try {
val returnedValues = returnedColumns.associateTo(mutableMapOf()) { it.first to rs.getObject(it.second) }
if (returnedValues.isEmpty() && firstAutoIncColumn != null) {
returnedValues[firstAutoIncColumn] = rs.getObject(1)
} catch (e: ArrayIndexOutOfBoundsException) {
// EXPOSED-191 Flaky Oracle test on TC build
// this try/catch should help to get information about the flaky test.
// try/catch can be safely removed after the fixing the issue.
// TooGenericExceptionCaught suppress also can be removed

exposedLogger.error(
"ArrayIndexOutOfBoundsException on processResults. " +
"Table: ${table.tableName}, firstAutoIncColumn: ${firstAutoIncColumn.name}, inserted: $inserted",
e
)
throw e
}
autoGeneratedKeys.add(returnedValues)
} catch (cause: ArrayIndexOutOfBoundsException) {
// EXPOSED-191 Flaky Oracle test on TC build
// this try/catch should help to get information about the flaky test.
// try/catch can be safely removed after the fixing the issue.
// TooGenericExceptionCaught suppress also can be removed

val preparedSql = this.prepareSQL(TransactionManager.current(), prepared = true)

val returnedColumnsString = returnedColumns
.mapIndexed { index, pair -> "column: ${pair.first.name}, index: ${pair.second} (columns-list-index: $index)" }
.joinToString(prefix = "[", postfix = "]", separator = ", ")

exposedLogger.error(
"ArrayIndexOutOfBoundsException on processResults. " +
"Table: ${table.tableName}, firstAutoIncColumn: ${firstAutoIncColumn?.name}, inserted: $inserted, returnedColumnsString: $returnedColumnsString. " +
"Failed SQL: $preparedSql",
cause
)
throw cause
}
autoGeneratedKeys.add(returnedValues)
}

if (inserted > 1 && firstAutoIncColumn != null && autoGeneratedKeys.isNotEmpty() && !currentDialect.supportsMultipleGeneratedKeys) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -245,7 +245,7 @@ class EntityCache(private val transaction: Transaction) {
}
}
}
} catch (e: ArrayIndexOutOfBoundsException) {
} catch (cause: ArrayIndexOutOfBoundsException) {
// EXPOSED-191 Flaky Oracle test on TC build
// this try/catch should help to get information about the flaky test.
// try/catch can be safely removed after the fixing the issue
Expand All @@ -255,8 +255,8 @@ class EntityCache(private val transaction: Transaction) {
entry.writeValues.map { writeValue -> "${writeValue.key.name}=${writeValue.value}" }.joinToString { ", " }
}

exposedLogger.error("ArrayIndexOutOfBoundsException on attempt to make flush inserts. Table: ${table.tableName}, entries: ($toFlushString)", e)
throw e
exposedLogger.error("ArrayIndexOutOfBoundsException on attempt to make flush inserts. Table: ${table.tableName}, entries: ($toFlushString)", cause)
throw cause
}

for ((entry, genValues) in toFlush.zip(ids)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -557,6 +557,7 @@ class EntityTests : DatabaseTestsBase() {
@Test
fun callLimitOnRelationDoesntMutateTheCachedValue() {
withTables(Posts, Boards, Categories) {
addLogger(StdOutSqlLogger)
val category1 = Category.new {
title = "cat1"
}
Expand Down

0 comments on commit 06ff3cf

Please sign in to comment.