[ 
https://issues.apache.org/jira/browse/IGNITE-19066?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Andrey Mashenkov updated IGNITE-19066:
--------------------------------------
    Labels: ignite-3  (was: calcite3-required ignite-3)

> Sql. Investigate why there is more than one instance of default value 
> placeholder.
> ----------------------------------------------------------------------------------
>
>                 Key: IGNITE-19066
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19066
>             Project: Ignite
>          Issue Type: Improvement
>          Components: sql
>            Reporter: Maksim Zhuravkov
>            Priority: Minor
>              Labels: ignite-3
>
> Investigate why there is more than value of default value placeholder even 
> though Default value placeholder implements readResolve method and it is uses 
> java serialization. 
> Reproducer:
> Update RexImpTable to use the following code for placeholders.
> {code:java}
> private static class Placeholder {
>         static final Object DEFAULT_VALUE = DefaultValuePlaceholder.VALUE;
>         static final Object UNSPECIFIED_VALUE = 
> UnspecifiedValuePlaceholder.VALUE;
>     }
>     public static void ensurePlaceholderRemoved(Object value) {
>         if (value instanceof DefaultValuePlaceholder && value != 
> Placeholder.DEFAULT_VALUE) {
>             throw new AssertionError("Unexpected DEFAULT value placeholder: " 
> + value + ". Expected: " + Placeholder.DEFAULT_VALUE);
>         }
>     }
>     private static final class DefaultValuePlaceholder implements 
> Serializable {
>         private static final DefaultValuePlaceholder VALUE = new 
> DefaultValuePlaceholder();
>         private static final long serialVersionUID = -978388731876609995L;
>         private Object readResolve() {
>             return VALUE;
>         }
>         public String toString() {
>             return "DEFAULT#" + hashCode();
>         }
>     }
>     private static final class UnspecifiedValuePlaceholder implements 
> Serializable {
>         private static final UnspecifiedValuePlaceholder VALUE = new 
> UnspecifiedValuePlaceholder();
>         private static final long serialVersionUID = 3312208611999510012L;
>         private Object readResolve() {
>             return VALUE;
>         }
>         public String toString() {
>             return "<UNSPECIFIED_VALUE>";
>         }
>     }
> {code}
> Update IgniteTableImpl convertRow:
> {code:java}
> Object val = hnd.get(colDesc.logicalIndex(), row);
> + if (val != null) {
> +  RexImpTable.ensurePlaceholderRemoved(val);
> + }
> {code}
> Error:
> {code:java}
> Caused by: java.lang.AssertionError: Unexpected DEFAULT value placeholder: 
> DEFAULT#238068340. Expected: DEFAULT#1599919888
>       at 
> org.apache.ignite.internal.sql.engine.exec.exp.RexImpTable.ensurePlaceholderRemoved(RexImpTable.java:2588)
>       at 
> org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.convertRow(IgniteTableImpl.java:514)
>       at 
> org.apache.ignite.internal.sql.engine.schema.IgniteTableImpl.insertAll(IgniteTableImpl.java:390)
>       at 
> org.apache.ignite.internal.sql.engine.exec.rel.ModifyNode.flushTuples(ModifyNode.java:218)
>       at 
> org.apache.ignite.internal.sql.engine.exec.rel.ModifyNode.tryEnd(ModifyNode.java:187)
>       at 
> org.apache.ignite.internal.sql.engine.exec.rel.ModifyNode.end(ModifyNode.java:160)
>       at 
> org.apache.ignite.internal.sql.engine.exec.rel.Inbox.pushUnordered(Inbox.java:333)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to