@@ -25,12 +25,16 @@ import app.cash.sqldelight.dialect.api.PrimitiveType.NULL
25
25
import app.cash.sqldelight.dialect.api.PrimitiveType.TEXT
26
26
import app.cash.sqldelight.dialect.api.SelectQueryable
27
27
import com.alecstrong.sql.psi.core.psi.SqlBetweenExpr
28
+ import com.alecstrong.sql.psi.core.psi.SqlBinaryBooleanExpr
29
+ import com.alecstrong.sql.psi.core.psi.SqlBinaryEqualityExpr
28
30
import com.alecstrong.sql.psi.core.psi.SqlBinaryExpr
29
31
import com.alecstrong.sql.psi.core.psi.SqlBinaryLikeExpr
32
+ import com.alecstrong.sql.psi.core.psi.SqlBinaryPipeExpr
30
33
import com.alecstrong.sql.psi.core.psi.SqlBindExpr
31
34
import com.alecstrong.sql.psi.core.psi.SqlCaseExpr
32
35
import com.alecstrong.sql.psi.core.psi.SqlCastExpr
33
36
import com.alecstrong.sql.psi.core.psi.SqlCollateExpr
37
+ import com.alecstrong.sql.psi.core.psi.SqlColumnExpr
34
38
import com.alecstrong.sql.psi.core.psi.SqlCompoundSelectStmt
35
39
import com.alecstrong.sql.psi.core.psi.SqlExpr
36
40
import com.alecstrong.sql.psi.core.psi.SqlFunctionExpr
@@ -114,11 +118,21 @@ internal fun SqlExpr.argumentType(argument: SqlExpr): IntermediateType {
114
118
IntermediateType (PrimitiveType .BOOLEAN )
115
119
}
116
120
}
117
- is SqlBetweenExpr , is SqlIsExpr , is SqlBinaryExpr -> {
121
+
122
+ is SqlBinaryPipeExpr , is SqlBinaryEqualityExpr , is SqlIsExpr , is SqlBinaryBooleanExpr , is SqlBetweenExpr -> {
118
123
val validArg = children.lastOrNull { it is SqlExpr && it != = argument && it !is SqlBindExpr }
119
124
validArg?.type() ? : children.last { it is SqlExpr && it != = argument }.type()
120
125
}
121
126
127
+ is SqlBinaryExpr -> {
128
+ val validArg = children.lastOrNull { it is SqlCastExpr && it == argument } ? : if (children.none() { it is SqlColumnExpr }) {
129
+ parent.children.lastOrNull { it is SqlExpr && it != = argument && it !is SqlBinaryExpr }
130
+ } else {
131
+ children.lastOrNull { it is SqlExpr && it != = argument && it !is SqlBindExpr }
132
+ }
133
+ validArg?.type() ? : children.last { it is SqlExpr && it != = argument }.type()
134
+ }
135
+
122
136
is SqlNullExpr -> IntermediateType (NULL ).asNullable()
123
137
is SqlBinaryLikeExpr -> {
124
138
val other = children.last { it is SqlExpr && it != = argument }.type()
0 commit comments