Skip to content

Commit 2204a5f

Browse files
committed
fixes #244
1 parent 7f5b61e commit 2204a5f

File tree

8 files changed

+228
-17
lines changed

8 files changed

+228
-17
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import net.sf.jsqlparser.statement.alter.Alter;
2525
import net.sf.jsqlparser.statement.create.index.CreateIndex;
2626
import net.sf.jsqlparser.statement.create.table.CreateTable;
27+
import net.sf.jsqlparser.statement.create.view.AlterView;
2728
import net.sf.jsqlparser.statement.create.view.CreateView;
2829
import net.sf.jsqlparser.statement.delete.Delete;
2930
import net.sf.jsqlparser.statement.drop.Drop;
@@ -56,6 +57,8 @@ public interface StatementVisitor {
5657
void visit(CreateTable createTable);
5758

5859
void visit(CreateView createView);
60+
61+
void visit(AlterView alterView);
5962

6063
void visit(Alter alter);
6164

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import net.sf.jsqlparser.statement.alter.Alter;
2525
import net.sf.jsqlparser.statement.create.index.CreateIndex;
2626
import net.sf.jsqlparser.statement.create.table.CreateTable;
27+
import net.sf.jsqlparser.statement.create.view.AlterView;
2728
import net.sf.jsqlparser.statement.create.view.CreateView;
2829
import net.sf.jsqlparser.statement.delete.Delete;
2930
import net.sf.jsqlparser.statement.drop.Drop;
@@ -110,4 +111,8 @@ public void visit(SetStatement set) {
110111
public void visit(Merge merge) {
111112

112113
}
114+
115+
@Override
116+
public void visit(AlterView alterView) {
117+
}
113118
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
/*
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2013 JSQLParser
6+
* %%
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU Lesser General Public License as
9+
* published by the Free Software Foundation, either version 2.1 of the
10+
* License, or (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Lesser Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Lesser Public
18+
* License along with this program. If not, see
19+
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
20+
* #L%
21+
*/
22+
package net.sf.jsqlparser.statement.create.view;
23+
24+
import java.util.List;
25+
import net.sf.jsqlparser.schema.Table;
26+
import net.sf.jsqlparser.statement.Statement;
27+
import net.sf.jsqlparser.statement.StatementVisitor;
28+
import net.sf.jsqlparser.statement.select.PlainSelect;
29+
import net.sf.jsqlparser.statement.select.SelectBody;
30+
31+
/**
32+
* A "CREATE VIEW" statement
33+
*/
34+
public class AlterView implements Statement {
35+
36+
private Table view;
37+
private SelectBody selectBody;
38+
private List<String> columnNames = null;
39+
40+
@Override
41+
public void accept(StatementVisitor statementVisitor) {
42+
statementVisitor.visit(this);
43+
}
44+
45+
/**
46+
* In the syntax tree, a view looks and acts just like a Table.
47+
*
48+
* @return The name of the view to be created.
49+
*/
50+
public Table getView() {
51+
return view;
52+
}
53+
54+
public void setView(Table view) {
55+
this.view = view;
56+
}
57+
58+
/**
59+
* @return the SelectBody
60+
*/
61+
public SelectBody getSelectBody() {
62+
return selectBody;
63+
}
64+
65+
public void setSelectBody(SelectBody selectBody) {
66+
this.selectBody = selectBody;
67+
}
68+
69+
public List<String> getColumnNames() {
70+
return columnNames;
71+
}
72+
73+
public void setColumnNames(List<String> columnNames) {
74+
this.columnNames = columnNames;
75+
}
76+
77+
@Override
78+
public String toString() {
79+
StringBuilder sql = new StringBuilder("ALTER ");
80+
sql.append("VIEW ");
81+
sql.append(view);
82+
if (columnNames != null) {
83+
sql.append(PlainSelect.getStringList(columnNames, true, true));
84+
}
85+
sql.append(" AS ").append(selectBody);
86+
return sql.toString();
87+
}
88+
}

src/main/java/net/sf/jsqlparser/util/TablesNamesFinder.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import net.sf.jsqlparser.statement.alter.Alter;
4444
import net.sf.jsqlparser.statement.create.index.CreateIndex;
4545
import net.sf.jsqlparser.statement.create.table.CreateTable;
46+
import net.sf.jsqlparser.statement.create.view.AlterView;
4647
import net.sf.jsqlparser.statement.create.view.CreateView;
4748
import net.sf.jsqlparser.statement.drop.Drop;
4849
import net.sf.jsqlparser.statement.execute.Execute;
@@ -575,17 +576,17 @@ public void visit(Replace replace) {
575576

576577
@Override
577578
public void visit(Drop drop) {
578-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
579+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
579580
}
580581

581582
@Override
582583
public void visit(Truncate truncate) {
583-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
584+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
584585
}
585586

586587
@Override
587588
public void visit(CreateIndex createIndex) {
588-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
589+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
589590
}
590591

591592
@Override
@@ -598,27 +599,27 @@ public void visit(CreateTable create) {
598599

599600
@Override
600601
public void visit(CreateView createView) {
601-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
602+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
602603
}
603604

604605
@Override
605606
public void visit(Alter alter) {
606-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
607+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
607608
}
608609

609610
@Override
610611
public void visit(Statements stmts) {
611-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
612+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
612613
}
613614

614615
@Override
615616
public void visit(Execute execute) {
616-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
617+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
617618
}
618619

619620
@Override
620621
public void visit(SetStatement set) {
621-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
622+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
622623
}
623624

624625
@Override
@@ -635,7 +636,7 @@ public void visit(HexValue hexValue) {
635636

636637
@Override
637638
public void visit(Merge merge) {
638-
throw new UnsupportedOperationException(NOT_SUPPORTED_YET); //To change body of generated methods, choose Tools | Templates.
639+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
639640
}
640641

641642
@Override
@@ -646,4 +647,9 @@ public void visit(OracleHint hint) {
646647
public void visit(TableFunction valuesList) {
647648
}
648649

650+
@Override
651+
public void visit(AlterView alterView) {
652+
throw new UnsupportedOperationException(NOT_SUPPORTED_YET);
653+
}
654+
649655
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* #%L
3+
* JSQLParser library
4+
* %%
5+
* Copyright (C) 2004 - 2013 JSQLParser
6+
* %%
7+
* This program is free software: you can redistribute it and/or modify
8+
* it under the terms of the GNU Lesser General Public License as
9+
* published by the Free Software Foundation, either version 2.1 of the
10+
* License, or (at your option) any later version.
11+
*
12+
* This program is distributed in the hope that it will be useful,
13+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
* GNU General Lesser Public License for more details.
16+
*
17+
* You should have received a copy of the GNU General Lesser Public
18+
* License along with this program. If not, see
19+
* <http://www.gnu.org/licenses/lgpl-2.1.html>.
20+
* #L%
21+
*/
22+
package net.sf.jsqlparser.util.deparser;
23+
24+
import net.sf.jsqlparser.statement.create.view.AlterView;
25+
import net.sf.jsqlparser.statement.select.PlainSelect;
26+
import net.sf.jsqlparser.statement.select.SelectVisitor;
27+
28+
/**
29+
* A class to de-parse (that is, tranform from JSqlParser hierarchy into a
30+
* string) a {@link net.sf.jsqlparser.statement.create.view.AlterView}
31+
*/
32+
public class AlterViewDeParser {
33+
34+
private StringBuilder buffer;
35+
private SelectVisitor selectVisitor;
36+
37+
/**
38+
* @param buffer the buffer that will be filled with the select
39+
*/
40+
public AlterViewDeParser(StringBuilder buffer) {
41+
SelectDeParser selectDeParser = new SelectDeParser();
42+
selectDeParser.setBuffer(buffer);
43+
ExpressionDeParser expressionDeParser = new ExpressionDeParser(selectDeParser, buffer);
44+
selectDeParser.setExpressionVisitor(expressionDeParser);
45+
selectVisitor = selectDeParser;
46+
this.buffer = buffer;
47+
}
48+
49+
public AlterViewDeParser(StringBuilder buffer, SelectVisitor selectVisitor) {
50+
this.buffer = buffer;
51+
this.selectVisitor = selectVisitor;
52+
}
53+
54+
public void deParse(AlterView alterView) {
55+
buffer.append("ALTER ");
56+
buffer.append("VIEW ").append(alterView.getView().getFullyQualifiedName());
57+
if (alterView.getColumnNames() != null) {
58+
buffer.append(PlainSelect.getStringList(alterView.getColumnNames(), true, true));
59+
}
60+
buffer.append(" AS ");
61+
62+
alterView.getSelectBody().accept(selectVisitor);
63+
}
64+
65+
public StringBuilder getBuffer() {
66+
return buffer;
67+
}
68+
69+
public void setBuffer(StringBuilder buffer) {
70+
this.buffer = buffer;
71+
}
72+
}

src/main/java/net/sf/jsqlparser/util/deparser/StatementDeParser.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import net.sf.jsqlparser.statement.alter.Alter;
3030
import net.sf.jsqlparser.statement.create.index.CreateIndex;
3131
import net.sf.jsqlparser.statement.create.table.CreateTable;
32+
import net.sf.jsqlparser.statement.create.view.AlterView;
3233
import net.sf.jsqlparser.statement.create.view.CreateView;
3334
import net.sf.jsqlparser.statement.delete.Delete;
3435
import net.sf.jsqlparser.statement.drop.Drop;
@@ -66,6 +67,12 @@ public void visit(CreateView createView) {
6667
CreateViewDeParser createViewDeParser = new CreateViewDeParser(buffer);
6768
createViewDeParser.deParse(createView);
6869
}
70+
71+
@Override
72+
public void visit(AlterView alterView) {
73+
AlterViewDeParser alterViewDeParser = new AlterViewDeParser(buffer);
74+
alterViewDeParser.deParse(alterView);
75+
}
6976

7077
@Override
7178
public void visit(Delete delete) {

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -283,15 +283,16 @@ Statement SingleStatement() :
283283
(
284284
stm = Select()
285285
|
286-
stm = Update()
286+
stm = Update()
287287
|
288288
stm = Insert()
289289
|
290290
stm = Delete()
291291
|
292292
stm = Replace()
293293
|
294-
stm = Alter()
294+
LOOKAHEAD(2)
295+
stm = AlterTable()
295296
|
296297
stm = Merge()
297298
|
@@ -304,6 +305,8 @@ Statement SingleStatement() :
304305
LOOKAHEAD(2)
305306
stm = CreateView()
306307
|
308+
stm = AlterView()
309+
|
307310
stm = Drop()
308311
|
309312
stm = Truncate()
@@ -2712,14 +2715,26 @@ CreateView CreateView():
27122715
<K_VIEW> view=Table() { createView.setView(view); }
27132716
[ columnNames = ColumnsNamesList() { createView.setColumnNames(columnNames); } ]
27142717
<K_AS>
2715-
(
2716-
LOOKAHEAD(3) select=SelectBody() { createView.setSelectBody(select); }
2717-
|
2718-
"(" select=SelectBody() ")" { createView.setSelectBody(select); }
2719-
)
2718+
select=SelectBody() { createView.setSelectBody(select); }
27202719
{ return createView; }
27212720
}
27222721

2722+
AlterView AlterView():
2723+
{
2724+
AlterView alterView = new AlterView();
2725+
Table view = null;
2726+
SelectBody select = null;
2727+
List<String> columnNames = null;
2728+
}
2729+
{
2730+
<K_ALTER>
2731+
<K_VIEW> view=Table() { alterView.setView(view); }
2732+
[ columnNames = ColumnsNamesList() { alterView.setColumnNames(columnNames); } ]
2733+
<K_AS>
2734+
select=SelectBody() { alterView.setSelectBody(select); }
2735+
{ return alterView; }
2736+
}
2737+
27232738
String CreateParameter():
27242739
{
27252740
String retval = "";
@@ -2849,7 +2864,7 @@ Truncate Truncate():
28492864
}
28502865
}
28512866

2852-
Alter Alter():
2867+
Alter AlterTable():
28532868
{
28542869
Alter alter = new Alter();
28552870
Table table;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package net.sf.jsqlparser.test.create;
2+
3+
4+
import net.sf.jsqlparser.JSQLParserException;
5+
import static net.sf.jsqlparser.test.TestUtils.*;
6+
import org.junit.Test;
7+
8+
public class AlterViewTest {
9+
10+
@Test
11+
public void testAlterView() throws JSQLParserException {
12+
String stmt = "ALTER VIEW myview AS SELECT * FROM mytab";
13+
assertSqlCanBeParsedAndDeparsed(stmt);
14+
}
15+
}

0 commit comments

Comments
 (0)