Java 类java.sql.SQLSyntaxErrorException 实例源码
项目:jdk8u-jdk
文件:SQLSyntaxErrorExceptionTests.java
/**
* Validate that the ordering of the returned Exceptions is correct
* using traditional while loop
*/
@Test
public void test12() {
SQLSyntaxErrorException ex = new SQLSyntaxErrorException("Exception 1", t1);
SQLSyntaxErrorException ex1 = new SQLSyntaxErrorException("Exception 2");
SQLSyntaxErrorException ex2 = new SQLSyntaxErrorException("Exception 3", t2);
ex.setNextException(ex1);
ex.setNextException(ex2);
int num = 0;
SQLException sqe = ex;
while (sqe != null) {
assertTrue(msgs[num++].equals(sqe.getMessage()));
Throwable c = sqe.getCause();
while (c != null) {
assertTrue(msgs[num++].equals(c.getMessage()));
c = c.getCause();
}
sqe = sqe.getNextException();
}
}
项目:mycat-src-1.6.1-RELEASE
文件:DruidMycatRouteStrategy.java
public RouteResultset routeSystemInfo(SchemaConfig schema, int sqlType,
String stmt, RouteResultset rrs) throws SQLSyntaxErrorException {
switch(sqlType){
case ServerParse.SHOW:// if origSQL is like show tables
return analyseShowSQL(schema, rrs, stmt);
case ServerParse.SELECT://if origSQL is like select @@
if(stmt.contains("@@")){
return analyseDoubleAtSgin(schema, rrs, stmt);
}
break;
case ServerParse.DESCRIBE:// if origSQL is meta SQL, such as describe table
int ind = stmt.indexOf(' ');
stmt = stmt.trim();
return analyseDescrSQL(schema, rrs, stmt, ind + 1);
}
return null;
}
项目:openjdk-jdk10
文件:SQLSyntaxErrorExceptionTests.java
/**
* Validate that the ordering of the returned Exceptions is correct
* using traditional while loop
*/
@Test
public void test12() {
SQLSyntaxErrorException ex = new SQLSyntaxErrorException("Exception 1", t1);
SQLSyntaxErrorException ex1 = new SQLSyntaxErrorException("Exception 2");
SQLSyntaxErrorException ex2 = new SQLSyntaxErrorException("Exception 3", t2);
ex.setNextException(ex1);
ex.setNextException(ex2);
int num = 0;
SQLException sqe = ex;
while (sqe != null) {
assertTrue(msgs[num++].equals(sqe.getMessage()));
Throwable c = sqe.getCause();
while (c != null) {
assertTrue(msgs[num++].equals(c.getMessage()));
c = c.getCause();
}
sqe = sqe.getNextException();
}
}
项目:dble
文件:XMLRuleLoader.java
/**
* tableRule tag:
* <tableRule name="sharding-by-month">
* <rule>
* <columns>create_date</columns>
* <algorithm>partbymonth</algorithm>
* </rule>
* </tableRule>
*
* @param root
* @throws SQLSyntaxErrorException
*/
private void loadTableRules(Element root) throws SQLSyntaxErrorException {
NodeList list = root.getElementsByTagName("tableRule");
for (int i = 0, n = list.getLength(); i < n; ++i) {
Node node = list.item(i);
if (node instanceof Element) {
Element e = (Element) node;
String name = e.getAttribute("name");
if (StringUtil.isEmpty(name)) {
throw new ConfigException("name is null or empty");
}
if (tableRules.containsKey(name)) {
throw new ConfigException("table rule " + name + " duplicated!");
}
NodeList ruleNodes = e.getElementsByTagName("rule");
int length = ruleNodes.getLength();
if (length > 1) {
throw new ConfigException("only one rule can defined :" + name);
}
//rule has only one element now. Maybe it will not contains one rule in feature
//RuleConfig:rule->function
RuleConfig rule = loadRule((Element) ruleNodes.item(0));
tableRules.put(name, new TableRuleConfig(name, rule));
}
}
}
项目:dble
文件:XMLRuleLoader.java
private RuleConfig loadRule(Element element) throws SQLSyntaxErrorException {
Element columnsEle = ConfigUtil.loadElement(element, "columns");
String column = columnsEle.getTextContent();
if (StringUtil.isEmpty(column)) {
throw new ConfigException("no rule column is found");
}
String[] columns = SplitUtil.split(column, ',', true);
if (columns.length > 1) {
throw new ConfigException("table rule coulmns has multi values:" +
columnsEle.getTextContent());
}
Element algorithmEle = ConfigUtil.loadElement(element, "algorithm");
String algorithmName = algorithmEle.getTextContent();
if (StringUtil.isEmpty(algorithmName)) {
throw new ConfigException("algorithm is null or empty");
}
AbstractPartitionAlgorithm algorithm = functions.get(algorithmName);
if (algorithm == null) {
throw new ConfigException("can't find function of name :" + algorithmName);
}
return new RuleConfig(column.toUpperCase(), algorithmName, algorithm);
}
项目:dble
文件:DefaultRouteStrategy.java
@Override
public SQLStatement parserSQL(String originSql) throws SQLSyntaxErrorException {
SQLStatementParser parser = new MySqlStatementParser(originSql);
/**
* thrown SQL SyntaxError if parser error
*/
try {
List<SQLStatement> list = parser.parseStatementList();
if (list.size() > 1) {
throw new SQLSyntaxErrorException("MultiQueries is not supported,use single query instead ");
}
return list.get(0);
} catch (Exception t) {
LOGGER.info("routeNormalSqlWithAST", t);
if (t.getMessage() != null) {
throw new SQLSyntaxErrorException(t.getMessage());
} else {
throw new SQLSyntaxErrorException(t);
}
}
}
项目:openjdk9
文件:SQLSyntaxErrorExceptionTests.java
/**
* Validate that the ordering of the returned Exceptions is correct
* using traditional while loop
*/
@Test
public void test12() {
SQLSyntaxErrorException ex = new SQLSyntaxErrorException("Exception 1", t1);
SQLSyntaxErrorException ex1 = new SQLSyntaxErrorException("Exception 2");
SQLSyntaxErrorException ex2 = new SQLSyntaxErrorException("Exception 3", t2);
ex.setNextException(ex1);
ex.setNextException(ex2);
int num = 0;
SQLException sqe = ex;
while (sqe != null) {
assertTrue(msgs[num++].equals(sqe.getMessage()));
Throwable c = sqe.getCause();
while (c != null) {
assertTrue(msgs[num++].equals(c.getMessage()));
c = c.getCause();
}
sqe = sqe.getNextException();
}
}
项目:zipkin
文件:MySQLStorageTest.java
@Test
public void hasIpv6_falseWhenKnownSQLState() throws SQLException {
SQLSyntaxErrorException sqlException = new SQLSyntaxErrorException(
"Unknown column 'zipkin_annotations.endpoint_ipv6' in 'field list'",
"42S22", 1054);
DataSource dataSource = mock(DataSource.class);
// cheats to lower mock count: this exception is really thrown during execution of the query
when(dataSource.getConnection()).thenThrow(
new DataAccessException(sqlException.getMessage(), sqlException));
Boolean result = MySQLStorage.builder()
.executor(Runnable::run)
.datasource(dataSource)
.build().hasIpv6.get();
assertThat(result).isFalse();
}
项目:zipkin
文件:MySQLStorageTest.java
/**
* This returns false instead of failing when the SQLState code doesn't imply the column is
* missing. This is to prevent zipkin from crashing due to scenarios we haven't thought up, yet.
* The root error goes into the log in this case.
*/
@Test
public void hasIpv6_falseWhenUnknownSQLState() throws SQLException {
SQLSyntaxErrorException sqlException = new SQLSyntaxErrorException(
"java.sql.SQLSyntaxErrorException: Table 'zipkin.zipkin_annotations' doesn't exist",
"42S02", 1146);
DataSource dataSource = mock(DataSource.class);
// cheats to lower mock count: this exception is really thrown during execution of the query
when(dataSource.getConnection()).thenThrow(
new DataAccessException(sqlException.getMessage(), sqlException));
Boolean result = MySQLStorage.builder()
.executor(Runnable::run)
.datasource(dataSource)
.build().hasIpv6.get();
assertThat(result).isFalse();
}
项目:zipkin
文件:MySQLStorageTest.java
@Test
public void hasDependencies_missing() throws SQLException {
SQLSyntaxErrorException sqlException = new SQLSyntaxErrorException(
"SQL [select count(*) from `zipkin_dependencies`]; Table 'zipkin.zipkin_dependencies' doesn't exist\n"
+ " Query is : select count(*) from `zipkin_dependencies`",
"42S02", 1146);
DataSource dataSource = mock(DataSource.class);
// cheats to lower mock count: this exception is really thrown during execution of the query
when(dataSource.getConnection()).thenThrow(
new DataAccessException(sqlException.getMessage(), sqlException));
Boolean result = MySQLStorage.builder()
.executor(Runnable::run)
.datasource(dataSource)
.build().hasPreAggregatedDependencies.get();
assertThat(result).isFalse();
}
项目:jdk8u_jdk
文件:SQLSyntaxErrorExceptionTests.java
/**
* Validate that the ordering of the returned Exceptions is correct
* using traditional while loop
*/
@Test
public void test12() {
SQLSyntaxErrorException ex = new SQLSyntaxErrorException("Exception 1", t1);
SQLSyntaxErrorException ex1 = new SQLSyntaxErrorException("Exception 2");
SQLSyntaxErrorException ex2 = new SQLSyntaxErrorException("Exception 3", t2);
ex.setNextException(ex1);
ex.setNextException(ex2);
int num = 0;
SQLException sqe = ex;
while (sqe != null) {
assertTrue(msgs[num++].equals(sqe.getMessage()));
Throwable c = sqe.getCause();
while (c != null) {
assertTrue(msgs[num++].equals(c.getMessage()));
c = c.getCause();
}
sqe = sqe.getNextException();
}
}
项目:lookaside_java-1.8.0-openjdk
文件:SQLSyntaxErrorExceptionTests.java
/**
* Validate that the ordering of the returned Exceptions is correct
* using traditional while loop
*/
@Test
public void test12() {
SQLSyntaxErrorException ex = new SQLSyntaxErrorException("Exception 1", t1);
SQLSyntaxErrorException ex1 = new SQLSyntaxErrorException("Exception 2");
SQLSyntaxErrorException ex2 = new SQLSyntaxErrorException("Exception 3", t2);
ex.setNextException(ex1);
ex.setNextException(ex2);
int num = 0;
SQLException sqe = ex;
while (sqe != null) {
assertTrue(msgs[num++].equals(sqe.getMessage()));
Throwable c = sqe.getCause();
while (c != null) {
assertTrue(msgs[num++].equals(c.getMessage()));
c = c.getCause();
}
sqe = sqe.getNextException();
}
}
项目:Timo
文件:ServerConnection.java
public void execute(String sql, int type) {
if (!TimoServer.getInstance().isOnline()) {
writeErrMessage(ErrorCode.ER_ACCESS_DENIED_ERROR, "Timo-server is offline");
return;
}
Database database = checkDB();
if (database == null) {
return;
}
Outlets out = null;
try {
out = Router.route(database, sql, this.getCharset(), type);
} catch (SQLSyntaxErrorException e) {
String msg = e.getMessage();
writeErrMessage(ErrorCode.ER_PARSE_ERROR,
msg == null ? e.getClass().getSimpleName() : msg);
return;
}
chooseSession(out, type);
session.execute(out, type);
}
项目:Timo-parser
文件:MySQLParser.java
/**
* @return index of expected token, start from 0
* @throws SQLSyntaxErrorException if no token is matched
*/
protected int matchIdentifier(String... expectTextUppercase) throws SQLSyntaxErrorException {
if (expectTextUppercase == null || expectTextUppercase.length <= 0)
throw new IllegalArgumentException("at least one expect token");
if (lexer.token() != MySQLToken.IDENTIFIER) {
throw err("expect an id");
}
String id = lexer.stringValueUppercase();
for (int i = 0; i < expectTextUppercase.length; ++i) {
if (id == null ? expectTextUppercase[i] == null : id.equals(expectTextUppercase[i])) {
lexer.nextToken();
return i;
}
}
throw err("expect " + expectTextUppercase);
}
项目:Timo-parser
文件:MySQLLexer.java
/**
* @param quoteMode if false: first <code>0x</code> has been skipped; if true: first
* <code>x'</code> has been skipped
*/
protected void scanHexaDecimal(boolean quoteMode) throws SQLSyntaxErrorException {
offsetCache = curIndex;
for (; CharTypes.isHex(ch); scanChar());
sizeCache = curIndex - offsetCache;
// if (sizeCache <= 0) {
// throw err("expect at least one hexdigit");
// }
if (quoteMode) {
if (ch != '\'') {
throw err("invalid char for hex: " + ch);
}
scanChar();
} else if (CharTypes.isIdentifierChar(ch)) {
scanIdentifierFromNumber(offsetCache - 2, sizeCache + 2);
return;
}
token = MySQLToken.LITERAL_HEX;
}
项目:TDDL
文件:MySQLLexer.java
/**
* first <code>@@</code> is included
*/
protected void scanSystemVariable() throws SQLSyntaxErrorException {
if (ch != '@' || sql[curIndex + 1] != '@') throw err("first char must be @@");
offsetCache = curIndex + 2;
sizeCache = 0;
scanChar(2);
if (ch == '`') {
for (++sizeCache;; ++sizeCache) {
if (scanChar() == '`') {
++sizeCache;
if (scanChar() != '`') {
break;
}
}
}
} else {
for (; CharTypes.isIdentifierChar(ch); ++sizeCache) {
scanChar();
}
}
updateStringValue(sql, offsetCache, sizeCache);
token = MySQLToken.SYS_VAR;
}
项目:Timo
文件:MySQLDMLParser.java
/**
* @return null if there is no hint
*/
private List<IndexHint> hintList() throws SQLSyntaxErrorException {
IndexHint hint = hint();
if (hint == null)
return null;
List<IndexHint> list;
IndexHint hint2 = hint();
if (hint2 == null) {
list = new ArrayList<IndexHint>(1);
list.add(hint);
return list;
}
list = new LinkedList<IndexHint>();
list.add(hint);
list.add(hint2);
for (; (hint2 = hint()) != null; list.add(hint2))
;
return list;
}
项目:Timo
文件:MySQLDMLParser.java
/**
* @return argument itself if there is no union
*/
protected DMLQueryStatement buildUnionSelect(DMLSelectStatement select)
throws SQLSyntaxErrorException {
if (lexer.token() != KW_UNION) {
return select;
}
DMLSelectUnionStatement union = new DMLSelectUnionStatement(select);
for (; lexer.token() == KW_UNION;) {
lexer.nextToken();
boolean isAll = false;
switch (lexer.token()) {
case KW_ALL:
isAll = true;
case KW_DISTINCT:
lexer.nextToken();
break;
default:
break;
}
select = selectPrimary();
union.addSelect(select, isAll);
}
union.setOrderBy(orderBy()).setLimit(limit());
return union;
}
项目:Timo
文件:TestInsertSQLAnalyser.java
@Test
public void testInsertSQLWithAutoIncrement() throws SQLSyntaxErrorException {
Identifier columnAutoIncrementColumn = new Identifier(null, "id");
String sql = null;
SQLStatement ast = null;
DMLInsertStatement parsInf = null;
sql = "insert into table1(name1,name2,id) values ('1','2',10) ";
ast = SQLParserDelegate.parse(sql);
parsInf = (DMLInsertStatement) (ast);
enrichAutoIncrementColumn(columnAutoIncrementColumn, parsInf);
StringBuilder sb = new StringBuilder();
OutputVisitor visitor = new OutputVisitor(sb, false);
parsInf.accept(visitor);
System.out.println(sb.toString());
Assert.assertEquals("table1".toUpperCase(), parsInf.getTable().getIdTextUpUnescape());
Assert.assertNotNull(parsInf.getColumnNameList());
}
项目:tddl5
文件:MySQLDALParser.java
private String getStringValue() throws SQLSyntaxErrorException {
String name;
switch (lexer.token()) {
case IDENTIFIER:
name = Identifier.unescapeName(lexer.stringValue());
lexer.nextToken();
return name;
case LITERAL_CHARS:
name = lexer.stringValue();
name = LiteralString.getUnescapedString(name.substring(1, name.length() - 1));
lexer.nextToken();
return name;
default:
throw err("unexpected token: " + lexer.token());
}
}
项目:tddl5
文件:MySQLLexer.java
public MySQLLexer(char[] sql) throws SQLSyntaxErrorException{
if ((this.sbuf = sbufRef.get()) == null) {
this.sbuf = new char[1024];
sbufRef.set(this.sbuf);
}
if (CharTypes.isWhitespace(sql[sql.length - 1])) {
this.sql = sql;
} else {
this.sql = new char[sql.length + 1];
System.arraycopy(sql, 0, this.sql, 0, sql.length);
}
this.eofIndex = this.sql.length - 1;
this.sql[this.eofIndex] = MySQLLexer.EOI;
scanChar();
nextToken();
}
项目:tddl5
文件:MySQLExprParser.java
/**
* first <code>'('</code> has been consumed. At least one element. Consume
* last ')' after invocation <br/>
* <code>'(' expr (',' expr)* ')'</code>
*/
private List<Expression> expressionList(List<Expression> exprList) throws SQLSyntaxErrorException {
for (;;) {
Expression expr = expression();
exprList.add(expr);
switch (lexer.token()) {
case PUNC_COMMA:
lexer.nextToken();
break;
case PUNC_RIGHT_PAREN:
lexer.nextToken();
return exprList;
default:
throw err("unexpected token: " + lexer.token());
}
}
}
项目:TDDL
文件:MySQLDMLInsertReplaceParser.java
protected List<RowExpression> rowList() throws SQLSyntaxErrorException {
List<RowExpression> valuesList;
List<Expression> tempRowValue = rowValue();
if (lexer.token() == PUNC_COMMA) {
valuesList = new LinkedList<RowExpression>();
valuesList.add(new RowExpression(tempRowValue));
for (; lexer.token() == PUNC_COMMA;) {
lexer.nextToken();
tempRowValue = rowValue();
valuesList.add(new RowExpression(tempRowValue));
}
} else {
valuesList = new ArrayList<RowExpression>(1);
valuesList.add(new RowExpression(tempRowValue));
}
return valuesList;
}
项目:Timo
文件:MySQLExprParser.java
private Expression anyAllExpression() throws SQLSyntaxErrorException {
QueryExpression subquery = null;
switch (lexer.token()) {
case KW_ALL:
lexer.nextToken();
match(PUNC_LEFT_PAREN);
subquery = subQuery();
match(PUNC_RIGHT_PAREN);
return new SubqueryAllExpression(subquery).setCacheEvalRst(cacheEvalRst);
default:
int matchIndex = equalsIdentifier("SOME", "ANY");
if (matchIndex < 0) {
return bitOrExpression(null, null);
}
String consumed = lexer.stringValue();
String consumedUp = lexer.stringValueUppercase();
if (lexer.nextToken() == PUNC_LEFT_PAREN) {
lexer.nextToken();
subquery = subQuery();
match(PUNC_RIGHT_PAREN);
return new SubqueryAnyExpression(subquery).setCacheEvalRst(cacheEvalRst);
}
return bitOrExpression(consumed, consumedUp);
}
}
项目:Timo
文件:MySQLExprParser.java
/**
* <code>higherExpr ( ('+'|'-') higherExpr)+</code>
*/
private Expression arithmeticTermOperatorExpression(String consumed, String consumedUp)
throws SQLSyntaxErrorException {
Expression temp;
for (Expression expr = arithmeticFactorOperatorExpression(consumed, consumedUp);;) {
switch (lexer.token()) {
case OP_PLUS:
lexer.nextToken();
temp = arithmeticFactorOperatorExpression(null, null);
expr = new ArithmeticAddExpression(expr, temp).setCacheEvalRst(cacheEvalRst);
break;
case OP_MINUS:
lexer.nextToken();
temp = arithmeticFactorOperatorExpression(null, null);
expr = new ArithmeticSubtractExpression(expr, temp)
.setCacheEvalRst(cacheEvalRst);
break;
default:
return expr;
}
}
}
项目:Timo
文件:MySQLExprParser.java
/**
* <code>higherExpr ('^' higherExpr)+</code>
*/
private Expression bitXORExpression(String consumed, String consumedUp)
throws SQLSyntaxErrorException {
Expression temp;
for (Expression expr = unaryOpExpression(consumed, consumedUp);;) {
switch (lexer.token()) {
case OP_CARET:
lexer.nextToken();
temp = unaryOpExpression(null, null);
expr = new BitXORExpression(expr, temp).setCacheEvalRst(cacheEvalRst);
break;
default:
return expr;
}
}
}
项目:tddl5
文件:MySQLExprParser.java
/**
* <code>higherExpr ( ('+'|'-') higherExpr)+</code>
*/
private Expression arithmeticTermOperatorExpression(String consumed, String consumedUp)
throws SQLSyntaxErrorException {
Expression temp;
for (Expression expr = arithmeticFactorOperatorExpression(consumed, consumedUp);;) {
switch (lexer.token()) {
case OP_PLUS:
lexer.nextToken();
temp = arithmeticFactorOperatorExpression(null, null);
expr = new ArithmeticAddExpression(expr, temp).setCacheEvalRst(cacheEvalRst);
break;
case OP_MINUS:
lexer.nextToken();
temp = arithmeticFactorOperatorExpression(null, null);
expr = new ArithmeticSubtractExpression(expr, temp).setCacheEvalRst(cacheEvalRst);
break;
default:
return expr;
}
}
}
项目:tddl5
文件:MySQLExprParser.java
private Expression anyAllExpression() throws SQLSyntaxErrorException {
QueryExpression subquery = null;
switch (lexer.token()) {
case KW_ALL:
lexer.nextToken();
match(PUNC_LEFT_PAREN);
subquery = subQuery();
match(PUNC_RIGHT_PAREN);
return new SubqueryAllExpression(subquery).setCacheEvalRst(cacheEvalRst);
default:
int matchIndex = equalsIdentifier("SOME", "ANY");
if (matchIndex < 0) {
return bitOrExpression(null, null);
}
String consumed = lexer.stringValue();
String consumedUp = lexer.stringValueUppercase();
if (lexer.nextToken() == PUNC_LEFT_PAREN) {
lexer.nextToken();
subquery = subQuery();
match(PUNC_RIGHT_PAREN);
return new SubqueryAnyExpression(subquery).setCacheEvalRst(cacheEvalRst);
}
return bitOrExpression(consumed, consumedUp);
}
}
项目:tddl5
文件:MySQLDMLParser.java
/**
* @return never empty. upper-case if id format. <code>"alias1" |"`al`ias1`" | "'alias1'" | "_latin1'alias1'"</code>
*/
protected String as() throws SQLSyntaxErrorException {
if (lexer.token() == KW_AS) {
lexer.nextToken();
}
StringBuilder alias = new StringBuilder();
boolean id = false;
if (lexer.token() == IDENTIFIER) {
alias.append(lexer.stringValueUppercase());
id = true;
lexer.nextToken();
}
if (lexer.token() == LITERAL_CHARS) {
if (!id || id && alias.charAt(0) == '_') {
alias.append(lexer.stringValue());
lexer.nextToken();
}
}
return alias.length() > 0 ? alias.toString() : null;
}
项目:Timo-parser
文件:MySQLLexer.java
public MySQLLexer(char[] sql) throws SQLSyntaxErrorException {
if ((this.sbuf = sbufRef.get()) == null) {
this.sbuf = new char[1024];
sbufRef.set(this.sbuf);
}
if (CharTypes.isWhitespace(sql[sql.length - 1])) {
this.sql = sql;
} else {
this.sql = new char[sql.length + 1];
System.arraycopy(sql, 0, this.sql, 0, sql.length);
}
this.eofIndex = this.sql.length - 1;
this.sql[this.eofIndex] = MySQLLexer.EOI;
scanChar();
nextToken();
}
项目:Timo-parser
文件:MySQLExprParser.java
/**
* <code>higherPRJExpr ( ('AND'|'&&') higherPRJExpr )*</code>
*
* @throws SQLSyntaxErrorException
*/
private Expression logicalAndExpression() throws SQLSyntaxErrorException {
LogicalAndExpression and = null;
for (Expression expr = logicalNotExpression();;) {
switch (lexer.token()) {
case OP_LOGICAL_AND:
case KW_AND:
lexer.nextToken();
if (and == null) {
and = new LogicalAndExpression();
and.setCacheEvalRst(cacheEvalRst);
and.appendOperand(expr);
expr = and;
}
Expression newExpr = logicalNotExpression();
and.appendOperand(newExpr);
break;
default:
return expr;
}
}
}
项目:TDDL
文件:MySQLDALParser.java
private String getStringValue() throws SQLSyntaxErrorException {
String name;
switch (lexer.token()) {
case IDENTIFIER:
name = Identifier.unescapeName(lexer.stringValue());
lexer.nextToken();
return name;
case LITERAL_CHARS:
name = lexer.stringValue();
name = LiteralString.getUnescapedString(name.substring(1, name.length() - 1));
lexer.nextToken();
return name;
default:
throw err("unexpected token: " + lexer.token());
}
}
项目:Timo-parser
文件:MySQLMTSParserTest.java
public void testSavepint() throws SQLSyntaxErrorException {
String sql = " savepoint 123e123e";
MySQLMTSParser parser = new MySQLMTSParser(new MySQLLexer(sql));
MTSSavepointStatement savepoint = parser.savepoint();
String output = output2MySQL(savepoint, sql);
Assert.assertEquals("SAVEPOINT 123e123e", output);
Assert.assertEquals("123e123e", savepoint.getSavepoint().getIdText());
sql = " savepoint SAVEPOINT";
parser = new MySQLMTSParser(new MySQLLexer(sql));
savepoint = parser.savepoint();
output = output2MySQL(savepoint, sql);
Assert.assertEquals("SAVEPOINT SAVEPOINT", output);
Assert.assertEquals("SAVEPOINT", savepoint.getSavepoint().getIdText());
sql = " savepoInt `select`";
parser = new MySQLMTSParser(new MySQLLexer(sql));
savepoint = parser.savepoint();
output = output2MySQL(savepoint, sql);
Assert.assertEquals("SAVEPOINT `select`", output);
Assert.assertEquals("`select`", savepoint.getSavepoint().getIdText());
}
项目:tddl5
文件:ReloadParser.java
/**
* reload schema
*
* @return
* @throws SQLSyntaxErrorException
*/
public SQLStatement reload() throws SQLSyntaxErrorException {
lexer.nextToken();
switch (lexer.token()) {
// case EOF:
// return new
// MTSRollbackStatement(MTSRollbackStatement.CompleteType.UN_DEF);
case KW_SCHEMA:
lexer.nextToken();
match(EOF);
return new ReloadSchema();
default:
throw err("unrecognized complete type: " + lexer.token());
}
}
项目:Timo
文件:MySQLDMLInsertReplaceParser.java
protected List<RowExpression> rowList() throws SQLSyntaxErrorException {
List<RowExpression> valuesList;
List<Expression> tempRowValue = rowValue();
if (lexer.token() == PUNC_COMMA) {
valuesList = new LinkedList<RowExpression>();
valuesList.add(new RowExpression(tempRowValue));
for (; lexer.token() == PUNC_COMMA;) {
lexer.nextToken();
tempRowValue = rowValue();
valuesList.add(new RowExpression(tempRowValue));
}
} else {
valuesList = new ArrayList<RowExpression>(1);
valuesList.add(new RowExpression(tempRowValue));
}
return valuesList;
}
项目:TDDL
文件:MySQLLexer.java
public MySQLLexer(char[] sql) throws SQLSyntaxErrorException{
if ((this.sbuf = sbufRef.get()) == null) {
this.sbuf = new char[1024];
sbufRef.set(this.sbuf);
}
if (CharTypes.isWhitespace(sql[sql.length - 1])) {
this.sql = sql;
} else {
this.sql = new char[sql.length + 1];
System.arraycopy(sql, 0, this.sql, 0, sql.length);
}
this.eofIndex = this.sql.length - 1;
this.sql[this.eofIndex] = MySQLLexer.EOI;
scanChar();
nextToken();
}
项目:Timo
文件:MySQLDMLSelectParser.java
private List<Pair<Expression, String>> selectExprList() throws SQLSyntaxErrorException {
Expression expr = exprParser.expression();
String alias = as();
List<Pair<Expression, String>> list;
if (lexer.token() == PUNC_COMMA) {
list = new LinkedList<Pair<Expression, String>>();
list.add(new Pair<Expression, String>(expr, alias));
} else {
list = new ArrayList<Pair<Expression, String>>(1);
list.add(new Pair<Expression, String>(expr, alias));
return list;
}
for (; lexer.token() == PUNC_COMMA; list.add(new Pair<Expression, String>(expr, alias))) {
lexer.nextToken();
expr = exprParser.expression();
alias = as();
}
return list;
}
项目:tddl5
文件:DMLDeleteStatement.java
public DMLDeleteStatement(boolean lowPriority, boolean quick, boolean ignore, List<Identifier> tableNameList,
TableReferences tableRefs, Expression whereCondition) throws SQLSyntaxErrorException{
this.lowPriority = lowPriority;
this.quick = quick;
this.ignore = ignore;
if (tableNameList == null || tableNameList.isEmpty()) {
throw new IllegalArgumentException("argument 'tableNameList' is empty");
} else if (tableNameList instanceof ArrayList) {
this.tableNames = tableNameList;
} else {
this.tableNames = new ArrayList<Identifier>(tableNameList);
}
if (tableRefs == null) {
throw new IllegalArgumentException("argument 'tableRefs' is null");
}
this.tableRefs = tableRefs;
this.whereCondition = whereCondition;
this.orderBy = null;
this.limit = null;
}
项目:TDDL
文件:MySQLDMLParser.java
private TableReference tableFactor() throws SQLSyntaxErrorException {
String alias = null;
switch (lexer.token()) {
case PUNC_LEFT_PAREN:
lexer.nextToken();
Object ref = trsOrQuery();
match(PUNC_RIGHT_PAREN);
if (ref instanceof QueryExpression) {
alias = as();
return new SubqueryFactor((QueryExpression) ref, alias);
}
return (TableReferences) ref;
case IDENTIFIER:
Identifier table = identifier();
alias = as();
List<IndexHint> hintList = hintList();
return new TableRefFactor(table, alias, hintList);
default:
throw err("unexpected token for tableFactor: " + lexer.token());
}
}
项目:tddl5
文件:MySQLExprParser.java
/**
* <code>higherExpr ( ('<<'|'>>') higherExpr)+</code>
*/
private Expression bitShiftExpression(String consumed, String consumedUp) throws SQLSyntaxErrorException {
Expression temp;
for (Expression expr = arithmeticTermOperatorExpression(consumed, consumedUp);;) {
switch (lexer.token()) {
case OP_LEFT_SHIFT:
lexer.nextToken();
temp = arithmeticTermOperatorExpression(null, null);
expr = new BitShiftExpression(false, expr, temp).setCacheEvalRst(cacheEvalRst);
break;
case OP_RIGHT_SHIFT:
lexer.nextToken();
temp = arithmeticTermOperatorExpression(null, null);
expr = new BitShiftExpression(true, expr, temp).setCacheEvalRst(cacheEvalRst);
break;
default:
return expr;
}
}
}