Hi All, I have a need where I get a raw CQL create table statement as a String and I need to parse the keyspace, tablename, columns and so on..so I can use it for various queries and send it to C*. I used the example below from this link <https://github.com/tacoo/cassandra-antlr-sample>. I get the following error. And I thought maybe someone in this mailing list will be more familiar with internals.
Exception in thread "main" org.apache.cassandra.exceptions.ConfigurationException: Keyspace test_keyspace doesn't exist at org.apache.cassandra.cql3.statements.CreateTableStatement$ RawStatement.prepare(CreateTableStatement.java:200) at com.hello.world.Test.main(Test.java:23) Here is my code. package com.hello.world; import org.antlr.runtime.ANTLRStringStream; import org.antlr.runtime.CommonTokenStream; import org.apache.cassandra.cql3.CqlLexer; import org.apache.cassandra.cql3.CqlParser; import org.apache.cassandra.cql3.statements.CreateTableStatement; import org.apache.cassandra.cql3.statements.ParsedStatement; public class Test { public static void main(String[] args) throws Exception { String stmt = "create table if not exists test_keyspace.my_table (field1 text, field2 int, field3 set<ascii>, field4 map<ascii, text>, primary key (field1) );"; ANTLRStringStream stringStream = new ANTLRStringStream(stmt); CqlLexer cqlLexer = new CqlLexer(stringStream); CommonTokenStream token = new CommonTokenStream(cqlLexer); CqlParser parser = new CqlParser(token); ParsedStatement query = parser.query(); if (query.getClass().getDeclaringClass() == CreateTableStatement.class) { CreateTableStatement.RawStatement cts = (CreateTableStatement.RawStatement) query; System.out.println(cts.keyspace()); System.out.println(cts.columnFamily()); ParsedStatement.Prepared prepared = cts.prepare(); CreateTableStatement cts2 = (CreateTableStatement) prepared.statement; cts2.getCFMetaData() .getColumnMetadata() .values() .stream() .forEach(cd -> System.out.println(cd)); } } } Thanks!