use of com.torodb.core.transaction.metainf.MetaDocPart in project torodb by torodb.
the class BackendServiceImpl method enableIndexJobs.
private Stream<Consumer<DSLContext>> enableIndexJobs(MetaDatabase db, MetaCollection col) {
List<Consumer<DSLContext>> consumerList = new ArrayList<>();
Iterator<? extends MetaDocPart> docPartIterator = col.streamContainedMetaDocParts().iterator();
while (docPartIterator.hasNext()) {
MetaDocPart docPart = docPartIterator.next();
Iterator<? extends MetaIdentifiedDocPartIndex> docPartIndexIterator = docPart.streamIndexes().iterator();
while (docPartIndexIterator.hasNext()) {
MetaIdentifiedDocPartIndex docPartIndex = docPartIndexIterator.next();
consumerList.add(createIndexJob(db, docPart, docPartIndex));
}
}
return consumerList.stream();
}
use of com.torodb.core.transaction.metainf.MetaDocPart in project torodb by torodb.
the class PostgreSqlWriteInterface method copyInsertDocPartData.
private void copyInsertDocPartData(PGConnection connection, String schemaName, DocPartData docPartData) throws SQLException, IOException {
final int maxBatchSize = 1024;
final CopyManager copyManager = connection.getCopyAPI();
final MetaDocPart metaDocPart = docPartData.getMetaDocPart();
Collection<InternalField<?>> internalFields = postgreSqlMetaDataReadInterface.getInternalFields(metaDocPart);
final StringBuilder sb = new StringBuilder(65536);
final String copyStatement = getCopyInsertDocPartDataStatement(schemaName, docPartData, metaDocPart, internalFields);
Iterator<DocPartRow> docPartRowIterator = docPartData.iterator();
int docCounter = 0;
while (docPartRowIterator.hasNext()) {
DocPartRow tableRow = docPartRowIterator.next();
docCounter++;
addValuesToCopy(sb, tableRow, internalFields);
assert sb.length() != 0;
if (docCounter % maxBatchSize == 0 || !docPartRowIterator.hasNext()) {
executeCopy(copyManager, copyStatement, sb);
sb.setLength(0);
}
}
}
use of com.torodb.core.transaction.metainf.MetaDocPart in project torodb by torodb.
the class SqlTorodTransaction method findByAttRefIn.
@Override
public TorodCursor findByAttRefIn(String dbName, String colName, AttributeReference attRef, Collection<KvValue<?>> values) {
MetaDatabase db = getInternalTransaction().getMetaSnapshot().getMetaDatabaseByName(dbName);
if (db == null) {
LOGGER.trace("Db with name " + dbName + " does not exist. An empty cursor is returned");
return new EmptyTorodCursor();
}
MetaCollection col = db.getMetaCollectionByName(colName);
if (col == null) {
LOGGER.trace("Collection " + dbName + '.' + colName + " does not exist. An empty cursor is returned");
return new EmptyTorodCursor();
}
if (values.isEmpty()) {
LOGGER.trace("An empty list of values have been given as in condition. An empty cursor is returned");
return new EmptyTorodCursor();
}
TableRef ref = extractTableRef(attRef);
String lastKey = extractKeyName(attRef.getKeys().get(attRef.getKeys().size() - 1));
MetaDocPart docPart = col.getMetaDocPartByTableRef(ref);
if (docPart == null) {
LOGGER.trace("DocPart " + dbName + '.' + colName + '.' + ref + " does not exist. An empty cursor is returned");
return new EmptyTorodCursor();
}
Multimap<MetaField, KvValue<?>> valuesMap = ArrayListMultimap.create();
for (KvValue<?> value : values) {
MetaField field = docPart.getMetaFieldByNameAndType(lastKey, FieldType.from(value.getType()));
if (field != null) {
valuesMap.put(field, value);
}
}
return toToroCursor(getInternalTransaction().getBackendTransaction().findByFieldIn(db, col, docPart, valuesMap));
}
use of com.torodb.core.transaction.metainf.MetaDocPart in project torodb by torodb.
the class SqlTorodTransaction method findByAttRefInProjection.
@Override
public Cursor<Tuple2<Integer, KvValue<?>>> findByAttRefInProjection(String dbName, String colName, AttributeReference attRef, Collection<KvValue<?>> values) {
MetaDatabase db = getInternalTransaction().getMetaSnapshot().getMetaDatabaseByName(dbName);
if (db == null) {
LOGGER.trace("Db with name " + dbName + " does not exist. An empty cursor is returned");
return new EmptyCursor<>();
}
MetaCollection col = db.getMetaCollectionByName(colName);
if (col == null) {
LOGGER.trace("Collection " + dbName + '.' + colName + " does not exist. An empty cursor is returned");
return new EmptyCursor<>();
}
if (values.isEmpty()) {
LOGGER.trace("An empty list of values have been given as in condition. An empty cursor is returned");
return new EmptyCursor<>();
}
TableRef ref = extractTableRef(attRef);
String lastKey = extractKeyName(attRef.getKeys().get(attRef.getKeys().size() - 1));
MetaDocPart docPart = col.getMetaDocPartByTableRef(ref);
if (docPart == null) {
LOGGER.trace("DocPart " + dbName + '.' + colName + '.' + ref + " does not exist. An empty cursor is returned");
return new EmptyCursor<>();
}
Multimap<MetaField, KvValue<?>> valuesMap = ArrayListMultimap.create();
for (KvValue<?> value : values) {
MetaField field = docPart.getMetaFieldByNameAndType(lastKey, FieldType.from(value.getType()));
if (field != null) {
valuesMap.put(field, value);
}
}
return getInternalTransaction().getBackendTransaction().findByFieldInProjection(db, col, docPart, valuesMap);
}
use of com.torodb.core.transaction.metainf.MetaDocPart in project torodb by torodb.
the class SqlWriteTorodTransaction method deleteByAttRef.
@Override
public long deleteByAttRef(String dbName, String colName, AttributeReference attRef, KvValue<?> value) {
MetaDatabase db = getInternalTransaction().getMetaSnapshot().getMetaDatabaseByName(dbName);
if (db == null) {
return 0;
}
MetaCollection col = db.getMetaCollectionByName(colName);
if (col == null) {
return 0;
}
TableRef tableRef = extractTableRef(attRef);
String lastKey = extractKeyName(attRef.getKeys().get(attRef.getKeys().size() - 1));
MetaDocPart docPart = col.getMetaDocPartByTableRef(tableRef);
if (docPart == null) {
return 0;
}
MetaField field = docPart.getMetaFieldByNameAndType(lastKey, FieldType.from(value.getType()));
if (field == null) {
return 0;
}
Collection<Integer> dids = getInternalTransaction().getBackendTransaction().findByField(db, col, docPart, field, value).asDidCursor().getRemaining();
getInternalTransaction().getBackendTransaction().deleteDids(db, col, dids);
return dids.size();
}
Aggregations