-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathRedshiftCreateViewTest.java
More file actions
82 lines (75 loc) · 3.54 KB
/
Copy pathRedshiftCreateViewTest.java
File metadata and controls
82 lines (75 loc) · 3.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2026 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.create;
import static org.junit.jupiter.api.Assertions.*;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.create.view.AutoRefreshOption;
import net.sf.jsqlparser.statement.create.view.CreateView;
import net.sf.jsqlparser.statement.select.Select;
import net.sf.jsqlparser.test.TestUtils;
import net.sf.jsqlparser.util.TablesNamesFinder;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;
class RedshiftCreateViewTest {
@ParameterizedTest
@ValueSource(strings = {"", " BACKUP YES", " BACKUP NO"})
void preserveBackupAndOmission(String clause) throws JSQLParserException {
String sql = "CREATE MATERIALIZED VIEW myview" + clause + " AS SELECT * FROM mytab";
CreateView view = (CreateView) TestUtils.assertSqlCanBeParsedAndDeparsed(sql);
assertEquals(clause.isEmpty() ? null : clause.endsWith("YES"), view.getBackup());
CreateView reparsed = (CreateView) CCJSqlParserUtil.parse(view.toString());
assertEquals(view.getBackup(), reparsed.getBackup());
assertTrue(TablesNamesFinder.findTables(sql).contains("mytab"));
}
@ParameterizedTest
@ValueSource(strings = {"YES", "NO"})
void combineWithAutoRefresh(String value) throws JSQLParserException {
CreateView view = (CreateView) TestUtils.assertSqlCanBeParsedAndDeparsed(
"CREATE MATERIALIZED VIEW report.mv BACKUP NO AUTO REFRESH " + value
+ " AS SELECT * FROM source");
assertEquals(Boolean.FALSE, view.getBackup());
assertEquals(AutoRefreshOption.from(value), view.getAutoRefresh());
}
@ParameterizedTest
@ValueSource(strings = {
"CREATE MATERIALIZED VIEW mv BACKUP AS SELECT 1",
"CREATE MATERIALIZED VIEW mv BACKUP TRUE AS SELECT 1",
"CREATE MATERIALIZED VIEW mv BACKUP YES BACKUP NO AS SELECT 1",
"CREATE MATERIALIZED VIEW mv AUTO REFRESH YES BACKUP NO AS SELECT 1",
"CREATE VIEW mv BACKUP NO AS SELECT 1"
})
void rejectMalformedOptions(String sql) {
assertThrows(JSQLParserException.class, () -> CCJSqlParserUtil.parse(sql,
parser -> parser.withUnsupportedStatements(false)));
}
@Test
void constructAndClearBackup() throws JSQLParserException {
CreateView view = new CreateView().withMaterialized(true).withBackup(false)
.withView(new Table("mv"))
.withSelect((Select) CCJSqlParserUtil.parse("SELECT * FROM source"));
TestUtils.assertStatementCanBeDeparsedAs(view,
"CREATE MATERIALIZED VIEW mv BACKUP NO AS SELECT * FROM source");
view.setBackup(null);
TestUtils.assertStatementCanBeDeparsedAs(view,
"CREATE MATERIALIZED VIEW mv AS SELECT * FROM source");
view.setMaterialized(false);
view.setBackup(true);
assertThrows(IllegalArgumentException.class, view::validateOptions);
}
@Test
void backupRemainsAnIdentifier() throws JSQLParserException {
TestUtils.assertSqlCanBeParsedAndDeparsed(
"CREATE MATERIALIZED VIEW backup BACKUP YES AS SELECT backup FROM backup");
TestUtils.assertSqlCanBeParsedAndDeparsed("SELECT backup FROM backup");
}
}