📄 axionsqlparser.java
字号:
/* Generated By:JavaCC: Do not edit this line. AxionSqlParser.java */package org.axiondb.parser;import org.axiondb.*;import org.axiondb.constraints.*;import org.axiondb.types.*;import org.axiondb.functions.*;import org.axiondb.expression.*;import org.axiondb.engine.commands.*;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import java.io.InputStream;import java.io.ByteArrayInputStream;import java.util.*;/** * JavaCC generated SQL parser. * Generated from AxionSqlParser.jj ($Header: /cvs/axion/grammars/AxionSqlParser.jj,v 1.44 2003/07/08 21:45:48 rwald Exp $). * Do not edit this (.java) file directly, it is programmaticly generated. * * @author kevinh (at) empower.com.au * @author Doug Sale * @author Chuck Burdick * @author Rodney Waldhoff * @author James Strachan * @author Rob Oxspring * @author Amrish Lal * @author Rahul Dwivedi */public class AxionSqlParser implements Parser, AxionSqlParserConstants { public AxionSqlParser() { this(new ByteArrayInputStream(new byte[0])); _log.debug("created new parser"); } public AxionCommand parse(String sql) throws AxionException { this.ReInit(new ByteArrayInputStream(sql.getBytes())); try { return this.SqlCommand(); } catch(TokenMgrError e) { throw new AxionException(e); } catch(ParseException ex) { throw new AxionException(ex); } } /** * Replaces all occurances of <i>old</i> in <i>src</i> with <i>nu</i>. * * @param src the source String * @param old the character to replace * @param nu the String to replace <i>old</i> with * @return a copy of <i>src</i> with all instances of <i>old</i> * replaced by <i>nu</i> * @throws java.lang.NullPointerException if any argument is null. */ private final static String replace(String src, String old, String nu) { int srclen = src.length(); int cur = 0; int loc = 0; int oldlen = old.length(); StringBuffer buf = new StringBuffer(srclen+nu.length()); do { loc = src.indexOf(old,cur); if(loc != -1) { buf.append(src.substring(cur,loc)); buf.append(nu); cur = loc + oldlen; } } while(loc != -1); if(cur < srclen) { buf.append(src.substring(cur)); } return buf.toString(); } private static Log _log = LogFactory.getLog(AxionSqlParser.class);// ----------------------------------------------------------------------------// SQL GRAMMAR// ----------------------------------------------------------------------------// ----------------------------------------------------------------------------// COMMANDS// ---------------------------------------------------------------------------- final public AxionCommand SqlCommand() throws ParseException { AxionCommand result = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case SELECT: result = SqlSelect(); break; case INSERT: result = SqlInsert(); break; case UPDATE: result = SqlUpdate(); break; case DELETE: result = SqlDelete(); break; case CREATE: result = SqlCreate(); break; case DROP: result = SqlDrop(); break; case ALTER: result = SqlAlterTable(); break; case ID: result = SqlAxionCustom(); break; default: jj_consume_token(-1); throw new ParseException(); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case SEMICOLON: jj_consume_token(SEMICOLON); break; default: ; } jj_consume_token(0); if(_log.isDebugEnabled()) { _log.debug("SqlCommand: created \"" + result + "\""); } {if (true) return result;} throw new Error("Missing return statement in function"); }// ----------------------------------------------------------------------------// COMMANDS: AXION CUSTOM// ---------------------------------------------------------------------------- final public AxionCommand SqlAxionCustom() throws ParseException { jj_consume_token(ID); if("CHECKPOINT".equalsIgnoreCase(token.image)) { {if (true) return new CheckpointCommand();} } else if("REMOUNT".equalsIgnoreCase(token.image)) { {if (true) return SqlRemount();} } else if("SHUTDOWN".equalsIgnoreCase(token.image)) { {if (true) return new ShutdownCommand();} } else if("CHECKFILESTATE".equalsIgnoreCase(token.image)) { {if (true) return new CheckFileStateCommand();} } else { {if (true) throw new ParseException("Expected CHECKPOINT, REMOUNT, SHUTDOWN, or CHECKFILESTATE found \"" + token.image + "\".");} } throw new Error("Missing return statement in function"); } final public AxionCommand SqlRemount() throws ParseException { RemountCommand remount = new RemountCommand(); Object dir; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ID: jj_consume_token(ID); remount.setTable(new TableIdentifier(token.image)); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ID: jj_consume_token(ID); if("data".equalsIgnoreCase(token.image)) { remount.setDataFilesOnly(true); } else { {if (true) throw new ParseException("Expected \"DATA\", found \"" + token.image + "\"");} } break; default: ; } break; default: ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STRING_LITERAL: jj_consume_token(STRING_LITERAL); if(_log.isDebugEnabled()) { _log.debug("SqlRemount: consumed \"" + token + "\""); } // trim off the open and close quotes String trimmed = token.image.substring(1, token.image.length() - 1); // replace all '' with ' String result = replace(trimmed,"''","'"); if(_log.isDebugEnabled()) { _log.debug("SqlRemount: path \"" + result + "\""); } dir = result; remount.setDirectory(result); break; case QUESTIONMARK: dir = SqlBindVar(); remount.setDirectory((Literal)dir); break; default: jj_consume_token(-1); throw new ParseException(); } {if (true) return remount;} throw new Error("Missing return statement in function"); }// ----------------------------------------------------------------------------// COMMANDS: CREATE// ---------------------------------------------------------------------------- final public AxionCommand SqlCreate() throws ParseException { AxionCommand result = null; String type = null; boolean unique = false; jj_consume_token(CREATE); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case UNIQUE: jj_consume_token(UNIQUE); unique = true; break; default: ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ID: type = SqlIdentifier(); break; default: ; } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case TABLE: result = SqlCreateTable(type); break; case INDEX: result = SqlCreateIndex(unique,type); break; case SEQUENCE: result = SqlCreateSequence(); break; default: jj_consume_token(-1); throw new ParseException(); } {if (true) return result;} throw new Error("Missing return statement in function"); } final public AxionCommand SqlCreateTable(String type) throws ParseException { CreateTableCommand result = new CreateTableCommand(); result.setType(type); String str = null; jj_consume_token(TABLE); str = SqlIdentifier(); result.setName(str); jj_consume_token(OPENPAREN); SqlColumnExpression(result); label_1: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: break label_1; } jj_consume_token(COMMA); SqlColumnExpression(result); } jj_consume_token(CLOSEPAREN); {if (true) return result;} throw new Error("Missing return statement in function"); } final public void SqlColumnExpression(CreateTableCommand result) throws ParseException { String[] pair = null; Constraint constraint = null; switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CHECK: case CONSTRAINT: case NOT: case NULL: case PRIMARY: case UNIQUE: constraint = SqlTableConstraint(); if(null != constraint) { result.addChildCommand(new AddConstraintCommand(result.getName(),constraint)); constraint = null; } break; case ID: pair = SqlColumnDef(); result.addColumn(pair[0],pair[1]); label_2: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case CHECK: case CONSTRAINT: case NOT: case NULL: case PRIMARY: case UNIQUE: ; break; default: break label_2; } constraint = SqlColumnConstraint(result.getName(),pair[0]); if(null != constraint) { result.addChildCommand(new AddConstraintCommand(result.getName(),constraint)); constraint = null; } } break; default: jj_consume_token(-1); throw new ParseException(); } } final public AxionCommand SqlCreateIndex(boolean unique, String type) throws ParseException { CreateIndexCommand result = new CreateIndexCommand(); result.setUnique(unique); result.setType(type); String str = null; jj_consume_token(INDEX); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + token + "\""); } str = SqlIdentifier(); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + str + "\""); } result.setName(str); str = null; jj_consume_token(ON); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + token + "\""); } str = SqlLValueTerm(); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + str + "\""); } result.setTable(str); str = null; jj_consume_token(OPENPAREN); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + token + "\""); } str = SqlIdentifier(); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + str + "\""); } result.addColumn(str); str = null; label_3: while (true) { switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case COMMA: ; break; default: break label_3; } jj_consume_token(COMMA); str = SqlIdentifier(); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + str + "\""); } result.addColumn(str); str = null; } jj_consume_token(CLOSEPAREN); if(_log.isDebugEnabled()) { _log.debug("SqlCreateIndex: consumed \"" + token + "\""); } {if (true) return result;} throw new Error("Missing return statement in function"); } final public AxionCommand SqlCreateSequence() throws ParseException { CreateSequenceCommand result = new CreateSequenceCommand(); String name = null; Token t = null; jj_consume_token(SEQUENCE); if(_log.isDebugEnabled()) { _log.debug("SqlCreateSequence: consumed \"" + token + "\""); } name = SqlIdentifier(); if(_log.isDebugEnabled()) { _log.debug("SqlCreateSequence: found sequence name \"" + name + "\""); } result.setName(name); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case STARTS: jj_consume_token(STARTS); jj_consume_token(WITH); t = jj_consume_token(INTEGER_LITERAL); result.setStartValue(t.image); break; default: ; } {if (true) return result;} throw new Error("Missing return statement in function"); }// ----------------------------------------------------------------------------// COMMANDS: DELETE// ---------------------------------------------------------------------------- final public AxionCommand SqlDelete() throws ParseException { TableIdentifier table = null; Selectable where = null; jj_consume_token(DELETE); if(_log.isDebugEnabled()) { _log.debug("SqlDelete: consumed \"" + token + "\""); } switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case FROM: jj_consume_token(FROM); if(_log.isDebugEnabled()) { _log.debug("SqlDelete: consumed \"" + token + "\""); } break; default: ; } table = SqlTableRef(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case WHERE: where = SqlWhere(); break; default: ; } {if (true) return new DeleteCommand(table,(WhereNode)where);} throw new Error("Missing return statement in function"); }// ----------------------------------------------------------------------------// COMMANDS: ALTER TABLE// ---------------------------------------------------------------------------- final public AxionCommand SqlAlterTable() throws ParseException { AxionCommand result = null; String tablename = null; jj_consume_token(ALTER); jj_consume_token(TABLE); tablename = SqlIdentifier(); switch ((jj_ntk==-1)?jj_ntk():jj_ntk) { case ADD: result = SqlAddConstraint(tablename); break; case DROP: result = SqlDropConstraint(tablename); break; default: jj_consume_token(-1); throw new ParseException(); } {if (true) return result;} throw new Error("Missing return statement in function"); } final public AxionCommand SqlDropConstraint(String tablename) throws ParseException { String constraintname = null; jj_consume_token(DROP);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -