Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ class QueryAlias(val query: AbstractQuery<*>, val alias: String) : ColumnSet() {
return if (original is Column<*>) {
query.set.source.columns.find { it == original }?.clone() ?: error("Column not found in original table")
} else {
val aliases = query.set.fields.filterIsInstance<ExpressionWithColumnTypeAlias<T>>()
val aliases = query.set.fields.filterIsInstance<IExpressionAlias<T>>()
return aliases.find { it == original }
?.let { it.delegate.alias("$alias.${it.alias}").aliasOnlyExpression() }
?: aliases.find { it.delegate == original }?.aliasOnlyExpression()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -344,22 +344,44 @@ class AliasesTests : DatabaseTestsBase() {
}

@Test
fun testAliasCastedToExpression() {
fun testExpressionWithColumnTypeAliasCastedToExpression() {
val tester = object : IntIdTable("Test") {
val weight = integer("weight")
}

val expression = tester.weight.sum()
val alias: Expression<Int?> = expression.alias("task_weight")
val alias: ExpressionWithColumnTypeAlias<Int?> = expression.alias("task_weight")
val query: QueryAlias = tester.select(alias).alias("all_weight")

// EXPOSED-815 Resolving an aliased field on a query alias doesn't work
// Reading `query[alias]` crashed before the fix
val aliasExpressionString = QueryBuilder(true).also {
query[alias].toQueryBuilder(it)
}.toString()
fun Expression<*>.toExpressionString() = QueryBuilder(true)
.also { this.toQueryBuilder(it) }
.toString().lowercase()

withTables(tester) {
assertEquals("all_weight.task_weight", query[alias].toExpressionString())
assertEquals("all_weight.task_weight", query[alias as ExpressionWithColumnType<Int?>].toExpressionString())
assertEquals("all_weight.task_weight", query[alias as Expression<Int?>].toExpressionString())
}
}

@Test
fun testExpressionAliasCastedToExpression() {
val tester = object : IntIdTable("Test") {
val weight = integer("weight")
}

val expression: Expression<Int?> = tester.weight.sum()
val alias: ExpressionAlias<Int?> = expression.alias("task_weight")
val query: QueryAlias = tester.select(alias).alias("all_weight")

assertEquals("all_weight.task_weight", aliasExpressionString)
fun Expression<*>.toExpressionString() = QueryBuilder(true)
.also { this.toQueryBuilder(it) }
.toString().lowercase()

withTables(tester) {
assertEquals("all_weight.task_weight", query[alias].toExpressionString())
assertEquals("all_weight.task_weight", query[alias as Expression<Int?>].toExpressionString())
}
}

@Test
Expand All @@ -368,7 +390,7 @@ class AliasesTests : DatabaseTestsBase() {
val weight = integer("weight")
}

val column = tester.weight
val column: Column<Int> = tester.weight
val query: QueryAlias = tester.select(column).alias("all_weight")

fun Expression<*>.toExpressionString() = QueryBuilder(true)
Expand All @@ -377,8 +399,8 @@ class AliasesTests : DatabaseTestsBase() {

withTables(tester) {
assertEquals("all_weight.weight", query[column].toExpressionString())
assertEquals("all_weight.weight", query[column as Expression<Int>].toExpressionString())
assertEquals("all_weight.weight", query[column as ExpressionWithColumnType<Int>].toExpressionString())
assertEquals("all_weight.weight", query[column as Expression<Int>].toExpressionString())
}
}
}
Loading