You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Maksim Zhuravkov (Jira)" <ji...@apache.org> on 2023/03/27 14:08:00 UTC
[jira] [Updated] (IGNITE-19128) Sql. Custom data types. IgniteIndexScan has incorrect types in searchBounds.
[ https://issues.apache.org/jira/browse/IGNITE-19128?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Maksim Zhuravkov updated IGNITE-19128:
--------------------------------------
Description:
IgniteIndexScanNode has incorrect types in its search bounds although the filter has correct types in it condition.
Example:
{code:java}
@Test
public void test() {
sql("CREATE TABLE t (id INTEGER PRIMARY KEY, test_key UUID)");
sql("CREATE INDEX t_test_key_idx ON t (test_key)");
sql("SELECT * FROM t WHERE test_key > '00000000-0000-0001-0000-000000000001'::UUID AND test_key < '00000000-0000-0001-0000-000000000003'::UUID ORDER BY id");
}
{code}
Error:
{code:java}
Caused by: java.lang.AssertionError: storageType is class java.util.UUID value must also be class java.util.UUID but it was: 00000000-0000-0001-0000-000000000001
at org.apache.ignite.internal.sql.engine.util.SafeCustomTypeInternalConversion.tryConvertFromInternal(SafeCustomTypeInternalConversion.java:72)
at org.apache.ignite.internal.sql.engine.util.TypeUtils.fromInternal(TypeUtils.java:330)
at org.apache.ignite.internal.sql.engine.exec.RowConverter.toByteBuffer(RowConverter.java:141)
at org.apache.ignite.internal.sql.engine.exec.RowConverter.toBinaryTuplePrefix(RowConverter.java:85)
at org.apache.ignite.internal.sql.engine.exec.rel.IndexScanNode.toBinaryTuplePrefix(IndexScanNode.java:208)
at org.apache.ignite.internal.sql.engine.exec.rel.IndexScanNode.partitionPublisher(IndexScanNode.java:146)
{code}
Plan:
{code:java}
IgniteExchange(distribution=[single]), id = 291
IgniteSort(sort0=[$0], dir0=[ASC]), id = 290
IgniteIndexScan(table=[[PUBLIC, T]], index=[T_TEST_KEY_IDX], type=[SORTED], searchBounds=[[RangeBounds [lowerBound=_UTF-8'00000000-0000-0001-0000-000000000001', upperBound=_UTF-8'00000000-0000-0003-0000-000000000001', lowerInclude=false, upperInclude=false]]], filters=[AND(>($t1, CAST(_UTF-8'00000000-0000-0001-0000-000000000001'):UUID NOT NULL), <($t1, CAST(_UTF-8'00000000-0000-0003-0000-000000000001'):UUID NOT NULL))], requiredColumns=[{0, 1}], collation=[[1]]), id = 273
{code}
was:
IgniteIndexScanNode has incorrect types in its search bounds although the filter has correct types in it condition.
Example:
{code:java}
CREATE TABLE t (id PRIMARY KEY, test_key UUID);
CREATE INDEX t_test_key_idx ON t (test_key);
SELECT * FROM t WHERE test_key > '00000000-0000-0001-0000-000000000001'::UUID AND test_key < '00000000-0000-0001-0000-000000000003'::UUID ORDER BY id
{code}
Error:
{code:java}
Caused by: java.lang.AssertionError: storageType is class java.util.UUID value must also be class java.util.UUID but it was: 00000000-0000-0001-0000-000000000001
at org.apache.ignite.internal.sql.engine.util.SafeCustomTypeInternalConversion.tryConvertFromInternal(SafeCustomTypeInternalConversion.java:72)
at org.apache.ignite.internal.sql.engine.util.TypeUtils.fromInternal(TypeUtils.java:330)
at org.apache.ignite.internal.sql.engine.exec.RowConverter.toByteBuffer(RowConverter.java:141)
at org.apache.ignite.internal.sql.engine.exec.RowConverter.toBinaryTuplePrefix(RowConverter.java:85)
at org.apache.ignite.internal.sql.engine.exec.rel.IndexScanNode.toBinaryTuplePrefix(IndexScanNode.java:208)
at org.apache.ignite.internal.sql.engine.exec.rel.IndexScanNode.partitionPublisher(IndexScanNode.java:146)
{code}
Plan:
{code:java}
IgniteExchange(distribution=[single]), id = 291
IgniteSort(sort0=[$0], dir0=[ASC]), id = 290
IgniteIndexScan(table=[[PUBLIC, T]], index=[T_TEST_KEY_IDX], type=[SORTED], searchBounds=[[RangeBounds [lowerBound=_UTF-8'00000000-0000-0001-0000-000000000001', upperBound=_UTF-8'00000000-0000-0003-0000-000000000001', lowerInclude=false, upperInclude=false]]], filters=[AND(>($t1, CAST(_UTF-8'00000000-0000-0001-0000-000000000001'):UUID NOT NULL), <($t1, CAST(_UTF-8'00000000-0000-0003-0000-000000000001'):UUID NOT NULL))], requiredColumns=[{0, 1}], collation=[[1]]), id = 273
{code}
> Sql. Custom data types. IgniteIndexScan has incorrect types in searchBounds.
> -----------------------------------------------------------------------------
>
> Key: IGNITE-19128
> URL: https://issues.apache.org/jira/browse/IGNITE-19128
> Project: Ignite
> Issue Type: Bug
> Components: sql
> Affects Versions: 3.0.0-beta2
> Reporter: Maksim Zhuravkov
> Priority: Major
> Labels: ignite-3
>
> IgniteIndexScanNode has incorrect types in its search bounds although the filter has correct types in it condition.
> Example:
> {code:java}
> @Test
> public void test() {
> sql("CREATE TABLE t (id INTEGER PRIMARY KEY, test_key UUID)");
> sql("CREATE INDEX t_test_key_idx ON t (test_key)");
> sql("SELECT * FROM t WHERE test_key > '00000000-0000-0001-0000-000000000001'::UUID AND test_key < '00000000-0000-0001-0000-000000000003'::UUID ORDER BY id");
> }
> {code}
> Error:
> {code:java}
> Caused by: java.lang.AssertionError: storageType is class java.util.UUID value must also be class java.util.UUID but it was: 00000000-0000-0001-0000-000000000001
> at org.apache.ignite.internal.sql.engine.util.SafeCustomTypeInternalConversion.tryConvertFromInternal(SafeCustomTypeInternalConversion.java:72)
> at org.apache.ignite.internal.sql.engine.util.TypeUtils.fromInternal(TypeUtils.java:330)
> at org.apache.ignite.internal.sql.engine.exec.RowConverter.toByteBuffer(RowConverter.java:141)
> at org.apache.ignite.internal.sql.engine.exec.RowConverter.toBinaryTuplePrefix(RowConverter.java:85)
> at org.apache.ignite.internal.sql.engine.exec.rel.IndexScanNode.toBinaryTuplePrefix(IndexScanNode.java:208)
> at org.apache.ignite.internal.sql.engine.exec.rel.IndexScanNode.partitionPublisher(IndexScanNode.java:146)
> {code}
> Plan:
> {code:java}
> IgniteExchange(distribution=[single]), id = 291
> IgniteSort(sort0=[$0], dir0=[ASC]), id = 290
> IgniteIndexScan(table=[[PUBLIC, T]], index=[T_TEST_KEY_IDX], type=[SORTED], searchBounds=[[RangeBounds [lowerBound=_UTF-8'00000000-0000-0001-0000-000000000001', upperBound=_UTF-8'00000000-0000-0003-0000-000000000001', lowerInclude=false, upperInclude=false]]], filters=[AND(>($t1, CAST(_UTF-8'00000000-0000-0001-0000-000000000001'):UUID NOT NULL), <($t1, CAST(_UTF-8'00000000-0000-0003-0000-000000000001'):UUID NOT NULL))], requiredColumns=[{0, 1}], collation=[[1]]), id = 273
> {code}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)