Package com.inadco.hbl.api

Examples of com.inadco.hbl.api.Range


         * By default, we support [all] range of a dimension by a key with level
         * = 0. (all 0s in all positions, which means dimension cannot really
         * have all-zero keys as a valid value).
         */
        byte[] allKey = new byte[getKeyLen()];
        Range r = new Range(allKey, true);
        // marker for the 'all' key:
        r.setLevelLen(0);
        r.setLevelOffset(0);
        return r;
    }
View Full Code Here


            byte[] leftInnerClosedKey = getLeftClosedScanKey(leftKeyOpen, thisSubkeyLen);
            byte[] rightInnerClosedKey = getRightClosedScanKey(rightKeyOpen, thisSubkeyLen);

            if (Bytes.compareTo(leftInnerClosedKey, 0, thisSubkeyLen, rightInnerClosedKey, 0, thisSubkeyLen) > 0) {

                Range r = new Range(leftKey, rightKey, true);
                r.setKeyLen(keylen);
                r.setLevelOffset(thisSubkeyLen);
                r.setLevelLen(getSubkeyLen(i + 1) - thisSubkeyLen);

                // TODO: this is wrong in general case, adjust
                r.setLeftOpen(leftBound == null ? false : slice.isLeftOpen());
                r.setRightOpen(rightBound == null ? false : slice.isRightOpen());

                result[scans++] = r;
                break;
            }

            // test for left gap
            if (!HblUtil.test1s(leftKeyOpen, thisSubkeyLen, keylen - thisSubkeyLen)) {
                // left gap scan
                Range leftGapR = new Range(leftKey, leftInnerClosedKey, true, leftOpen, true);
                leftGapR.setLevelOffset(thisSubkeyLen);
                leftGapR.setLevelLen(subkeylen - thisSubkeyLen);
                leftGapR.setSliceOperation(SliceOperation.ADD);
                result[scans++] = leftGapR;

            }
            // test for right gap
            if (!HblUtil.test0s(rightKeyOpen, thisSubkeyLen, keylen - thisSubkeyLen)) {
                // right gap scan
                byte[] rightStart = rightInnerClosedKey.clone();
                HblUtil.incrementKey(rightStart, 0, thisSubkeyLen);
                Range rightGapR = new Range(rightStart, rightKey, true, true, rightOpen);
                rightGapR.setKeyLen(keylen);
                rightGapR.setLevelOffset(thisSubkeyLen);
                rightGapR.setLevelLen(subkeylen - thisSubkeyLen);
                rightGapR.setSliceOperation(SliceOperation.ADD);
                result[scans++] = rightGapR;
            }

            // more upkeys?

            if (i == 1) {
                // main scan
                Range r = new Range(leftInnerClosedKey, rightInnerClosedKey, true, false, false);
                r.setKeyLen(keylen);
                r.setLevelOffset(0);
                r.setLevelLen(thisSubkeyLen);

                r.setSliceOperation(SliceOperation.ADD);
                result[scans++] = r;
                break;

            } else {
                leftKey = leftInnerClosedKey;
View Full Code Here

        Object rightBound = slice.getRightBound();
        if (rightBound != null)
            getKey(rightBound, rightKey, 0);
        else
            Arrays.fill(rightKey, (byte) 0xff);
        Range r = new Range(leftKey, rightKey, true);
        r.setKeyLen(keylen);
        r.setLevelLen(-1);
        r.setLeftOpen(leftBound == null ? false : slice.isLeftOpen());
        r.setRightOpen(rightBound == null ? false : slice.isRightOpen());
        return new Range[] { r };

    }
View Full Code Here

    @Override
    public Range allRange() {
        int keylen = getKeyLen();
        byte[] leftKey = new byte[keylen], rightKey = new byte[keylen];
        Arrays.fill(rightKey, (byte) 0xff);
        Range r = new Range(leftKey, rightKey, true, false, false);
        r.setLevelLen(-1);
        return r;
    }
View Full Code Here

    @Override
    public void readFields(DataInput in) throws IOException {
        int keyNum = HblUtil.readVarUint32(in);
        pathRange = new Range[keyNum];
        for (int i = 0; i < keyNum; i++) {
            Range r = new Range();
            r.readFields(in);
            pathRange[i] = r;
        }
        initTransients();
    }
