You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2024/12/10 15:02:53 UTC

(ignite-3) branch ignite-23420 created (now 0b974ac421)

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a change to branch ignite-23420
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


      at 0b974ac421 Add getter methods for BigDecimal to the Tuple

This branch includes the following new commits:

     new 0b974ac421 Add getter methods for BigDecimal to the Tuple

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(ignite-3) 01/01: Add getter methods for BigDecimal to the Tuple

Posted by am...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-23420
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 0b974ac4218a327fa7b794815b11d2caf6efc471
Author: amashenkov <am...@apache.org>
AuthorDate: Tue Dec 10 17:59:53 2024 +0300

    Add getter methods for BigDecimal to the Tuple
---
 .../main/java/org/apache/ignite/table/Tuple.java    | 21 +++++++++++++++++++++
 .../java/org/apache/ignite/table/TupleImpl.java     | 13 +++++++++++++
 .../table/MutableTupleBinaryTupleAdapter.java       | 17 +++++++++++++++++
 .../ignite/client/AbstractClientTableTest.java      |  2 +-
 .../ignite/client/ClientKeyValueViewTest.java       |  4 ++--
 .../apache/ignite/client/ClientRecordViewTest.java  |  2 +-
 .../org/apache/ignite/client/ClientSqlTest.java     |  2 +-
 .../org/apache/ignite/client/ClientTupleTest.java   | 13 +++++++++++++
 .../java/org/apache/ignite/client/CustomTuple.java  | 13 +++++++++++++
 .../ignite/client/fakes/FakeIgniteTables.java       |  2 +-
 .../internal/table/criteria/SqlRowProjection.java   | 13 +++++++++++++
 .../runner/app/client/ItThinClientSqlTest.java      | 10 +++++-----
 .../ignite/internal/sql/api/AsyncResultSetImpl.java | 13 +++++++++++++
 .../apache/ignite/internal/sql/engine/TestRow.java  | 13 +++++++++++++
 .../internal/table/AbstractRowTupleAdapter.java     | 17 +++++++++++++++++
 .../internal/table/MutableRowTupleAdapter.java      | 13 +++++++++++++
 .../internal/table/InteropOperationsTest.java       |  2 +-
 .../internal/table/impl/TestTupleBuilder.java       | 13 +++++++++++++
 18 files changed, 171 insertions(+), 12 deletions(-)

