Search in sources :

Example 6 with CreateTable

use of net.sf.jsqlparser.statement.create.table.CreateTable in project JSqlParser by JSQLParser.

the class CreateTableTest method testRUBiSCreateList.

public void testRUBiSCreateList() throws Exception {
    BufferedReader in = new BufferedReader(new InputStreamReader(CreateTableTest.class.getResourceAsStream("/RUBiS-create-requests.txt")));
    TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
    try {
        int numSt = 1;
        while (true) {
            String line = getLine(in);
            if (line == null) {
                break;
            }
            if (!"#begin".equals(line)) {
                break;
            }
            line = getLine(in);
            StringBuilder buf = new StringBuilder(line);
            while (true) {
                line = getLine(in);
                if ("#end".equals(line)) {
                    break;
                }
                buf.append("\n");
                buf.append(line);
            }
            String query = buf.toString();
            if (!getLine(in).equals("true")) {
                continue;
            }
            String tableName = getLine(in);
            String cols = getLine(in);
            try {
                CreateTable createTable = (CreateTable) parserManager.parse(new StringReader(query));
                String[] colsList = null;
                if ("null".equals(cols)) {
                    colsList = new String[0];
                } else {
                    StringTokenizer tokenizer = new StringTokenizer(cols, " ");
                    List colsListList = new ArrayList();
                    while (tokenizer.hasMoreTokens()) {
                        colsListList.add(tokenizer.nextToken());
                    }
                    colsList = (String[]) colsListList.toArray(new String[colsListList.size()]);
                }
                List colsFound = new ArrayList();
                if (createTable.getColumnDefinitions() != null) {
                    for (Iterator iter = createTable.getColumnDefinitions().iterator(); iter.hasNext(); ) {
                        ColumnDefinition columnDefinition = (ColumnDefinition) iter.next();
                        String colName = columnDefinition.getColumnName();
                        boolean unique = false;
                        if (createTable.getIndexes() != null) {
                            for (Iterator iterator = createTable.getIndexes().iterator(); iterator.hasNext(); ) {
                                Index index = (Index) iterator.next();
                                if (index.getType().equals("PRIMARY KEY") && index.getColumnsNames().size() == 1 && index.getColumnsNames().get(0).equals(colName)) {
                                    unique = true;
                                }
                            }
                        }
                        if (!unique) {
                            if (columnDefinition.getColumnSpecStrings() != null) {
                                for (Iterator iterator = columnDefinition.getColumnSpecStrings().iterator(); iterator.hasNext(); ) {
                                    String par = (String) iterator.next();
                                    if (par.equals("UNIQUE")) {
                                        unique = true;
                                    } else if (par.equals("PRIMARY") && iterator.hasNext() && iterator.next().equals("KEY")) {
                                        unique = true;
                                    }
                                }
                            }
                        }
                        if (unique) {
                            colName += ".unique";
                        }
                        colsFound.add(colName.toLowerCase());
                    }
                }
                assertEquals("stm:" + query, colsList.length, colsFound.size());
                for (int i = 0; i < colsList.length; i++) {
                    assertEquals("stm:" + query, colsList[i], colsFound.get(i));
                }
            } catch (Exception e) {
                throw new TestException("error at stm num: " + numSt + "  " + query, e);
            }
            numSt++;
        }
    } finally {
        if (in != null) {
            in.close();
        }
    }
}
Also used : InputStreamReader(java.io.InputStreamReader) TestException(net.sf.jsqlparser.test.TestException) CreateTable(net.sf.jsqlparser.statement.create.table.CreateTable) ArrayList(java.util.ArrayList) Index(net.sf.jsqlparser.statement.create.table.Index) TablesNamesFinder(net.sf.jsqlparser.util.TablesNamesFinder) TestException(net.sf.jsqlparser.test.TestException) JSQLParserException(net.sf.jsqlparser.JSQLParserException) ColumnDefinition(net.sf.jsqlparser.statement.create.table.ColumnDefinition) StringTokenizer(java.util.StringTokenizer) BufferedReader(java.io.BufferedReader) StringReader(java.io.StringReader) Iterator(java.util.Iterator) ArrayList(java.util.ArrayList) List(java.util.List)

Example 7 with CreateTable

