Skip to content

Commit e5543a5

Browse files
committed
Add a Travis check for Postgres
1 parent ebf5419 commit e5543a5

6 files changed

Lines changed: 97 additions & 52 deletions

File tree

.travis.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,24 @@ matrix:
4141
jdk : oraclejdk11
4242
script:
4343
- mvn '-Dtest=!sqlancer.dbms.**' test
44+
- name: postgres
45+
before_install:
46+
- sudo apt-get update
47+
- sudo apt-get --yes remove postgresql\*
48+
- sudo apt-get install -y postgresql-12 postgresql-client-12
49+
- sudo sed -i 's/port = 5433/port = 5432/' /etc/postgresql/12/main/postgresql.conf
50+
- sudo cp /etc/postgresql/{10,12}/main/pg_hba.conf
51+
- sudo service postgresql restart 12
52+
addons:
53+
postgresql: "12.3"
54+
env:
55+
global:
56+
- PGPORT=5432
57+
services:
58+
- postgresql
59+
before_script:
60+
- sudo apt-get install locales
61+
- psql -c "CREATE ROLE sqlancer SUPERUSER LOGIN CREATEDB PASSWORD 'sqlancer';" -U postgres
62+
- createdb test -U postgres
63+
script:
64+
- POSTGRES_AVAILABLE=true mvn -Dtest=TestPostgres test

src/sqlancer/postgres/PostgresOptions.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ public class PostgresOptions {
2626
@Parameter(names = "--oracle", converter = DBMSConverter.class)
2727
public List<PostgresOracle> oracle = Arrays.asList(PostgresOracle.QUERY_PARTITIONING);
2828

29+
@Parameter(names = "--test-collations", arity = 1)
30+
public boolean testCollations = true;
31+
2932
public enum PostgresOracle {
3033
NOREC {
3134
@Override

src/sqlancer/postgres/PostgresProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ public Connection createDatabase(GlobalState<?> globalState) throws SQLException
271271
globalState.getOptions().getPassword());
272272
globalState.getState().statements.add(new QueryAdapter("\\c test;"));
273273
globalState.getState().statements.add(new QueryAdapter("DROP DATABASE IF EXISTS " + databaseName));
274-
String createDatabaseCommand = getCreateDatabaseCommand(databaseName, con);
274+
String createDatabaseCommand = getCreateDatabaseCommand(databaseName, con, globalState);
275275
globalState.getState().statements.add(new QueryAdapter(createDatabaseCommand));
276276
globalState.getState().statements.add(new QueryAdapter("\\c " + databaseName));
277277
try (Statement s = con.createStatement()) {
@@ -297,10 +297,10 @@ public Connection createDatabase(GlobalState<?> globalState) throws SQLException
297297
return con;
298298
}
299299

300-
private String getCreateDatabaseCommand(String databaseName, Connection con) {
300+
private String getCreateDatabaseCommand(String databaseName, Connection con, GlobalState<?> state) {
301301
StringBuilder sb = new StringBuilder();
302302
sb.append("CREATE DATABASE " + databaseName + " ");
303-
if (Randomly.getBoolean()) {
303+
if (Randomly.getBoolean() && ((PostgresOptions) state.getDmbsSpecificOptions()).testCollations) {
304304
if (Randomly.getBoolean()) {
305305
sb.append("WITH ENCODING '");
306306
sb.append(Randomly.fromOptions("utf8"));

src/sqlancer/postgres/gen/PostgresExpressionGenerator.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public class PostgresExpressionGenerator {
6868
public PostgresExpressionGenerator(PostgresGlobalState globalState) {
6969
this.r = globalState.getRandomly();
7070
this.maxDepth = globalState.getOptions().getMaxExpressionDepth();
71+
this.globalState = globalState;
7172
}
7273

7374
public PostgresExpressionGenerator setColumns(List<PostgresColumn> columns) {
@@ -354,6 +355,9 @@ private PostgresExpression generateTextExpression(int depth) {
354355
if (expectedResult) {
355356
validOptions.remove(TextExpression.COLLATE);
356357
}
358+
if (!globalState.getDmbsSpecificOptions().testCollations) {
359+
validOptions.remove(TextExpression.COLLATE);
360+
}
357361
option = Randomly.fromList(validOptions);
358362

359363
switch (option) {

0 commit comments

Comments
 (0)