Expression.toString needs to be connected to a database
- Dominant language
- Kotlin
- Stars
- 9.3k
- Forks
- 798
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 26
Description
[Expression#toString](https://github.com/JetBrains/Exposed/blob/313cf07d06579461ad61e7fef3ec22f6410d076f/exposed-core/src/main/kotlin/org/jetbrains/exposed/sql/Expression.kt#L131) method tries to transitively call TransactionManager with connected database which makes `toString` pretty unusable mainly for unit testing frameworks where the DB connection is not really needed. See e.g. this stacktrace:
```
java.lang.IllegalStateException: Please call Database.connect() before using this code
at org.jetbrains.exposed.sql.transactions.NotInitializedManager.currentOrNull(TransactionApi.kt:38)
at org.jetbrains.exposed.sql.transactions.TransactionManager$Companion.currentOrNull(TransactionApi.kt:96)
at org.jetbrains.exposed.sql.transactions.TransactionManager$Companion.current(TransactionApi.kt:98)
at org.jetbrains.exposed.sql.Column.toQueryBuilder(Column.kt:41)
at org.jetbrains.exposed.sql.QueryBuilder.append(Expression.kt:42)
at org.jetbrains.exposed.sql.OpKt.appendExpression(Op.kt:544)
at org.jetbrains.exposed.sql.OpKt.access$appendExpression(Op.kt:1)
at org.jetbrains.exposed.sql.ComparisonOp$toQueryBuilder$1.invoke(Op.kt:130)
at org.jetbrains.exposed.sql.ComparisonOp$toQueryBuilder$1.invoke(Op.kt:121)
at org.jetbrains.exposed.sql.QueryBuilder.invoke(Expression.kt:17)
at org.jetbrains.exposed.sql.ComparisonOp.toQueryBuilder(Op.kt:129)
at org.jetbrains.exposed.sql.QueryBuilder.append(Expression.kt:42)
at org.jetbrains.exposed.sql.Expression.toString(Expression.kt:131)
at strikt.internal.reporting.FormattingKt.formatValue(Formatting.kt:44)
...
```
Contributor guide
Assessment
This issue has not been assessed yet.