Search in sources :

Example 11 with Insert

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);
}
Also used : StringReader(java.io.StringReader) Insert(net.sf.jsqlparser.statement.insert.Insert) ExpressionList(net.sf.jsqlparser.expression.operators.relational.ExpressionList) Test(org.junit.Test)

Example 12 with 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);
}
Also used : StringReader(java.io.StringReader) Insert(net.sf.jsqlparser.statement.insert.Insert) Test(org.junit.Test)

Example 13 with 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);
}
Also used : JdbcParameter(net.sf.jsqlparser.expression.JdbcParameter) StringReader(java.io.StringReader) Insert(net.sf.jsqlparser.statement.insert.Insert) ExpressionList(net.sf.jsqlparser.expression.operators.relational.ExpressionList) Test(org.junit.Test)

Example 14 with 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);
    }
}
Also used : InputStream(java.io.InputStream) Statement(net.sf.jsqlparser.statement.Statement) Insert(net.sf.jsqlparser.statement.insert.Insert) TablesNamesFinder(net.sf.jsqlparser.util.TablesNamesFinder) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest) MethodSource(org.junit.jupiter.params.provider.MethodSource)

Example 15 with Insert

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());
    }
}
Also used : Delete(net.sf.jsqlparser.statement.delete.Delete) DBException(org.jkiss.dbeaver.DBException) Table(net.sf.jsqlparser.schema.Table) CreateTable(net.sf.jsqlparser.statement.create.table.CreateTable) CreateTable(net.sf.jsqlparser.statement.create.table.CreateTable) Insert(net.sf.jsqlparser.statement.insert.Insert) Update(net.sf.jsqlparser.statement.update.Update) CreateView(net.sf.jsqlparser.statement.create.view.CreateView) Drop(net.sf.jsqlparser.statement.drop.Drop) Alter(net.sf.jsqlparser.statement.alter.Alter) CreateIndex(net.sf.jsqlparser.statement.create.index.CreateIndex) ArrayList(java.util.ArrayList) List(java.util.List)

Aggregations

Insert (net.sf.jsqlparser.statement.insert.Insert)18 Test (org.junit.Test)12 StringReader (java.io.StringReader)10 ArrayList (java.util.ArrayList)4 Table (net.sf.jsqlparser.schema.Table)4 Statement (net.sf.jsqlparser.statement.Statement)4 Alter (net.sf.jsqlparser.statement.alter.Alter)4 CreateTable (net.sf.jsqlparser.statement.create.table.CreateTable)4 Delete (net.sf.jsqlparser.statement.delete.Delete)4 Drop (net.sf.jsqlparser.statement.drop.Drop)4 Update (net.sf.jsqlparser.statement.update.Update)4 CCJSqlParserManagerTest (net.sf.jsqlparser.test.simpleparsing.CCJSqlParserManagerTest)4 List (java.util.List)3 ExpressionList (net.sf.jsqlparser.expression.operators.relational.ExpressionList)3 CreateIndex (net.sf.jsqlparser.statement.create.index.CreateIndex)3 Expression (net.sf.jsqlparser.expression.Expression)2 JdbcParameter (net.sf.jsqlparser.expression.JdbcParameter)2 CreateView (net.sf.jsqlparser.statement.create.view.CreateView)2 PlainSelect (net.sf.jsqlparser.statement.select.PlainSelect)2 Select (net.sf.jsqlparser.statement.select.Select)2