Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Fix jjt
  • Loading branch information
jxnu-liguobin committed Dec 11, 2023
commit df2136e613e6601322f6e24bb7b0db9072c2617e
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ public enum Feature {
*
* @see RefreshMaterializedViewStatement
*/
refreshMaterializedView, refreshMaterializedConcurrentlyView, refreshMaterializedWithDataView, refreshMaterializedWithNoDataView,
refreshMaterializedView, refreshMaterializedWithDataView, refreshMaterializedWithNoDataView,

/**
* SQL "REPLACE VIEW" statement is allowed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,14 @@ public class RefreshMaterializedViewStatement implements Statement {

private Table view;
private RefreshMode refreshMode = RefreshMode.DEFAULT;
private boolean concurrently;
private boolean concurrently = false;

public RefreshMaterializedViewStatement() {}

public RefreshMaterializedViewStatement(RefreshMode refreshMode) {
public RefreshMaterializedViewStatement(Table view, boolean concurrently,
RefreshMode refreshMode) {
this.refreshMode = refreshMode;
}

public RefreshMaterializedViewStatement(Table view) {
this.concurrently = concurrently;
this.view = view;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ public enum PostgresqlVersion implements Version {

// https://www.postgresql.org/docs/16/sql-refreshmaterializedview.html
Feature.refreshMaterializedView,
Feature.refreshMaterializedConcurrentlyView,
Feature.refreshMaterializedWithNoDataView,
Feature.refreshMaterializedWithDataView,

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,23 +28,29 @@ public void validate(RefreshMaterializedViewStatement viewStatement) {
viewStatement.getView().getName());
for (ValidationCapability c : getCapabilities()) {
// default
validateFeature(c, viewStatement.getRefreshMode().compareTo(RefreshMode.DEFAULT) == 0,
validateFeature(c,
viewStatement.getRefreshMode() == RefreshMode.DEFAULT
&& !viewStatement.isConcurrently(),
Feature.refreshMaterializedView);
validateFeature(c,
viewStatement.getRefreshMode() == RefreshMode.DEFAULT
&& viewStatement.isConcurrently(),
Feature.refreshMaterializedView);

// specify WITH DATA
validateFeature(c, viewStatement.getRefreshMode().compareTo(RefreshMode.WITH_DATA) == 0,
validateFeature(c, viewStatement.getRefreshMode() == RefreshMode.WITH_DATA &&
!viewStatement.isConcurrently(),
Feature.refreshMaterializedWithDataView);

// specify WITH DATA and CONCURRENTLY
validateOptionalFeature(c,
viewStatement.getRefreshMode().compareTo(RefreshMode.WITH_DATA) == 0
viewStatement.getRefreshMode() == RefreshMode.WITH_DATA
&& viewStatement.isConcurrently(),
Feature.refreshMaterializedWithDataView);
validateOptionalFeature(c,
viewStatement.getRefreshMode().compareTo(RefreshMode.WITH_DATA) == 0
&& viewStatement.isConcurrently(),
Feature.refreshMaterializedConcurrentlyView);

// specify WITH NO DATA
validateOptionalFeature(c,
viewStatement.getRefreshMode().compareTo(RefreshMode.WITH_NO_DATA) == 0
viewStatement.getRefreshMode() == RefreshMode.WITH_NO_DATA
&& !viewStatement.isConcurrently(),
Feature.refreshMaterializedWithNoDataView);
}
Expand Down
16 changes: 12 additions & 4 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -1226,14 +1226,22 @@ ShowIndexStatement ShowIndex(): {

RefreshMaterializedViewStatement RefreshMaterializedView(): {
Table view = null;
boolean concurrently = false;
RefreshMode refreshMode = RefreshMode.DEFAULT;
}
{
<K_REFRESH> <K_MATERIALIZED> <K_VIEW>
[<K_CONCURRENTLY>]
[ LOOKAHEAD(2) <K_CONCURRENTLY> { concurrently = true; } ]
view = Table()
[ <K_WITH> [ <K_NO> ] <K_DATA> ]
{
return new RefreshMaterializedViewStatement(view);
[
<K_WITH> { refreshMode = RefreshMode.WITH_DATA; }
[
<K_NO> { refreshMode = RefreshMode.WITH_NO_DATA; }
]
<K_DATA>
]
{
return new RefreshMaterializedViewStatement(view, concurrently, refreshMode);
}
}
// https://dev.mysql.com/doc/refman/8.0/en/show-tables.html
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import net.sf.jsqlparser.schema.Sequence.ParameterType;
import net.sf.jsqlparser.statement.ExplainStatement.OptionType;
import net.sf.jsqlparser.statement.create.table.ColDataType;
import net.sf.jsqlparser.statement.refresh.RefreshMode;
import net.sf.jsqlparser.statement.select.ParenthesedSelect;
import net.sf.jsqlparser.statement.update.UpdateSet;
import net.sf.jsqlparser.util.ReflectionTestUtils;
Expand Down Expand Up @@ -130,7 +131,8 @@ public class ReflectionModelTest {
new net.sf.jsqlparser.statement.SetStatement("name", null),
new net.sf.jsqlparser.statement.ShowColumnsStatement(),
new net.sf.jsqlparser.statement.show.ShowIndexStatement(),
new net.sf.jsqlparser.statement.refresh.RefreshMaterializedViewStatement(),
new net.sf.jsqlparser.statement.refresh.RefreshMaterializedViewStatement(
new net.sf.jsqlparser.schema.Table("my_view"), true, RefreshMode.WITH_DATA),
new net.sf.jsqlparser.statement.ShowStatement(),
new net.sf.jsqlparser.statement.Statements(),
new net.sf.jsqlparser.statement.UseStatement(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,6 @@ public void testValidationRefreshNotAllowed() throws Exception {
for (String sql : Arrays.asList("REFRESH MATERIALIZED VIEW my_view")) {
validateNotAllowed(sql, 1, 1, FeaturesAllowed.DML,
Feature.refreshMaterializedView,
Feature.refreshMaterializedConcurrentlyView,
Feature.refreshMaterializedWithNoDataView,
Feature.refreshMaterializedWithDataView);
}
Expand Down