Skip to content

Commit e85f1a4

Browse files
committed
Merge origin/master
2 parents 26b2c11 + a822fea commit e85f1a4

File tree

5 files changed

+38
-21
lines changed

5 files changed

+38
-21
lines changed

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,20 +34,21 @@ JSqlParser is a SQL statement parser. It translates SQLs in a traversable hierar
3434
If you need help using JSqlParser feel free to file an issue or contact me.
3535

3636
## Contributions
37-
To help JSqlParsers development you are encouraged to provide
37+
To help JSqlParser's development you are encouraged to provide
3838
* feedback
3939
* bugreports
4040
* pull requests for new features
4141
* improvement requests
4242
* fund new features
4343
* a little donation
4444

45-
**Please write in english, since it's the language most of the dev team knows.**
45+
**Please write in English, since it's the language most of the dev team knows.**
4646

4747
Also I would like to know about needed examples or documentation stuff.
4848

4949
## Extensions in the latest SNAPSHOT version 1.3
5050

51+
* support for **with - selects** statements in **create view** definitions
5152
* support for block statements (begin ... end)
5253
* support for additional raw string and byte prefixes (issue #659)
5354
* support for special oracle type syntax **varchar2(255 BYTE)** (issue #273)
@@ -64,7 +65,7 @@ Also I would like to know about needed examples or documentation stuff.
6465
## Extensions of JSqlParser releases
6566

6667
* [Release Notes](https://github.com/JSQLParser/JSqlParser/releases)
67-
* Modifications before GitHubs release tagging are listed in the [Older Releases](https://github.com/JSQLParser/JSqlParser/wiki/Older-Releases) page.
68+
* Modifications before GitHub's release tagging are listed in the [Older Releases](https://github.com/JSQLParser/JSqlParser/wiki/Older-Releases) page.
6869

6970

7071
## Building from the sources
@@ -79,7 +80,7 @@ The project requires the following to build:
7980

8081
This will produce the jsqlparser-VERSION.jar file in the target/ directory.
8182

82-
**To build this project without using Maven, one has to build the parser by JavaCC using the CLI options it provids.**
83+
**To build this project without using Maven, one has to build the parser by JavaCC using the CLI options it provides.**
8384

8485
## Debugging through problems
8586

src/main/java/net/sf/jsqlparser/statement/create/view/CreateView.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,15 @@
2626
import net.sf.jsqlparser.statement.Statement;
2727
import net.sf.jsqlparser.statement.StatementVisitor;
2828
import net.sf.jsqlparser.statement.select.PlainSelect;
29-
import net.sf.jsqlparser.statement.select.SelectBody;
29+
import net.sf.jsqlparser.statement.select.Select;
3030

3131
/**
3232
* A "CREATE VIEW" statement
3333
*/
3434
public class CreateView implements Statement {
3535

3636
private Table view;
37-
private SelectBody selectBody;
37+
private Select select;
3838
private boolean orReplace = false;
3939
private List<String> columnNames = null;
4040
private boolean materialized = false;
@@ -73,15 +73,12 @@ public void setOrReplace(boolean orReplace) {
7373
this.orReplace = orReplace;
7474
}
7575

76-
/**
77-
* @return the SelectBody
78-
*/
79-
public SelectBody getSelectBody() {
80-
return selectBody;
76+
public Select getSelect() {
77+
return select;
8178
}
8279

83-
public void setSelectBody(SelectBody selectBody) {
84-
this.selectBody = selectBody;
80+
public void setSelect(Select select) {
81+
this.select = select;
8582
}
8683

8784
public List<String> getColumnNames() {
@@ -143,7 +140,7 @@ public String toString() {
143140
if (columnNames != null) {
144141
sql.append(PlainSelect.getStringList(columnNames, true, true));
145142
}
146-
sql.append(" AS ").append(selectBody);
143+
sql.append(" AS ").append(select);
147144
return sql.toString();
148145
}
149146
}

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@
2424
import net.sf.jsqlparser.statement.create.view.CreateView;
2525
import net.sf.jsqlparser.statement.create.view.TemporaryOption;
2626
import net.sf.jsqlparser.statement.select.PlainSelect;
27+
import net.sf.jsqlparser.statement.select.Select;
2728
import net.sf.jsqlparser.statement.select.SelectVisitor;
29+
import net.sf.jsqlparser.statement.select.WithItem;
2830

2931
/**
3032
* A class to de-parse (that is, tranform from JSqlParser hierarchy into a string) a
@@ -77,7 +79,22 @@ public void deParse(CreateView createView) {
7779
}
7880
buffer.append(" AS ");
7981

80-
createView.getSelectBody().accept(selectVisitor);
82+
Select select = createView.getSelect();
83+
if (select.getWithItemsList() != null) {
84+
buffer.append("WITH ");
85+
boolean first = true;
86+
for (WithItem item : select.getWithItemsList()) {
87+
if (!first) {
88+
buffer.append(", ");
89+
} else {
90+
first = false;
91+
}
92+
93+
item.accept(selectVisitor);
94+
}
95+
buffer.append(" ");
96+
}
97+
createView.getSelect().getSelectBody().accept(selectVisitor);
8198
}
8299

83100
public StringBuilder getBuffer() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3276,7 +3276,7 @@ CreateView CreateView():
32763276
{
32773277
CreateView createView = new CreateView();
32783278
Table view = null;
3279-
SelectBody select = null;
3279+
Select select = null;
32803280
List<String> columnNames = null;
32813281
}
32823282
{
@@ -3294,7 +3294,7 @@ CreateView CreateView():
32943294
<K_VIEW> view=Table() { createView.setView(view); }
32953295
[ columnNames = ColumnsNamesList() { createView.setColumnNames(columnNames); } ]
32963296
<K_AS>
3297-
select=SelectBody() { createView.setSelectBody(select); }
3297+
select=Select() { createView.setSelect(select); }
32983298
{ return createView; }
32993299
}
33003300

src/test/java/net/sf/jsqlparser/statement/create/CreateViewTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.sf.jsqlparser.statement.create;
22

33
import java.io.StringReader;
4-
54
import junit.framework.TestCase;
65
import net.sf.jsqlparser.JSQLParserException;
76
import net.sf.jsqlparser.parser.CCJSqlParserManager;
@@ -23,8 +22,7 @@ public void testCreateView() throws JSQLParserException {
2322
CreateView createView = (CreateView) parserManager.parse(new StringReader(statement));
2423
assertFalse(createView.isOrReplace());
2524
assertEquals("myview", createView.getView().getName());
26-
assertEquals("mytab", ((Table) ((PlainSelect) createView.getSelectBody()).getFromItem()).
27-
getName());
25+
assertEquals("mytab", ((Table) ((PlainSelect) createView.getSelect().getSelectBody()).getFromItem()).getName());
2826
assertEquals(statement, createView.toString());
2927
}
3028

@@ -54,7 +52,7 @@ public void testCreateView5() throws JSQLParserException {
5452
CreateView createView = (CreateView) parserManager.parse(new StringReader(statement));
5553
assertFalse(createView.isOrReplace());
5654
assertEquals("myview", createView.getView().getName());
57-
assertEquals("mytab", ((Table) ((PlainSelect) createView.getSelectBody()).getFromItem()).
55+
assertEquals("mytab", ((Table) ((PlainSelect) createView.getSelect().getSelectBody()).getFromItem()).
5856
getName());
5957
assertEquals(statement2, createView.toString());
6058
}
@@ -92,4 +90,8 @@ public void testCreateTemporaryViewIssue604() throws JSQLParserException {
9290
public void testCreateTemporaryViewIssue604_2() throws JSQLParserException {
9391
assertSqlCanBeParsedAndDeparsed("CREATE TEMP VIEW myview AS SELECT * FROM mytable");
9492
}
93+
94+
public void testCreateTemporaryViewIssue665() throws JSQLParserException {
95+
assertSqlCanBeParsedAndDeparsed("CREATE VIEW foo(\"BAR\") AS WITH temp AS (SELECT temp_bar FROM foobar) SELECT bar FROM temp");
96+
}
9597
}

0 commit comments

Comments
 (0)