forked from sqlancer/sqlancer
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFelderaViewGenerator.java
More file actions
51 lines (43 loc) · 1.97 KB
/
FelderaViewGenerator.java
File metadata and controls
51 lines (43 loc) · 1.97 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
package sqlancer.feldera.gen;
import sqlancer.Randomly;
import sqlancer.common.oracle.TestOracleUtils;
import sqlancer.common.query.ExpectedErrors;
import sqlancer.feldera.FelderaGlobalState;
import sqlancer.feldera.ast.FelderaExpression;
import sqlancer.feldera.ast.FelderaSelect;
import sqlancer.feldera.query.FelderaOtherQuery;
import java.util.ArrayList;
import java.util.List;
public class FelderaViewGenerator {
public FelderaViewGenerator() {
}
public static List<FelderaOtherQuery> generate(FelderaGlobalState globalState, String viewName) {
List<FelderaOtherQuery> queries = new ArrayList<>();
FelderaExpressionGenerator gen = new FelderaExpressionGenerator(globalState)
.setTablesAndColumns(TestOracleUtils.getRandomTableNonEmptyTables(globalState.getSchema()));
FelderaSelect select = gen.generateSelect();
FelderaExpression whereCondition = gen.generateBooleanExpression();
queries.add(generateViewFromSelect(select, gen, whereCondition, viewName, true));
queries.add(generateViewFromSelect(select, gen, whereCondition, viewName, false));
return queries;
}
private static FelderaOtherQuery generateViewFromSelect(FelderaSelect select, FelderaExpressionGenerator gen,
FelderaExpression whereCondition, String viewName, boolean optimized) {
ExpectedErrors errors = new ExpectedErrors();
StringBuilder sb = new StringBuilder("CREATE MATERIALIZED VIEW ");
sb.append(viewName);
if (optimized) {
sb.append("_optimized");
}
sb.append(" AS (");
String selectQuery;
if (optimized) {
selectQuery = gen.generateOptimizedQueryString(select, whereCondition, Randomly.getBoolean());
} else {
selectQuery = gen.generateUnoptimizedQueryString(select, whereCondition);
}
sb.append(selectQuery);
sb.append(");\n");
return new FelderaOtherQuery(sb.toString(), errors);
}
}