[ 
https://issues.apache.org/jira/browse/IGNITE-21009?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17802179#comment-17802179
 ] 

Igor Sapego commented on IGNITE-21009:
--------------------------------------

Looks good to me.

> .NET: Thin 3.0: Nullable columns are not supported in KeyValueView with 
> primitive mapping
> -----------------------------------------------------------------------------------------
>
>                 Key: IGNITE-21009
>                 URL: https://issues.apache.org/jira/browse/IGNITE-21009
>             Project: Ignite
>          Issue Type: Bug
>          Components: platforms, thin client
>    Affects Versions: 3.0.0-beta1
>            Reporter: Pavel Tupitsyn
>            Assignee: Pavel Tupitsyn
>            Priority: Major
>              Labels: .NET, ignite-3
>             Fix For: 3.0.0-beta2
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> The following test fails:
> {code}
>     [Test]
>     public async Task TestPutGetNullable()
>     {
>         await Client.Sql.ExecuteAsync(null, "CREATE TABLE TestPutGetNullable 
> (ID BIGINT PRIMARY KEY, VAL BIGINT)");
>         await Client.Sql.ExecuteAsync(null, "INSERT INTO TestPutGetNullable 
> VALUES (1, 1), (2, NULL)");
>         var table = await Client.Tables.GetTableAsync("TestPutGetNullable");
>         var view = table!.GetKeyValueView<long, long>();
>         var res1 = await view.GetAsync(null, 1);
>         var res2 = await view.GetAsync(null, 2);
>     }
> {code}
> Result:
> {code}
> System.InvalidOperationException : Binary tuple element with index 1 is null.
>    at 
> Apache.Ignite.Internal.Proto.BinaryTuple.BinaryTupleReader.ThrowNullElementException[T](Int32
>  index) in 
> /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Proto/BinaryTuple/BinaryTupleReader.cs:line
>  572
>    at 
> Apache.Ignite.Internal.Proto.BinaryTuple.BinaryTupleReader.GetLong(Int32 
> index) in 
> /home/pavel/w/ignite-3/modules/platforms/dotnet/Apache.Ignite/Internal/Proto/BinaryTuple/BinaryTupleReader.cs:line
>  155
>    at 
> ReadApache.Ignite.Internal.Table.Serialization.KvPair`2[System.Int64,System.Int64](BinaryTupleReader&
>  )
>    at 
> Apache.Ignite.Internal.Table.Serialization.ObjectSerializerHandler`1.Read(MsgPackReader&
>  reader, Schema schema, Boolean keyOnly)
>    at 
> Apache.Ignite.Internal.Table.Serialization.RecordSerializer`1.ReadValue(PooledBuffer
>  buf, Schema schema)
>    at Apache.Ignite.Internal.Table.RecordView`1.GetAsync(ITransaction 
> transaction, T key)
>    at Apache.Ignite.Internal.Table.KeyValueView`2.GetAsync(ITransaction 
> transaction, TK key)
>    at 
> Apache.Ignite.Tests.Table.KeyValueViewPrimitiveTests.TestPutGetNullable()
> {code}
> *ITable.GetKeyValueView* does not allow nullable types ("where TV : notnull") 
> - so we don't have a way to work with nullable columns in this case.
> See how Java handles this with additional nullable methods: IGNITE-16115
> *Option<T>* can represent 3 states to handle this situation:
> * hasValue=true, value != null
> * hasValue=true, value = null
> * hasValue=false



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

Reply via email to