/
CreateTableParser.kt
47 lines (34 loc) · 1.5 KB
/
CreateTableParser.kt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.rustyrazorblade.privatevaraccess
import org.apache.cassandra.cql3.QueryProcessor
import org.apache.commons.lang3.reflect.FieldUtils
fun main(args: Array<String>) {
println("Running the parser, yay")
val query = """CREATE TABLE mytable (id int,
|cluster timeuuid,
|another_cluster timeuuid,
|val text,
|another map<int, int>,
|primary key(id, cluster, another_cluster))
|WITH CLUSTERING
|ORDER BY (cluster DESC,
| another_cluster ASC)""".trimMargin()
println(query)
val parsed = QueryProcessor.parseStatement(query)
val f = FieldUtils.getField(parsed.javaClass, "definitions", true)
val fields = FieldUtils.readField(f, parsed, true) as HashMap<*, *>
for(f in fields) {
println("Field: ${f.key}, Type: ${f.value}")
}
val keyAliasesField = FieldUtils.getField(parsed.javaClass, "keyAliases", true)
val keyAliases = FieldUtils.readField(keyAliasesField, parsed, true) as ArrayList<*>
// primary keys
println("Primary keys")
for(k in keyAliases) {
println("Partition key: $k")
}
val columnAliasesField = FieldUtils.getField(parsed.javaClass, "columnAliases", true)
val columnAliases = FieldUtils.readField(columnAliasesField, parsed, true) as ArrayList<*>
for(c in columnAliases) {
println("Clustering key: $c.")
}
}