[jira] [Commented] (IGNITE-21009) .NET: Thin 3.0: Nullable columns are not supported in KeyValueView with primitive mapping

2024-01-04 Thread Pavel Tupitsyn (Jira)


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

Pavel Tupitsyn commented on IGNITE-21009:
-

Merged to main: ba4f9572bb2e2509cdf6dd1758dda5bd05b2b88c

> .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: 20m
>  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();
> 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* 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)


[jira] [Commented] (IGNITE-21009) .NET: Thin 3.0: Nullable columns are not supported in KeyValueView with primitive mapping

2024-01-03 Thread Igor Sapego (Jira)


[ 
https://issues.apache.org/jira/browse/IGNITE-21009?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=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();
> 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* 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)