You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Joel Knighton (JIRA)" <ji...@apache.org> on 2017/06/13 15:44:00 UTC

[jira] [Comment Edited] (CASSANDRA-12606) CQLSSTableWriter unable to use blob conversion functions

    [ https://issues.apache.org/jira/browse/CASSANDRA-12606?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16047952#comment-16047952 ] 

Joel Knighton edited comment on CASSANDRA-12606 at 6/13/17 3:43 PM:
--------------------------------------------------------------------

Sorry - as you well know, it's 100% (200%?) my fault this sat for so long. This looks good to me, but I'd like to rebase and rerun tests since the base branches have changed in the meantime. I'll do so, and if the tests come back good, I'll +1.

Some minor nits:
* on all versions, {{testUpdateSatement}} -> {{testUpdateStatement}} in {{CQLSSTableWriterTest}}. It looks like this typo already existed in later branches, so might as well fix there too.
* on 3.11/trunk, there seem to be some unused imports in {{CQLSSTableWriter}} (Collection, Function, FunctionName).
* on 3.11/trunk, there's a bit of duplicate code in creating the types/tables down either branch of KeyspaceMetadata existence in {{CQLSSTableWriter.Builder.build()}}. You could move this out of the conditional and then do a direct null check on {{ksm.tables.getNullable(...)}}. That said, it only removes a few lines of duplicate code in a piece of code that isn't touched often, so I'm fine either way on this.


was (Author: jkni):
Sorry - as you well know, it's 100% (200%?) my fault this sat for so long. This looks good to me, but I'd like to rebase and rerun tests since the base branches have changed in the meantime. I'll do so, and if the tests come back good, I'll +1.

Some minor nits:
* on all versions, {{testUpdateSatement}} -> {{testUpdateStatement}} in {{CQLSSTableWriterTest}}. It looks like this typo already existed in later branches, so might as well fix there too.
* on 3.11/trunk, there seem to be some unused imports in {{CQLSSTableWriter}} (Collection, Function, FunctionName).
* on 3.11/trunk, in the createTable docstring, the word types is duplicated.
* on 3.11/trunk, there's a bit of duplicate code in creating the types/tables down either branch of KeyspaceMetadata existence in {{CQLSSTableWriter.Builder.build()}}. You could move this out of the conditional and then do a direct null check on {{ksm.tables.getNullable(...)}}. That said, it only removes a few lines of duplicate code in a piece of code that isn't touched often, so I'm fine either way on this.

> CQLSSTableWriter unable to use blob conversion functions
> --------------------------------------------------------
>
>                 Key: CASSANDRA-12606
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-12606
>             Project: Cassandra
>          Issue Type: Bug
>          Components: CQL, Tools
>            Reporter: Mark Reddy
>            Assignee: Alex Petrov
>            Priority: Minor
>
> Attempting to use blob conversion functions e.g. textAsBlob, from 3.0 - 3.7 results in:
> {noformat}
> 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)
> {noformat}
> The following snippet will reproduce the issue
> {code}
> 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();
> {code}
> This is caused in FunctionResolver.get(...) when candidates.addAll(Schema.instance.getFunctions(name.asNativeFunction())); is called, as there is no system keyspace initialised.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

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