Details
-
Bug
-
Status: Resolved
-
Low
-
Resolution: Fixed
-
None
-
Low
Description
Attempting to use blob conversion functions e.g. textAsBlob, from 3.0 - 3.7 results in:
Exception in thread "main" org.apache.cassandra.exceptions.InvalidRequestException: Unknown function textasblob called at org.apache.cassandra.cql3.functions.FunctionCall$Raw.prepare(FunctionCall.java:136) at org.apache.cassandra.cql3.Operation$SetValue.prepare(Operation.java:163) at org.apache.cassandra.cql3.statements.UpdateStatement$ParsedInsert.prepareInternal(UpdateStatement.java:173) at org.apache.cassandra.cql3.statements.ModificationStatement$Parsed.prepare(ModificationStatement.java:785) at org.apache.cassandra.cql3.statements.ModificationStatement$Parsed.prepare(ModificationStatement.java:771) at org.apache.cassandra.io.sstable.CQLSSTableWriter$Builder.prepareInsert(CQLSSTableWriter.java:567) at org.apache.cassandra.io.sstable.CQLSSTableWriter$Builder.build(CQLSSTableWriter.java:510)
The following snippet will reproduce the issue
String table = String.format("%s.%s", "test_ks", "test_table"); String schema = String.format("CREATE TABLE %s (test_text text, test_blob blob, PRIMARY KEY(test_text));", table); String insertStatement = String.format("INSERT INTO %s (test_text, test_blob) VALUES (?, textAsBlob(?))", table); File tempDir = Files.createTempDirectory("tempDir").toFile(); CQLSSTableWriter sstableWriter = CQLSSTableWriter.builder() .forTable(schema) .using(insertStatement) .inDirectory(tempDir) .build();
This is caused in FunctionResolver.get(...) when candidates.addAll(Schema.instance.getFunctions(name.asNativeFunction())); is called, as there is no system keyspace initialised.