use of net.sf.jsqlparser.statement.delete.Delete in project spanner-jdbc by olavloite.
the class DeleteWorker method createSelect.
private static Select createSelect(CloudSpannerConnection connection, Delete delete) throws SQLException {
TableKeyMetaData table = connection.getTable(CloudSpannerDriver.unquoteIdentifier(delete.getTable().getName()));
List<String> keyCols = table.getKeyColumns().stream().map(x -> CloudSpannerDriver.quoteIdentifier(delete.getTable().getName()) + "." + CloudSpannerDriver.quoteIdentifier(x)).collect(Collectors.toList());
StringBuilder sql = new StringBuilder();
sql.append("SELECT ").append(String.join(", ", keyCols));
sql.append("\nFROM ").append(CloudSpannerDriver.quoteIdentifier(delete.getTable().getName()));
sql.append("\nWHERE ").append(delete.getWhere().toString());
try {
return (Select) CCJSqlParserUtil.parse(sql.toString());
} catch (JSQLParserException e) {
throw new CloudSpannerSQLException("Could not parse generated SELECT statement: " + sql, Code.INVALID_ARGUMENT);
}
}
use of net.sf.jsqlparser.statement.delete.Delete in project JSqlParser by JSQLParser.
the class StatementDeParserTest method shouldUseProvidedDeparsersWhenDeParsingDelete.
@Test
@SuppressWarnings("PMD.JUnitTestsShouldIncludeAssert")
public void shouldUseProvidedDeparsersWhenDeParsingDelete() {
Delete delete = new Delete();
Table table = new Table();
Expression where = mock(Expression.class);
List<OrderByElement> orderByElements = new ArrayList<OrderByElement>();
OrderByElement orderByElement1 = new OrderByElement();
OrderByElement orderByElement2 = new OrderByElement();
Expression orderByElement1Expression = mock(Expression.class);
Expression orderByElement2Expression = mock(Expression.class);
delete.setTable(table);
delete.setWhere(where);
delete.setOrderByElements(orderByElements);
orderByElements.add(orderByElement1);
orderByElements.add(orderByElement2);
orderByElement1.setExpression(orderByElement1Expression);
orderByElement2.setExpression(orderByElement2Expression);
statementDeParser.visit(delete);
then(where).should().accept(expressionDeParser);
then(orderByElement1Expression).should().accept(expressionDeParser);
then(orderByElement2Expression).should().accept(expressionDeParser);
}
use of net.sf.jsqlparser.statement.delete.Delete in project JSqlParser by JSQLParser.
the class TablesNamesFinderTest method testGetTableListFromDeleteWithJoin.
@Test
public void testGetTableListFromDeleteWithJoin() throws Exception {
String sql = "DELETE t1, t2 FROM MY_TABLE1 t1 JOIN MY_TABLE2 t2 ON t1.id = t2.id";
net.sf.jsqlparser.statement.Statement statement = pm.parse(new StringReader(sql));
Delete deleteStatement = (Delete) statement;
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(deleteStatement);
assertEquals(2, tableList.size());
assertTrue(tableList.contains("MY_TABLE1"));
assertTrue(tableList.contains("MY_TABLE2"));
}
use of net.sf.jsqlparser.statement.delete.Delete in project dbeaver by serge-rider.
the class SQLQuery method parseQuery.
private void parseQuery() {
if (parsed) {
return;
}
parsed = true;
try {
if (CommonUtils.isEmpty(text)) {
this.statement = null;
this.parseError = new DBException("Empty query");
return;
}
statement = SQLSemanticProcessor.parseQuery(dataSource == null ? null : dataSource.getSQLDialect(), text);
if (statement instanceof Select) {
type = SQLQueryType.SELECT;
// Detect single source table (no joins, no group by, no sub-selects)
SelectBody selectBody = ((Select) statement).getSelectBody();
if (selectBody instanceof PlainSelect) {
PlainSelect plainSelect = (PlainSelect) selectBody;
if (plainSelect.getFromItem() instanceof Table && CommonUtils.isEmpty(plainSelect.getJoins()) && (plainSelect.getGroupBy() == null || CommonUtils.isEmpty(plainSelect.getGroupBy().getGroupByExpressions())) && CommonUtils.isEmpty(plainSelect.getIntoTables())) {
boolean hasSubSelects = false;
for (SelectItem si : plainSelect.getSelectItems()) {
if (si instanceof SelectExpressionItem && ((SelectExpressionItem) si).getExpression() instanceof SubSelect) {
hasSubSelects = true;
break;
}
}
if (!hasSubSelects) {
fillSingleSource((Table) plainSelect.getFromItem());
}
}
// Extract select items info
final List<SelectItem> items = plainSelect.getSelectItems();
if (items != null && !items.isEmpty()) {
selectItems = new ArrayList<>();
for (SelectItem item : items) {
selectItems.add(new SQLSelectItem(item));
}
}
}
} else if (statement instanceof Insert) {
type = SQLQueryType.INSERT;
fillSingleSource(((Insert) statement).getTable());
} else if (statement instanceof Update) {
type = SQLQueryType.UPDATE;
Table table = ((Update) statement).getTable();
if (table != null) {
fillSingleSource(table);
}
} else if (statement instanceof Delete) {
type = SQLQueryType.DELETE;
if (((Delete) statement).getTable() != null) {
fillSingleSource(((Delete) statement).getTable());
} else {
List<Table> tables = ((Delete) statement).getTables();
if (tables != null && tables.size() == 1) {
fillSingleSource(tables.get(0));
}
}
} else if (statement instanceof Alter || statement instanceof CreateTable || statement instanceof CreateView || statement instanceof Drop || statement instanceof CreateIndex) {
type = SQLQueryType.DDL;
} else {
type = SQLQueryType.UNKNOWN;
}
} catch (Throwable e) {
this.type = SQLQueryType.UNKNOWN;
this.parseError = e;
// log.debug("Error parsing SQL query [" + query + "]:" + CommonUtils.getRootCause(e).getMessage());
}
}
use of net.sf.jsqlparser.statement.delete.Delete in project dbeaver by dbeaver.
the class SQLQuery method parseQuery.
private void parseQuery() {
if (parsed) {
return;
}
parsed = true;
try {
if (CommonUtils.isEmpty(text)) {
this.statement = null;
this.parseError = new DBException("Empty query");
return;
}
statement = SQLSemanticProcessor.parseQuery(dataSource == null ? null : dataSource.getSQLDialect(), text);
if (statement instanceof Select) {
type = SQLQueryType.SELECT;
// Detect single source table (no joins, no group by, no sub-selects)
SelectBody selectBody = ((Select) statement).getSelectBody();
if (selectBody instanceof PlainSelect) {
PlainSelect plainSelect = (PlainSelect) selectBody;
if (plainSelect.getFromItem() instanceof Table && CommonUtils.isEmpty(plainSelect.getJoins()) && (plainSelect.getGroupBy() == null || CommonUtils.isEmpty(plainSelect.getGroupBy().getGroupByExpressions())) && CommonUtils.isEmpty(plainSelect.getIntoTables())) {
boolean hasSubSelects = false;
for (SelectItem si : plainSelect.getSelectItems()) {
if (si instanceof SelectExpressionItem && ((SelectExpressionItem) si).getExpression() instanceof SubSelect) {
hasSubSelects = true;
break;
}
}
if (!hasSubSelects) {
fillSingleSource((Table) plainSelect.getFromItem());
}
}
// Extract select items info
final List<SelectItem> items = plainSelect.getSelectItems();
if (items != null && !items.isEmpty()) {
selectItems = new ArrayList<>();
for (SelectItem item : items) {
selectItems.add(new SQLSelectItem(item));
}
}
}
} else if (statement instanceof Insert) {
type = SQLQueryType.INSERT;
fillSingleSource(((Insert) statement).getTable());
} else if (statement instanceof Update) {
type = SQLQueryType.UPDATE;
Table table = ((Update) statement).getTable();
if (table != null) {
fillSingleSource(table);
}
} else if (statement instanceof Delete) {
type = SQLQueryType.DELETE;
if (((Delete) statement).getTable() != null) {
fillSingleSource(((Delete) statement).getTable());
} else {
List<Table> tables = ((Delete) statement).getTables();
if (tables != null && tables.size() == 1) {
fillSingleSource(tables.get(0));
}
}
} else if (statement instanceof Alter || statement instanceof CreateTable || statement instanceof CreateView || statement instanceof Drop || statement instanceof CreateIndex) {
type = SQLQueryType.DDL;
} else {
type = SQLQueryType.UNKNOWN;
}
} catch (Throwable e) {
this.type = SQLQueryType.UNKNOWN;
this.parseError = e;
// log.debug("Error parsing SQL query [" + query + "]:" + CommonUtils.getRootCause(e).getMessage());
}
}
Aggregations