CsvJdbc incorrectly includes NULL values when NOT is used in WHERE clause.
For example, in PostgreSQL I have a simple table with the third
record having value NULL:
demo=> select * from product; listprice ----------- 10 30 (3 rows)
The following two SQL queries do not include the NULL value:
demo=> select count(*) from product where listprice between 1 and 100; count ------- 2 (1 row) demo=> select count(*) from product where listprice not between 1 and 100; count ------- 0 (1 row)
When I run the same SQL queries in CsvJdbdc I get 2 and 1. The NULL value is being counted and this is wrong.
Originally reported in CsvJdbc Discussion topic col NOT BETWEEN limit1 AND limit2 not giving correct results
Fixed handling of SQL NULL values in NOT, AND, OR conditions.
Added unit test TestSqlParser.testParsingWhereComparisonsNull.
Files changed:
src/main/java/org/relique/jdbc/csv/AndExpression.java
src/main/java/org/relique/jdbc/csv/BetweenExpression.java
src/main/java/org/relique/jdbc/csv/CsvResultSet.java
src/main/java/org/relique/jdbc/csv/InExpression.java
src/main/java/org/relique/jdbc/csv/IsNullExpression.java
src/main/java/org/relique/jdbc/csv/LikeExpression.java
src/main/java/org/relique/jdbc/csv/LogicalExpression.java
src/main/java/org/relique/jdbc/csv/NotExpression.java
src/main/java/org/relique/jdbc/csv/OrExpression.java
src/main/java/org/relique/jdbc/csv/ParsedExpression.java
src/main/java/org/relique/jdbc/csv/RelopExpression.java
src/main/java/org/relique/jdbc/csv/SearchedCaseExpression.java
src/test/java/org/relique/jdbc/csv/TestSqlParser.java
Included in CsvJdbc version 1.0-25.