public VariableLengthByteIndexFieldDefinition addVariableLengthByteField(String name, int fixedPrefixLength) { validateName(name); final VariableLengthByteIndexFieldDefinition definition = new VariableLengthByteIndexFieldDefinition(name, fixedPrefixLength); add(definition); return definition; }
public FloatIndexFieldDefinition addFloatField(String name) { validateName(name); FloatIndexFieldDefinition definition = new FloatIndexFieldDefinition(name); add(definition); return definition; }
public LongIndexFieldDefinition addLongField(String name) { validateName(name); LongIndexFieldDefinition definition = new LongIndexFieldDefinition(name); add(definition); return definition; }
private IndexEntry createBackwardIndexEntry(SchemaId vtag, AbsoluteRecordId target, SchemaId sourceField) { IndexEntry entry = new IndexEntry(backwardIndex.getDefinition()); entry.addField("vtag", vtag.getBytes()); entry.addField("target", target.toBytes()); entry.addField("sourcefield", sourceField.getBytes()); entry.addData(SOURCE_FIELD_KEY, sourceField.getBytes()); return entry; }
/** * Validates that all fields used in the query actually exist in the index definition. * * TODO: shouldn't we also validate that the requested sort order corresponds with the indexed order etc? * * @param query query to validate */ private void validateQuery(Query query) { for (Query.EqualsCondition eqCond : query.getEqConditions()) { if (definition.getField(eqCond.getName()) == null) { throw new MalformedQueryException( String.format("The query refers to a field which does not exist in this index: %1$s", eqCond.getName())); } } if (query.getRangeCondition() != null && definition.getField(query.getRangeCondition().getName()) == null) { throw new MalformedQueryException( String.format("The query refers to a field which does not exist in this index: %1$s", query.getRangeCondition().getName())); } }
public DecimalIndexFieldDefinition addDecimalField(String name) { validateName(name); DecimalIndexFieldDefinition definition = new DecimalIndexFieldDefinition(name); add(definition); return definition; }
public ByteIndexFieldDefinition addByteField(String name, int lengthInBytes) { validateName(name); ByteIndexFieldDefinition definition = new ByteIndexFieldDefinition(name, lengthInBytes); add(definition); return definition; }
public StringIndexFieldDefinition addStringField(String name) { validateName(name); StringIndexFieldDefinition definition = new StringIndexFieldDefinition(name); add(definition); return definition; }
public IntegerIndexFieldDefinition addIntegerField(String name) { validateName(name); IntegerIndexFieldDefinition definition = new IntegerIndexFieldDefinition(name); add(definition); return definition; }
/** * Build the index row key. * * <p>The format is as follows: * * <pre> * ([encoded value][terminator for variable length fields])*[identifier] * </pre> */ private byte[] buildRowKey(IndexEntry entry) throws IOException { final StructRowKey indexEntryRowKeySerializer = definition.asStructRowKey(); return indexEntryRowKeySerializer.serialize(entry.getFieldValuesInSerializationOrder()); }
public void validate() { if (identifier == null) { throw new MalformedIndexEntryException("Index entry does not specify an identifier."); } } }
public void setIdentifierOrder(Order identifierOrder) { Preconditions.checkNotNull(identifierOrder, "Null argument: identifierOrder"); this.identifierIndexFieldDefinition = new VariableLengthByteIndexFieldDefinition("identifier"); this.identifierIndexFieldDefinition.setOrder(identifierOrder); }
@Override public Object getIndexField(String fieldName) throws IOException { if (currentResult != null) { return decodeIndexFieldFrom(fieldName, currentResult.getRow()); } else if (currentQResult != null) { return currentQResult.getIndexField(fieldName); } else { throw new RuntimeException("QueryResult.getIndexField() is being called but there is no current result."); } }
/** * Adds an entry to this index. See {@link IndexEntry} for more information. * * @param entry the values to be part of the index key, should correspond to the fields * defined in the {@link IndexDefinition} */ public void addEntry(IndexEntry entry) throws IOException { ArgumentValidator.notNull(entry, "entry"); entry.validate(); Put put = createAddEntryPut(entry); htable.put(put); }
/** * Sets the range condition to search on the given field for >= fromValue and * <= toValue. To use exclusive bounds, see the other setRangeCondition method. */ public void setRangeCondition(String fieldName, Object fromValue, Object toValue) { rangeCondition = new RangeCondition(fieldName, fromValue, toValue, true, true); }
private IndexEntry createForwardIndexEntry(SchemaId vtag, AbsoluteRecordId source, SchemaId sourceField) { IndexEntry entry = new IndexEntry(forwardIndex.getDefinition()); entry.addField("vtag", vtag.getBytes()); entry.addField("source", source.toBytes()); entry.addField("sourcefield", sourceField.getBytes()); entry.addData(SOURCE_FIELD_KEY, sourceField.getBytes()); entry.addData(VTAG_KEY, vtag.getBytes()); return entry; }
public VariableLengthByteIndexFieldDefinition addVariableLengthByteField(String name) { validateName(name); final VariableLengthByteIndexFieldDefinition definition = new VariableLengthByteIndexFieldDefinition(name); add(definition); return definition; }
@Override public void close() throws IOException { queryResult.close(); }