From d2d05a75386225d950db218ee360b9430a6da8a3 Mon Sep 17 00:00:00 2001 From: KunMinX Date: Sat, 3 Aug 2024 09:58:24 +0800 Subject: [PATCH] add bitAnd and bitOr BinaryExpressionType and operator --- .../main/kotlin/org/ktorm/dsl/Operators.kt | 46 +++++++++++++++++++ .../org/ktorm/expression/SqlExpressions.kt | 12 ++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/ktorm-core/src/main/kotlin/org/ktorm/dsl/Operators.kt b/ktorm-core/src/main/kotlin/org/ktorm/dsl/Operators.kt index 152d6ce2..fa211975 100644 --- a/ktorm-core/src/main/kotlin/org/ktorm/dsl/Operators.kt +++ b/ktorm-core/src/main/kotlin/org/ktorm/dsl/Operators.kt @@ -696,3 +696,49 @@ public fun ColumnDeclaring.toInt(): CastingExpression { public fun ColumnDeclaring<*>.cast(sqlType: SqlType): CastingExpression { return CastingExpression(asExpression(), sqlType) } + +// --------- bit And ------------ + +/** + * And operator, translated to the `&` keyword in SQL. + */ +public infix fun ColumnDeclaring.bitAnd(expr: ColumnDeclaring): BinaryExpression { + return BinaryExpression(BinaryExpressionType.BIT_AND, asExpression(), expr.asExpression(), IntSqlType) +} + +/** + * And operator, translated to the `&` keyword in SQL. + */ +public infix fun ColumnDeclaring.bitAnd(value: Int): BinaryExpression { + return this bitAnd wrapArgument(value) +} + +/** + * And operator, translated to the `&` keyword in SQL. + */ +public infix fun Int.bitAnd(expr: ColumnDeclaring): BinaryExpression { + return expr.wrapArgument(this) bitAnd expr +} + +// --------- bit Or ------------ + +/** + * And operator, translated to the `|` keyword in SQL. + */ +public infix fun ColumnDeclaring.bitOr(expr: ColumnDeclaring): BinaryExpression { + return BinaryExpression(BinaryExpressionType.BIT_AND, asExpression(), expr.asExpression(), IntSqlType) +} + +/** + * And operator, translated to the `|` keyword in SQL. + */ +public infix fun ColumnDeclaring.bitOr(value: Int): BinaryExpression { + return this bitOr wrapArgument(value) +} + +/** + * And operator, translated to the `|` keyword in SQL. + */ +public infix fun Int.bitOr(expr: ColumnDeclaring): BinaryExpression { + return expr.wrapArgument(this) bitOr expr +} \ No newline at end of file diff --git a/ktorm-core/src/main/kotlin/org/ktorm/expression/SqlExpressions.kt b/ktorm-core/src/main/kotlin/org/ktorm/expression/SqlExpressions.kt index ae623e56..240c3e40 100644 --- a/ktorm-core/src/main/kotlin/org/ktorm/expression/SqlExpressions.kt +++ b/ktorm-core/src/main/kotlin/org/ktorm/expression/SqlExpressions.kt @@ -475,7 +475,17 @@ public enum class BinaryExpressionType(private val value: String) { /** * Not-equal operator, translated to `<>` in SQL. */ - NOT_EQUAL("<>"); + NOT_EQUAL("<>"), + + /** + * bit-and operator, translated to `&` in SQL. + */ + BIT_AND("&"), + + /** + * bit-or operator, translated to `|` in SQL. + */ + BIT_OR("|"); override fun toString(): String { return value