use of net.sf.jsqlparser.statement.insert.Insert in project JSqlParser by JSQLParser.
the class InsertTest method testInsertValuesWithDuplicateElimination.
@Test
public void testInsertValuesWithDuplicateElimination() throws JSQLParserException {
String statement = "INSERT INTO TEST (ID, COUNTER) VALUES (123, 0) " + "ON DUPLICATE KEY UPDATE COUNTER = COUNTER + 1";
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
assertEquals("TEST", insert.getTable().getName());
assertEquals(2, insert.getColumns().size());
assertTrue(insert.isUseValues());
assertEquals("ID", ((Column) insert.getColumns().get(0)).getColumnName());
assertEquals("COUNTER", ((Column) insert.getColumns().get(1)).getColumnName());
assertEquals(2, ((ExpressionList) insert.getItemsList()).getExpressions().size());
assertEquals(123, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(0)).getValue());
assertEquals(0, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)).getValue());
assertEquals(1, insert.getDuplicateUpdateColumns().size());
assertEquals("COUNTER", ((Column) insert.getDuplicateUpdateColumns().get(0)).getColumnName());
assertEquals(1, insert.getDuplicateUpdateExpressionList().size());
assertEquals("COUNTER + 1", insert.getDuplicateUpdateExpressionList().get(0).toString());
assertFalse(insert.isUseSelectBrackets());
assertTrue(insert.isUseDuplicate());
assertEquals(statement, "" + insert);
}
use of net.sf.jsqlparser.statement.insert.Insert in project JSqlParser by JSQLParser.
the class InsertTest method testInsertFromSet.
@Test
public void testInsertFromSet() throws JSQLParserException {
String statement = "INSERT INTO mytable SET col1 = 12, col2 = name1 * name2";
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
assertEquals("mytable", insert.getTable().getName());
assertEquals(2, insert.getSetColumns().size());
assertEquals("col1", ((Column) insert.getSetColumns().get(0)).getColumnName());
assertEquals("col2", ((Column) insert.getSetColumns().get(1)).getColumnName());
assertEquals(2, insert.getSetExpressionList().size());
assertEquals("12", insert.getSetExpressionList().get(0).toString());
assertEquals("name1 * name2", insert.getSetExpressionList().get(1).toString());
assertEquals(statement, "" + insert);
}
use of net.sf.jsqlparser.statement.insert.Insert in project JSqlParser by JSQLParser.
the class InsertTest method testRegularInsert.
@Test
public void testRegularInsert() throws JSQLParserException {
String statement = "INSERT INTO mytable (col1, col2, col3) VALUES (?, 'sadfsd', 234)";
Insert insert = (Insert) parserManager.parse(new StringReader(statement));
assertEquals("mytable", insert.getTable().getName());
assertEquals(3, insert.getColumns().size());
assertEquals("col1", ((Column) insert.getColumns().get(0)).getColumnName());
assertEquals("col2", ((Column) insert.getColumns().get(1)).getColumnName());
assertEquals("col3", ((Column) insert.getColumns().get(2)).getColumnName());
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter);
assertEquals("sadfsd", ((StringValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(1)).getValue());
assertEquals(234, ((LongValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue());
assertEquals(statement, "" + insert);
statement = "INSERT INTO myschema.mytable VALUES (?, ?, 2.3)";
insert = (Insert) parserManager.parse(new StringReader(statement));
assertEquals("myschema.mytable", insert.getTable().getFullyQualifiedName());
assertEquals(3, ((ExpressionList) insert.getItemsList()).getExpressions().size());
assertTrue(((ExpressionList) insert.getItemsList()).getExpressions().get(0) instanceof JdbcParameter);
assertEquals(2.3, ((DoubleValue) ((ExpressionList) insert.getItemsList()).getExpressions().get(2)).getValue(), 0.0);
assertEquals(statement, "" + insert);
}
use of net.sf.jsqlparser.statement.insert.Insert in project sandbox by irof.
the class ParsingTest method insert.
@ParameterizedTest
@MethodSource
void insert(String sql, String insertTableName, List<String> allTableNames) throws Exception {
try (InputStream inputStream = this.getClass().getResourceAsStream(sql)) {
Statement statement = CCJSqlParserUtil.parse(inputStream);
Insert insert = Insert.class.cast(statement);
assertThat(insert.getTable().getName()).isEqualTo(insertTableName);
List<String> tableList = new TablesNamesFinder().getTableList(insert);
assertThat(tableList).hasSameElementsAs(allTableNames);
}
}
use of net.sf.jsqlparser.statement.insert.Insert 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());
}
}
Aggregations