mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
Remove DB fluff layer
This commit is contained in:
parent
c3609803c0
commit
cfc02bbcc8
15 changed files with 122 additions and 177 deletions
|
@ -0,0 +1,20 @@
|
||||||
|
package uk.ac.ic.wlgitbridge.bridge.db;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created by winston on 23/08/2016.
|
||||||
|
*/
|
||||||
|
public class DBInitException extends RuntimeException {
|
||||||
|
|
||||||
|
public DBInitException(String message) {
|
||||||
|
super(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBInitException(String message, Throwable cause) {
|
||||||
|
super(message, cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
public DBInitException(Throwable cause) {
|
||||||
|
super(cause);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,106 +0,0 @@
|
||||||
package uk.ac.ic.wlgitbridge.bridge.db;
|
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLiteWLDatabase;
|
|
||||||
import uk.ac.ic.wlgitbridge.util.Log;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.sql.SQLException;
|
|
||||||
import java.sql.Timestamp;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Created by winston on 20/08/2016.
|
|
||||||
*/
|
|
||||||
public class SqliteDBStore implements DBStore {
|
|
||||||
|
|
||||||
private final SQLiteWLDatabase database;
|
|
||||||
|
|
||||||
public SqliteDBStore(File dbFile) {
|
|
||||||
try {
|
|
||||||
database = new SQLiteWLDatabase(dbFile);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
} catch (ClassNotFoundException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getProjectNames() {
|
|
||||||
try {
|
|
||||||
return database.getProjectNames();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public void setLatestVersionForProject(String project, int versionID) {
|
|
||||||
try {
|
|
||||||
database.setVersionIDForProject(project, versionID);
|
|
||||||
Log.info("[{}] Wrote latest versionId: {}", project, versionID);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getLatestVersionForProject(String project) {
|
|
||||||
try {
|
|
||||||
return database.getVersionIDForProjectName(project);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addURLIndexForProject(String projectName, String url, String path) {
|
|
||||||
try {
|
|
||||||
database.addURLIndex(projectName, url, path);
|
|
||||||
Log.info("[{}] Wrote url index: {} -> {}", projectName, url, path);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void deleteFilesForProject(String project, String... files) {
|
|
||||||
try {
|
|
||||||
database.deleteFilesForProject(project, files);
|
|
||||||
Log.info(
|
|
||||||
"[{}] Deleting from url index: {}",
|
|
||||||
project,
|
|
||||||
Arrays.toString(files)
|
|
||||||
);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public String getPathForURLInProject(String projectName, String url) {
|
|
||||||
try {
|
|
||||||
return database.getPathForURLInProject(projectName, url);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getOldestUnswappedProject() {
|
|
||||||
try {
|
|
||||||
return database.getOldestUnswappedProject();
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setLastAccessedTime(String projectName, Timestamp time) {
|
|
||||||
try {
|
|
||||||
database.setLastAccessedTime(projectName, time);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,4 +1,4 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql;
|
package uk.ac.ic.wlgitbridge.bridge.db.sqlite;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
|
@ -1,4 +1,4 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql;
|
package uk.ac.ic.wlgitbridge.bridge.db.sqlite;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
|
@ -1,6 +1,7 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql;
|
package uk.ac.ic.wlgitbridge.bridge.db.sqlite;
|
||||||
|
|
||||||
import com.google.api.client.repackaged.com.google.common.base.Preconditions;
|
import uk.ac.ic.wlgitbridge.bridge.db.DBInitException;
|
||||||
|
import uk.ac.ic.wlgitbridge.bridge.db.DBStore;
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetLatestVersionForProjectSQLQuery;
|
import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetLatestVersionForProjectSQLQuery;
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetPathForURLInProjectSQLQuery;
|
import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetPathForURLInProjectSQLQuery;
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetProjectNamesSQLQuery;
|
import uk.ac.ic.wlgitbridge.data.model.db.sql.query.GetProjectNamesSQLQuery;
|
||||||
|
@ -14,93 +15,123 @@ import uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert.SetProjectSQLUpdate;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.sql.*;
|
import java.sql.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by Winston on 17/11/14.
|
* Created by Winston on 17/11/14.
|
||||||
*/
|
*/
|
||||||
public class SQLiteWLDatabase {
|
public class SqliteDBStore implements DBStore {
|
||||||
|
|
||||||
private final Connection connection;
|
private final Connection connection;
|
||||||
|
|
||||||
public SQLiteWLDatabase(
|
public SqliteDBStore(
|
||||||
File dbFile
|
File dbFile
|
||||||
) throws SQLException, ClassNotFoundException {
|
) {
|
||||||
File parentDir = dbFile.getParentFile();
|
File parentDir = dbFile.getParentFile();
|
||||||
Preconditions.checkState(
|
if (!parentDir.exists() && !parentDir.mkdirs()) {
|
||||||
parentDir.exists() || parentDir.mkdirs(),
|
throw new DBInitException(
|
||||||
parentDir.getAbsolutePath() + " directory didn't exist, " +
|
parentDir.getAbsolutePath() + " directory didn't exist, " +
|
||||||
"and unable to create. Check your permissions."
|
"and unable to create. Check your permissions."
|
||||||
);
|
);
|
||||||
Class.forName("org.sqlite.JDBC");
|
}
|
||||||
connection = DriverManager.getConnection(
|
try {
|
||||||
"jdbc:sqlite:" + dbFile.getAbsolutePath()
|
Class.forName("org.sqlite.JDBC");
|
||||||
);
|
} catch (ClassNotFoundException e) {
|
||||||
|
throw new DBInitException(e);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
connection = DriverManager.getConnection(
|
||||||
|
"jdbc:sqlite:" + dbFile.getAbsolutePath()
|
||||||
|
);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new DBInitException("Unable to connect to DB", e);
|
||||||
|
}
|
||||||
createTables();
|
createTables();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVersionIDForProject(
|
@Override
|
||||||
String projectName,
|
public List<String> getProjectNames() {
|
||||||
int versionID
|
|
||||||
) throws SQLException {
|
|
||||||
update(new SetProjectSQLUpdate(projectName, versionID));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addURLIndex(
|
|
||||||
String projectName,
|
|
||||||
String url,
|
|
||||||
String path
|
|
||||||
) throws SQLException {
|
|
||||||
update(new AddURLIndexSQLUpdate(projectName, url, path));
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteFilesForProject(
|
|
||||||
String projectName,
|
|
||||||
String... paths
|
|
||||||
) throws SQLException {
|
|
||||||
update(new DeleteFilesForProjectSQLUpdate(projectName, paths));
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getVersionIDForProjectName(
|
|
||||||
String projectName
|
|
||||||
) throws SQLException {
|
|
||||||
return query(new GetLatestVersionForProjectSQLQuery(projectName));
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPathForURLInProject(
|
|
||||||
String projectName,
|
|
||||||
String url
|
|
||||||
) throws SQLException {
|
|
||||||
return query(new GetPathForURLInProjectSQLQuery(projectName, url));
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getProjectNames() throws SQLException {
|
|
||||||
return query(new GetProjectNamesSQLQuery());
|
return query(new GetProjectNamesSQLQuery());
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getOldestUnswappedProject() throws SQLException {
|
@Override
|
||||||
|
public void setLatestVersionForProject(
|
||||||
|
String projectName,
|
||||||
|
int versionID
|
||||||
|
) {
|
||||||
|
update(new SetProjectSQLUpdate(projectName, versionID));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLatestVersionForProject(
|
||||||
|
String projectName
|
||||||
|
) {
|
||||||
|
return query(new GetLatestVersionForProjectSQLQuery(projectName));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addURLIndexForProject(
|
||||||
|
String projectName,
|
||||||
|
String url,
|
||||||
|
String path
|
||||||
|
) {
|
||||||
|
update(new AddURLIndexSQLUpdate(projectName, url, path));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void deleteFilesForProject(
|
||||||
|
String projectName,
|
||||||
|
String... paths
|
||||||
|
) {
|
||||||
|
update(new DeleteFilesForProjectSQLUpdate(projectName, paths));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getPathForURLInProject(
|
||||||
|
String projectName,
|
||||||
|
String url
|
||||||
|
) {
|
||||||
|
return query(new GetPathForURLInProjectSQLQuery(projectName, url));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getOldestUnswappedProject() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setLastAccessedTime(
|
public void setLastAccessedTime(
|
||||||
String projectName,
|
String projectName,
|
||||||
Timestamp time
|
Timestamp time
|
||||||
) throws SQLException {
|
) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createTables() throws SQLException {
|
private void createTables() {
|
||||||
final SQLUpdate[] createTableUpdates = {
|
Stream.of(
|
||||||
new CreateProjectsTableSQLUpdate(),
|
new CreateProjectsTableSQLUpdate(),
|
||||||
new CreateURLIndexStoreSQLUpdate(),
|
new CreateURLIndexStoreSQLUpdate(),
|
||||||
new CreateIndexURLIndexStore()
|
new CreateIndexURLIndexStore()
|
||||||
};
|
).forEach(this::update);
|
||||||
|
}
|
||||||
|
|
||||||
for (SQLUpdate update : createTableUpdates) {
|
private void update(SQLUpdate update) {
|
||||||
update(update);
|
try {
|
||||||
|
doUpdate(update);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void update(SQLUpdate update) throws SQLException {
|
private <T> T query(SQLQuery<T> query) {
|
||||||
|
try {
|
||||||
|
return doQuery(query);
|
||||||
|
} catch (SQLException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doUpdate(SQLUpdate update) throws SQLException {
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
try {
|
try {
|
||||||
statement = connection.prepareStatement(update.getSQL());
|
statement = connection.prepareStatement(update.getSQL());
|
||||||
|
@ -113,7 +144,7 @@ public class SQLiteWLDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private <T> T query(SQLQuery<T> query) throws SQLException {
|
private <T> T doQuery(SQLQuery<T> query) throws SQLException {
|
||||||
PreparedStatement statement = null;
|
PreparedStatement statement = null;
|
||||||
ResultSet results = null;
|
ResultSet results = null;
|
||||||
try {
|
try {
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLQuery;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLQuery;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLQuery;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLQuery;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.query;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLQuery;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLQuery;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.create;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.delete;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.delete;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
|
package uk.ac.ic.wlgitbridge.data.model.db.sql.update.insert;
|
||||||
|
|
||||||
import uk.ac.ic.wlgitbridge.data.model.db.sql.SQLUpdate;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SQLUpdate;
|
||||||
|
|
||||||
import java.sql.PreparedStatement;
|
import java.sql.PreparedStatement;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
|
@ -10,7 +10,7 @@ import uk.ac.ic.wlgitbridge.application.config.Config;
|
||||||
import uk.ac.ic.wlgitbridge.application.jetty.NullLogger;
|
import uk.ac.ic.wlgitbridge.application.jetty.NullLogger;
|
||||||
import uk.ac.ic.wlgitbridge.bridge.Bridge;
|
import uk.ac.ic.wlgitbridge.bridge.Bridge;
|
||||||
import uk.ac.ic.wlgitbridge.bridge.db.DBStore;
|
import uk.ac.ic.wlgitbridge.bridge.db.DBStore;
|
||||||
import uk.ac.ic.wlgitbridge.bridge.db.SqliteDBStore;
|
import uk.ac.ic.wlgitbridge.bridge.db.sqlite.SqliteDBStore;
|
||||||
import uk.ac.ic.wlgitbridge.bridge.repo.FSRepoStore;
|
import uk.ac.ic.wlgitbridge.bridge.repo.FSRepoStore;
|
||||||
import uk.ac.ic.wlgitbridge.bridge.repo.RepoStore;
|
import uk.ac.ic.wlgitbridge.bridge.repo.RepoStore;
|
||||||
import uk.ac.ic.wlgitbridge.bridge.swap.SwapStore;
|
import uk.ac.ic.wlgitbridge.bridge.swap.SwapStore;
|
||||||
|
|
Loading…
Reference in a new issue