[ https://issues.apache.org/jira/browse/IGNITE-24588?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pavel Pereslegin updated IGNITE-24588: -------------------------------------- Ignite Flags: (was: Release Notes Required) > Sql. Fail to read column with quoted identifier using client kv view. > --------------------------------------------------------------------- > > Key: IGNITE-24588 > URL: https://issues.apache.org/jira/browse/IGNITE-24588 > Project: Ignite > Issue Type: Bug > Components: sql > Reporter: Pavel Pereslegin > Priority: Major > Labels: ignite-3 > > Consider the following example which uses a valid quoted identifier, > {{"_KEY"}}. > {code:java} > IgniteClient client = IgniteClient.builder() > .addresses("127.0.0.1:" + > unwrapIgniteImpl(CLUSTER.node(0)).clientAddress().port()) > .build(); > > sql("CREATE TABLE T (\"_KEY\" INT PRIMARY KEY, val INT)"); > > KeyValueView<Tuple, Tuple> kvView = > client.tables().table("t").keyValueView(); > > Tuple key = Tuple.create().set("\"_KEY\"", 0); > > NullableValue<Tuple> nullable = kvView.getNullable(null, key); // Error: > Malformed identifier [identifier=_KEY, pos=0] > > assertNull(nullable); > {code} > fails with the following > {noformat} > Caused by: java.lang.IllegalArgumentException: Malformed identifier > [identifier=_KEY, pos=0] > at > org.apache.ignite.lang.util.IgniteNameUtils$Tokenizer.throwMalformedIdentifierException(IgniteNameUtils.java:278) > at > org.apache.ignite.lang.util.IgniteNameUtils$Tokenizer.nextToken(IgniteNameUtils.java:204) > at > org.apache.ignite.lang.util.IgniteNameUtils.parseIdentifier(IgniteNameUtils.java:45) > at org.apache.ignite.table.TupleImpl.columnIndex(TupleImpl.java:131) > at org.apache.ignite.table.TupleImpl.valueOrDefault(TupleImpl.java:145) > at > org.apache.ignite.internal.client.table.ClientTupleSerializer.getColocationHash(ClientTupleSerializer.java:450) > at > org.apache.ignite.internal.client.table.ClientTupleSerializer.lambda$getPartitionAwarenessProvider$0(ClientTupleSerializer.java:423) > at > org.apache.ignite.internal.client.table.PartitionAwarenessProvider.getObjectHashCode(PartitionAwarenessProvider.java:68) > at > org.apache.ignite.internal.client.table.ClientTable.getPreferredNodeName(ClientTable.java:713) > at > org.apache.ignite.internal.client.table.ClientTable.lambda$doSchemaOutInOpAsync$8(ClientTable.java:466) > at > java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1106) > at > java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2237) > at > org.apache.ignite.internal.client.table.ClientTable.doSchemaOutInOpAsync(ClientTable.java:464) > at > org.apache.ignite.internal.client.table.ClientTable.doSchemaOutInOpAsync(ClientTable.java:425) > at > org.apache.ignite.internal.client.table.ClientKeyValueBinaryView.getNullableAsync(ClientKeyValueBinaryView.java:132) > ... 11 more > {noformat} > At first glance, this issue is related to the ClientTupleSerializer, and we > should quote the identifier ({{quoteIfNeeded(name)}}) before passing it to > the tuple's valueOrDefault method (at least in the getColocationHash() and > writeTupleRaw() methods). > p.s. we need to add more tests for such cases (for kv and record views). -- This message was sent by Atlassian Jira (v8.20.10#820010)