dbname += " (" + con.getMetaData().getURL() + ")"; String tableName = tmd.getName(); tmd.setSchemaInfo(tableInfo); Set<String> indexOn = new HashSet<String>(); String indexInfo = dumpIndexData(con.getMetaData(), met, tableName, indexOn); tmd.setIndexInfo(indexInfo);
Long hasBinary = readLongOrNullFromResultSet(this.rs, field++); Boolean deletedOnce = readBooleanOrNullFromResultSet(this.rs, field++); long schemaVersion = tmd.hasVersion() ? readLongFromResultSet(rs, field++) : 0; long sdType = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; long sdMaxRevTime = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; String data = this.rs.getString(field++); byte[] bdata = this.rs.getBytes(field++); PERFLOG.end(pstart, 10, "queried: table={} -> id={}, modcount={}, modified={}, data={}, bdata={}", tmd.getName(), id, modcount, modified, (data == null ? 0 : data.length()), (bdata == null ? 0 : bdata.length)); return new RDBRow(id, hasBinary, deletedOnce, modified, modcount, cmodcount, schemaVersion, sdType,
public int delete(Connection connection, RDBTableMetaData tmd, List<String> allIds) throws SQLException { int count = 0; for (List<String> ids : Lists.partition(allIds, RDBJDBCTools.MAX_IN_CLAUSE)) { PreparedStatement stmt; PreparedStatementComponent inClause = RDBJDBCTools.createInStatement("ID", ids, tmd.isIdBinary()); String sql = "delete from " + tmd.getName() + " where " + inClause.getStatementComponent(); stmt = connection.prepareStatement(sql); try { inClause.setParameters(stmt, 1); int result = stmt.executeUpdate(); if (result != ids.size()) { LOG.debug("DB delete failed for " + tmd.getName() + "/" + ids); } count += result; } finally { stmt.close(); } } return count; }
dbname += " (" + con.getMetaData().getURL() + ")"; String tableName = tmd.getName(); tmd.setSchemaInfo(tableInfo); Set<String> indexOn = new HashSet<String>(); String indexInfo = dumpIndexData(con.getMetaData(), met, tableName, indexOn); tmd.setIndexInfo(indexInfo);
new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.NODES)))); this.tableMeta.put(Collection.CLUSTER_NODES, new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.CLUSTER_NODES)))); this.tableMeta.put(Collection.JOURNAL, new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.JOURNAL)))); this.tableMeta.put(Collection.SETTINGS, new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.SETTINGS)))); tableDiags.append(nodesMeta.getSchemaInfo()); if (!nodesMeta.getIndexInfo().isEmpty()) { tableDiags.append(" /* ").append(nodesMeta.getIndexInfo()).append(" */"); String diag = dbInfo.getAdditionalDiagnostics(this.ch, this.tableMeta.get(Collection.NODES).getName());
int[] batchResults = new int[0]; PreparedStatement stmt = connection.prepareStatement("update " + tmd.getName() + " set MODIFIED = ?, HASBINARY = ?, DELETEDONCE = ?, MODCOUNT = ?, CMODCOUNT = ?, DSIZE = ?, DATA = ?, " + (tmd.hasVersion() ? (" VERSION = " + SCHEMAVERSION + ", ") : "") + "BDATA = ? where ID = ? and MODCOUNT = ?"); try { boolean batchIsEmpty = true; String data = this.ser.asString(document, tmd.getColumnOnlyProperties()); Number hasBinary = (Number) document.get(NodeDocument.HAS_BINARY_FLAG); Boolean deletedOnce = (Boolean) document.get(NodeDocument.DELETED_ONCE); stmt.setObject(si++, data.length(), Types.BIGINT); if (data.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) { stmt.setString(si++, data); stmt.setBinaryStream(si++, null, 0);
new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.NODES)))); this.tableMeta.put(Collection.CLUSTER_NODES, new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.CLUSTER_NODES)))); this.tableMeta.put(Collection.JOURNAL, new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.JOURNAL)))); this.tableMeta.put(Collection.SETTINGS, new RDBTableMetaData(catalog, createTableName(options.getTablePrefix(), TABLEMAP.get(Collection.SETTINGS)))); tableDiags.append(nodesMeta.getSchemaInfo()); if (!nodesMeta.getIndexInfo().isEmpty()) { tableDiags.append(" /* ").append(nodesMeta.getIndexInfo()).append(" */"); String diag = dbInfo.getAdditionalDiagnostics(this.ch, this.tableMeta.get(Collection.NODES).getName());
StringBuffer sql = new StringBuffer(); String fields; if (tmd.hasSplitDocs()) { fields = "MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, SDTYPE, SDMAXREVTIME, "; } else if (tmd.hasVersion()) { fields = "MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, "; } else { sql.append("from " + tmd.getName() + " where ID = ?"); PreparedStatement stmt = connection.prepareStatement(sql.toString()); ResultSet rs = null; Long hasBinary = readLongOrNullFromResultSet(rs, field++); Boolean deletedOnce = readBooleanOrNullFromResultSet(rs, field++); long schemaVersion = tmd.hasVersion() ? readLongFromResultSet(rs, field++) : 0; long sdType = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; long sdMaxRevTime = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; String data = rs.getString(field++); byte[] bdata = rs.getBytes(field++); PERFLOG.end(pstart, 10, "read: table={}, id={}, lastmodcount={}, lastmodified={} -> modcount={}, modified={}, data={}, bdata={}", tmd.getName(), id, lastmodcount, lastmodified, modcount, modified, (data == null ? 0 : data.length()), (bdata == null ? 0 : bdata.length)); return new RDBRow(id, hasBinary, deletedOnce, modified, modcount, cmodcount, schemaVersion, sdType, sdMaxRevTime, data, bdata); } else { PERFLOG.end(pstart, 10, "read: table={}, id={}, lastmodcount={}, lastmodified={} -> not found", tmd.getName(), id, lastmodcount, lastmodified); return null;
PreparedStatement stmt = null; String fields; if (tmd.hasSplitDocs()) { fields = "ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, SDTYPE, SDMAXREVTIME, DATA, BDATA"; } else if (tmd.hasVersion()) { fields = "ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, DATA, BDATA"; } else { try { long pstart = PERFLOG.start(PERFLOG.isDebugEnabled() ? ("querying: table=" + tmd.getName() + ", minId=" + minId + ", maxId=" + maxId + ", excludeKeyPatterns=" + excludeKeyPatterns + ", conditions=" + conditions + ", limit=" + limit) : null); Long hasBinary = readLongOrNullFromResultSet(rs, field++); Boolean deletedOnce = readBooleanOrNullFromResultSet(rs, field++); long schemaVersion = tmd.hasVersion() ? readLongFromResultSet(rs, field++) : 0; long sdType = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; long sdMaxRevTime = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; String data = rs.getString(field++); byte[] bdata = rs.getBytes(field++); dataTotal += data.length(); bdataTotal += bdata == null ? 0 : bdata.length; PERFLOG.end(pstart, 10, "queried: table={} -> id={}, modcount={}, modified={}, data={}, bdata={}", tmd.getName(), id, modcount, modified, (data == null ? 0 : data.length()), (bdata == null ? 0 : bdata.length)); String message = String.format( "Potentially excessive query on %s with %d hits (limited to %d, configured QUERYHITSLIMIT %d), elapsed time %dms, %s%s%s",
PreparedStatement stmt = null; String fields; if (tmd.hasSplitDocs()) { fields = "ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, SDTYPE, SDMAXREVTIME, DATA, BDATA"; } else if (tmd.hasVersion()) { fields = "ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, DATA, BDATA"; } else { try { long pstart = PERFLOG.start(PERFLOG.isDebugEnabled() ? ("querying: table=" + tmd.getName() + ", minId=" + minId + ", maxId=" + maxId + ", excludeKeyPatterns=" + excludeKeyPatterns + ", conditions=" + conditions + ", limit=" + limit) : null); Long hasBinary = readLongOrNullFromResultSet(rs, field++); Boolean deletedOnce = readBooleanOrNullFromResultSet(rs, field++); long schemaVersion = tmd.hasVersion() ? readLongFromResultSet(rs, field++) : 0; long sdType = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; long sdMaxRevTime = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; String data = rs.getString(field++); byte[] bdata = rs.getBytes(field++); dataTotal += data.length(); bdataTotal += bdata == null ? 0 : bdata.length; PERFLOG.end(pstart, 10, "queried: table={} -> id={}, modcount={}, modified={}, data={}, bdata={}", tmd.getName(), id, modcount, modified, (data == null ? 0 : data.length()), (bdata == null ? 0 : bdata.length)); String message = String.format( "Potentially excessive query on %s with %d hits (limited to %d, configured QUERYHITSLIMIT %d), elapsed time %dms, %s%s%s",
int[] batchResults = new int[0]; PreparedStatement stmt = connection.prepareStatement("update " + tmd.getName() + " set MODIFIED = ?, HASBINARY = ?, DELETEDONCE = ?, MODCOUNT = ?, CMODCOUNT = ?, DSIZE = ?, DATA = ?, " + (tmd.hasVersion() ? (" VERSION = " + SCHEMAVERSION + ", ") : "") + "BDATA = ? where ID = ? and MODCOUNT = ?"); try { boolean batchIsEmpty = true; String data = this.ser.asString(document, tmd.getColumnOnlyProperties()); Number hasBinary = (Number) document.get(NodeDocument.HAS_BINARY_FLAG); Boolean deletedOnce = (Boolean) document.get(NodeDocument.DELETED_ONCE); stmt.setObject(si++, data.length(), Types.BIGINT); if (data.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) { stmt.setString(si++, data); stmt.setBinaryStream(si++, null, 0);
@Test public void batchFailingInsertResult() throws SQLException { String table = ((RDBDocumentStore) super.ds).getTable(Collection.NODES).getName();
rdb0 = new RDBDocumentStore(this.ds, new DocumentMK.Builder(), options); RDBTableMetaData meta = rdb0.getTable(Collection.NODES); assertFalse(meta.hasVersion()); assertFalse(meta.hasSplitDocs()); rdb1 = new RDBDocumentStore(this.ds, new DocumentMK.Builder(), options); RDBTableMetaData meta = rdb1.getTable(Collection.NODES); assertTrue(meta.hasVersion()); assertFalse(meta.hasSplitDocs()); rdb2 = new RDBDocumentStore(this.ds, new DocumentMK.Builder(), options2); RDBTableMetaData meta2 = rdb2.getTable(Collection.NODES); assertTrue(meta2.hasVersion()); assertTrue(meta2.hasSplitDocs());
StringBuffer sql = new StringBuffer(); String fields; if (tmd.hasSplitDocs()) { fields = "MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, SDTYPE, SDMAXREVTIME, "; } else if (tmd.hasVersion()) { fields = "MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, "; } else { sql.append("from " + tmd.getName() + " where ID = ?"); PreparedStatement stmt = connection.prepareStatement(sql.toString()); ResultSet rs = null; Long hasBinary = readLongOrNullFromResultSet(rs, field++); Boolean deletedOnce = readBooleanOrNullFromResultSet(rs, field++); long schemaVersion = tmd.hasVersion() ? readLongFromResultSet(rs, field++) : 0; long sdType = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; long sdMaxRevTime = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; String data = rs.getString(field++); byte[] bdata = rs.getBytes(field++); PERFLOG.end(pstart, 10, "read: table={}, id={}, lastmodcount={}, lastmodified={} -> modcount={}, modified={}, data={}, bdata={}", tmd.getName(), id, lastmodcount, lastmodified, modcount, modified, (data == null ? 0 : data.length()), (bdata == null ? 0 : bdata.length)); return new RDBRow(id, hasBinary, deletedOnce, modified, modcount, cmodcount, schemaVersion, sdType, sdMaxRevTime, data, bdata); } else { PERFLOG.end(pstart, 10, "read: table={}, id={}, lastmodcount={}, lastmodified={} -> not found", tmd.getName(), id, lastmodcount, lastmodified); return null;
String appendData = ser.asString(update, tmd.getColumnOnlyProperties()); if (appendData.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) { try { Operation modOperation = update.getChanges().get(MODIFIEDKEY); data = ser.asString(document, tmd.getColumnOnlyProperties()); Object m = document.get(MODIFIED); long modified = (m instanceof Long) ? ((Long)m).longValue() : 0; byte[] bytes = asBytes(data); addDiags = String.format(" (DATA size in Java characters: %d, in octets: %d, computed character limit: %d)", data.length(), bytes.length, tmd.getDataLimitInOctets() / CHAR2OCTETRATIO);
long pstart = PERFLOG.start(PERFLOG.isDebugEnabled() ? ("reading: " + keys) : null); PreparedStatementComponent inClause = RDBJDBCTools.createInStatement("ID", keys, tmd.isIdBinary()); StringBuilder query = new StringBuilder(); if (tmd.hasSplitDocs()) { query.append("select ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, SDTYPE, SDMAXREVTIME, DATA, BDATA from "); } else if (tmd.hasVersion()) { query.append("select ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, DATA, BDATA from "); } else { query.append("select ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, DATA, BDATA from "); query.append(tmd.getName()); query.append(" where ").append(inClause.getStatementComponent()); Long hasBinary = readLongOrNullFromResultSet(rs, field++); Boolean deletedOnce = readBooleanOrNullFromResultSet(rs, field++); long schemaVersion = tmd.hasVersion() ? readLongFromResultSet(rs, field++) : 0; long sdType = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; long sdMaxRevTime = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; String data = rs.getString(field++); byte[] bdata = rs.getBytes(field++); sdMaxRevTime, data, bdata); rows.add(row); PERFLOG.end(pstart, 10, "read: table={}, id={} -> modcount={}, modified={}, data={}, bdata={}", tmd.getName(), id, modcount, modified, (data == null ? 0 : data.length()), (bdata == null ? 0 : bdata.length)); PERFLOG.end(pstart, 10, "read: table={} -> exception={}", tmd.getName(), ex.getMessage());
long pstart = PERFLOG.start(PERFLOG.isDebugEnabled() ? ("reading: " + keys) : null); PreparedStatementComponent inClause = RDBJDBCTools.createInStatement("ID", keys, tmd.isIdBinary()); StringBuilder query = new StringBuilder(); if (tmd.hasSplitDocs()) { query.append("select ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, SDTYPE, SDMAXREVTIME, DATA, BDATA from "); } else if (tmd.hasVersion()) { query.append("select ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, VERSION, DATA, BDATA from "); } else { query.append("select ID, MODIFIED, MODCOUNT, CMODCOUNT, HASBINARY, DELETEDONCE, DATA, BDATA from "); query.append(tmd.getName()); query.append(" where ").append(inClause.getStatementComponent()); Long hasBinary = readLongOrNullFromResultSet(rs, field++); Boolean deletedOnce = readBooleanOrNullFromResultSet(rs, field++); long schemaVersion = tmd.hasVersion() ? readLongFromResultSet(rs, field++) : 0; long sdType = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; long sdMaxRevTime = tmd.hasSplitDocs() ? readLongFromResultSet(rs, field++) : RDBRow.LONG_UNSET; String data = rs.getString(field++); byte[] bdata = rs.getBytes(field++); sdMaxRevTime, data, bdata); rows.add(row); PERFLOG.end(pstart, 10, "read: table={}, id={} -> modcount={}, modified={}, data={}, bdata={}", tmd.getName(), id, modcount, modified, (data == null ? 0 : data.length()), (bdata == null ? 0 : bdata.length)); PERFLOG.end(pstart, 10, "read: table={} -> exception={}", tmd.getName(), ex.getMessage());
String appendData = ser.asString(update, tmd.getColumnOnlyProperties()); if (appendData.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) { try { Operation modOperation = update.getChanges().get(MODIFIEDKEY); data = ser.asString(document, tmd.getColumnOnlyProperties()); Object m = document.get(MODIFIED); long modified = (m instanceof Long) ? ((Long)m).longValue() : 0; byte[] bytes = asBytes(data); addDiags = String.format(" (DATA size in Java characters: %d, in octets: %d, computed character limit: %d)", data.length(), bytes.length, tmd.getDataLimitInOctets() / CHAR2OCTETRATIO);
public <T extends Document> Set<String> insert(Connection connection, RDBTableMetaData tmd, List<T> documents) throws SQLException { int actualSchema = tmd.hasSplitDocs() ? 2 : 1; PreparedStatement stmt = connection.prepareStatement( "insert into " + tmd.getName() + "(ID, MODIFIED, HASBINARY, DELETEDONCE, MODCOUNT, CMODCOUNT, DSIZE, " + (tmd.hasVersion() ? "VERSION, " : "") + (tmd.hasSplitDocs() ? "SDTYPE, SDMAXREVTIME, " : "") + "DATA, BDATA) " + "values (?, ?, ?, ?, ?, ?, ?, " + (tmd.hasVersion() ? (" " + actualSchema + ", ") : "") + (tmd.hasSplitDocs() ? "?, ?, " : "") + "?, ?)"); try { for (T document : sortedDocs) { String data = this.ser.asString(document, tmd.getColumnOnlyProperties()); String id = document.getId(); Number hasBinary = (Number) document.get(NodeDocument.HAS_BINARY_FLAG); stmt.setObject(si++, cmodcount == null ? Long.valueOf(0) : cmodcount, Types.BIGINT); stmt.setObject(si++, data.length(), Types.BIGINT); if (tmd.hasSplitDocs()) { stmt.setObject(si++, document.get(NodeDocument.SD_TYPE)); stmt.setObject(si++, document.get(NodeDocument.SD_MAX_REV_TIME_IN_SECS)); if (data.length() < tmd.getDataLimitInOctets() / CHAR2OCTETRATIO) { stmt.setString(si++, data); stmt.setBinaryStream(si++, null, 0); int result = results[i]; if (result != 1 && result != Statement.SUCCESS_NO_INFO) { LOG.debug("DB insert failed for {}: {}", tmd.getName(), sortedDocs.get(i).getId());
selectClause.append(columns + " from " + tmd.getName());