Skip to content

Commit

Permalink
fix: Add BigInteger and BigDecimal types to MatchFilter.java (deephav…
Browse files Browse the repository at this point in the history
…en#4912)

* Add BigInteger and BigDecimal types to MatchFilter.java

* Add tests for BigInteger and BigDecimal MatchFilter

* Update engine/table/src/test/java/io/deephaven/engine/table/impl/select/WhereFilterFactoryTest.java

Co-authored-by: Colin Alworth <colin@vertispan.com>

* Update engine/table/src/test/java/io/deephaven/engine/table/impl/select/WhereFilterFactoryTest.java

Co-authored-by: Colin Alworth <colin@vertispan.com>

---------

Co-authored-by: Colin Alworth <colin@vertispan.com>
  • Loading branch information
georgecwan and niloc132 authored Dec 25, 2023
1 parent 18c9f81 commit ecebae9
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import org.jetbrains.annotations.NotNull;
import org.jpy.PyObject;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.time.Instant;
import java.util.*;

Expand Down Expand Up @@ -284,6 +286,22 @@ Object convertStringLiteral(String str) {
}
};
}
if (cls == BigDecimal.class) {
return new ColumnTypeConvertor() {
@Override
Object convertStringLiteral(String str) {
return new BigDecimal(str);
}
};
}
if (cls == BigInteger.class) {
return new ColumnTypeConvertor() {
@Override
Object convertStringLiteral(String str) {
return new BigInteger(str);
}
};
}
if (cls == String.class) {
return new ColumnTypeConvertor() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,84 @@ public void testInInstants() {
assertEquals(0, idx.size());
}

public void testBigDecimal() {
BigDecimal a = new BigDecimal("-914.9539"); // not in the table

BigDecimal b = new BigDecimal("618.2686");
BigDecimal c = new BigDecimal("89.3824");
BigDecimal d = new BigDecimal("-471.0881");
Table t = TableTools.newTable(TableTools.col("BigDecimal", b, c, d));
// match one item
WhereFilter f = WhereFilterFactory.getExpression("BigDecimal = " + b);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
RowSet idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(1, idx.size());
assertEquals(b, DataAccessHelpers.getColumn(t, 0).get(idx.firstRowKey()));
// match one of two items
f = WhereFilterFactory.getExpression("BigDecimal in " + a + ", " + b);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(1, idx.size());
assertEquals(b, DataAccessHelpers.getColumn(t, 0).get(idx.firstRowKey()));

// match two of two items
f = WhereFilterFactory.getExpression("BigDecimal in " + c + ", " + d);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(2, idx.size());
assertEquals(c, DataAccessHelpers.getColumn(t, 0).get(idx.firstRowKey()));
assertEquals(d, DataAccessHelpers.getColumn(t, 0).get(idx.lastRowKey()));

// match zero of one item
f = WhereFilterFactory.getExpression("BigDecimal == " + a);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(0, idx.size());
}

public void testBigIntegerl() {
BigInteger a = new BigInteger("-914"); // not in the table

BigInteger b = new BigInteger("618");
BigInteger c = new BigInteger("89");
BigInteger d = new BigInteger("-471");
Table t = TableTools.newTable(TableTools.col("BigInteger", b, c, d));
// match one item
WhereFilter f = WhereFilterFactory.getExpression("BigInteger = " + b);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
RowSet idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(1, idx.size());
assertEquals(b, DataAccessHelpers.getColumn(t, 0).get(idx.firstRowKey()));
// match one of two items
f = WhereFilterFactory.getExpression("BigInteger in " + a + ", " + b);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(1, idx.size());
assertEquals(b, DataAccessHelpers.getColumn(t, 0).get(idx.firstRowKey()));

// match two of two items
f = WhereFilterFactory.getExpression("BigInteger in " + c + ", " + d);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(2, idx.size());
assertEquals(c, DataAccessHelpers.getColumn(t, 0).get(idx.firstRowKey()));
assertEquals(d, DataAccessHelpers.getColumn(t, 0).get(idx.lastRowKey()));

// match zero of one item
f = WhereFilterFactory.getExpression("BigInteger == " + a);
f.init(t.getDefinition());
assertEquals(MatchFilter.class, f.getClass());
idx = f.filter(t.getRowSet().copy(), t.getRowSet(), t, false);
assertEquals(0, idx.size());
}

public void testTypeInference() {
checkResult("1", true, true, true, true, true, true, false, true, true, (byte) 1, (short) 1, 1, 1,
new BigInteger("1"), 1.0, new BigDecimal("1"), '1');
Expand Down

0 comments on commit ecebae9

Please sign in to comment.