Skip to content

Commit 111670c

Browse files
committed
Fixed incorrect handling with null arguments
1 parent d2d6a1f commit 111670c

File tree

4 files changed

+15
-2
lines changed

4 files changed

+15
-2
lines changed

README.MD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ You can include the Maven dependency:
6464
<dependency>
6565
<groupId>com.github.collinalpert</groupId>
6666
<artifactId>lambda2sql</artifactId>
67-
<version>2.2</version>
67+
<version>2.2.1</version>
6868
</dependency>
6969
```
7070

pom.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.github.collinalpert</groupId>
88
<artifactId>lambda2sql</artifactId>
9-
<version>2.2</version>
9+
<version>2.2.1</version>
1010
<packaging>jar</packaging>
1111

1212
<name>lambda2sql</name>
@@ -51,6 +51,7 @@
5151
<properties>
5252
<java-version>13</java-version>
5353
<jdk.version>${java-version}</jdk.version>
54+
<maven.compiler.release>${java-version}</maven.compiler.release>
5455
<maven.compiler.source>${java-version}</maven.compiler.source>
5556
<maven.compiler.target>${java-version}</maven.compiler.target>
5657
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

src/main/java/com/github/collinalpert/lambda2sql/SqlVisitor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ private static String toSqlOperator(int expressionType) {
125125
public StringBuilder visit(BinaryExpression e) {
126126
//Handling for null parameters
127127
if (e.getSecond() instanceof ParameterExpression && !arguments.top().isEmpty() && arguments.top().get(((ParameterExpression) e.getSecond()).getIndex()).getValue() == null) {
128+
//If we don't pop here and there are more expressions after this one, they will work with an incorrect argument.
129+
arguments.pop();
128130
return Expression.unary(e.getExpressionType() == ExpressionType.Equal ? ExpressionType.IsNull : ExpressionType.IsNonNull, Boolean.TYPE, e.getFirst()).accept(this);
129131
}
130132

src/test/java/com/github/collinalpert/lambda2sql/test/Lambda2SqlTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ void testNull() {
100100
SqlPredicate<IPerson> p2 = person -> person.getName() == null;
101101
SqlPredicate<IPerson> p3 = person -> person.getAge() >= i && person.getAge() <= age;
102102
assertPredicateEqual("`person`.`age` = 17 OR `person`.`name` IS NULL", p);
103+
assertPredicateEqual("(`person`.`age` = 17 OR `person`.`name` IS NULL) AND true", p.and(x -> true));
103104
assertPredicateEqual("`person`.`name` IS NULL", p2);
105+
assertPredicateEqual("`person`.`name` IS NULL AND true", p2.and(x -> true));
104106
assertPredicateEqual("`person`.`age` >= NULL AND `person`.`age` <= 17", p3);
105107
}
106108

@@ -196,6 +198,14 @@ void testContains() {
196198
assertPredicateEqual("`person`.`id` NOT IN (3, 6, 9, 12)", person -> !ids3.contains(person.getId()));
197199
}
198200

201+
@Test
202+
void testLastParameterNull() {
203+
String s = null;
204+
SqlPredicate<IPerson> alwaysTrue = x -> true;
205+
SqlPredicate<IPerson> pred = x -> x.getName() == s;
206+
assertPredicateEqual("`person`.`name` IS NULL AND true", pred.and(alwaysTrue));
207+
}
208+
199209
private void assertPredicateEqual(String expectedSql, SqlPredicate<IPerson> p) {
200210
var sql = Lambda2Sql.toSql(p, "person");
201211
Assertions.assertEquals(expectedSql, sql);

0 commit comments

Comments
 (0)