/** * Get the position of a given field in the index definition. * * @param fieldName name of the field to look for * @return position in the index, or -1 if the field is not part of the index */ public int getFieldPosition(String fieldName) { int pos = 0; for (IndexFieldDefinition field : fields) { if (field.getName().equals(fieldName)) { return pos; } pos++; } return -1; }
private void refreshFieldsByName() { this.fieldsByName.clear(); for (IndexFieldDefinition field : fields) { fieldsByName.put(field.getName(), field); } }
private IndexFieldDefinition add(IndexFieldDefinition fieldDef) { fields.add(fieldDef); fieldsByName.put(fieldDef.getName(), fieldDef); return fieldDef; }
/** * Get the values to be serialized into a byte array, in index definition order. Missing fields are inserted as * null values. * * @return the values to be serialized into a byte array */ Object[] getFieldValuesInSerializationOrder() { final List<Object> values = new ArrayList<Object>(definition.getFields().size() + 1); for (IndexFieldDefinition indexFieldDefinition : definition.getFields()) { final Object fieldValueOrNull = fields.get(indexFieldDefinition.getName()); values.add(fieldValueOrNull); } values.add(identifier); return values.toArray(); }
private void checkQueryValueType(IndexFieldDefinition fieldDef, Object value) { if (value != null) { final RowKey rowKey = fieldDef.asRowKey(); if (!rowKey.getDeserializedClass().isAssignableFrom(value.getClass())) { throw new MalformedQueryException("query for field " + fieldDef.getName() + " contains" + " a value of an incorrect type. Expected: " + rowKey.getDeserializedClass() + ", found: " + value.getClass().getName()); } } }
@Override public boolean filterRowKey(byte[] buffer, int offset, int length) { final StructRowKey structRowKey = indexDefinition.asStructRowKey(); structRowKey.iterateOver(buffer, offset); final StructIterator fieldsIterator = structRowKey.iterator(); final List<IndexFieldDefinition> fieldDefinitions = indexDefinition.getFields(); // for all defined field definitions for (IndexFieldDefinition field : fieldDefinitions) { // check if the field should be filtered if (indexFilter.getFields().contains(field.getName())) { final Object nextField = fieldsIterator.next(); if (indexFilter.filterField(field.getName(), nextField)) { return true; // this result is ignored } } else { try { fieldsIterator.skip(); } catch (IOException e) { throw new RuntimeException("failed to skip, index inconsistency?", e); } } } return false; // nothing was skipped }
public ObjectNode toJson() { JsonNodeFactory factory = JsonNodeFactory.instance; ObjectNode object = factory.objectNode(); ObjectNode fieldsJson = object.putObject("fields"); for (IndexFieldDefinition field : fields) { fieldsJson.put(field.getName(), field.toJson()); } object.put("identifierOrder", this.identifierIndexFieldDefinition.getOrder().toString()); return object; }
final IndexFieldDefinition fieldDef = definition.getFields().get(definedFieldsIndex); final Query.EqualsCondition eqCond = query.getCondition(fieldDef.getName()); if (eqCond != null) { } else if (rangeCond != null) { if (!rangeCond.getName().equals(fieldDef.getName())) { throw new MalformedQueryException("Query defines range condition on field " + rangeCond.getName() + " but has no equals condition on field " + fieldDef.getName() + " which comes earlier in the index definition."); for (; definedFieldsIndex < definition.getFields().size(); definedFieldsIndex++) { IndexFieldDefinition fieldDef = definition.getFields().get(definedFieldsIndex); if (query.getCondition(fieldDef.getName()) != null) { message.append(fieldDef.getName()); } else if (rangeCond != null && rangeCond.getName().equals(fieldDef.getName())) { message.append(fieldDef.getName());