|
|
|
@@ -0,0 +1,83 @@
|
|
|
|
|
package de.srsoftware.umbrella.poll;
|
|
|
|
|
|
|
|
|
|
import de.srsoftware.umbrella.core.BaseDb;
|
|
|
|
|
import de.srsoftware.umbrella.core.constants.Field;
|
|
|
|
|
|
|
|
|
|
import java.sql.Connection;
|
|
|
|
|
import java.sql.SQLException;
|
|
|
|
|
|
|
|
|
|
import static de.srsoftware.umbrella.core.constants.Field.*;
|
|
|
|
|
import static de.srsoftware.umbrella.core.constants.Field.DESCRIPTION;
|
|
|
|
|
import static de.srsoftware.umbrella.core.constants.Field.SHOW_CLOSED;
|
|
|
|
|
import static de.srsoftware.umbrella.core.constants.Field.STATUS;
|
|
|
|
|
import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.failedToCreateTable;
|
|
|
|
|
import static de.srsoftware.umbrella.core.model.Status.OPEN;
|
|
|
|
|
import static de.srsoftware.umbrella.poll.Constants.*;
|
|
|
|
|
import static java.text.MessageFormat.format;
|
|
|
|
|
|
|
|
|
|
public class SqliteDb extends BaseDb implements PollDb {
|
|
|
|
|
|
|
|
|
|
public SqliteDb(Connection connection) {
|
|
|
|
|
super(connection);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected int createTables() {
|
|
|
|
|
var version = createSettingsTable();
|
|
|
|
|
switch (version){
|
|
|
|
|
case 0:
|
|
|
|
|
createPollsTable();
|
|
|
|
|
createOptionsTable();
|
|
|
|
|
createWeightsTable();
|
|
|
|
|
createSelectionsTable();
|
|
|
|
|
case 1:
|
|
|
|
|
createSharesTable();
|
|
|
|
|
}
|
|
|
|
|
return setCurrentVersion(2);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void createOptionsTable() {
|
|
|
|
|
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL, {2} VARCHAR(255) NOT NULL REFERENCES {3}({1}), {4} VARCHAR(255) NOT NULL, {5} TEXT, {6} INT DEFAULT 0, PRIMARY KEY ({1}, {2}))";
|
|
|
|
|
try {
|
|
|
|
|
var stmt = db.prepareStatement(format(sql,TABLE_OPTIONS, Field.ID,Field.POLL_ID,TABLE_POLLS,Field.NAME, Field.DESCRIPTION, Field.STATUS));
|
|
|
|
|
stmt.execute();
|
|
|
|
|
stmt.close();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw failedToCreateTable(TABLE_OPTIONS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void createPollsTable() {
|
|
|
|
|
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} VARCHAR(255) NOT NULL PRIMARY_KEY, {2} INT NOT NULL, {3} VARCHAR(255) NOT NULL, {4} TEXT, {5} BOOLEAN)";
|
|
|
|
|
try {
|
|
|
|
|
var stmt = db.prepareStatement(format(sql,TABLE_POLLS, Field.ID,Field.USER_ID,Field.NAME,Field.DESCRIPTION, Field.PRIVATE));
|
|
|
|
|
stmt.execute();
|
|
|
|
|
stmt.close();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw failedToCreateTable(TABLE_POLLS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void createSelectionsTable() {
|
|
|
|
|
var sql = "CREATE TABLE IF NOT EXISTS {0} ({1} INT NOT NULL REFERENCES {2}({3}), {4} VARCHAR(255) NOT NULL REFERENCES {5}({3}), {6} VARCHAR(255) NOT NULL, {7} INT NOT NULL REFERENCES {8}({7}), PRIMARY KEY ({1}, {4}, {6}))";
|
|
|
|
|
try {
|
|
|
|
|
var stmt = db.prepareStatement(format(sql,TABLE_SELECTIONS,Field.OPTION_ID,TABLE_OPTIONS,ID, POLL_ID, TABLE_POLLS, USER, Field.WEIGHT, TABLE_WEIGHTS));
|
|
|
|
|
stmt.execute();
|
|
|
|
|
stmt.close();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw failedToCreateTable(TABLE_SELECTIONS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void createWeightsTable(){
|
|
|
|
|
var sql = "CREATE TABLE {0} ( {1} INT NOT NULL, {2} VARCHAR(255) NOT NULL REFERENCES {3}({4}), {5} TEXT, PRIMARY KEY ({2}, {1}))"
|
|
|
|
|
try {
|
|
|
|
|
var stmt = db.prepareStatement(format(sql,TABLE_WEIGHTS, WEIGHT,POLL_ID,TABLE_POLLS, ID, DESCRIPTION));
|
|
|
|
|
stmt.execute();
|
|
|
|
|
stmt.close();
|
|
|
|
|
} catch (SQLException e) {
|
|
|
|
|
throw failedToCreateTable(TABLE_WEIGHTS).causedBy(e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|