I think I understand what you are trying to do … but what is your goal? What do you mean “use it for different” queries… Maybe you want to do an event and have an event processor? Seems like you are trying to basically by pass that pattern and parse a query and split it into several actions?
Did you look into this unit test folder? https://github.com/apache/cassandra/blob/trunk/test/unit/org/apache/cassandra/cql3/CQLTester.java -- Rahul Singh rahul.si...@anant.us Anant Corporation On Feb 5, 2018, 4:06 PM -0500, Kant Kodali <k...@peernova.com>, wrote: > 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. 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!