Query Builder

The Query DSL provides methods such as all, column, partition and cluster which will generate the correspoding CQL statement.

Query DSL

Given our SimpleTable definition we can create different queries.

All

val q1 = t1.query.all.build
q1.cqlStatement
// res0: String = SELECT intColumn,longColumn,stringColumn,timeUuidColumn FROM test_ks.test_table

Column

val q2 = t1.query.column('stringColumn).build
q2.cqlStatement
// res1: String = SELECT stringColumn FROM test_ks.test_table

Column with alias

val q3 = t1.query.columnAs('stringColumn, "my_alias").build
q3.cqlStatement
// res2: String = SELECT stringColumn AS my_alias FROM test_ks.test_table

Function: Count

import spinoco.fs2.cassandra.functions

val q4 = t1.query.function(functions.count, "rows_count").build
q4.cqlStatement
// res3: String = SELECT count(*) AS rows_count FROM test_ks.test_table

Function: DateOf

val q5 = t1.query.functionAt(functions.dateOf, 'timeUuidColumn, "time_of_uuid").build
q5.cqlStatement
// res4: String = SELECT dateOf(timeUuidColumn) AS time_of_uuid FROM test_ks.test_table

Function: UnixTimestampOf

val q6 = t1.query.functionAt(functions.unixTimestampOf, 'timeUuidColumn, "timestamp_of_uuid").build
q6.cqlStatement
// res5: String = SELECT unixTimestampOf(timeUuidColumn) AS timestamp_of_uuid FROM test_ks.test_table

Function: WriteTimeOf

val q7 = t1.query.functionAt(functions.writeTimeOfMicro[String], 'stringColumn, "write_time_of").build
q7.cqlStatement
// res6: String = SELECT WRITETIME(stringColumn) AS write_time_of FROM test_ks.test_table

Function: TTLOf

val q8 = t1.query.functionAt(functions.ttlOf[String], 'stringColumn, "ttl_of").build
q8.cqlStatement
// res7: String = SELECT TTL(stringColumn) AS ttl_of FROM test_ks.test_table

Partition

val q9 = t1.query.column('stringColumn).partition.build
q9.cqlStatement
// res8: String = SELECT stringColumn FROM test_ks.test_table WHERE intColumn = :intColumn

Partition and Cluster

import spinoco.fs2.cassandra.Comparison

val q10 = t2.query.all.partition.cluster('longColumn, Comparison.GTEQ).build
q10.cqlStatement
// res9: String = SELECT intColumn,longColumn,stringColumn,timeUuidColumn FROM test_ks.test_table WHERE intColumn = :intColumn AND longColumn >= :longColumn

Limit

val q11 = t1.query.all.limit(1).build
q11.cqlStatement
// res10: String = SELECT intColumn,longColumn,stringColumn,timeUuidColumn FROM test_ks.test_table LIMIT 1

Allow Filtering

val q12 = t1.query.all.allowFiltering.build
q12.cqlStatement
// res11: String = SELECT intColumn,longColumn,stringColumn,timeUuidColumn FROM test_ks.test_table WITH ALLOW FILTERING

Order By

val q13 = t2.query.all.orderBy('longColumn, ascending = true).build
q13.cqlStatement
// res12: String = SELECT intColumn,longColumn,stringColumn,timeUuidColumn FROM test_ks.test_table ORDER BY longColumn ASC