Skip to content

Commit b2eff8b

Browse files
committed
CreateView merged in
2 parents db49b43 + 101ef1d commit b2eff8b

File tree

4 files changed

+175
-0
lines changed

4 files changed

+175
-0
lines changed

src/main/java/net/sf/jsqlparser/statement/StatementVisitor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
package net.sf.jsqlparser.statement;
2424

2525
import net.sf.jsqlparser.statement.create.table.CreateTable;
26+
import net.sf.jsqlparser.statement.create.view.CreateView;
2627
import net.sf.jsqlparser.statement.delete.Delete;
2728
import net.sf.jsqlparser.statement.drop.Drop;
2829
import net.sf.jsqlparser.statement.insert.Insert;
@@ -48,4 +49,5 @@ public interface StatementVisitor {
4849

4950
public void visit(CreateTable createTable);
5051

52+
public void visit(CreateView createView);
5153
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package net.sf.jsqlparser.statement.create.view;
2+
3+
4+
import net.sf.jsqlparser.schema.Table;
5+
import net.sf.jsqlparser.statement.Statement;
6+
import net.sf.jsqlparser.statement.StatementVisitor;
7+
import net.sf.jsqlparser.statement.select.SelectBody;
8+
9+
/**
10+
* A "CREATE VIEW" statement
11+
*/
12+
public class CreateView implements Statement {
13+
14+
private Table view;
15+
private SelectBody selectBody;
16+
private boolean orReplace = false;
17+
18+
@Override
19+
public void accept(StatementVisitor statementVisitor) {
20+
statementVisitor.visit(this);
21+
}
22+
23+
/**
24+
* In the syntax tree, a view looks and acts just like a Table.
25+
* @return The name of the view to be created.
26+
*/
27+
public Table getView() {
28+
return view;
29+
}
30+
31+
public void setView(Table view) {
32+
this.view = view;
33+
}
34+
35+
/**
36+
* @return was "OR REPLACE" specified?
37+
*/
38+
public boolean isOrReplace() {
39+
return orReplace;
40+
}
41+
42+
/**
43+
* @param orReplace was "OR REPLACE" specified?
44+
*/
45+
public void setOrReplace(boolean orReplace) {
46+
this.orReplace = orReplace;
47+
}
48+
49+
/**
50+
* @return the SelectBody
51+
*/
52+
public SelectBody getSelectBody() {
53+
return selectBody;
54+
}
55+
56+
public void setSelectBody(SelectBody selectBody) {
57+
this.selectBody = selectBody;
58+
}
59+
60+
public String toString() {
61+
String sql = "CREATE VIEW " + view + " AS " + selectBody;
62+
return sql;
63+
}
64+
}
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package net.sf.jsqlparser.util.deparser;
2+
3+
import java.util.Iterator;
4+
5+
import net.sf.jsqlparser.statement.create.table.ColumnDefinition;
6+
import net.sf.jsqlparser.statement.create.table.CreateTable;
7+
import net.sf.jsqlparser.statement.create.table.Index;
8+
9+
/**
10+
* A class to de-parse (that is, tranform from JSqlParser hierarchy into a
11+
* string) a {@link net.sf.jsqlparser.statement.create.table.CreateTable}
12+
*/
13+
public class CreateTableDeParser {
14+
15+
protected StringBuilder buffer;
16+
17+
/**
18+
* @param buffer the buffer that will be filled with the select
19+
*/
20+
public CreateTableDeParser(StringBuilder buffer) {
21+
this.buffer = buffer;
22+
}
23+
24+
public void deParse(CreateTable createTable) {
25+
buffer.append("CREATE TABLE ").append(createTable.getTable().getWholeTableName());
26+
if (createTable.getColumnDefinitions() != null) {
27+
buffer.append(" (");
28+
for (Iterator<ColumnDefinition> iter = createTable.getColumnDefinitions().iterator(); iter.hasNext();) {
29+
ColumnDefinition columnDefinition = (ColumnDefinition) iter.next();
30+
buffer.append(columnDefinition.getColumnName());
31+
buffer.append(" ");
32+
buffer.append(columnDefinition.getColDataType().toString());
33+
if (columnDefinition.getColumnSpecStrings() != null) {
34+
for (Iterator<String> iterator = columnDefinition.getColumnSpecStrings().iterator(); iterator.hasNext();) {
35+
buffer.append(" ");
36+
buffer.append((String) iterator.next());
37+
}
38+
}
39+
40+
if (iter.hasNext()) {
41+
buffer.append(" , ");
42+
}
43+
44+
}
45+
46+
if (createTable.getIndexes() != null) {
47+
for (Iterator<Index> iter = createTable.getIndexes().iterator(); iter.hasNext();) {
48+
buffer.append(",");
49+
Index index = (Index) iter.next();
50+
buffer.append(index.getType()).append(" ").append(index.getName());
51+
buffer.append("(");
52+
for (Iterator<String> iterator = index.getColumnsNames().iterator(); iterator.hasNext();) {
53+
buffer.append((String) iterator.next());
54+
if (iterator.hasNext()) {
55+
buffer.append(", ");
56+
}
57+
}
58+
buffer.append(")");
59+
60+
if (iter.hasNext()) {
61+
buffer.append(",");
62+
}
63+
}
64+
}
65+
66+
buffer.append(" )");
67+
}
68+
}
69+
70+
public StringBuilder getBuffer() {
71+
return buffer;
72+
}
73+
74+
public void setBuffer(StringBuilder buffer) {
75+
this.buffer = buffer;
76+
}
77+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package net.sf.jsqlparser.test.create;
2+
3+
import java.io.StringReader;
4+
5+
import junit.framework.TestCase;
6+
import net.sf.jsqlparser.JSQLParserException;
7+
import net.sf.jsqlparser.parser.CCJSqlParserManager;
8+
import net.sf.jsqlparser.schema.Table;
9+
import net.sf.jsqlparser.statement.create.view.CreateView;
10+
import net.sf.jsqlparser.statement.select.PlainSelect;
11+
12+
public class CreateViewTest extends TestCase {
13+
CCJSqlParserManager parserManager = new CCJSqlParserManager();
14+
15+
public CreateViewTest(String arg0) {
16+
super(arg0);
17+
}
18+
19+
public void testCreateView() throws JSQLParserException {
20+
String statement = "CREATE VIEW myview AS SELECT * FROM mytab";
21+
CreateView createView = (CreateView) parserManager.parse(new StringReader(statement));
22+
assertFalse(createView.isOrReplace());
23+
assertEquals("myview", createView.getView().getName());
24+
assertEquals("mytab", ((Table)((PlainSelect)createView.getSelectBody()).getFromItem()).getName());
25+
assertEquals(statement, createView.toString());
26+
}
27+
28+
public static void main(String[] args) {
29+
junit.swingui.TestRunner.run(CreateViewTest.class);
30+
}
31+
32+
}

0 commit comments

Comments
 (0)