在Phantom-dsl和Cassandra

时间:2015-10-14 21:56:01

标签: scala cql3 phantom-dsl

目前正在使用 -

cqlsh> show version
[cqlsh 4.1.1 | Cassandra 2.0.17 | CQL spec 3.1.1 | Thrift protocol 19.39.0]

使用phantom-dsl 1.12.2,Scala 2.10 ..

我无法弄清楚如何在查询上设置一致性级别。

预定义函数insert()select()CassandraTable的一部分。如何将一致性级别传递给它们?

insert.value(....).consistencyLevel_=(ConsistencyLevel.QUORUM)

不起作用并因错误而失败(可能是因为它在查询结尾附加了“USING CONSISTENCY QUORUM”)。这是我得到的实际例外

com.datastax.driver.core.exceptions.SyntaxError: line 1:424 no viable alternative at input 'CONSISTENCY'
at com.datastax.driver.core.Responses$Error.asException(Responses.java:122) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.DefaultResultSetFuture.onSet(DefaultResultSetFuture.java:120) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.setFinalResult(RequestHandler.java:186) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler.access$2300(RequestHandler.java:45) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.setFinalResult(RequestHandler.java:754) ~[cassandra-driver-core-2.2.0-rc3.jar:na]
at com.datastax.driver.core.RequestHandler$SpeculativeExecution.onSet(RequestHandler.java:576) ~[cassandra-driver-core-2.2.0-rc3.jar:na]

我从this pull请求的文档和讨论中看到我可以在SimpleStatement上执行setConsistencyLevel(ConsistencyLevel.QUORUM),但我不希望重写所有不同的insert语句。

更新

只是关闭此问题的循环。我通过创建自定义InsertQuery并使用final def insert

中的CassandraTable提供的自定义 def qinsert()(implicit keySpace: KeySpace) = { val table = this.asInstanceOf[T] new InsertQuery[T, M, Unspecified](table, CQLQuery("INSERT into keyspace.tablename", consistencyLevel = ConsistencyLevel.QUORUM) } 来解决此问题。
*c

1 个答案:

答案 0 :(得分:4)

首先,幻像中没有select * from tablename a WHERE a.date >= '2015-04-13' AND a.date <= '2015-04-21' AND CASE WHEN :1 = 'Y' THEN ((DATEPART(dw, a.date) + @@DATEFIRST) % 7) NOT IN (0, 1) END 方法,而您使用的API方法最后缺少setValue

正确的结构是:

=

当您处于stackoverflow时,错误堆栈跟踪和不起作用的具体细节通常优于&#34;不起作用&#34;。