From 4110dcc2a975bbd04ac182071bac3e39d44bf066 Mon Sep 17 00:00:00 2001 From: Winston Li Date: Sat, 21 Feb 2015 17:43:24 +0000 Subject: [PATCH] Redesigned SQL interface. --- .../writelatex/SnapshotFetcher.java | 10 +- .../writelatex/filestore/blob/ByteBlob.java | 2 +- .../filestore/blob/ExternalBlob.java | 2 +- .../writelatex/filestore/node/BlobNode.java | 10 +- .../filestore/node/WLDirectoryNode.java | 8 +- .../filestore/store/FileIndexStore.java | 15 +- .../filestore/store/WLFileStore.java | 6 +- .../writelatex/model/WLDataModel.java | 8 +- .../writelatex/model/WLProject.java | 2 +- .../writelatex/model/WLProjectStore.java | 8 +- .../writelatex/model/db/PersistentStore.java | 64 ++++++++ .../model/db/PersistentStoreAPI.java | 33 ---- .../model/db/PersistentStoreSource.java | 2 +- .../model/db/PersistentStoreUpdater.java | 2 +- .../model/db/WLGBPersistentStore.java | 143 ------------------ .../model/db/sql/SQLiteWLDatabase.java | 65 ++------ .../GetFileNodesForProjectNameSQLQuery.java | 60 -------- ...> GetLatestVersionForProjectSQLQuery.java} | 16 +- .../query/GetPathForURLInProjectSQLQuery.java | 45 ++++++ .../db/sql/query/GetProjectNamesSQLQuery.java | 38 ----- ...etURLIndexTableForProjectNameSQLQuery.java | 48 ------ .../create/CreateFileNodeTableSQLUpdate.java | 35 ----- .../create/CreateProjectsTableSQLUpdate.java | 1 + .../create/CreateSnapshotsTableSQLUpdate.java | 31 ---- .../create/CreateURLIndexStoreSQLUpdate.java | 9 +- ...eleteFileNodesForProjectNameSQLUpdate.java | 32 ---- ...va => DeleteFilesForProjectSQLUpdate.java} | 20 ++- .../insert/AddFileNodeBlobSQLUpdate.java | 41 ----- .../insert/AddFileNodeExternalSQLUpdate.java | 41 ----- .../update/insert/AddProjectSQLUpdate.java | 32 ---- .../update/insert/AddURLIndexSQLUpdate.java | 10 +- ...QLUpdate.java => SetProjectSQLUpdate.java} | 10 +- .../DeleteFilesForProjectSQLUpdateTest.java | 14 ++ 33 files changed, 215 insertions(+), 648 deletions(-) create mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStore.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreAPI.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/WLGBPersistentStore.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetFileNodesForProjectNameSQLQuery.java rename services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/{GetVersionIDsForProjectNameSQLQuery.java => GetLatestVersionForProjectSQLQuery.java} (58%) create mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetPathForURLInProjectSQLQuery.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetProjectNamesSQLQuery.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetURLIndexTableForProjectNameSQLQuery.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateFileNodeTableSQLUpdate.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateSnapshotsTableSQLUpdate.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFileNodesForProjectNameSQLUpdate.java rename services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/{DeleteURLIndexesForProjectNameSQLUpdate.java => DeleteFilesForProjectSQLUpdate.java} (52%) delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeBlobSQLUpdate.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeExternalSQLUpdate.java delete mode 100644 services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddProjectSQLUpdate.java rename services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/{AddSnapshotSQLUpdate.java => SetProjectSQLUpdate.java} (69%) create mode 100644 services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdateTest.java diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java index 65bdd64e54..63f29de34e 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/SnapshotFetcher.java @@ -38,7 +38,7 @@ public class SnapshotFetcher implements PersistentStoreSource { SortedSet newSnapshots = new TreeSet(); while (getNew(newSnapshots)); for (Snapshot snapshot : newSnapshots) { - persistentStore.addSnapshot(projectName, snapshot.getVersionID()); +// persistentStore.addSnapshot(projectName, snapshot.getVersionID()); } Util.sout("Fetched snapshots: " + newSnapshots); return newSnapshots; @@ -58,10 +58,10 @@ public class SnapshotFetcher implements PersistentStoreSource { @Override public void initFromPersistentStore(PersistentStoreAPI persistentStore) { this.persistentStore = persistentStore; - for (Integer savedVersionID : persistentStore.getVersionIDsForProjectName(projectName)) { - snapshots.put(savedVersionID, new Snapshot(savedVersionID)); - versions.add(savedVersionID); - } +// for (Integer savedVersionID : persistentStore.getVersionIDsForProjectName(projectName)) { +// snapshots.put(savedVersionID, new Snapshot(savedVersionID)); +// versions.add(savedVersionID); +// } } private boolean getNew(SortedSet newSnapshots) throws FailedConnectionException, InvalidProjectException { diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java index 32fdc948b0..ad55d47412 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ByteBlob.java @@ -21,7 +21,7 @@ public class ByteBlob extends Blob { @Override public void updatePersistentStore(PersistentStoreAPI persistentStore, AttachmentNode node) { - persistentStore.addFileNodeBlob(node.getProjectName(), node.getFilePath(), node.isChanged(), contents); +// persistentStore.addFileNodeBlob(node.getProjectName(), node.getFilePath(), node.isChanged(), contents); } } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ExternalBlob.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ExternalBlob.java index c4907ccbd8..863f8c6268 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ExternalBlob.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/blob/ExternalBlob.java @@ -57,7 +57,7 @@ public class ExternalBlob extends Blob { @Override public void updatePersistentStore(PersistentStoreAPI persistentStore, AttachmentNode node) { - persistentStore.addFileNodeExternal(node.getProjectName(), node.getFilePath(), node.isChanged(), node.getURL()); +// persistentStore.addFileNodeExternal(node.getProjectName(), node.getFilePath(), node.isChanged(), node.getURL()); } } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java index 863d5f425d..c29129e1e0 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/BlobNode.java @@ -47,11 +47,11 @@ public class BlobNode extends FileNode { @Override public void updatePersistentStore(PersistentStoreAPI persistentStore, String projectName) { - try { - persistentStore.addFileNodeBlob(projectName, getFilePath(), isChanged(), getBlob().getContents()); - } catch (FailedConnectionException e) { - throw new RuntimeException(e); - } +// try { +// persistentStore.addFileNodeBlob(projectName, getFilePath(), isChanged(), getBlob().getContents()); +// } catch (FailedConnectionException e) { +// throw new RuntimeException(e); +// } } private void writeChanged(File projectAttDirectory) throws FailedConnectionException, IOException { diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java index 64404d1528..2ae1f5f836 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/node/WLDirectoryNode.java @@ -50,9 +50,9 @@ public class WLDirectoryNode implements PersistentStoreSource, PersistentStoreUp public void initFromPersistentStore(PersistentStoreAPI persistentStore) { fileIndexStore = new FileIndexStore(projectName, persistentStore); fileNodeTable = new HashMap(); - for (FileNode fileNode : persistentStore.getFileNodesForProjectName(projectName, fileIndexStore)) { - fileNodeTable.put(fileNode.getFilePath(), fileNode); - } +// for (FileNode fileNode : persistentStore.getFileNodesForProjectName(projectName, fileIndexStore)) { +// fileNodeTable.put(fileNode.getFilePath(), fileNode); +// } } @Override @@ -62,7 +62,7 @@ public class WLDirectoryNode implements PersistentStoreSource, PersistentStoreUp } private void updateFileNodeTableInPersistentStore(PersistentStoreAPI persistentStore) { - persistentStore.deleteFileNodesForProjectName(projectName); +// persistentStore.deleteFileNodesForProjectName(projectName); for (FileNode fileNode : fileNodeTable.values()) { fileNode.updatePersistentStore(persistentStore, projectName); } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/FileIndexStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/FileIndexStore.java index 95058cc5d8..9de8cb8904 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/FileIndexStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/FileIndexStore.java @@ -1,6 +1,5 @@ package uk.ac.ic.wlgitbridge.writelatex.filestore.store; -import uk.ac.ic.wlgitbridge.writelatex.api.request.exception.FailedConnectionException; import uk.ac.ic.wlgitbridge.writelatex.filestore.node.AttachmentNode; import uk.ac.ic.wlgitbridge.writelatex.filestore.node.BlobNode; import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode; @@ -50,7 +49,7 @@ public class FileIndexStore implements FileNodeIndexer, PersistentStoreSource, P @Override public void initFromPersistentStore(PersistentStoreAPI persistentStore) { - urlMappings = persistentStore.getURLIndexTableForProjectName(projectName); +// urlMappings = persistentStore.getURLIndexTableForProjectName(projectName); } public boolean hasAttachmentWithURL(String url) { @@ -63,13 +62,13 @@ public class FileIndexStore implements FileNodeIndexer, PersistentStoreSource, P @Override public void updatePersistentStore(PersistentStoreAPI persistentStore, String projectName) { - persistentStore.deleteURLIndexesForProjectName(projectName); +// persistentStore.deleteURLIndexesForProjectName(projectName); for (Entry urlMapping : urlMappings.entrySet()) { - try { - persistentStore.addURLIndex(projectName, urlMapping.getKey(), urlMapping.getValue().getContents()); - } catch (FailedConnectionException e) { - throw new RuntimeException(e); - } +// try { +// persistentStore.addURLIndex(projectName, urlMapping.getKey(), urlMapping.getValue().getContents()); +// } catch (FailedConnectionException e) { +// throw new RuntimeException(e); +// } } } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java index 60865185f4..efa7066701 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/filestore/store/WLFileStore.java @@ -42,9 +42,9 @@ public class WLFileStore implements PersistentStoreSource { @Override public void initFromPersistentStore(PersistentStoreAPI persistentStore) { this.persistentStore = persistentStore; - for (String projectName : persistentStore.getProjectNames()) { - fileStore.put(projectName, new WLDirectoryNode(projectName, attDirectory, rootGitDirectory, persistentStore)); - } +// for (String projectName : persistentStore.getProjectNames()) { +// fileStore.put(projectName, new WLDirectoryNode(projectName, attDirectory, rootGitDirectory, persistentStore)); +// } } public static void deleteInDirectory(File directory) { diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java index 87e60675b0..9232d65aec 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLDataModel.java @@ -11,7 +11,7 @@ import uk.ac.ic.wlgitbridge.writelatex.api.request.getdoc.exception.InvalidProje import uk.ac.ic.wlgitbridge.writelatex.api.request.push.exception.SnapshotPostException; import uk.ac.ic.wlgitbridge.writelatex.filestore.store.WLFileStore; import uk.ac.ic.wlgitbridge.writelatex.model.db.PersistentStoreAPI; -import uk.ac.ic.wlgitbridge.writelatex.model.db.WLGBPersistentStore; +import uk.ac.ic.wlgitbridge.writelatex.model.db.PersistentStore; import java.io.File; import java.io.IOException; @@ -28,10 +28,10 @@ public class WLDataModel implements CandidateSnapshotCallback { public WLDataModel(String rootGitDirectoryPath) { File rootGitDirectory = initRootGitDirectory(rootGitDirectoryPath); - persistentStore = new WLGBPersistentStore(rootGitDirectory); - projectStore = persistentStore.loadProjectStore(); + persistentStore = new PersistentStore(rootGitDirectory); + projectStore = null;//persistentStore.loadProjectStore(); Util.sout("Loaded projects: " + projectStore.getProjectNames().size() + "."); - fileStore = persistentStore.loadFileStore(); + fileStore = null;//persistentStore.loadFileStore(); Util.sout("Loaded file store and index tables."); List excludedFromDeletion = projectStore.getProjectNames(); excludedFromDeletion.add(".wlgb"); diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java index 00da31cc78..793dfb8793 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProject.java @@ -61,7 +61,7 @@ public class WLProject implements PersistentStoreSource { snapshots.put(versionID, new Snapshot(versionID)); snapshotFetcher.putLatestVersion(versionID); latestSnapshotID = versionID; - persistentStore.addSnapshot(name, versionID); +// persistentStore.addSnapshot(name, versionID); } @Override diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java index b0f0019d4c..119c7763ef 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/WLProjectStore.java @@ -32,7 +32,7 @@ public class WLProjectStore implements PersistentStoreSource { } else { project = new WLProject(name, persistentStore); projects.put(name, project); - persistentStore.addProject(name); +// persistentStore.addProject(name); } return project; } @@ -44,9 +44,9 @@ public class WLProjectStore implements PersistentStoreSource { @Override public void initFromPersistentStore(PersistentStoreAPI persistentStore) { this.persistentStore = persistentStore; - for (String projectName : persistentStore.getProjectNames()) { - projects.put(projectName, new WLProject(projectName, persistentStore)); - } +// for (String projectName : persistentStore.getProjectNames()) { +// projects.put(projectName, new WLProject(projectName, persistentStore)); +// } } } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStore.java new file mode 100644 index 0000000000..c249ff43a8 --- /dev/null +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStore.java @@ -0,0 +1,64 @@ +package uk.ac.ic.wlgitbridge.writelatex.model.db; + +import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLiteWLDatabase; + +import java.io.File; +import java.sql.SQLException; + +/** + * Created by Winston on 19/11/14. + */ +public class PersistentStore { + + private final SQLiteWLDatabase database; + + public PersistentStore(File rootGitDirectory) { + try { + database = new SQLiteWLDatabase(rootGitDirectory); + } catch (SQLException e) { + throw new RuntimeException(e); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + public void setLatestVersionForProject(String project, int versionID) { + try { + database.setVersionIDForProject(project, versionID); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public void deleteFilesForProject(String project, String... files) { + try { + database.deleteFilesForProject(project, files); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public void addURLIndexesForProject(String projectName, String url, String path) { + try { + database.addURLIndex(projectName, url, path); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public int getLatestVersionForProject(String project) { + try { + return database.getVersionIDForProjectName(project); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + + public String getPathForURLInProject(String projectName, String url) { + try { + return database.getPathForURLInProject(projectName, url); + } catch (SQLException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreAPI.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreAPI.java deleted file mode 100644 index 4800ea9841..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreAPI.java +++ /dev/null @@ -1,33 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db; - -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode; -import uk.ac.ic.wlgitbridge.writelatex.filestore.store.FileIndexStore; -import uk.ac.ic.wlgitbridge.writelatex.filestore.store.WLFileStore; -import uk.ac.ic.wlgitbridge.writelatex.model.WLProjectStore; - -import java.util.List; -import java.util.Map; - -/** - * Created by Winston on 17/11/14. - */ -public interface PersistentStoreAPI { - - public WLProjectStore loadProjectStore(); - public WLFileStore loadFileStore(); - - public void addProject(String name); - public void addSnapshot(String projectName, int versionID); - public void addFileNodeBlob(String projectName, String fileName, boolean changed, byte[] blob); - public void addFileNodeExternal(String projectName, String fileName, boolean changed, String url); - public void addURLIndex(String projectName, String url, byte[] blob); - - public List getProjectNames(); - public List getVersionIDsForProjectName(String projectName); - public List getFileNodesForProjectName(String projectName, FileIndexStore fileIndexStore); - public Map getURLIndexTableForProjectName(String projectName); - - public void deleteFileNodesForProjectName(String projectName); - public void deleteURLIndexesForProjectName(String projectName); - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreSource.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreSource.java index df087be011..27fbb40c35 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreSource.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreSource.java @@ -5,6 +5,6 @@ package uk.ac.ic.wlgitbridge.writelatex.model.db; */ public interface PersistentStoreSource { - public void initFromPersistentStore(PersistentStoreAPI persistentStore); + public void initFromPersistentStore(PersistentStore persistentStore); } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreUpdater.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreUpdater.java index 873a9f9c9b..5af44d909a 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreUpdater.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/PersistentStoreUpdater.java @@ -5,6 +5,6 @@ package uk.ac.ic.wlgitbridge.writelatex.model.db; */ public interface PersistentStoreUpdater { - public void updatePersistentStore(PersistentStoreAPI persistentStore, T info); + public void updatePersistentStore(PersistentStore persistentStore, T info); } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/WLGBPersistentStore.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/WLGBPersistentStore.java deleted file mode 100644 index ccd2cd1fd0..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/WLGBPersistentStore.java +++ /dev/null @@ -1,143 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db; - -import uk.ac.ic.wlgitbridge.util.Util; -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode; -import uk.ac.ic.wlgitbridge.writelatex.filestore.store.FileIndexStore; -import uk.ac.ic.wlgitbridge.writelatex.filestore.store.WLFileStore; -import uk.ac.ic.wlgitbridge.writelatex.model.WLProjectStore; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLiteWLDatabase; - -import java.io.File; -import java.sql.SQLException; -import java.util.List; -import java.util.Map; - -/** - * Created by Winston on 19/11/14. - */ -public class WLGBPersistentStore implements PersistentStoreAPI { - - private final File rootGitDirectory; - private final SQLiteWLDatabase database; - - public WLGBPersistentStore(File rootGitDirectory) { - this.rootGitDirectory = rootGitDirectory; - try { - database = new SQLiteWLDatabase(rootGitDirectory); - } catch (SQLException e) { - throw new RuntimeException(e); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - } - - @Override - public WLProjectStore loadProjectStore() { - return new WLProjectStore(this); - } - - @Override - public WLFileStore loadFileStore() { - return new WLFileStore(rootGitDirectory, this); - } - - @Override - public void addProject(String name) { - try { - database.addProject(name); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public void addSnapshot(String projectName, int versionID) { - try { - database.addSnapshot(projectName, versionID); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public void addFileNodeBlob(String projectName, String fileName, boolean changed, byte[] blob) { - try { - database.addFileNodeBlob(projectName, fileName, Util.booleanToInt(changed), blob); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public void addFileNodeExternal(String projectName, String fileName, boolean changed, String url) { - try { - database.addFileNodeExternal(projectName, fileName, Util.booleanToInt(changed), url); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public void addURLIndex(String projectName, String url, byte[] blob) { - try { - database.addURLIndex(projectName, url, blob); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public List getProjectNames() { - try { - return database.getProjectNames(); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public List getVersionIDsForProjectName(String projectName) { - try { - return database.getVersionIDsForProjectName(projectName); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public List getFileNodesForProjectName(String projectName, FileIndexStore fileIndexStore) { - try { - return database.getFileNodesForProjectName(projectName, fileIndexStore); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public Map getURLIndexTableForProjectName(String projectName) { - try { - return database.getURLIndexTableForProjectName(projectName); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public void deleteFileNodesForProjectName(String projectName) { - try { - database.deleteFileNodesForProjectName(projectName); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - @Override - public void deleteURLIndexesForProjectName(String projectName) { - try { - database.deleteURLIndexesForProjectName(projectName); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/SQLiteWLDatabase.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/SQLiteWLDatabase.java index d539da231a..1bc9827ac2 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/SQLiteWLDatabase.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/SQLiteWLDatabase.java @@ -1,24 +1,16 @@ package uk.ac.ic.wlgitbridge.writelatex.model.db.sql; import uk.ac.ic.wlgitbridge.util.Util; -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode; -import uk.ac.ic.wlgitbridge.writelatex.filestore.store.FileIndexStore; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query.GetFileNodesForProjectNameSQLQuery; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query.GetProjectNamesSQLQuery; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query.GetURLIndexTableForProjectNameSQLQuery; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query.GetVersionIDsForProjectNameSQLQuery; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.create.CreateFileNodeTableSQLUpdate; +import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query.GetPathForURLInProjectSQLQuery; +import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query.GetLatestVersionForProjectSQLQuery; import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.create.CreateProjectsTableSQLUpdate; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.create.CreateSnapshotsTableSQLUpdate; import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.create.CreateURLIndexStoreSQLUpdate; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.delete.DeleteFileNodesForProjectNameSQLUpdate; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.delete.DeleteURLIndexesForProjectNameSQLUpdate; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.insert.*; +import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.delete.DeleteFilesForProjectSQLUpdate; +import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.insert.AddURLIndexSQLUpdate; +import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.insert.SetProjectSQLUpdate; import java.io.File; import java.sql.*; -import java.util.List; -import java.util.Map; /** * Created by Winston on 17/11/14. @@ -36,56 +28,29 @@ public class SQLiteWLDatabase { createTables(); } - public void addProject(String projectName) throws SQLException { - update(new AddProjectSQLUpdate(projectName)); + public void setVersionIDForProject(String projectName, int versionID) throws SQLException { + update(new SetProjectSQLUpdate(projectName, versionID)); } - public void addSnapshot(String projectName, int versionID) throws SQLException { - update(new AddSnapshotSQLUpdate(projectName, versionID)); + public void addURLIndex(String projectName, String url, String path) throws SQLException { + update(new AddURLIndexSQLUpdate(projectName, url, path)); } - public void addFileNodeBlob(String projectName, String fileName, int changed, byte[] blob) throws SQLException { - update(new AddFileNodeBlobSQLUpdate(projectName, fileName, changed, blob)); + public void deleteFilesForProject(String projectName, String... paths) throws SQLException { + update(new DeleteFilesForProjectSQLUpdate(projectName, paths)); } - public void addFileNodeExternal(String projectName, String fileName, int changed, String url) throws SQLException { - update(new AddFileNodeExternalSQLUpdate(projectName, fileName, changed, url)); + public int getVersionIDForProjectName(String projectName) throws SQLException { + return query(new GetLatestVersionForProjectSQLQuery(projectName)); } - public void addURLIndex(String projectName, String url, byte[] blob) throws SQLException { - update(new AddURLIndexSQLUpdate(projectName, url, blob)); - - } - - public List getProjectNames() throws SQLException { - return query(new GetProjectNamesSQLQuery()); - } - - public List getVersionIDsForProjectName(String projectName) throws SQLException { - return query(new GetVersionIDsForProjectNameSQLQuery(projectName)); - } - - public List getFileNodesForProjectName(String projectName, FileIndexStore fileIndexStore) throws SQLException { - return query(new GetFileNodesForProjectNameSQLQuery(projectName, fileIndexStore)); - } - - public Map getURLIndexTableForProjectName(String projectName) throws SQLException { - return query(new GetURLIndexTableForProjectNameSQLQuery(projectName)); - } - - public void deleteFileNodesForProjectName(String projectName) throws SQLException { - update(new DeleteFileNodesForProjectNameSQLUpdate(projectName)); - } - - public void deleteURLIndexesForProjectName(String projectName) throws SQLException { - update(new DeleteURLIndexesForProjectNameSQLUpdate(projectName)); + public String getPathForURLInProject(String projectName, String url) throws SQLException { + return query(new GetPathForURLInProjectSQLQuery(projectName, url)); } private void createTables() throws SQLException { final SQLUpdate[] createTableUpdates = { new CreateProjectsTableSQLUpdate(), - new CreateSnapshotsTableSQLUpdate(), - new CreateFileNodeTableSQLUpdate(), new CreateURLIndexStoreSQLUpdate() }; diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetFileNodesForProjectNameSQLQuery.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetFileNodesForProjectNameSQLQuery.java deleted file mode 100644 index 3f189d8096..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetFileNodesForProjectNameSQLQuery.java +++ /dev/null @@ -1,60 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query; - -import uk.ac.ic.wlgitbridge.util.Util; -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.AttachmentNode; -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.BlobNode; -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode; -import uk.ac.ic.wlgitbridge.writelatex.filestore.store.FileIndexStore; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLQuery; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.LinkedList; -import java.util.List; - -/** - * Created by Winston on 20/11/14. - */ -public class GetFileNodesForProjectNameSQLQuery implements SQLQuery> { - - private static final String GET_FILE_NODES_FOR_PROJECT_NAME = - "SELECT `file_name`, `changed`, `is_blob`, `blob`, `url` FROM `file_node_table` WHERE `project_name` = ?"; - - private final String projectName; - private final FileIndexStore fileIndexStore; - - public GetFileNodesForProjectNameSQLQuery(String projectName, FileIndexStore fileIndexStore) { - this.projectName = projectName; - this.fileIndexStore = fileIndexStore; - } - - @Override - public List processResultSet(ResultSet resultSet) throws SQLException { - List fileNodes = new LinkedList(); - while (resultSet.next()) { - boolean isBlob = Util.intToBoolean(resultSet.getInt("is_blob")); - FileNode fileNode; - String fileName = resultSet.getString("file_name"); - boolean changed = Util.intToBoolean(resultSet.getInt("changed")); - if (isBlob) { - fileNode = new BlobNode(fileName, changed, resultSet.getBytes("blob")); - } else { - fileNode = new AttachmentNode(fileName, changed, resultSet.getString("url"), fileIndexStore); - } - fileNodes.add(fileNode); - } - return fileNodes; - } - - @Override - public String getSQL() { - return GET_FILE_NODES_FOR_PROJECT_NAME; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - statement.setString(1, projectName); - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetVersionIDsForProjectNameSQLQuery.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetLatestVersionForProjectSQLQuery.java similarity index 58% rename from services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetVersionIDsForProjectNameSQLQuery.java rename to services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetLatestVersionForProjectSQLQuery.java index 48bf93ebbc..e31c7938f1 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetVersionIDsForProjectNameSQLQuery.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetLatestVersionForProjectSQLQuery.java @@ -5,30 +5,28 @@ import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLQuery; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; -import java.util.LinkedList; -import java.util.List; /** * Created by Winston on 20/11/14. */ -public class GetVersionIDsForProjectNameSQLQuery implements SQLQuery> { +public class GetLatestVersionForProjectSQLQuery implements SQLQuery { private static final String GET_VERSION_IDS_FOR_PROJECT_NAME = - "SELECT `version_id` FROM `snapshots` WHERE `project_name` = ?"; + "SELECT `version_id` FROM `projects` WHERE `project_name` = ?"; private final String projectName; - public GetVersionIDsForProjectNameSQLQuery(String projectName) { + public GetLatestVersionForProjectSQLQuery(String projectName) { this.projectName = projectName; } @Override - public List processResultSet(ResultSet resultSet) throws SQLException { - List versionIDs = new LinkedList(); + public Integer processResultSet(ResultSet resultSet) throws SQLException { + int versionID = 0; while (resultSet.next()) { - versionIDs.add(resultSet.getInt("version_id")); + versionID = resultSet.getInt("version_id"); } - return versionIDs; + return versionID; } @Override diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetPathForURLInProjectSQLQuery.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetPathForURLInProjectSQLQuery.java new file mode 100644 index 0000000000..3927683403 --- /dev/null +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetPathForURLInProjectSQLQuery.java @@ -0,0 +1,45 @@ +package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query; + +import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLQuery; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +/** + * Created by Winston on 20/11/14. + */ +public class GetPathForURLInProjectSQLQuery implements SQLQuery { + + private static final String GET_URL_INDEXES_FOR_PROJECT_NAME = + "SELECT `path` FROM `url_index_store` WHERE `project_name` = ? AND `url` = ?"; + + private final String projectName; + private final String url; + + public GetPathForURLInProjectSQLQuery(String projectName, String url) { + this.projectName = projectName; + this.url = url; + } + + @Override + public String processResultSet(ResultSet resultSet) throws SQLException { + String path = null; + while (resultSet.next()) { + path = resultSet.getString("path"); + } + return path; + } + + @Override + public String getSQL() { + return GET_URL_INDEXES_FOR_PROJECT_NAME; + } + + @Override + public void addParametersToStatement(PreparedStatement statement) throws SQLException { + statement.setString(1, projectName); + statement.setString(2, url); + } + +} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetProjectNamesSQLQuery.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetProjectNamesSQLQuery.java deleted file mode 100644 index fc4c8a2764..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetProjectNamesSQLQuery.java +++ /dev/null @@ -1,38 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query; - -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLQuery; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.LinkedList; -import java.util.List; - -/** - * Created by Winston on 20/11/14. - */ -public class GetProjectNamesSQLQuery implements SQLQuery> { - - private static final String GET_PROJECT_NAMES = - "SELECT * FROM `projects`;\n"; - - @Override - public List processResultSet(ResultSet resultSet) throws SQLException { - List projectNames = new LinkedList(); - while (resultSet.next()) { - projectNames.add(resultSet.getString("name")); - } - return projectNames; - } - - @Override - public String getSQL() { - return GET_PROJECT_NAMES; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetURLIndexTableForProjectNameSQLQuery.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetURLIndexTableForProjectNameSQLQuery.java deleted file mode 100644 index 8025feb7e5..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/query/GetURLIndexTableForProjectNameSQLQuery.java +++ /dev/null @@ -1,48 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.query; - -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.AttachmentNode; -import uk.ac.ic.wlgitbridge.writelatex.filestore.node.FileNode; -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLQuery; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.Map; - -/** - * Created by Winston on 20/11/14. - */ -public class GetURLIndexTableForProjectNameSQLQuery implements SQLQuery> { - - private static final String GET_URL_INDEXES_FOR_PROJECT_NAME = - "SELECT `url`, `blob` FROM `url_index_store` WHERE `project_name` = ?"; - - private final String projectName; - - public GetURLIndexTableForProjectNameSQLQuery(String projectName) { - this.projectName = projectName; - } - - @Override - public Map processResultSet(ResultSet resultSet) throws SQLException { - Map urlIndexTable = new HashMap(); - while (resultSet.next()) { - String url = resultSet.getString("url"); - byte[] blob = resultSet.getBytes("blob"); - urlIndexTable.put(url, new AttachmentNode(url, blob)); - } - return urlIndexTable; - } - - @Override - public String getSQL() { - return GET_URL_INDEXES_FOR_PROJECT_NAME; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - statement.setString(1, projectName); - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateFileNodeTableSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateFileNodeTableSQLUpdate.java deleted file mode 100644 index 91cab8bf8a..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateFileNodeTableSQLUpdate.java +++ /dev/null @@ -1,35 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.create; - -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLUpdate; - -import java.sql.PreparedStatement; -import java.sql.SQLException; - -/** - * Created by Winston on 20/11/14. - */ -public class CreateFileNodeTableSQLUpdate implements SQLUpdate { - - private static final String CREATE_FILE_NODE_TABLE = - "CREATE TABLE IF NOT EXISTS `file_node_table` (\n" + - " `project_name` varchar(10) NOT NULL DEFAULT '',\n" + - " `file_name` varchar(255) NOT NULL DEFAULT '',\n" + - " `changed` tinyint(1) NOT NULL,\n" + - " `is_blob` tinyint(1) NOT NULL,\n" + - " `blob` blob,\n" + - " `url` varchar(128) DEFAULT NULL,\n" + - " PRIMARY KEY (`project_name`,`file_name`),\n" + - " CONSTRAINT `file_node_table_ibfk_1` FOREIGN KEY (`project_name`) REFERENCES `projects` (`name`) ON DELETE CASCADE ON UPDATE CASCADE\n" + - ")"; - - @Override - public String getSQL() { - return CREATE_FILE_NODE_TABLE; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateProjectsTableSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateProjectsTableSQLUpdate.java index 2c60b3c934..67c4d7aeb2 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateProjectsTableSQLUpdate.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateProjectsTableSQLUpdate.java @@ -13,6 +13,7 @@ public class CreateProjectsTableSQLUpdate implements SQLUpdate { private static final String CREATE_PROJECTS_TABLE = "CREATE TABLE IF NOT EXISTS `projects` (\n" + " `name` varchar(10) NOT NULL DEFAULT '',\n" + + " `version_id` int(11) NOT NULL DEFAULT 0,\n" + " PRIMARY KEY (`name`)\n" + ")"; @Override diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateSnapshotsTableSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateSnapshotsTableSQLUpdate.java deleted file mode 100644 index ee93dde8e3..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateSnapshotsTableSQLUpdate.java +++ /dev/null @@ -1,31 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.create; - -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLUpdate; - -import java.sql.PreparedStatement; -import java.sql.SQLException; - -/** - * Created by Winston on 20/11/14. - */ -public class CreateSnapshotsTableSQLUpdate implements SQLUpdate { - - private static final String CREATE_SNAPSHOTS_TABLE = - "CREATE TABLE IF NOT EXISTS `snapshots` (\n" + - " `project_name` varchar(10) NOT NULL DEFAULT '',\n" + - " `version_id` int(11) NOT NULL,\n" + - " PRIMARY KEY (`project_name`,`version_id`),\n" + - " CONSTRAINT `snapshots_ibfk_1` FOREIGN KEY (`project_name`) REFERENCES `projects` (`name`) ON DELETE CASCADE ON UPDATE CASCADE\n" + - ")"; - - @Override - public String getSQL() { - return CREATE_SNAPSHOTS_TABLE; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateURLIndexStoreSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateURLIndexStoreSQLUpdate.java index 7b7badb765..1064631efa 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateURLIndexStoreSQLUpdate.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/create/CreateURLIndexStoreSQLUpdate.java @@ -11,13 +11,16 @@ import java.sql.SQLException; public class CreateURLIndexStoreSQLUpdate implements SQLUpdate { private static final String CREATE_URL_INDEX_STORE = + "BEGIN;\n"+ "CREATE TABLE IF NOT EXISTS `url_index_store` (\n"+ " `project_name` varchar(10) NOT NULL DEFAULT '',\n"+ - " `url` varchar(128) NOT NULL,\n"+ - " `blob` blob NOT NULL,\n"+ + " `url` text NOT NULL,\n"+ + " `path` text NOT NULL,\n"+ " PRIMARY KEY (`project_name`,`url`),\n"+ " CONSTRAINT `url_index_store_ibfk_1` FOREIGN KEY (`project_name`) REFERENCES `projects` (`name`) ON DELETE CASCADE ON UPDATE CASCADE\n"+ - ")"; + ");\n"+ + "CREATE INDEX `project_path_index` ON `url_index_store`(`project_name`, `path`);\n"+ + "COMMIT;\n"; @Override public String getSQL() { diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFileNodesForProjectNameSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFileNodesForProjectNameSQLUpdate.java deleted file mode 100644 index c9b20d8224..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFileNodesForProjectNameSQLUpdate.java +++ /dev/null @@ -1,32 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.delete; - -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLUpdate; - -import java.sql.PreparedStatement; -import java.sql.SQLException; - -/** - * Created by Winston on 20/11/14. - */ -public class DeleteFileNodesForProjectNameSQLUpdate implements SQLUpdate { - - private static final String DELETE_FILE_NODES_FOR_PROJECT_NAME = - "DELETE FROM `file_node_table` WHERE `project_name` = ?"; - - private final String projectName; - - public DeleteFileNodesForProjectNameSQLUpdate(String projectName) { - this.projectName = projectName; - } - - @Override - public String getSQL() { - return DELETE_FILE_NODES_FOR_PROJECT_NAME; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - statement.setString(1, projectName); - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteURLIndexesForProjectNameSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdate.java similarity index 52% rename from services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteURLIndexesForProjectNameSQLUpdate.java rename to services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdate.java index c458ef27bb..98f26fb88b 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteURLIndexesForProjectNameSQLUpdate.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdate.java @@ -8,20 +8,32 @@ import java.sql.SQLException; /** * Created by Winston on 20/11/14. */ -public class DeleteURLIndexesForProjectNameSQLUpdate implements SQLUpdate { +public class DeleteFilesForProjectSQLUpdate implements SQLUpdate { private static final String DELETE_URL_INDEXES_FOR_PROJECT_NAME = - "DELETE FROM `url_index_store` WHERE `project_name` = ?"; + "DELETE FROM `url_index_store` WHERE `project_name` = ? AND path IN ("; private final String projectName; + private final String[] paths; - public DeleteURLIndexesForProjectNameSQLUpdate(String projectName) { + public DeleteFilesForProjectSQLUpdate(String projectName, String... paths) { this.projectName = projectName; + this.paths = paths; } @Override public String getSQL() { - return DELETE_URL_INDEXES_FOR_PROJECT_NAME; + StringBuilder sb = new StringBuilder(DELETE_URL_INDEXES_FOR_PROJECT_NAME); + for (int i = 0; i < paths.length; i++) { + sb.append('\''); + sb.append(paths[i]); + sb.append('\''); + if (i < paths.length - 1) { + sb.append(", "); + } + } + sb.append(");\n"); + return sb.toString(); } @Override diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeBlobSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeBlobSQLUpdate.java deleted file mode 100644 index 75c215b057..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeBlobSQLUpdate.java +++ /dev/null @@ -1,41 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.insert; - -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLUpdate; - -import java.sql.PreparedStatement; -import java.sql.SQLException; - -/** - * Created by Winston on 20/11/14. - */ -public class AddFileNodeBlobSQLUpdate implements SQLUpdate { - - private static final String ADD_FILE_NODE_BLOB = - "INSERT INTO `file_node_table` (`project_name`, `file_name`, `changed`, `is_blob`, `blob`, `url`) VALUES (?, ?, ?, '1', ?, NULL);\n"; - - private final String projectName; - private final String fileName; - private final int changed; - private final byte[] blob; - - public AddFileNodeBlobSQLUpdate(String projectName, String fileName, int changed, byte[] blob) { - this.projectName = projectName; - this.fileName = fileName; - this.changed = changed; - this.blob = blob; - } - - @Override - public String getSQL() { - return ADD_FILE_NODE_BLOB; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - statement.setString(1, projectName); - statement.setString(2, fileName); - statement.setInt(3, changed); - statement.setBytes(4, blob); - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeExternalSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeExternalSQLUpdate.java deleted file mode 100644 index 1f8fc957e2..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddFileNodeExternalSQLUpdate.java +++ /dev/null @@ -1,41 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.insert; - -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLUpdate; - -import java.sql.PreparedStatement; -import java.sql.SQLException; - -/** - * Created by Winston on 20/11/14. - */ -public class AddFileNodeExternalSQLUpdate implements SQLUpdate { - - private static final String ADD_FILE_NODE_EXTERNAL = - "INSERT INTO `file_node_table` (`project_name`, `file_name`, `changed`, `is_blob`, `blob`, `url`) VALUES (?, ?, ?, '0', NULL, ?);\n"; - - private final String projectName; - private final String fileName; - private final int changed; - private final String url; - - public AddFileNodeExternalSQLUpdate(String projectName, String fileName, int changed, String url) { - this.projectName = projectName; - this.fileName = fileName; - this.changed = changed; - this.url = url; - } - - @Override - public String getSQL() { - return ADD_FILE_NODE_EXTERNAL; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - statement.setString(1, projectName); - statement.setString(2, fileName); - statement.setInt(3, changed); - statement.setString(4, url); - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddProjectSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddProjectSQLUpdate.java deleted file mode 100644 index 8df728752d..0000000000 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddProjectSQLUpdate.java +++ /dev/null @@ -1,32 +0,0 @@ -package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.insert; - -import uk.ac.ic.wlgitbridge.writelatex.model.db.sql.SQLUpdate; - -import java.sql.PreparedStatement; -import java.sql.SQLException; - -/** - * Created by Winston on 20/11/14. - */ -public class AddProjectSQLUpdate implements SQLUpdate { - - private static final String ADD_PROJECT = - "INSERT INTO `projects` (`name`) VALUES (?);\n"; - - private final String projectName; - - public AddProjectSQLUpdate(String projectName) { - this.projectName = projectName; - } - - @Override - public String getSQL() { - return ADD_PROJECT; - } - - @Override - public void addParametersToStatement(PreparedStatement statement) throws SQLException { - statement.setString(1, projectName); - } - -} diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddURLIndexSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddURLIndexSQLUpdate.java index 8a61fb81db..425d252284 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddURLIndexSQLUpdate.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddURLIndexSQLUpdate.java @@ -11,16 +11,16 @@ import java.sql.SQLException; public class AddURLIndexSQLUpdate implements SQLUpdate { private static final String ADD_URL_INDEX = - "INSERT INTO `url_index_store` (`project_name`, `url`, `blob`) VALUES (?, ?, ?);\n"; + "INSERT INTO `url_index_store` (`project_name`, `url`, `path`) VALUES (?, ?, ?);\n"; private final String projectName; private final String url; - private final byte[] blob; + private final String path; - public AddURLIndexSQLUpdate(String projectName, String url, byte[] blob) { + public AddURLIndexSQLUpdate(String projectName, String url, String path) { this.projectName = projectName; this.url = url; - this.blob = blob; + this.path = path; } @Override @@ -32,7 +32,7 @@ public class AddURLIndexSQLUpdate implements SQLUpdate { public void addParametersToStatement(PreparedStatement statement) throws SQLException { statement.setString(1, projectName); statement.setString(2, url); - statement.setBytes(3, blob); + statement.setString(3, path); } } diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddSnapshotSQLUpdate.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/SetProjectSQLUpdate.java similarity index 69% rename from services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddSnapshotSQLUpdate.java rename to services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/SetProjectSQLUpdate.java index 5dd891f601..9c9951453d 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/AddSnapshotSQLUpdate.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/insert/SetProjectSQLUpdate.java @@ -8,22 +8,22 @@ import java.sql.SQLException; /** * Created by Winston on 20/11/14. */ -public class AddSnapshotSQLUpdate implements SQLUpdate { +public class SetProjectSQLUpdate implements SQLUpdate { - private static final String ADD_SNAPSHOT = - "INSERT INTO `snapshots` (`project_name`, `version_id`) VALUES (?, ?);\n"; + private static final String SET_PROJECT = + "INSERT OR REPLACE INTO `projects`(`name`, `version_id`) VALUES (?, ?);\n"; private final String projectName; private final int versionID; - public AddSnapshotSQLUpdate(String projectName, int versionID) { + public SetProjectSQLUpdate(String projectName, int versionID) { this.projectName = projectName; this.versionID = versionID; } @Override public String getSQL() { - return ADD_SNAPSHOT; + return SET_PROJECT; } @Override diff --git a/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdateTest.java b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdateTest.java new file mode 100644 index 0000000000..c9e1371147 --- /dev/null +++ b/services/git-bridge/src/test/java/uk/ac/ic/wlgitbridge/writelatex/model/db/sql/update/delete/DeleteFilesForProjectSQLUpdateTest.java @@ -0,0 +1,14 @@ +package uk.ac.ic.wlgitbridge.writelatex.model.db.sql.update.delete; + +import org.junit.Test; +import static org.junit.Assert.*; + +public class DeleteFilesForProjectSQLUpdateTest { + + @Test + public void testGetSQL() { + DeleteFilesForProjectSQLUpdate update = new DeleteFilesForProjectSQLUpdate("projname", "path1", "path2"); + assertEquals("DELETE FROM `url_index_store` WHERE `project_name` = ? AND path IN ('path1', 'path2');\n", update.getSQL()); + } + +} \ No newline at end of file