package org.wonderdb.parser.jtree; /******************************************************************************* * Copyright 2013 Vilas Athavale * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *******************************************************************************/ import java.util.ArrayList; import java.util.List; import org.jboss.netty.buffer.ChannelBuffer; import org.wonderdb.query.parse.CreateIndexQuery; import org.wonderdb.query.parse.DBCreateStorageQuery; import org.wonderdb.query.parse.DBCreateTableQuery; import org.wonderdb.query.parse.DBDeleteQuery; import org.wonderdb.query.parse.DBInsertQuery; import org.wonderdb.query.parse.DBQuery; import org.wonderdb.query.parse.DBShowPlanQuery; import org.wonderdb.query.parse.DBUpdateQuery; import org.wonderdb.query.parse.ShowSchemaQuery; import org.wonderdb.query.parse.ShowTableQuery; import org.wonderdb.query.parser.jtree.DBSelectQueryJTree; import org.wonderdb.query.plan.DataContext; public class QueryParser { private static QueryParser parser = new QueryParser(); private QueryParser() { } public static QueryParser getInstance() { return parser; } public DBQuery parse(String query) { return parse(query, new ArrayList<Object>(), -1, null); } public DBQuery parse(String query, List<Object> bindParamList, int type, ChannelBuffer buffer) { UQLParser parser = new UQLParser(query); SimpleNode node = null; try { node = parser.Start(); } catch (Exception e) { throw new RuntimeException(e); } List<SimpleNode> bindList = new ArrayList<SimpleNode>(); SimpleNodeHelper.getInstance().getNodes(node, UQLParserTreeConstants.JJTQ, bindList); if (bindList.size() != bindParamList.size()) { throw new RuntimeException("Invalid bind params"); } for (int i = 0; i < bindParamList.size(); i++) { Object o = bindParamList.get(i); SimpleNode n = bindList.get(i); n.jjtSetValue(o); } DBQuery dbQuery = null; node = (SimpleNode) node.children[0]; switch (node.id) { case UQLParserTreeConstants.JJTSELECTSTMT: DBSelectQueryJTree selectTreeQuery = new DBSelectQueryJTree(query, node, node, type, buffer); return selectTreeQuery; case UQLParserTreeConstants.JJTINSERTSTMT: dbQuery = new DBInsertQuery(query, node, type, new DataContext(), buffer); return dbQuery; case UQLParserTreeConstants.JJTCREATEINDEX: dbQuery = new CreateIndexQuery(query, node); return dbQuery; case UQLParserTreeConstants.JJTCREATETABLE: dbQuery = new DBCreateTableQuery(query, node); return dbQuery; case UQLParserTreeConstants.JJTUPDATESTMT: dbQuery = new DBUpdateQuery(query, node, type, buffer); return dbQuery; case UQLParserTreeConstants.JJTDELETESTMT: dbQuery = new DBDeleteQuery(query, node, type, buffer); return dbQuery; case UQLParserTreeConstants.JJTSHOWTABLE: dbQuery = new ShowTableQuery(query, node); return dbQuery; // case UQLParserTreeConstants.JJTSHOWINDEX: // dbQuery = new ShowIndexQuery(stmt); // return dbQuery; case UQLParserTreeConstants.JJTSHOWSCHEMA: dbQuery = new ShowSchemaQuery(query); return dbQuery; case UQLParserTreeConstants.JJTEXPLAINPLAN: dbQuery = new DBShowPlanQuery(query, node); return dbQuery; case UQLParserTreeConstants.JJTCREATESTORAGE: dbQuery = new DBCreateStorageQuery(query, node); return dbQuery; default: throw new RuntimeException("Invalid query"); } } }