Skip to content

Commit

Permalink
Use concat when strings are added (#1958)
Browse files Browse the repository at this point in the history
* Use concat when strings are added

Generalize and add plus/concat functions

Test concat with plus operator.

* Use string literal instead of string parameter to fix tests

---------

Co-authored-by: Ali Lozano <[email protected]>
  • Loading branch information
e5l and AliLozano authored Jan 5, 2024
1 parent 8c247e1 commit 6056416
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 0 deletions.
9 changes: 9 additions & 0 deletions exposed-core/api/exposed-core.api
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,9 @@ public abstract interface class org/jetbrains/exposed/sql/ISqlExpressionBuilder
public abstract fun nthValue (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;)Lorg/jetbrains/exposed/sql/NthValue;
public abstract fun ntile (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;)Lorg/jetbrains/exposed/sql/Ntile;
public abstract fun percentRank ()Lorg/jetbrains/exposed/sql/PercentRank;
public abstract fun plus (Ljava/lang/String;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/Concat;
public abstract fun plus (Lorg/jetbrains/exposed/sql/Expression;Ljava/lang/String;)Lorg/jetbrains/exposed/sql/Concat;
public abstract fun plus (Lorg/jetbrains/exposed/sql/Expression;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/Concat;
public abstract fun plus (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Ljava/lang/Object;)Lorg/jetbrains/exposed/sql/PlusOp;
public abstract fun plus (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/PlusOp;
public abstract fun rank ()Lorg/jetbrains/exposed/sql/Rank;
Expand Down Expand Up @@ -1087,6 +1090,9 @@ public final class org/jetbrains/exposed/sql/ISqlExpressionBuilder$DefaultImpls
public static fun nthValue (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;)Lorg/jetbrains/exposed/sql/NthValue;
public static fun ntile (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;)Lorg/jetbrains/exposed/sql/Ntile;
public static fun percentRank (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;)Lorg/jetbrains/exposed/sql/PercentRank;
public static fun plus (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;Ljava/lang/String;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/Concat;
public static fun plus (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;Lorg/jetbrains/exposed/sql/Expression;Ljava/lang/String;)Lorg/jetbrains/exposed/sql/Concat;
public static fun plus (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;Lorg/jetbrains/exposed/sql/Expression;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/Concat;
public static fun plus (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Ljava/lang/Object;)Lorg/jetbrains/exposed/sql/PlusOp;
public static fun plus (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/PlusOp;
public static fun rank (Lorg/jetbrains/exposed/sql/ISqlExpressionBuilder;)Lorg/jetbrains/exposed/sql/Rank;
Expand Down Expand Up @@ -2037,6 +2043,9 @@ public final class org/jetbrains/exposed/sql/SqlExpressionBuilder : org/jetbrain
public fun nthValue (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;)Lorg/jetbrains/exposed/sql/NthValue;
public fun ntile (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;)Lorg/jetbrains/exposed/sql/Ntile;
public fun percentRank ()Lorg/jetbrains/exposed/sql/PercentRank;
public fun plus (Ljava/lang/String;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/Concat;
public fun plus (Lorg/jetbrains/exposed/sql/Expression;Ljava/lang/String;)Lorg/jetbrains/exposed/sql/Concat;
public fun plus (Lorg/jetbrains/exposed/sql/Expression;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/Concat;
public fun plus (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Ljava/lang/Object;)Lorg/jetbrains/exposed/sql/PlusOp;
public fun plus (Lorg/jetbrains/exposed/sql/ExpressionWithColumnType;Lorg/jetbrains/exposed/sql/Expression;)Lorg/jetbrains/exposed/sql/PlusOp;
public fun rank ()Lorg/jetbrains/exposed/sql/Rank;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,30 @@ interface ISqlExpressionBuilder {
/** Adds the [other] expression to this expression. */
infix operator fun <T, S : T> ExpressionWithColumnType<T>.plus(other: Expression<S>): PlusOp<T, S> = PlusOp(this, other, columnType)

/**
* Concatenate the value to the input expression.
*
* @param value The string value to be concatenated.
* @return The concatenated expression.
*/
infix operator fun Expression<String>.plus(value: String): Concat = concat(this, stringLiteral(value))

/**
* Concatenate the value to the input expression.
*
* @param value The string value to be concatenated.
* @return The concatenated expression.
*/
infix operator fun Expression<String>.plus(value: Expression<String>): Concat = concat(this, value)

/**
* Concatenate the value to the input expression.
*
* @param value The string value to be concatenated.
* @return The concatenated expression.
*/
infix operator fun String.plus(value: Expression<String>): Concat = concat(stringLiteral(this), value)

/** Subtracts the [t] value from this expression. */
infix operator fun <T> ExpressionWithColumnType<T>.minus(t: T): MinusOp<T, T> = MinusOp(this, wrap(t), columnType)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import org.jetbrains.exposed.crypt.Encryptor
import org.jetbrains.exposed.dao.id.IntIdTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SqlExpressionBuilder.concat
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.tests.DatabaseTestsBase
import org.jetbrains.exposed.sql.tests.TestDB
import org.jetbrains.exposed.sql.tests.currentDialectTest
Expand Down Expand Up @@ -597,6 +598,23 @@ class FunctionsTests : DatabaseTestsBase() {
}
}

@Test
fun testConcatUsingPlusOperator() {
withCitiesAndUsers { _, users, _ ->
val concatField = SqlExpressionBuilder.run { users.id + " - " + users.name }
val result = users.select(concatField).where { users.id eq "andrey" }.single()
assertEquals("andrey - Andrey", result[concatField])

val concatField2 = SqlExpressionBuilder.run { users.id + users.name }
val result2 = users.select(concatField2).where { users.id eq "andrey" }.single()
assertEquals("andreyAndrey", result2[concatField2])

val concatField3 = SqlExpressionBuilder.run { "Hi " plus users.name + "!" }
val result3 = users.select(concatField3).where { users.id eq "andrey" }.single()
assertEquals("Hi Andrey!", result3[concatField3])
}
}

private val encryptors = arrayOf(
"AES_256_PBE_GCM" to Algorithms.AES_256_PBE_GCM("passwd", "12345678"),
"AES_256_PBE_CBC" to Algorithms.AES_256_PBE_CBC("passwd", "12345678"),
Expand Down

0 comments on commit 6056416

Please sign in to comment.