CompositeIndex(JsckInfo info, int schemaVersion, SchemaObjectType objectType, SchemaCompositeIndex index) { super(info, index.getStorageId()); this.fieldStorageIds = index.getIndexedFields().stream().mapToInt(Integer::intValue).toArray(); this.fieldTypes = new FieldType<?>[this.fieldStorageIds.length]; for (int i = 0; i < this.fieldTypes.length; i++) { final SimpleSchemaField field = (SimpleSchemaField)objectType.getSchemaFields().get(fieldStorageIds[i]); this.fieldTypes[i] = this.info.findFieldType(schemaVersion, field).genericizeForIndex(); } }
for (SchemaField field : type.getSchemaFields().values()) { if (fieldMap.put(field.getName(), field) != null) throw new IllegalArgumentException("schema model is invalid");
@Override SchemaObjectType toSchemaItem(JSimpleDB jdb) { final SchemaObjectType schemaObjectType = new SchemaObjectType(); this.initialize(jdb, schemaObjectType); for (JField field : this.jfields.values()) { final SchemaField schemaField = field.toSchemaItem(jdb); schemaObjectType.getSchemaFields().put(schemaField.getStorageId(), schemaField); } for (JCompositeIndex index : this.jcompositeIndexes.values()) { final SchemaCompositeIndex schemaIndex = index.toSchemaItem(jdb); schemaObjectType.getSchemaCompositeIndexes().put(index.getStorageId(), schemaIndex); } return schemaObjectType; }
for (SchemaField field : objType.getSchemaFields().values()) { field.visit(new SchemaFieldSwitchAdapter<Void>() { @Override for (SchemaField field : objType.getSchemaFields().values()) { field.visit(new SchemaFieldSwitchAdapter<Void>() { @Override
private void doValidate() { // Validate object types and verify object type names are unique final TreeMap<String, SchemaObjectType> schemaObjectTypesByName = new TreeMap<>(); for (SchemaObjectType schemaObjectType : this.schemaObjectTypes.values()) { schemaObjectType.validate(); final String schemaObjectTypeName = schemaObjectType.getName(); final SchemaObjectType otherSchemaObjectType = schemaObjectTypesByName.put(schemaObjectTypeName, schemaObjectType); if (otherSchemaObjectType != null) throw new InvalidSchemaException("duplicate object name `" + schemaObjectTypeName + "'"); } // Collect all field storage ID's final TreeMap<Integer, AbstractSchemaItem> globalItemsByStorageId = new TreeMap<>(); for (SchemaObjectType schemaObjectType : this.schemaObjectTypes.values()) { for (SchemaField field : schemaObjectType.getSchemaFields().values()) { globalItemsByStorageId.put(field.getStorageId(), field); if (field instanceof ComplexSchemaField) { final ComplexSchemaField complexField = (ComplexSchemaField)field; for (SimpleSchemaField subField : complexField.getSubFields().values()) globalItemsByStorageId.put(subField.getStorageId(), subField); } } } // Verify object type, field, and index storage ID's are non-overlapping for (SchemaObjectType schemaObjectType : this.schemaObjectTypes.values()) { SchemaModel.verifyUniqueStorageId(globalItemsByStorageId, schemaObjectType); for (SchemaCompositeIndex index : schemaObjectType.getSchemaCompositeIndexes().values()) SchemaModel.verifyUniqueStorageId(globalItemsByStorageId, index); } }
for (SchemaField schemaField : schemaObjectType.getSchemaFields().values()) this.addSchemaItem(fields, fieldsByName, schemaField.visit(fieldBuilder));
for (SchemaField field : objectType.getSchemaFields().values()) { field.visit(new SchemaFieldSwitchAdapter<Void>() {
final SchemaField field = objType.getSchemaFields().get(storageId); if (field == null) { info.handle(new InvalidKey(pair).setDetail(id, "invalid field storage ID "