blob: a507b828be4f63b7dc7225b5f610da056191f156 [file]
/*
* Copyright 2023 CeresDB Project Authors. Licensed under Apache-2.0.
*/
package io.ceresdb.sql;
import java.util.List;
import io.ceresdb.common.parser.SqlParser;
import io.ceresdb.util.Utils;
import io.ceresdb.common.util.internal.ThrowUtil;
/**
* Parse SQL.
*
*/
public class CeresDBParser implements SqlParser {
private final String sql;
private boolean parsed;
private StatementType statementType = StatementType.Unknown;
private CeresDBSqlStatement stmt;
public CeresDBParser(String sql) {
this.sql = sql;
}
@Override
public StatementType statementType() {
parse();
return this.statementType;
}
@Override
public List<String> tableNames() {
parse();
return this.stmt.getTables();
}
@Override
public List<Column> createColumns() {
parse();
return Utils.unsupported("`%s` unsupported yet!", "createColumns");
}
private void parse() {
if (this.parsed) {
return;
}
this.parsed = true;
try {
final CeresDBSqlStatement stmt = CeresDBSqlParser.parse(this.sql)[0];
switch (stmt.getStatementType()) {
case SELECT:
this.statementType = StatementType.Select;
break;
case CREATE:
this.statementType = StatementType.Create;
break;
case ALTER:
case ALTER_DELETE:
case ALTER_UPDATE:
this.statementType = StatementType.Alter;
break;
case DESCRIBE:
this.statementType = StatementType.Describe;
break;
case SHOW:
this.statementType = StatementType.Show;
break;
case DROP:
this.statementType = StatementType.Drop;
break;
case INSERT:
this.statementType = StatementType.Insert;
break;
case EXISTS:
this.statementType = StatementType.Exists;
break;
default:
this.statementType = StatementType.Unknown;
}
this.stmt = stmt;
} catch (final Exception e) {
ThrowUtil.throwException(e);
}
}
}