package jdepend.parse.sql;
import java.util.ArrayList;
import java.util.List;
import jdepend.framework.log.LogUtil;
import jdepend.framework.util.StringUtil;
import jdepend.metadata.TableInfo;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.delete.Delete;
import net.sf.jsqlparser.statement.insert.Insert;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.statement.update.Update;
import net.sf.jsqlparser.util.TablesNamesFinder;
public class SqlParserThird extends SqlParser {
public List<TableInfo> parserSql(String sql) {
List<TableInfo> tables = new ArrayList<TableInfo>();
TableInfo tableInfo = null;
Statement statement;
List<String> tableNames = null;
String operation = null;
try {
statement = CCJSqlParserUtil.parse(sql);
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
if (statement instanceof Select) {
tableNames = tablesNamesFinder.getTableList((Select) statement);
operation = TableInfo.Read;
} else if (statement instanceof Insert) {
tableNames = tablesNamesFinder.getTableList((Insert) statement);
operation = TableInfo.Create;
} else if (statement instanceof Delete) {
tableNames = tablesNamesFinder.getTableList((Delete) statement);
operation = TableInfo.Delete;
} else if (statement instanceof Update) {
tableNames = tablesNamesFinder.getTableList((Update) statement);
operation = TableInfo.Update;
}
if (tableNames != null) {
for (String tableName : tableNames) {
if (!StringUtil.isEmpty(tableName)) {
tableInfo = new TableInfo(tableName, operation);
tables.add(tableInfo);
}
}
}
return tables;
} catch (Exception e) {
e.printStackTrace();
LogUtil.getInstance(SqlParserThird.class).systemError(
"解析sql出错[" + sql + "]");
return null;
}
}
}