View Full Code Here

    public boolean filterRowKey(final byte[] buffer, final int rowKeyOffset, final int rowLength) {
        rowsSeen++;

        for (int i = 0; i < pathRange.length; i++) {
            int keyLen, keyOffset;
            Range r = pathRange[i];

            int comp =
                Bytes.BYTES_RAWCOMPARATOR.compare(buffer,
                                                  keyOffset = rowKeyOffset + keyOffsets[i],
                                                  keyLen = r.getKeyLen(),
                                                  r.getLeftBound(),
                                                  0,
                                                  keyLen);
            if (comp < 0 || comp == 0 && pathRange[i].isLeftOpen()) {
                /*
                 * if we are at rightmost key, doesn't make sense to reseek,
                 * just skip, as we know next hint would be next row.
                 */
                if (comp == 0 && i == pathRange.length - 1)
                    return true;

                if (setHint2LowerBound(i, buffer, rowKeyOffset, rowLength, false))
                    return true;

                /*
                 * if we are exactly at the left-open border already: increment
                 */

                nextKeyCode = ReturnCode.SEEK_NEXT_USING_HINT;
                return false;
            }
            comp = Bytes.BYTES_RAWCOMPARATOR.compare(buffer, keyOffset, keyLen, r.getRightBound(), 0, keyLen);
            if (comp > 0 || comp == 0 && r.isRightOpen()) {
                if (setHint2LowerBound(i, buffer, rowKeyOffset, rowLength, true))
                    return true;
                nextKeyCode = ReturnCode.SEEK_NEXT_USING_HINT;
                return false;
            }

            /*
             * hierarchy stuff
             */

            if (r.getLevelLen() >= 0) {

                /*
                 * level is greater than ours, we need to skip to the next slice
                 * at our level -- if this a hierarchical key
                 */
 
View Full Code Here

        Dimension dim = dimensions.get(dimIndex);
        List<Slice> slices = dimSlices.get(dim.getName());
        if (slices == null) {

            // generate 'total' slice
            Range allRange = dim.allRange();

            if (partialSpec.size() == dimIndex)
                partialSpec.add(allRange);
            else
                partialSpec.set(dimIndex, allRange);
View Full Code Here

        int keyOffset = keyOffsets[dimIndex];

        if (nextKeyHint == null)
            nextKeyHint = new byte[compositeKeyLen];

        Range r = pathRange[dimIndex];
        int subkeylen = r.getSubkeyLen();
        int keylen = r.getKeyLen();

        System.arraycopy(compositeKey, compositeKeyOffset, nextKeyHint, 0, keyOffset + subkeylen);
        HblUtil.incrementKey(nextKeyHint, keyOffset, subkeylen);
        Arrays.fill(nextKeyHint, keyOffset + subkeylen, keyOffset + keylen, (byte) 0);
        adjustHint2LowerBound(dimIndex + 1);
View Full Code Here

    /**
     * test whether current key's hierarchy level is greater than spec'd in
     * range path
     */
    private boolean testLevelGreater(int dimIndex, byte[] compositeKey, int compositeKeyOffset) {
        Range r = pathRange[dimIndex];
        int keylen = r.getKeyLen();
        int nextLevelOffset = r.getLevelOffset() + r.getLevelLen();
        if (nextLevelOffset >= keylen)
            return false;

        int keyOffset = keyOffsets[dimIndex] + compositeKeyOffset;

View Full Code Here

     * @param compositeKey
     * @param compositeKeyOffset
     * @return
     */
    private boolean testLevelLess(int dimIndex, byte[] compositeKey, int compositeKeyOffset) {
        Range r = pathRange[dimIndex];
        if (r.getLevelLen() == 0)
            return false; // smallest level already

        int keyOffset = keyOffsets[dimIndex] + compositeKeyOffset;

        return HblUtil.test0s(compositeKey, keyOffset + r.getLevelOffset(), r.getLevelLen());
    }
View Full Code Here

TOP

Related Classes of com.inadco.hbl.api.Range

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.