Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

QueryAlias.get(original: Expression<T>) lose query's alias #633

Closed
waluo opened this issue Sep 2, 2019 · 1 comment
Closed

QueryAlias.get(original: Expression<T>) lose query's alias #633

waluo opened this issue Sep 2, 2019 · 1 comment
Labels

Comments

@waluo
Copy link

waluo commented Sep 2, 2019

object UserTable : Table("user") {
    val userId = long("user_id").primaryKey().autoIncrement()
    val name = varchar("name", 255)
}

object OrderTable : Table("order") {
    val orderId = long("order_id").primaryKey().autoIncrement()
    val userId = long("user_id").references(UserTable.userId)
}
val orderCount = OrderTable.orderId.count().alias("order_count")

val orderGroup: QueryAlias = OrderTable.slice(OrderTable.userId, orderCount)
    .selectAll()
    .groupBy(OrderTable.userId).alias("orderGroup")

val sql = UserTable
    .leftJoin(orderGroup, { UserTable.userId }, { orderGroup[OrderTable.userId] })
    .slice(UserTable.name, orderGroup[orderCount])
    .selectAll()
SELECT "USER"."NAME", order_count --lose query's alias, should be orderGroup.order_count
FROM "USER" 
LEFT JOIN (
	SELECT "ORDER".USER_ID, COUNT("ORDER".ORDER_ID) order_count 
	FROM "ORDER" GROUP BY "ORDER".USER_ID) orderGroup 
ON "USER".USER_ID = orderGroup.USER_ID

can the function aliasOnlyExpression keep the query's alias? like

fun aliasOnlyExpression(queryAlias: QueryAlias? = null) : Expression<T> {
    return if (delegate is ExpressionWithColumnType<T>) {
        object : Function<T>(delegate.columnType) {
            override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
                if(queryAlias != null){
                    append(queryAlias.alias)
                    append(".")
                }
                append(alias)
            }
        }
    } else {
        object : Expression<T>() {
            override fun toQueryBuilder(queryBuilder: QueryBuilder) = queryBuilder {
                if(queryAlias != null){
                    append(queryAlias.alias)
                    append(".")
                }
                append(alias)
            }
        }
    }
}
@Tapac
Copy link
Contributor

Tapac commented Feb 26, 2020

Fixed in master

@Tapac Tapac closed this as completed Feb 26, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants