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 Void caseMapSchemaField(MapSchemaField field) { field.getKeyField().visit(this); field.getValueField().visit(this); return null; } @Override
@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)); } }