Search in sources :

Example 1 with ByteArrayHashIndex

use of org.pentaho.di.core.hash.ByteArrayHashIndex in project pentaho-kettle by pentaho.

the class StreamLookup method addToCache.

private void addToCache(RowMetaInterface keyMeta, Object[] keyData, RowMetaInterface valueMeta, Object[] valueData) throws KettleValueException {
    if (meta.isMemoryPreservationActive()) {
        if (meta.isUsingSortedList()) {
            KeyValue keyValue = new KeyValue(keyData, valueData);
            int idx = Collections.binarySearch(data.list, keyValue, data.comparator);
            if (idx < 0) {
                // this is the insertion point
                int index = -idx - 1;
                // insert to keep sorted.
                data.list.add(index, keyValue);
            } else {
                // Overwrite to simulate Hashtable behaviour
                data.list.set(idx, keyValue);
            }
        } else {
            if (meta.isUsingIntegerPair()) {
                if (!data.metadataVerifiedIntegerPair) {
                    data.metadataVerifiedIntegerPair = true;
                    if (keyMeta.size() != 1 || valueMeta.size() != 1 || !keyMeta.getValueMeta(0).isInteger() || !valueMeta.getValueMeta(0).isInteger()) {
                        throw new KettleValueException(BaseMessages.getString(PKG, "StreamLookup.Exception.CanNotUseIntegerPairAlgorithm"));
                    }
                }
                Long key = keyMeta.getInteger(keyData, 0);
                Long value = valueMeta.getInteger(valueData, 0);
                data.longIndex.put(key, value);
            } else {
                if (data.hashIndex == null) {
                    data.hashIndex = new ByteArrayHashIndex(keyMeta);
                }
                data.hashIndex.put(RowMeta.extractData(keyMeta, keyData), RowMeta.extractData(valueMeta, valueData));
            }
        }
    } else {
        // We can't just put Object[] in the map The compare function is not in it.
        // We need to wrap in and use that. Let's use RowMetaAndData for this one.
        data.look.put(new RowMetaAndData(keyMeta, keyData), valueData);
    }
}
Also used : ByteArrayHashIndex(org.pentaho.di.core.hash.ByteArrayHashIndex) RowMetaAndData(org.pentaho.di.core.RowMetaAndData) KettleValueException(org.pentaho.di.core.exception.KettleValueException)

Aggregations

RowMetaAndData (org.pentaho.di.core.RowMetaAndData)1 KettleValueException (org.pentaho.di.core.exception.KettleValueException)1 ByteArrayHashIndex (org.pentaho.di.core.hash.ByteArrayHashIndex)1