Skip to content

Commit 22ede58

Browse files
committed
[feldera] add support for simple insert statements
Signed-off-by: Abhinav Gyawali <[email protected]>
1 parent 990e152 commit 22ede58

12 files changed

Lines changed: 404 additions & 49 deletions

src/sqlancer/MainOptions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ public class MainOptions {
8888
private int timeoutSeconds = -1; // NOPMD
8989

9090
@Parameter(names = "--max-generated-databases", description = "The maximum number of databases that are generated by each thread")
91-
private int maxGeneratedDatabases = -1; // NOPMD
91+
// private int maxGeneratedDatabases = -1; // NOPMD
92+
private int maxGeneratedDatabases = 1;
9293

9394
@Parameter(names = "--exit-code-error", description = "The exit code that should be returned when an error is encountered (or a bug is found)")
9495
private int errorExitCode = -1; // NOPMD

src/sqlancer/feldera/FelderaConnection.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,11 @@
77

88
public class FelderaConnection implements SQLancerDBConnection {
99
private final FelderaClient client;
10-
private FelderaSchema schema;
1110

1211
public FelderaConnection(FelderaClient client) {
13-
this.schema = new FelderaSchema(client.pipelineName());
1412
this.client = client;
1513
}
1614

17-
public FelderaSchema getSchema() {
18-
return schema;
19-
}
20-
2115
public FelderaClient getClient() {
2216
return this.client;
2317
}

src/sqlancer/feldera/FelderaGlobalState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ public void addTable(FelderaSchema.FelderaTable table) {
3939
if (sch == null) {
4040
sch = new FelderaSchema(getConnection().getClient().pipelineName());
4141
}
42-
setSchema(sch.addTable(table));
42+
setSchema(sch.addTable(table));
4343
}
4444
}

src/sqlancer/feldera/FelderaOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
+ FelderaOptions.DEFAULT_URL + ")")
1212
public class FelderaOptions implements DBMSSpecificOptions<FelderaOracleFactory> {
1313

14-
public static final String DEFAULT_URL = "http://localhost:8080";
14+
public static final String DEFAULT_URL = "http://127.0.0.1:8080";
1515

1616
@Parameter(names = "--oracle", description = "Specifies which test oracle should be used for Feldera")
1717
public List<FelderaOracleFactory> oracle = List.of(FelderaOracleFactory.NOREC);

src/sqlancer/feldera/FelderaProvider.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,10 @@ protected void checkViewsAreValid(FelderaGlobalState globalState) {
4848
public void generateDatabase(FelderaGlobalState globalState) throws Exception {
4949
createTables(globalState, Randomly.fromOptions(4, 5, 6));
5050
prepareTables(globalState);
51-
5251
}
5352

5453
@Override
5554
public FelderaConnection createDatabase(FelderaGlobalState globalState) throws Exception {
56-
5755
url = globalState.getDbmsSpecificOptions().connection_url;
5856
pipelineName = globalState.getDatabaseName();
5957
FelderaClient client = new FelderaClient(url, pipelineName);
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package sqlancer.feldera;
2+
3+
import sqlancer.common.ast.newast.NewToStringVisitor;
4+
import sqlancer.feldera.ast.FelderaConstant;
5+
import sqlancer.feldera.ast.FelderaExpression;
6+
7+
public class FelderaToStringVisitor extends NewToStringVisitor<FelderaExpression> {
8+
@Override
9+
public void visitSpecific(FelderaExpression expr) {
10+
if (expr instanceof FelderaConstant) {
11+
visit((FelderaConstant) expr);
12+
} else {
13+
throw new AssertionError(expr.getClass());
14+
}
15+
}
16+
17+
private void visit(FelderaConstant constant) {
18+
sb.append(constant.toString());
19+
}
20+
21+
public static String asString(FelderaExpression expr) {
22+
FelderaToStringVisitor visitor = new FelderaToStringVisitor();
23+
visitor.visit(expr);
24+
return visitor.get();
25+
}
26+
}
Lines changed: 99 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,102 @@
11
package sqlancer.feldera.ast;
22

3-
public class FelderaConstant {
3+
public abstract class FelderaConstant implements FelderaExpression {
4+
private FelderaConstant() {}
5+
6+
private static class FelderaNullConstant extends FelderaConstant {
7+
@Override
8+
public String toString() {
9+
return "NULL";
10+
}
11+
}
12+
13+
public static class FelderaIntConstant extends FelderaConstant {
14+
private final long value;
15+
public FelderaIntConstant(long value) {
16+
this.value = value;
17+
}
18+
19+
@Override
20+
public String toString() {
21+
return String.valueOf(value);
22+
}
23+
24+
public long getValue() {
25+
return value;
26+
}
27+
}
28+
29+
public static class FelderaDoubleConstant extends FelderaConstant {
30+
private final double value;
31+
32+
public FelderaDoubleConstant(double value) {
33+
this.value = value;
34+
}
35+
36+
public double getValue() {
37+
return value;
38+
}
39+
40+
@Override
41+
public String toString() {
42+
if (value == Double.POSITIVE_INFINITY) {
43+
return "'+Inf'";
44+
} else if (value == Double.NEGATIVE_INFINITY) {
45+
return "'-Inf'";
46+
}
47+
return String.valueOf(value);
48+
}
49+
}
50+
51+
public static class FelderaVarcharConstant extends FelderaConstant {
52+
private final String value;
53+
public FelderaVarcharConstant(String value) {
54+
this.value = value;
55+
}
56+
57+
public String getValue() {
58+
return value;
59+
}
60+
61+
@Override
62+
public String toString() {
63+
return "'" + value.replace("'", "''") + "'";
64+
}
65+
}
66+
67+
public static class FelderaBooleanConstant extends FelderaConstant {
68+
private final boolean value;
69+
70+
public FelderaBooleanConstant(boolean value) {
71+
this.value = value;
72+
}
73+
74+
public boolean getValue() {
75+
return value;
76+
}
77+
78+
@Override
79+
public String toString() {
80+
return String.valueOf(value);
81+
}
82+
}
83+
84+
public static FelderaExpression createNullConstant() {
85+
return new FelderaNullConstant();
86+
}
87+
public static FelderaExpression createVarcharConstant(String text) {
88+
return new FelderaVarcharConstant(text);
89+
}
90+
91+
public static FelderaExpression createDoubleConstant(double val) {
92+
return new FelderaDoubleConstant(val);
93+
}
94+
95+
public static FelderaExpression createIntConstant(long val) {
96+
return new FelderaIntConstant(val);
97+
}
98+
99+
public static FelderaExpression createBooleanConstant(boolean val) {
100+
return new FelderaBooleanConstant(val);
101+
}
4102
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package sqlancer.feldera.ast;
2+
3+
import sqlancer.common.ast.newast.Expression;
4+
import sqlancer.feldera.FelderaSchema;
5+
6+
public interface FelderaExpression extends Expression<FelderaSchema.FelderaColumn> {
7+
}

0 commit comments

Comments
 (0)