/** * Note: This method selects also {@link DatabaseVersionStatus#DIRTY DIRTY}. */ public MultiChunkId getMultiChunkId(ChunkChecksum chunkChecksum) { try (PreparedStatement preparedStatement = getStatement("multichunk.select.all.getMultiChunkIdForChunk.sql")) { preparedStatement.setString(1, chunkChecksum.toString()); try (ResultSet resultSet = preparedStatement.executeQuery()) { if (resultSet.next()) { return MultiChunkId.parseMultiChunkId(resultSet.getString("multichunk_id")); } } return null; } catch (SQLException e) { throw new RuntimeException(e); } }
private void writeFileContentChunkRefs(Connection connection, FileContent fileContent) throws SQLException { PreparedStatement preparedStatement = getStatement(connection, "filecontent.insert.all.writeFileContentChunkRefs.sql"); int order = 0; for (ChunkChecksum chunkChecksum : fileContent.getChunks()) { preparedStatement.setString(1, fileContent.getChecksum().toString()); preparedStatement.setString(2, chunkChecksum.toString()); preparedStatement.setInt(3, order); preparedStatement.addBatch(); order++; } preparedStatement.executeBatch(); preparedStatement.close(); }
int i = 0; for (ChunkChecksum checksum : chunkChecksumSet) { checksums[i] = checksum.toString(); i++;
/** * Writes a list of {@link ChunkEntry}s to the database using <tt>INSERT</tt>s and the given connection. * * <p><b>Note:</b> This method executes, but <b>does not commit</b> the query. * * @param connection The connection used to execute the statements * @param databaseVersionId * @param chunks List of {@link ChunkEntry}s to be inserted in the database * @throws SQLException If the SQL statement fails */ public void writeChunks(Connection connection, long databaseVersionId, Collection<ChunkEntry> chunks) throws SQLException { if (chunks.size() > 0) { PreparedStatement preparedStatement = getStatement(connection, "chunk.insert.all.writeChunks.sql"); for (ChunkEntry chunk : chunks) { preparedStatement.setString(1, chunk.getChecksum().toString()); preparedStatement.setLong(2, databaseVersionId); preparedStatement.setInt(3, chunk.getSize()); preparedStatement.addBatch(); } preparedStatement.executeBatch(); preparedStatement.close(); } }
private void writeFileContents(IndentXmlStreamWriter xmlOut, Collection<FileContent> fileContents) throws XMLStreamException { if (fileContents.size() > 0) { xmlOut.writeStartElement("fileContents"); for (FileContent fileContent : fileContents) { xmlOut.writeStartElement("fileContent"); xmlOut.writeAttribute("checksum", fileContent.getChecksum().toString()); xmlOut.writeAttribute("size", fileContent.getSize()); xmlOut.writeStartElement("chunkRefs"); Collection<ChunkChecksum> fileContentChunkChunks = fileContent.getChunks(); for (ChunkChecksum chunkChecksum : fileContentChunkChunks) { xmlOut.writeEmptyElement("chunkRef"); xmlOut.writeAttribute("ref", chunkChecksum.toString()); } xmlOut.writeEndElement(); // </chunkRefs> xmlOut.writeEndElement(); // </fileContent> } xmlOut.writeEndElement(); // </fileContents> } }
/** * Checks if chunk already exists in all database versions * Afterwards checks if chunk exists in new introduced database version. */ @Override public boolean onChunk(Chunk chunk) { ChunkChecksum chunkChecksum = new ChunkChecksum(chunk.getChecksum()); chunkEntry = localDatabase.getChunk(chunkChecksum); if (chunkEntry == null) { chunkEntry = newDatabaseVersion.getChunk(chunkChecksum); if (chunkEntry == null) { logger.log(Level.FINER, "- Chunk new: {0}", chunkChecksum.toString()); chunkEntry = new ChunkEntry(chunkChecksum, chunk.getSize()); newDatabaseVersion.addChunk(chunkEntry); return true; } } logger.log(Level.FINER, "- Chunk exists: {0}", StringUtil.toHex(chunk.getChecksum())); return false; } }
private void writeMultiChunks(IndentXmlStreamWriter xmlOut, Collection<MultiChunkEntry> multiChunks) throws XMLStreamException { if (multiChunks.size() > 0) { xmlOut.writeStartElement("multiChunks"); for (MultiChunkEntry multiChunk : multiChunks) { xmlOut.writeStartElement("multiChunk"); xmlOut.writeAttribute("id", multiChunk.getId().toString()); xmlOut.writeAttribute("size", multiChunk.getSize()); xmlOut.writeStartElement("chunkRefs"); Collection<ChunkChecksum> multiChunkChunks = multiChunk.getChunks(); for (ChunkChecksum chunkChecksum : multiChunkChunks) { xmlOut.writeEmptyElement("chunkRef"); xmlOut.writeAttribute("ref", chunkChecksum.toString()); } xmlOut.writeEndElement(); // </chunkRefs> xmlOut.writeEndElement(); // </multiChunk> } xmlOut.writeEndElement(); // </multiChunks> } }
private void writeMultiChunkRefs(Connection connection, MultiChunkEntry multiChunk) throws SQLException { PreparedStatement preparedStatement = getStatement("multichunk.insert.all.writeMultiChunkRefs.sql"); for (ChunkChecksum chunkChecksum : multiChunk.getChunks()) { preparedStatement.setString(1, multiChunk.getId().toString()); preparedStatement.setString(2, chunkChecksum.toString()); preparedStatement.addBatch(); } preparedStatement.executeBatch(); preparedStatement.close(); }
private void writeChunks(IndentXmlStreamWriter xmlOut, Collection<ChunkEntry> chunks) throws XMLStreamException { if (chunks.size() > 0) { xmlOut.writeStartElement("chunks"); for (ChunkEntry chunk : chunks) { xmlOut.writeEmptyElement("chunk"); xmlOut.writeAttribute("checksum", chunk.getChecksum().toString()); xmlOut.writeAttribute("size", chunk.getSize()); } xmlOut.writeEndElement(); // </chunks> } }