MapKeyIndex(JsckInfo info, int schemaVersion, MapSchemaField field) { super(info, schemaVersion, field, field.getKeyField(), "map", "key"); }
@Override public Diffs caseMapSchemaField(MapSchemaField field) { return field.differencesFrom((MapSchemaField)thatField); } @Override
@Override void readSubElements(XMLStreamReader reader, int formatVersion) throws XMLStreamException { this.keyField = this.readSubField(reader, formatVersion, MapField.KEY_FIELD_NAME); this.valueField = this.readSubField(reader, formatVersion, MapField.VALUE_FIELD_NAME); this.expectClose(reader); }
private <K, V> MapField<K, V> buildMapField(MapSchemaField field, SimpleField<K> keyField, SimpleField<V> valueField) { return new MapField<>(field.getName(), field.getStorageId(), this.schema, keyField, valueField); } }
@Override public Void caseMapSchemaField(MapSchemaField field) { field.getKeyField().visit(this); field.getValueField().visit(this); return null; } @Override
@Override MapSchemaField toSchemaItem(JSimpleDB jdb) { final MapSchemaField schemaField = new MapSchemaField(); super.initialize(jdb, schemaField); schemaField.setKeyField(this.keyField.toSchemaItem(jdb)); schemaField.setValueField(this.valueField.toSchemaItem(jdb)); return schemaField; }
MapValueIndex(JsckInfo info, int schemaVersion, MapSchemaField field) { super(info, schemaVersion, field, field.getValueField(), "map", "value"); this.keyType = this.info.findFieldType(schemaVersion, field.getKeyField()).genericizeForIndex(); }
@Override public MapField<?, ?> caseMapSchemaField(MapSchemaField field) { return this.buildMapField(field, (SimpleField<?>)field.getKeyField().visit(this), (SimpleField<?>)field.getValueField().visit(this)); }
@Override public Void caseMapSchemaField(MapSchemaField field) { if (field.getKeyField().isIndexed()) JsckInfo.this.addStorage(schemaVersion, new MapKeyIndex(JsckInfo.this, schemaVersion, field)); if (field.getValueField().isIndexed()) JsckInfo.this.addStorage(schemaVersion, new MapValueIndex(JsckInfo.this, schemaVersion, field)); return null; }
private void checkMapField(JsckInfo info, ObjId id, MapSchemaField field, byte[] prefix, PeekingIterator<KVPair> i) { // Get key and value fields final SimpleSchemaField keyField = field.getKeyField(); final SimpleSchemaField valField = field.getValueField(); // Iterate over set elements while (i.hasNext() && ByteUtil.isPrefixOf(prefix, i.peek().getKey())) { final KVPair pair = i.next(); // Verify encoded key final ByteReader keyReader = new ByteReader(pair.getKey(), prefix.length); if (!this.validateSimpleFieldValue(info, id, keyField, pair, keyReader)) continue; // Verify encoded value final ByteReader valReader = new ByteReader(pair.getValue()); if (!this.validateSimpleFieldValue(info, id, valField, pair, valReader)) continue; // Verify index entries if (keyField.isIndexed()) this.verifySimpleIndexEntry(info, id, keyField, field, keyReader.getBytes(prefix.length), ByteUtil.EMPTY); if (valField.isIndexed()) this.verifySimpleIndexEntry(info, id, valField, field, pair.getValue(), keyReader.getBytes(prefix.length)); } }