Yifan Cai created CASSANDRA-15857:
-------------------------------------

             Summary: Frozen RawTuple is not annotated with frozen in the 
toString method
                 Key: CASSANDRA-15857
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-15857
             Project: Cassandra
          Issue Type: Bug
          Components: Legacy/CQL
            Reporter: Yifan Cai
            Assignee: Yifan Cai


All raw types (e.g. RawCollection, RawUT) that supports freezing wraps the type 
name with 'frozen<>' in the toString method, except RawTuple.

Therefore, the RawTuple::toString output misses the frozen wrapper.

Tuple is always frozen. However since CASSANDRA-15035, it throws when the inner 
tuple is not explicitly wrapped with frozen within a collection.

The method, CQL3Type.Raw::toString, is referenced at multiple places in the 
source. For example, referenced in CreateTypeStatement.Raw and involved in 
CQLSSTableWriter. Another example is that it is called to produce the 
SchemaChange at several AlterSchemaStatement implementations.

A test can prove that missing the frozen wrapper causes exception when building 
CQLSSTableWriter for user types defined like below. Note that the inner tuple 
is wrapped with frozen in the initial CQL statement.
{code:java}
CREATE TYPE ks.fooType ( f list<frozen<tuple<text, text>>> )
{code}
{code:java}
org.apache.cassandra.exceptions.InvalidRequestException: Non-frozen tuples are 
not allowed inside collections: list<tuple<text, text>>
        at 
org.apache.cassandra.cql3.CQL3Type$Raw$RawCollection.throwNestedNonFrozenError(CQL3Type.java:710)
        at 
org.apache.cassandra.cql3.CQL3Type$Raw$RawCollection.prepare(CQL3Type.java:669)
        at 
org.apache.cassandra.cql3.CQL3Type$Raw$RawCollection.prepareInternal(CQL3Type.java:661)
        at 
org.apache.cassandra.schema.Types$RawBuilder$RawUDT.lambda$prepare$1(Types.java:341)
        at 
java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at 
java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
        at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
        at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
        at 
java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
        at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at 
java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
        at 
org.apache.cassandra.schema.Types$RawBuilder$RawUDT.prepare(Types.java:342)
        at org.apache.cassandra.schema.Types$RawBuilder.build(Types.java:291)
        at 
org.apache.cassandra.io.sstable.CQLSSTableWriter$Builder.createTypes(CQLSSTableWriter.java:551)
        at 
org.apache.cassandra.io.sstable.CQLSSTableWriter$Builder.build(CQLSSTableWriter.java:527)
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to