private void mergeKeys(Key mergeInto, Key mergeFrom, KeyNameMapper sourceNameMapper, KeyNameMapper targetNameMapper) { Set<String> sourceFields = sourceNameMapper.getFieldSet(); sourceFields.removeAll(targetNameMapper.getFieldSet()); if(!sourceFields.isEmpty()) { for(String sourceField : sourceFields) { targetNameMapper.addMappedField(sourceField); mergeInto.addKey(targetNameMapper, sourceField, mergeFrom); } } } }
private MultiKeyloader createMultiKeyLoader(List<IndexField> fields, KeyNameMapper mapper) throws JasDBStorageException { KeyFactory[] keyFactories = new KeyFactory[fields.size()]; for(int i=0; i<fields.size(); i++) { IndexField field = fields.get(i); keyFactories[i] = KeyFactoryManager.createKeyFactory(field.getField(), field.getKeyType()); mapper.addMappedField(field.getField()); } return new MultiKeyLoaderImpl(mapper, keyFactories); }
public KeyInfoImpl(String headerDescriptor, String valueDescriptor) throws JasDBStorageException { KeyFactory[] keyFactories = KeyFactoryManager.parseHeader(headerDescriptor); if(keyFactories.length == 1) { this.keyFactory = keyFactories[0]; LOG.debug("Loaded key index for field: {} and factory: {}", keyFactory.getFieldName(), keyFactory); this.fields = new LinkedList<>(); this.valueFields = new LinkedList<>(); if(this.keyFactory instanceof CompositeKeyFactory) { MultiKeyloader multiKeyloader = ((CompositeKeyFactory)keyFactory).getMultiKeyloader(); this.fields.addAll(multiKeyloader.getFields()); this.keyNameMapper = multiKeyloader.getKeyNameMapper(); this.keyNameMapper.setValueMarker(multiKeyloader.getFields().size()); } else { this.fields.add(keyFactory.getFieldName()); this.keyNameMapper = new KeyNameMapperImpl(); this.keyNameMapper.setValueMarker(0); } KeyFactory[] valueFactories = KeyFactoryManager.parseHeader(valueDescriptor); for(int i=0; i<valueFactories.length; i++) { String fieldName = valueFactories[i].getFieldName(); keyNameMapper.addMappedField(fieldName); valueFields.add(fieldName); } this.multiValueKeyLoader = new MultiKeyLoaderImpl(keyNameMapper, valueFactories); this.wrapperKeyFactory = new WrappedValueKeyFactory(keyFactory, multiValueKeyLoader); } else { throw new JasDBStorageException("Unexpected key information in headers"); } }
private IndexSearchResultIterator ensureSortingParams(IndexSearchResultIterator results, Set<String> requiredFields) throws JasDBStorageException { if(!requiredFields.isEmpty()) { KeyNameMapper keyNameMapper = results.getKeyNameMapper(); for(Key key : results) { UUIDKey documentKey = KeyUtil.getDocumentKey(results.getKeyNameMapper(), key); RecordResult recordResult = recordWriter.readRecord(documentKey); Entity entity = SimpleEntity.fromStream(recordResult.getStream()); for(String requiredField : requiredFields) { Property property = entity.getProperty(requiredField); if(property != null) { Key propertyKey = PropertyKeyMapper.mapToKey(property); keyNameMapper.addMappedField(requiredField); key.addKey(keyNameMapper, requiredField, propertyKey); } } } results.reset(); } return results; }