diff --git a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/ops/InListOps.kt b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/ops/InListOps.kt index 0dca3a13ab..41d15f51ea 100644 --- a/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/ops/InListOps.kt +++ b/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/ops/InListOps.kt @@ -21,41 +21,34 @@ abstract class InListOrNotInListBaseOp( override fun toQueryBuilder(queryBuilder: QueryBuilder): Unit = queryBuilder { val iterator = list.iterator() - if (!iterator.hasNext()) { - if (isInList) { - +FALSE - } else { - +TRUE - } + val hasElements = iterator.hasNext() + + if (!hasElements) { + +if (isInList) FALSE else TRUE + return + } + + if (columnTypes.size == 1) { + append(columnTypes.first()) } else { - val singleColumn = columnTypes.singleOrNull() - if (singleColumn != null) { - append(singleColumn) - } else { - columnTypes.appendTo(prefix = "(", postfix = ")") { +it } - } + columnTypes.appendTo(prefix = "(", postfix = ")") { +it } + } - val firstValue = iterator.next() + val firstValue = iterator.next() + appendOperator(isInList) + registerValues(firstValue) - if (!iterator.hasNext() && currentDialectIfAvailable !is OracleDialect) { - when { - isInList -> append(" = ") - else -> append(" != ") - } - registerValues(firstValue) - } else { - when { - isInList -> append(" IN (") - else -> append(" NOT IN (") - } - registerValues(firstValue) - iterator.forEach { value -> - append(", ") - registerValues(value) - } - append(')') + if (hasElements) { + iterator.forEach { value -> + append(", ") + registerValues(value) } - } + append(')') + } + } + + private fun QueryBuilder.appendOperator(isInList: Boolean) { + append(if (isInList) " IN (" else " NOT IN (") } protected abstract fun QueryBuilder.registerValues(values: V)