use of net.sf.jsqlparser.statement.create.table.CreateTable in project JSqlParser by JSQLParser.

the class CreateTableTest method testCreateTableUnlogged.

public void testCreateTableUnlogged() throws JSQLParserException {
    String statement = "CREATE UNLOGGED TABLE mytab (mycol a (10, 20) c nm g, mycol2 mypar1 mypar2 (23,323,3) asdf ('23','123') dasd, " + "PRIMARY KEY (mycol2, mycol)) type = myisam";
    CreateTable createTable = (CreateTable) parserManager.parse(new StringReader(statement));
    assertEquals(2, createTable.getColumnDefinitions().size());
    assertTrue(createTable.isUnlogged());
    assertEquals("mycol", ((ColumnDefinition) createTable.getColumnDefinitions().get(0)).getColumnName());
    assertEquals("mycol2", ((ColumnDefinition) createTable.getColumnDefinitions().get(1)).getColumnName());
    assertEquals("PRIMARY KEY", ((Index) createTable.getIndexes().get(0)).getType());
    assertEquals("mycol", ((Index) createTable.getIndexes().get(0)).getColumnsNames().get(1));
    assertEquals(statement, "" + createTable);
}
Also used : CreateTable(net.sf.jsqlparser.statement.create.table.CreateTable) StringReader(java.io.StringReader) Index(net.sf.jsqlparser.statement.create.table.Index)

Example 8 with CreateTable

use of net.sf.jsqlparser.statement.create.table.CreateTable in project JSqlParser by JSQLParser.

the class CreateTableTest method testCreateTable.

public void testCreateTable() throws JSQLParserException {
    String statement = "CREATE TABLE mytab (mycol a (10, 20) c nm g, mycol2 mypar1 mypar2 (23,323,3) asdf ('23','123') dasd, " + "PRIMARY KEY (mycol2, mycol)) type = myisam";
    CreateTable createTable = (CreateTable) parserManager.parse(new StringReader(statement));
    assertEquals(2, createTable.getColumnDefinitions().size());
    assertFalse(createTable.isUnlogged());
    assertEquals("mycol", ((ColumnDefinition) createTable.getColumnDefinitions().get(0)).getColumnName());
    assertEquals("mycol2", ((ColumnDefinition) createTable.getColumnDefinitions().get(1)).getColumnName());
    assertEquals("PRIMARY KEY", ((Index) createTable.getIndexes().get(0)).getType());
    assertEquals("mycol", ((Index) createTable.getIndexes().get(0)).getColumnsNames().get(1));
    assertEquals(statement, "" + createTable);
}
Also used : CreateTable(net.sf.jsqlparser.statement.create.table.CreateTable) StringReader(java.io.StringReader) Index(net.sf.jsqlparser.statement.create.table.Index)

Example 9 with CreateTable

use of net.sf.jsqlparser.statement.create.table.CreateTable 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)

Example 10 with CreateTable

use of net.sf.jsqlparser.statement.create.table.CreateTable 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());
    }
}
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

CreateTable (net.sf.jsqlparser.statement.create.table.CreateTable)10 ArrayList (java.util.ArrayList)5 CreateIndex (net.sf.jsqlparser.statement.create.index.CreateIndex)5 Index (net.sf.jsqlparser.statement.create.table.Index)5 StringReader (java.io.StringReader)4 Alter (net.sf.jsqlparser.statement.alter.Alter)4 Delete (net.sf.jsqlparser.statement.delete.Delete)4 Drop (net.sf.jsqlparser.statement.drop.Drop)4 Insert (net.sf.jsqlparser.statement.insert.Insert)4 Update (net.sf.jsqlparser.statement.update.Update)4 List (java.util.List)3 ColumnDefinition (net.sf.jsqlparser.statement.create.table.ColumnDefinition)3 Column (herddb.model.Column)2 StatementExecutionException (herddb.model.StatementExecutionException)2 Table (herddb.model.Table)2 CreateTableStatement (herddb.model.commands.CreateTableStatement)2 HashSet (java.util.HashSet)2 Table (net.sf.jsqlparser.schema.Table)2 CreateView (net.sf.jsqlparser.statement.create.view.CreateView)2 Truncate (net.sf.jsqlparser.statement.truncate.Truncate)2