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();
}
}
}
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);
}
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);
}
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());
}
}
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());
}
}
Aggregations