-
-
Couldn't load subscription status.
- Fork 155
Closed
Description
When there are too many whereWithOrConditions conditions the JVM will throw a StackOverflowError because SqlFormatter is recursive.
Code that causes the error:
interface TestTable : Entity<TestTable> {
companion object : Entity.Factory<TestTable>()
val id1: Long
val id2: Long
}
object TestTables : Table<TestTable>("test") {
val id1: Column<Long> = long("id1").primaryKey().bindTo { it.id1 }
val id2: Column<Long> = long("id2").bindTo { it.id2 }
}
@Test
fun stackOverflow() {
val query = database
.from(TestTables)
.select()
.whereWithOrConditions { where ->
repeat(1200) {
where += (TestTables.id1 eq Random.nextLong()) and (TestTables.id2 eq Random.nextLong())
}
}
println(query.sql)
}Partial error:
java.lang.StackOverflowError
at kotlin.jvm.internal.Intrinsics.checkNotNullParameter(Intrinsics.java)
at org.ktorm.support.mysql.MySqlFormatter.visitScalar(MySqlDialect.kt)
at org.ktorm.expression.SqlExpressionVisitor.visit(SqlExpressionVisitor.kt:45)
at org.ktorm.expression.SqlFormatter.visit(SqlFormatter.kt:189)
at org.ktorm.support.mysql.MySqlFormatter.visit(MySqlDialect.kt:46)
at org.ktorm.expression.SqlFormatter.visitBinary(SqlFormatter.kt:244)
at org.ktorm.expression.SqlExpressionVisitor.visitScalar(SqlExpressionVisitor.kt:63)
at org.ktorm.support.mysql.MySqlFormatter.visitScalar(MySqlDialect.kt:56)
at org.ktorm.expression.SqlExpressionVisitor.visit(SqlExpressionVisitor.kt:45)
at org.ktorm.expression.SqlFormatter.visit(SqlFormatter.kt:189)
at org.ktorm.support.mysql.MySqlFormatter.visit(MySqlDialect.kt:46)
at org.ktorm.expression.SqlFormatter.visitBinary(SqlFormatter.kt:244)
at org.ktorm.expression.SqlExpressionVisitor.visitScalar(SqlExpressionVisitor.kt:63)
at org.ktorm.support.mysql.MySqlFormatter.visitScalar(MySqlDialect.kt:56)
at org.ktorm.expression.SqlExpressionVisitor.visit(SqlExpressionVisitor.kt:45)
at org.ktorm.expression.SqlFormatter.visit(SqlFormatter.kt:189)
at org.ktorm.support.mysql.MySqlFormatter.visit(MySqlDialect.kt:46)
at org.ktorm.expression.SqlFormatter.visitBinary(SqlFormatter.kt:244)
at org.ktorm.expression.SqlExpressionVisitor.visitScalar(SqlExpressionVisitor.kt:63)
...
Metadata
Metadata
Assignees
Labels
No labels