/** * 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(); }
IndexNotFoundException { if (indexDef.getFields().size() == 0) { throw new IllegalArgumentException("An IndexDefinition should contain at least one field.");
@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 }
final List<Object> fromKeyComponents = new ArrayList<Object>(definition.getFields().size()); byte[] fromKey = null; byte[] toKey = null; for (; definedFieldsIndex < definition.getFields().size(); definedFieldsIndex++) { final IndexFieldDefinition fieldDef = definition.getFields().get(definedFieldsIndex); if (definedFieldsIndex < definition.getFields().size() && usedConditionsCount < query.getEqConditions().size() + (rangeCond != null ? 1 : 0)) { StringBuilder message = new StringBuilder(); message.append( "the previous equals condition or followed after a range condition on a field. The fields are: "); for (; definedFieldsIndex < definition.getFields().size(); definedFieldsIndex++) { IndexFieldDefinition fieldDef = definition.getFields().get(definedFieldsIndex); if (query.getCondition(fieldDef.getName()) != null) { message.append(fieldDef.getName());