You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Kuku1 (JIRA)" <ji...@apache.org> on 2016/08/12 13:52:20 UTC

[jira] [Commented] (CASSANDRA-12450) CQLSSTableWriter does not allow Update statement

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

Kuku1 commented on CASSANDRA-12450:
-----------------------------------

I've looked up on some more evidence whether the UPDATE statements have been intentionally removed or not: 

The CQLSSTableWriterTest also contains a test called ["testForbidCounterUpdates"|https://github.com/apache/cassandra/blob/trunk/test/unit/org/apache/cassandra/io/sstable/CQLSSTableWriterTest.java#L131] that should be testing _counter_ updates according to its name. 
However, the IllegalArgumentException that will be thrown currently is not caused by the counter column (or at least it shouldn't be caused by it if I'm not mistaken). 

Thus, I am expecting the UPDATE statement to be broken and not intentionally removed. 

> CQLSSTableWriter does not allow Update statement
> ------------------------------------------------
>
>                 Key: CASSANDRA-12450
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-12450
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Streaming and Messaging
>            Reporter: Kuku1
>
> CQLSSTableWriter throws Exception when trying to use Update statement.
> Has been working fine in previous versions for me.
> Code:
> {code}
> 	public static void main(String[] args) throws IOException {
> 		final String KS = "test";
> 		final String TABLE = "data";
> 		final String schema = "CREATE TABLE " + KS + "." + TABLE
> 				+ "(k text, c1 text, c2 text, c3 text, v text, primary key(k, c1,c2,c3))";
> 		final String query = "UPDATE " + KS + "." + TABLE + " SET v = ? WHERE k = ? and c1 = ? and c2 = ?";
> 		File dataDir = new File(...);
> 		CQLSSTableWriter writer = CQLSSTableWriter.builder().inDirectory(dataDir).forTable(schema).using(query).build(); //Exception here (see below) 
> 		HashMap<String, Object> row = new HashMap<>();
> 		row.put("k", "a");
> 		row.put("c1", "a");
> 		row.put("c2", "a");
> 		row.put("c3", "a");
> 		row.put("v", "v");
> 		writer.addRow(row);
> 		writer.close();
> 	}
> {code}
> Exception:
> {code}
> 14:51:00.461 [main] INFO  o.a.cassandra.cql3.QueryProcessor - Initialized prepar
> ed statement caches with 0 MB (native) and 0 MB (Thrift)
> Exception in thread "main" java.lang.IllegalArgumentException: Invalid query, mu
> st be a INSERT statement but was: class org.apache.cassandra.cql3.statements.Upd
> ateStatement$ParsedUpdate
>         at org.apache.cassandra.io.sstable.CQLSSTableWriter.parseStatement(CQLSS
> TableWriter.java:589)
>         at org.apache.cassandra.io.sstable.CQLSSTableWriter.access$000(CQLSSTabl
> eWriter.java:102)
>         at org.apache.cassandra.io.sstable.CQLSSTableWriter$Builder.using(CQLSST
> ableWriter.java:445)
>         at CassandraJsonImporter.main(Cassand
> raJsonImporter.java:66)
> {code}
> I'm currently testing it with 3.7 version, my POM looks like this:
> {code}
> <dependency>
>     <groupId>org.apache.cassandra</groupId>
>     <artifactId>cassandra-all</artifactId>
>     <version>3.7</version>
> </dependency>
> <dependency>
>     <groupId>org.apache.cassandra</groupId>
>     <artifactId>cassandra-clientutil</artifactId>
>     <version>3.7</version>
> </dependency>
> <dependency>
>   <groupId>com.datastax.cassandra</groupId>
>   <artifactId>cassandra-driver-core</artifactId>
>   <version>3.0.0</version>
> </dependency>
> {code}
> It has been working with 3.0.8 versions in the POM, but that version is somehow not including the UDT support? 
> I want to use UPDATE instead of INSERT because I need to append data to lists and do not want to overwrite existing data in the lists. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)