GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — More tests for QPG (#674) · sqlancer/sqlancer@2a5ca98

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • .github/workflows
    • main.yml
  • test/sqlancer
    • dbms
      • TestSQLiteQPG.java
    • qpg
      • cockroachdb
        • TestCockroachDBQPG.java
        • TestCockroachDBQueryPlan.java
      • sqlite
        • TestSQLiteQPG.java
        • TestSQLiteQueryPlan.java
      • tidb
        • TestTiDBQPG.java
        • TestTiDBQueryPlan.java
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎.github/workflows/main.yml‎

Copy file name to clipboardExpand all lines: .github/workflows/main.yml
+47-1Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,30 @@ jobs:
116116
run: cd cockroach-v22.2.0-beta.4.linux-amd64/ && ./cockroach sql --insecure -e "CREATE USER sqlancer; GRANT admin to sqlancer" && cd ..
117117
- name: Run Tests
118118
run: COCKROACHDB_AVAILABLE=true mvn -Dtest=TestCockroachDB test
119-
119+
120+
cockroachdb-qpg:
121+
name: QPG Tests (CockroachDB)
122+
runs-on: ubuntu-latest
123+
steps:
124+
- uses: actions/checkout@v2
125+
with:
126+
fetch-depth: 0
127+
- name: Set up JDK 11
128+
uses: actions/setup-java@v1
129+
with:
130+
java-version: 11
131+
- name: Build SQLancer
132+
run: mvn -B package -DskipTests=true
133+
- name: Set up CockroachDB
134+
run: |
135+
wget -qO- https://binaries.cockroachdb.com/cockroach-v22.2.0-beta.4.linux-amd64.tgz | tar xvz
136+
cd cockroach-v22.2.0-beta.4.linux-amd64/ && ./cockroach start-single-node --insecure &
137+
sleep 10
138+
- name: Create SQLancer user
139+
run: cd cockroach-v22.2.0-beta.4.linux-amd64/ && ./cockroach sql --insecure -e "CREATE USER sqlancer; GRANT admin to sqlancer" && cd ..
140+
- name: Run Tests
141+
run: COCKROACHDB_AVAILABLE=true mvn -Dtest=TestCockroachDBQPG test
142+
120143
databend:
121144
name: DBMS Tests (Databend)
122145
runs-on: ubuntu-latest
@@ -313,6 +336,29 @@ jobs:
313336
- name: Run Tests
314337
run: TIDB_AVAILABLE=true mvn -Dtest=TestTiDB test
315338

339+
tidb-qpg:
340+
name: QPG Tests (TiDB)
341+
runs-on: ubuntu-latest
342+
steps:
343+
- uses: actions/checkout@v2
344+
with:
345+
fetch-depth: 0
346+
- name: Set up JDK 11
347+
uses: actions/setup-java@v1
348+
with:
349+
java-version: 11
350+
- name: Build SQLancer
351+
run: mvn -B package -DskipTests=true
352+
- name: Set up TiDB
353+
run: |
354+
docker pull pingcap/tidb:latest
355+
docker run --name tidb-server -d -p 4000:4000 pingcap/tidb:latest
356+
sleep 10
357+
- name: Create SQLancer user
358+
run: sudo mysql -h 127.0.0.1 -P 4000 -u root -D test -e "CREATE USER 'sqlancer'@'%' IDENTIFIED WITH mysql_native_password BY 'sqlancer'; GRANT ALL PRIVILEGES ON *.* TO 'sqlancer'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;"
359+
- name: Run Tests
360+
run: TIDB_AVAILABLE=true mvn -Dtest=TestTiDBQPG test
361+
316362
yugabyte:
317363
name: DBMS Tests (YugabyteDB)
318364
runs-on: ubuntu-latest
Collapse file

‎test/sqlancer/dbms/TestSQLiteQPG.java‎

Copy file name to clipboardExpand all lines: test/sqlancer/dbms/TestSQLiteQPG.java
-20Lines changed: 0 additions & 20 deletions
This file was deleted.
Collapse file

‎test/sqlancer/qpg/cockroachdb/TestCockroachDBQPG.java‎

Copy file name to clipboard
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package sqlancer.qpg.cockroachdb;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assumptions.assumeTrue;
5+
6+
import org.junit.jupiter.api.Test;
7+
8+
import sqlancer.Main;
9+
import sqlancer.dbms.TestConfig;
10+
11+
public class TestCockroachDBQPG {
12+
13+
@Test
14+
public void testCockroachDBQPG() {
15+
String cockroachDB = System.getenv("COCKROACHDB_AVAILABLE");
16+
boolean cockroachDBIsAvailable = cockroachDB != null && cockroachDB.equalsIgnoreCase("true");
17+
assumeTrue(cockroachDBIsAvailable);
18+
assertEquals(0,
19+
Main.executeMain(new String[] { "--random-seed", "0", "--timeout-seconds", TestConfig.SECONDS,
20+
"--num-threads", "1", "--qpg-enable", "true", "--num-queries", TestConfig.NUM_QUERIES,
21+
"cockroachdb", "--oracle", "QUERY_PARTITIONING" }));
22+
}
23+
24+
}
Collapse file

‎test/sqlancer/qpg/cockroachdb/TestCockroachDBQueryPlan.java‎

Copy file name to clipboard
+47Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package sqlancer.qpg.cockroachdb;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assumptions.assumeTrue;
5+
6+
import org.junit.jupiter.api.Test;
7+
8+
import sqlancer.Main;
9+
import sqlancer.MainOptions;
10+
import sqlancer.SQLConnection;
11+
import sqlancer.common.query.SQLQueryAdapter;
12+
import sqlancer.cockroachdb.CockroachDBOptions;
13+
import sqlancer.cockroachdb.CockroachDBProvider;
14+
import sqlancer.cockroachdb.CockroachDBProvider.CockroachDBGlobalState;
15+
16+
public class TestCockroachDBQueryPlan {
17+
18+
@Test
19+
void testCockroachDBQueryPlan() throws Exception {
20+
String cockroachDB = System.getenv("COCKROACHDB_AVAILABLE");
21+
boolean cockroachDBIsAvailable = cockroachDB != null && cockroachDB.equalsIgnoreCase("true");
22+
assumeTrue(cockroachDBIsAvailable);
23+
24+
String databaseName = "cockroachdb";
25+
CockroachDBProvider provider = new CockroachDBProvider();
26+
CockroachDBGlobalState state = provider.getGlobalStateClass().getDeclaredConstructor().newInstance();
27+
CockroachDBOptions cockroachdbOption = provider.getOptionClass().getDeclaredConstructor().newInstance();
28+
state.setDbmsSpecificOptions(cockroachdbOption);
29+
state.setDatabaseName(databaseName);
30+
MainOptions options = new MainOptions();
31+
state.setMainOptions(options);
32+
state.setState(provider.getStateToReproduce(databaseName));
33+
SQLConnection con = provider.createDatabase(state);
34+
state.setConnection(con);
35+
Main.StateLogger logger = new Main.StateLogger(databaseName, provider, options);
36+
state.setStateLogger(logger);
37+
38+
SQLQueryAdapter q = new SQLQueryAdapter("CREATE TABLE t1(a INT, b INT);", true);
39+
q.execute(state);
40+
q = new SQLQueryAdapter("CREATE TABLE t2(c INT);", true);
41+
q.execute(state);
42+
String queryPlan = provider.getQueryPlan("SELECT * FROM t1 RIGHT JOIN t2 ON a<>0;", state);
43+
44+
assertEquals("left-join (cross);scan t2;select;scan t1;filters;filters (true);", queryPlan);
45+
}
46+
47+
}
Collapse file

‎test/sqlancer/qpg/sqlite/TestSQLiteQPG.java‎

Copy file name to clipboard
+23Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package sqlancer.qpg.sqlite;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import sqlancer.Main;
8+
import sqlancer.dbms.TestConfig;
9+
10+
public class TestSQLiteQPG {
11+
12+
@Test
13+
public void testSqliteQPG() {
14+
assertEquals(0,
15+
Main.executeMain(new String[] { "--random-seed", "0", "--timeout-seconds", TestConfig.SECONDS,
16+
"--num-threads", "1", "--num-queries", TestConfig.NUM_QUERIES, "--random-string-generation",
17+
"ALPHANUMERIC_SPECIALCHAR", "--database-prefix",
18+
"pqsdb" /* Workaround for connections not being closed */, "--qpg-enable", "true", "sqlite3",
19+
"--oracle", "NoREC", "--test-fts", "false", "--test-rtree", "false", "--test-check-constraints",
20+
"false", "--test-in-operator", "false" }));
21+
}
22+
23+
}
Collapse file

‎test/sqlancer/qpg/sqlite/TestSQLiteQueryPlan.java‎

Copy file name to clipboard
+41Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package sqlancer.qpg.sqlite;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import sqlancer.Main;
8+
import sqlancer.MainOptions;
9+
import sqlancer.SQLConnection;
10+
import sqlancer.common.query.SQLQueryAdapter;
11+
import sqlancer.sqlite3.SQLite3GlobalState;
12+
import sqlancer.sqlite3.SQLite3Options;
13+
import sqlancer.sqlite3.SQLite3Provider;
14+
15+
public class TestSQLiteQueryPlan {
16+
17+
@Test
18+
void testSQLiteQueryPlan() throws Exception {
19+
String databaseName = "sqlite";
20+
SQLite3Provider provider = new SQLite3Provider();
21+
SQLite3GlobalState state = provider.getGlobalStateClass().getDeclaredConstructor().newInstance();
22+
SQLite3Options sqlite3Option = provider.getOptionClass().getDeclaredConstructor().newInstance();
23+
state.setDbmsSpecificOptions(sqlite3Option);
24+
state.setDatabaseName(databaseName);
25+
SQLConnection con = provider.createDatabase(state);
26+
state.setConnection(con);
27+
MainOptions options = new MainOptions();
28+
state.setMainOptions(options);
29+
Main.StateLogger logger = new Main.StateLogger(databaseName, provider, options);
30+
state.setStateLogger(logger);
31+
32+
SQLQueryAdapter q = new SQLQueryAdapter("CREATE TABLE t1(a INT, b INT);", true);
33+
q.execute(state);
34+
q = new SQLQueryAdapter("CREATE TABLE t2(c INT);", true);
35+
q.execute(state);
36+
String queryPlan = provider.getQueryPlan("SELECT * FROM t1 RIGHT JOIN t2 ON a<>0;", state);
37+
38+
assertEquals("SCAN t1;SCAN t2;RIGHT-JOIN t2;SCAN t2;", queryPlan);
39+
}
40+
41+
}
Collapse file

‎test/sqlancer/qpg/tidb/TestTiDBQPG.java‎

Copy file name to clipboard
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package sqlancer.qpg.tidb;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assumptions.assumeTrue;
5+
6+
import org.junit.jupiter.api.Test;
7+
8+
import sqlancer.Main;
9+
import sqlancer.dbms.TestConfig;
10+
11+
public class TestTiDBQPG {
12+
13+
@Test
14+
public void testTiDBQPG() {
15+
String tiDB = System.getenv("TIDB_AVAILABLE");
16+
boolean tiDBIsAvailable = tiDB != null && tiDB.equalsIgnoreCase("true");
17+
assumeTrue(tiDBIsAvailable);
18+
assertEquals(0,
19+
Main.executeMain(new String[] { "--random-seed", "0", "--timeout-seconds", TestConfig.SECONDS,
20+
"--num-threads", "1", "--qpg-enable", "true", "--num-queries", TestConfig.NUM_QUERIES, "tidb",
21+
"--oracle", "QUERY_PARTITIONING" }));
22+
}
23+
24+
}
Collapse file

‎test/sqlancer/qpg/tidb/TestTiDBQueryPlan.java‎

Copy file name to clipboard
+49Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package sqlancer.qpg.tidb;
2+
3+
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assumptions.assumeTrue;
5+
6+
import org.junit.jupiter.api.Test;
7+
8+
import sqlancer.Main;
9+
import sqlancer.MainOptions;
10+
import sqlancer.SQLConnection;
11+
import sqlancer.common.query.SQLQueryAdapter;
12+
import sqlancer.tidb.TiDBOptions;
13+
import sqlancer.tidb.TiDBProvider;
14+
import sqlancer.tidb.TiDBProvider.TiDBGlobalState;
15+
16+
public class TestTiDBQueryPlan {
17+
18+
@Test
19+
void testTiDBQueryPlan() throws Exception {
20+
String tiDB = System.getenv("TIDB_AVAILABLE");
21+
boolean tiDBIsAvailable = tiDB != null && tiDB.equalsIgnoreCase("true");
22+
assumeTrue(tiDBIsAvailable);
23+
24+
String databaseName = "tidb";
25+
TiDBProvider provider = new TiDBProvider();
26+
TiDBGlobalState state = provider.getGlobalStateClass().getDeclaredConstructor().newInstance();
27+
TiDBOptions TiDBOption = provider.getOptionClass().getDeclaredConstructor().newInstance();
28+
state.setDbmsSpecificOptions(TiDBOption);
29+
state.setDatabaseName(databaseName);
30+
MainOptions options = new MainOptions();
31+
state.setMainOptions(options);
32+
Main.StateLogger logger = new Main.StateLogger(databaseName, provider, options);
33+
state.setStateLogger(logger);
34+
state.setState(provider.getStateToReproduce(databaseName));
35+
SQLConnection con = provider.createDatabase(state);
36+
state.setConnection(con);
37+
38+
SQLQueryAdapter q = new SQLQueryAdapter("CREATE TABLE t1(a INT, b INT);", true);
39+
q.execute(state);
40+
q = new SQLQueryAdapter("CREATE TABLE t2(c INT);", true);
41+
q.execute(state);
42+
String queryPlan = provider.getQueryPlan("SELECT * FROM t1 RIGHT JOIN t2 ON a<>0;", state);
43+
44+
assertEquals(
45+
"HashJoin_7;TableReader_10(Build);Selection_9;TableFullScan_8;TableReader_12(Probe);TableFullScan_11;",
46+
queryPlan);
47+
}
48+
49+
}

0 commit comments

Comments
0 (0)
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.