diff --git a/modules/api/src/main/java/org/apache/ignite/table/Tuple.java b/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
index 1b9ef64047..a30a22c414 100644
--- a/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
+++ b/modules/api/src/main/java/org/apache/ignite/table/Tuple.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.table;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -396,6 +397,26 @@ public interface Tuple extends Iterable<Object> {
      */
     double doubleValue(int columnIndex);
 
+    /**
+     * Gets a {@code BigDecimal} column value.
+     *
+     * @param columnName Column name in SQL-parser style notation; e.g., <br>
+     *                   "myColumn" - "MYCOLUMN", returns the index of the column ignores case sensitivity, <br>
+     *                   "\"MyColumn\"" - "MyColumn", returns the index of the column with respect to case sensitivity.
+     * @return Column value.
+     * @throws IllegalArgumentException If no column with the given name exists.
+     */
+    BigDecimal decimalValue(String columnName);
+
+    /**
+     * Gets a {@code BigDecimal} column value.
+     *
+     * @param columnIndex Column index.
+     * @return Column value.
+     * @throws IndexOutOfBoundsException If no column with the given index exists.
+     */
+    BigDecimal decimalValue(int columnIndex);
+
     /**
      * Gets a {@code String} column value.
      *
diff --git a/modules/api/src/main/java/org/apache/ignite/table/TupleImpl.java b/modules/api/src/main/java/org/apache/ignite/table/TupleImpl.java
index 11391faa1b..8baf0ae026 100644
--- a/modules/api/src/main/java/org/apache/ignite/table/TupleImpl.java
+++ b/modules/api/src/main/java/org/apache/ignite/table/TupleImpl.java
@@ -21,6 +21,7 @@ import java.io.IOException;
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -250,6 +251,18 @@ class TupleImpl implements Tuple, Serializable {
         return value(columnIndex);
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        return value(columnName);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        return value(columnIndex);
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(String columnName) {
diff --git a/modules/client-common/src/main/java/org/apache/ignite/internal/client/table/MutableTupleBinaryTupleAdapter.java b/modules/client-common/src/main/java/org/apache/ignite/internal/client/table/MutableTupleBinaryTupleAdapter.java
index c92ddf2c48..9cc46cccb7 100644
--- a/modules/client-common/src/main/java/org/apache/ignite/internal/client/table/MutableTupleBinaryTupleAdapter.java
+++ b/modules/client-common/src/main/java/org/apache/ignite/internal/client/table/MutableTupleBinaryTupleAdapter.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.client.table;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -256,6 +257,22 @@ public abstract class MutableTupleBinaryTupleAdapter implements Tuple, BinaryTup
                 : binaryTuple.doubleValue(validateSchemaColumnType(columnIndex, ColumnType.DOUBLE));
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        return tuple != null
+                ? tuple.decimalValue(columnName)
+                : binaryTuple.decimalValue(validateSchemaColumnType(columnName, ColumnType.DECIMAL), -1);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        return tuple != null
+                ? tuple.decimalValue(columnIndex)
+                : binaryTuple.decimalValue(validateSchemaColumnType(columnIndex, ColumnType.DECIMAL), -1);
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(String columnName) {
diff --git a/modules/client/src/test/java/org/apache/ignite/client/AbstractClientTableTest.java b/modules/client/src/test/java/org/apache/ignite/client/AbstractClientTableTest.java
index e567d71317..e22151e029 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/AbstractClientTableTest.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/AbstractClientTableTest.java
@@ -121,7 +121,7 @@ public class AbstractClientTableTest extends AbstractClientTest {
                 .set("ztimestamp", instant)
                 .set("zstring", name)
                 .set("zbytes", new byte[]{1, 2})
-                .set("zdecimal", BigDecimal.valueOf(21))
+                .set("zdecimal", BigDecimal.valueOf(21).setScale(3))
                 .set("zuuid", uuid);
 
         if (!skipKey) {
diff --git a/modules/client/src/test/java/org/apache/ignite/client/ClientKeyValueViewTest.java b/modules/client/src/test/java/org/apache/ignite/client/ClientKeyValueViewTest.java
index 300f76e687..2b6ae94dc5 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/ClientKeyValueViewTest.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/ClientKeyValueViewTest.java
@@ -138,7 +138,7 @@ public class ClientKeyValueViewTest extends AbstractClientTableTest {
         assertEquals(instant.with(NANO_OF_SECOND, truncateNanosToMicros(instant.getNano())), res.ztimestamp);
         assertEquals("foo", res.zstring);
         assertArrayEquals(new byte[]{1, 2}, res.zbytes);
-        assertEquals(21, res.zdecimal.longValue());
+        assertEquals(BigDecimal.valueOf(21).setScale(3), res.zdecimal);
         assertEquals(uuid, res.zuuid);
     }
 
@@ -193,7 +193,7 @@ public class ClientKeyValueViewTest extends AbstractClientTableTest {
         assertEquals(instant.with(NANO_OF_SECOND, truncateNanosToMicros(instant.getNano())), res.timestampValue("ztimestamp"));
         assertEquals("119", res.stringValue("zstring"));
         assertEquals(120, ((byte[]) res.value("zbytes"))[0]);
-        assertEquals(122, ((BigDecimal) res.value("zdecimal")).longValue());
+        assertEquals(BigDecimal.valueOf(122), res.decimalValue("zdecimal"));
         assertEquals(uuid, res.uuidValue("zuuid"));
     }
 
diff --git a/modules/client/src/test/java/org/apache/ignite/client/ClientRecordViewTest.java b/modules/client/src/test/java/org/apache/ignite/client/ClientRecordViewTest.java
index 15f6441243..afc7051ca2 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/ClientRecordViewTest.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/ClientRecordViewTest.java
@@ -180,7 +180,7 @@ public class ClientRecordViewTest extends AbstractClientTableTest {
         assertEquals(instant.with(NANO_OF_SECOND, truncateNanosToMicros(instant.getNano())), res.timestampValue("ztimestamp"));
         assertEquals("119", res.stringValue("zstring"));
         assertEquals(120, ((byte[]) res.value("zbytes"))[0]);
-        assertEquals(122, ((BigDecimal) res.value("zdecimal")).longValue());
+        assertEquals(BigDecimal.valueOf(122), res.decimalValue("zdecimal"));
         assertEquals(uuid, res.uuidValue("zuuid"));
     }
 
diff --git a/modules/client/src/test/java/org/apache/ignite/client/ClientSqlTest.java b/modules/client/src/test/java/org/apache/ignite/client/ClientSqlTest.java
index 14f9286a54..d5ab2a896c 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/ClientSqlTest.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/ClientSqlTest.java
@@ -138,7 +138,7 @@ public class ClientSqlTest extends AbstractClientTableTest {
         assertEquals(1.4d, row.doubleValue(6));
         assertEquals(ColumnType.DOUBLE, meta.columns().get(6).type());
 
-        assertEquals(BigDecimal.valueOf(145).setScale(2, RoundingMode.HALF_UP), row.value(7));
+        assertEquals(BigDecimal.valueOf(145), row.decimalValue(7));
         ColumnMetadata decimalCol = meta.columns().get(7);
         assertEquals(ColumnType.DECIMAL, decimalCol.type());
         assertEquals(1, decimalCol.precision());
diff --git a/modules/client/src/test/java/org/apache/ignite/client/ClientTupleTest.java b/modules/client/src/test/java/org/apache/ignite/client/ClientTupleTest.java
index 2afc86ddea..cb6175c627 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/ClientTupleTest.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/ClientTupleTest.java
@@ -170,10 +170,23 @@ public class ClientTupleTest extends AbstractMutableTupleTest {
         assertEquals(STRING_VALUE, tuple.stringValue(7));
         assertEquals(STRING_VALUE, tuple.stringValue("str"));
 
+        assertEquals(DATE_VALUE, tuple.dateValue(8));
         assertEquals(DATE_VALUE, tuple.dateValue("date"));
+
+        assertEquals(TIME_VALUE, tuple.timeValue(9));
         assertEquals(TIME_VALUE, tuple.timeValue("time"));
+
+        assertEquals(DATETIME_VALUE, tuple.datetimeValue(10));
         assertEquals(DATETIME_VALUE, tuple.datetimeValue("datetime"));
+
+        assertEquals(TIMESTAMP_VALUE, tuple.timestampValue(11));
         assertEquals(TIMESTAMP_VALUE, tuple.timestampValue("timestamp"));
+
+        assertTrue(tuple.booleanValue(12));
+        assertTrue(tuple.booleanValue("bool"));
+
+        assertEquals(BigDecimal.valueOf(1234, 3), tuple.decimalValue(13));
+        assertEquals(BigDecimal.valueOf(1234, 3), tuple.decimalValue("decimal"));
     }
 
     @SuppressWarnings("ThrowableNotThrown")
diff --git a/modules/client/src/test/java/org/apache/ignite/client/CustomTuple.java b/modules/client/src/test/java/org/apache/ignite/client/CustomTuple.java
index b1beccc870..aab0eca448 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/CustomTuple.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/CustomTuple.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.client;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -216,6 +217,18 @@ public class CustomTuple implements Tuple {
         throw new UnsupportedOperationException();
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        throw new UnsupportedOperationException();
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        throw new UnsupportedOperationException();
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(String columnName) {
diff --git a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeIgniteTables.java b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeIgniteTables.java
index 8e9201b522..47a53578ad 100644
--- a/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeIgniteTables.java
+++ b/modules/client/src/test/java/org/apache/ignite/client/fakes/FakeIgniteTables.java
@@ -305,7 +305,7 @@ public class FakeIgniteTables implements IgniteTablesInternal {
                         new Column("zstring".toUpperCase(), NativeTypes.STRING, true),
                         new Column("zbytes".toUpperCase(), NativeTypes.BYTES, true),
                         new Column("zuuid".toUpperCase(), NativeTypes.UUID, true),
-                        new Column("zdecimal".toUpperCase(), NativeTypes.decimalOf(20, 10), true),
+                        new Column("zdecimal".toUpperCase(), NativeTypes.decimalOf(20, 3), true),
                 });
     }
 
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/table/criteria/SqlRowProjection.java b/modules/core/src/main/java/org/apache/ignite/internal/table/criteria/SqlRowProjection.java
index 33fa2b1b1e..36fe7df817 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/table/criteria/SqlRowProjection.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/table/criteria/SqlRowProjection.java
@@ -21,6 +21,7 @@ import static org.apache.ignite.lang.util.IgniteNameUtils.quoteIfNeeded;
 
 import it.unimi.dsi.fastutil.objects.Object2IntMap;
 import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -189,6 +190,18 @@ public class SqlRowProjection implements Tuple {
         return row.doubleValue(rowIndexMapping[columnIndex]);
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        return row.decimalValue(columnName);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        return row.decimalValue(rowIndexMapping[columnIndex]);
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(String columnName) {
diff --git a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
index 69ee0ec246..02b579d2ea 100644
--- a/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
+++ b/modules/runner/src/integrationTest/java/org/apache/ignite/internal/runner/app/client/ItThinClientSqlTest.java
@@ -481,12 +481,12 @@ public class ItThinClientSqlTest extends ItAbstractThinClientTest {
         assertEquals(4, row.longValue(4));
         assertEquals(5.5f, row.floatValue(5));
         assertEquals(6.6, row.doubleValue(6));
-        assertEquals(new BigDecimal("7.77"), row.value(7));
+        assertEquals(new BigDecimal("7.77"), row.decimalValue(7));
         assertEquals("foo", row.stringValue(8));
-        assertEquals(LocalDate.of(2020, 1, 1), row.value(9));
-        assertEquals(LocalTime.of(12, 0, 0), row.value(10));
-        assertEquals(LocalDateTime.of(2020, 1, 1, 12, 0, 0), row.value(11));
-        assertEquals(UUID.fromString("10000000-2000-3000-4000-500000000000"), row.value(12));
+        assertEquals(LocalDate.of(2020, 1, 1), row.dateValue(9));
+        assertEquals(LocalTime.of(12, 0, 0), row.timeValue(10));
+        assertEquals(LocalDateTime.of(2020, 1, 1, 12, 0, 0), row.datetimeValue(11));
+        assertEquals(UUID.fromString("10000000-2000-3000-4000-500000000000"), row.uuidValue(12));
         assertArrayEquals(new byte[]{0x42}, row.value(13));
         assertNull(row.value(14));
 
diff --git a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java
index 533ac26151..0acd7b5ce7 100644
--- a/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java
+++ b/modules/sql-engine/src/main/java/org/apache/ignite/internal/sql/api/AsyncResultSetImpl.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.sql.api;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -302,6 +303,18 @@ public class AsyncResultSetImpl<T> implements AsyncResultSet<T> {
             return (double) row.get(columnIndex);
         }
 
+        /** {@inheritDoc} */
+        @Override
+        public BigDecimal decimalValue(String columnName) {
+            return (BigDecimal)  row.get(columnIndexChecked(columnName));
+        }
+
+        /** {@inheritDoc} */
+        @Override
+        public BigDecimal decimalValue(int columnIndex) {
+            return (BigDecimal) row.get(columnIndex);
+        }
+
         /** {@inheritDoc} */
         @Override
         public String stringValue(String columnName) {
diff --git a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/TestRow.java b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/TestRow.java
index 27302f5ec1..4c2addcdcc 100644
--- a/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/TestRow.java
+++ b/modules/sql-engine/src/test/java/org/apache/ignite/internal/sql/engine/TestRow.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.sql.engine;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -169,6 +170,18 @@ class TestRow implements SqlRow {
         return 0;
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        return value(columnName);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        return null;
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(String columnName) {
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/AbstractRowTupleAdapter.java b/modules/table/src/main/java/org/apache/ignite/internal/table/AbstractRowTupleAdapter.java
index ac01e65d68..fe8373e441 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/AbstractRowTupleAdapter.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/AbstractRowTupleAdapter.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.table;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -228,6 +229,22 @@ public abstract class AbstractRowTupleAdapter implements Tuple, SchemaAware {
         return row.stringValue(correctIndex(col));
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        Column col = rowColumnByIndex(columnIndex);
+
+        return row.decimalValue(correctIndex(col));
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        Column col = rowColumnByName(columnName);
+
+        return row.decimalValue(correctIndex(col));
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(int columnIndex) {
diff --git a/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java b/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java
index 90690e0d71..f15499bbde 100644
--- a/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java
+++ b/modules/table/src/main/java/org/apache/ignite/internal/table/MutableRowTupleAdapter.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.table;
 
 import java.io.ObjectStreamException;
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -196,6 +197,18 @@ public class MutableRowTupleAdapter extends AbstractRowTupleAdapter implements S
         return tuple != null ? tuple.doubleValue(columnIndex) : super.doubleValue(columnIndex);
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        return tuple != null ? tuple.decimalValue(columnName) : super.decimalValue(columnName);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        return tuple != null ? tuple.decimalValue(columnIndex) : super.decimalValue(columnIndex);
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(String columnName) {
diff --git a/modules/table/src/test/java/org/apache/ignite/internal/table/InteropOperationsTest.java b/modules/table/src/test/java/org/apache/ignite/internal/table/InteropOperationsTest.java
index 948207f227..f6d9695181 100644
--- a/modules/table/src/test/java/org/apache/ignite/internal/table/InteropOperationsTest.java
+++ b/modules/table/src/test/java/org/apache/ignite/internal/table/InteropOperationsTest.java
@@ -511,7 +511,7 @@ public class InteropOperationsTest extends BaseIgniteAbstractTest {
                     assertEquals(expected.timestampValue(colName), t.timestampValue(colName));
                     break;
                 case DECIMAL:
-                    assertEquals((BigDecimal) expected.value(colName), t.value(colName));
+                    assertEquals(expected.decimalValue(colName), t.decimalValue(colName));
                     break;
                 default:
                     throw new IllegalArgumentException("Expected type: " + type);
diff --git a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java
index 54a62ba394..786a976f0b 100644
--- a/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java
+++ b/modules/table/src/testFixtures/java/org/apache/ignite/internal/table/impl/TestTupleBuilder.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.internal.table.impl;
 
+import java.math.BigDecimal;
 import java.time.Instant;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -163,6 +164,18 @@ public class TestTupleBuilder implements Tuple {
         return 0;
     }
 
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(String columnName) {
+        return value(columnName);
+    }
+
+    /** {@inheritDoc} */
+    @Override
+    public BigDecimal decimalValue(int columnIndex) {
+        return null;
+    }
+
     /** {@inheritDoc} */
     @Override
     public String stringValue(String columnName) {