JetBrains / JetBrains/Exposed

Expression.toString needs to be connected to a database

Open
#1,050 1 comment 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.