Skip to content

Commit

Permalink
Fix schema loading of UDTs inside vectors inside UDTs
Browse files Browse the repository at this point in the history
patch by Aleksey Yeschenko; reviewed by Marcus Eriksson for
CASSANDRA-18964
  • Loading branch information
iamaleksey committed Oct 26, 2023
1 parent 3088b81 commit 7d54a62
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
1 change: 1 addition & 0 deletions CHANGES.txt
@@ -1,4 +1,5 @@
5.0-alpha2
* Fix schema loading of UDTs inside vectors inside UDTs (CASSANDRA-18964)
* Add cqlsh autocompletion for the vector data type (CASSANDRA-18946)
* Fix nodetool tablehistograms output to avoid printing repeated information and ensure at most two arguments (CASSANDRA-18955)
* Change the checksum algorithm SAI-related files use from CRC32 to CRC32C (CASSANDRA-18836)
Expand Down
6 changes: 6 additions & 0 deletions src/java/org/apache/cassandra/cql3/CQL3Type.java
Expand Up @@ -899,6 +899,12 @@ public boolean isVector()
return true;
}

@Override
public boolean referencesUserType(String name)
{
return element.referencesUserType(name);
}

@Override
public boolean supportsFreezing()
{
Expand Down
Expand Up @@ -34,6 +34,7 @@
import org.apache.cassandra.db.marshal.Int32Type;
import org.apache.cassandra.db.marshal.VectorType;
import org.apache.cassandra.exceptions.InvalidRequestException;
import org.apache.cassandra.schema.SchemaKeyspace;
import org.apache.cassandra.transport.ProtocolVersion;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.assertj.core.api.Assertions;
Expand Down Expand Up @@ -188,6 +189,22 @@ public void invalidNumberOfDimensionsVariableWidth() throws Throwable
"INSERT INTO %s (pk, value) VALUES (0, ?)", vector("a", "b", "c"));
}

@Test
public void sandwichBetweenUDTs()
{
schemaChange("CREATE TYPE cql_test_keyspace.b (y int);");
schemaChange("CREATE TYPE cql_test_keyspace.a (z vector<frozen<b>, 2>);");

// make sure types can be loaded back; see https://issues.apache.org/jira/browse/CASSANDRA-18964
SchemaKeyspace.fetchNonSystemKeyspaces();

createTable("CREATE TABLE %s (pk int primary key, value a)");

execute("INSERT INTO %s (pk, value) VALUES (0, {z: [{y:1}, {y:2}]})");
assertRows(execute("SELECT * FROM %s"),
row(0, userType("z", vector(userType("y", 1), userType("y", 2)))));
}

@Test
public void invalidElementTypeFixedWidth() throws Throwable
{
Expand Down

0 comments on commit 7d54a62

Please sign in to comment.