[
https://issues.apache.org/jira/browse/CASSANDRA-21735?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Brandon Williams updated CASSANDRA-21735:
-----------------------------------------
Bug Category: Parent values: Correctness(12982)Level 1 values: Transient
Incorrect Response(12987)
Complexity: Normal
Component/s: Feature/UDF
Discovered By: User Report
Fix Version/s: 5.0.x
6.x
7.x
Severity: Normal
Status: Open (was: Triage Needed)
> Result metadata reports timeuuid results of functions as custom type
> LegacyTimeUUIDType, so drivers can't decode them
> ---------------------------------------------------------------------------------------------------------------------
>
> Key: CASSANDRA-21735
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21735
> Project: Apache Cassandra
> Issue Type: Bug
> Components: Feature/UDF
> Reporter: Nadav Har'El
> Priority: Normal
> Fix For: 5.0.x, 6.x, 7.x
>
>
> Since the TimeUUID refactoring in CASSANDRA-17176 (4.1.0), several functions
> on {{timeuuid}} values describe their result in the result metadata as the
> custom type {{org.apache.cassandra.db.marshal.LegacyTimeUUIDType}} instead of
> the native {{timeuuid}} type. Drivers don't know this custom type, so they
> return the raw bytes instead of a UUID:
> {{CREATE TABLE ks.t (pk int PRIMARY KEY, v timeuuid);
> INSERT INTO ks.t (pk, v) VALUES (1, 2deb23e0-96b5-11e5-b26d-a939dd1405a3);
> SELECT max(v) FROM ks.t; -- type:
> 'org.apache.cassandra.db.marshal.LegacyTimeUUIDType'
> SELECT blobAsTimeuuid(timeuuidAsBlob(v)) FROM ks.t; -- same
> CREATE FUNCTION ks.f (a timeuuid, b timeuuid) CALLED ON NULL INPUT RETURNS
> timeuuid LANGUAGE java AS 'return b;';
> SELECT ks.f(v, v) FROM ks.t; -- same}}
> The Python driver returns {{b'-\xeb#\xe0...'}} instead of
> {{UUID('2deb23e0-…')}} for all three. A plain {{SELECT v}} and a
> {{(timeuuid)}} literal are correctly described as {{{}timeuuid{}}}.
>
> The cause appears to be {{{}TimeUUIDType.udfType(){}}}, which returns
> {{{}LegacyTimeUUIDType.instance{}}}. That type is used for function
> signatures (UDFs, {{{}BytesConversionFcts{}}}, aggregates), and only
> {{TimeUUIDType}} is mapped to the protocol's native {{timeuuid}} type code.
> Reproduced on 5.0 and trunk (6.0). TermSelectionTest.testConstantFunctionArgs
> checks a UDF returning a {{{}timeuuid{}}}, but it reads the result inside
> Cassandra (CQLTester.execute()), without serializing the result metadata, so
> it doesn't notice.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]