Package org.apache.phoenix.schema.tuple

Examples of org.apache.phoenix.schema.tuple.MultiKeyValueTuple


            @Override
            public boolean next(List<KeyValue> results) throws IOException {
                boolean hasMore;
                boolean atLimit;
                boolean aggBoundary = false;
                MultiKeyValueTuple result = new MultiKeyValueTuple();
                ImmutableBytesWritable key = null;
                Aggregator[] rowAggregators = aggregators.getAggregators();
                // If we're calculating no aggregate functions, we can exit at the
                // start of a new row. Otherwise, we have to wait until an agg
                int countOffset = rowAggregators.length == 0 ? 1 : 0;
                HRegion region = c.getEnvironment().getRegion();
                MultiVersionConsistencyControl.setThreadReadPoint(s.getMvccReadPoint());
                region.startRegionOperation();
                try {
                    do {
                        List<KeyValue> kvs = new ArrayList<KeyValue>();
                        // Results are potentially returned even when the return
                        // value of s.next is false
                        // since this is an indication of whether or not there
                        // are more values after the
                        // ones returned
                        hasMore = s.nextRaw(kvs, null);
                        if (!kvs.isEmpty()) {
                            result.setKeyValues(kvs);
                            key = TupleUtil.getConcatenatedValue(result, expressions);
                            aggBoundary = currentKey != null && currentKey.compareTo(key) != 0;
                            if (!aggBoundary) {
                                aggregators.aggregate(rowAggregators, result);
                                if (logger.isDebugEnabled()) {
View Full Code Here


                }
            }

            private void replaceArrayIndexElement(final List<KeyValueColumnExpression> arrayKVRefs,
                    final Expression[] arrayFuncRefs, List<KeyValue> result) {
                MultiKeyValueTuple tuple = new MultiKeyValueTuple(result);
                // The size of both the arrays would be same?
                // Using KeyValueSchema to set and retrieve the value
                // collect the first kv to get the row
                KeyValue rowKv = result.get(0);
                for (int i = 0; i < arrayKVRefs.size(); i++) {
                    KeyValueColumnExpression kvExp = arrayKVRefs.get(i);
                    if (kvExp.evaluate(tuple, ptr)) {
                        for (int idx = tuple.size() - 1; idx >= 0; idx--) {
                            KeyValue kv = tuple.getValue(idx);
                            if (Bytes.equals(kvExp.getColumnFamily(), kv.getFamily())
                                    && Bytes.equals(kvExp.getColumnName(), kv.getQualifier())) {
                                // remove the kv that has the full array values.
                                result.remove(idx);
                                break;
View Full Code Here

            if (!hasMore && results.isEmpty()) {
                return null;
            }
            // We instantiate a new tuple because in all cases currently we hang on to it (i.e.
            // to compute and hold onto the TopN).
            MultiKeyValueTuple tuple = new MultiKeyValueTuple();
            tuple.setKeyValues(results);
            return tuple;
        } catch (IOException e) {
            throw ServerUtil.parseServerException(e);
        }
    }
View Full Code Here

                }
            }

            private void replaceArrayIndexElement(final List<KeyValueColumnExpression> arrayKVRefs,
                    final Expression[] arrayFuncRefs, List<Cell> result) {
                MultiKeyValueTuple tuple = new MultiKeyValueTuple(result);
                // The size of both the arrays would be same?
                // Using KeyValueSchema to set and retrieve the value
                // collect the first kv to get the row
                Cell rowKv = result.get(0);
                for (int i = 0; i < arrayKVRefs.size(); i++) {
                    KeyValueColumnExpression kvExp = arrayKVRefs.get(i);
                    if (kvExp.evaluate(tuple, ptr)) {
                        for (int idx = tuple.size() - 1; idx >= 0; idx--) {
                          Cell kv = tuple.getValue(idx);
                            if (Bytes.equals(kvExp.getColumnFamily(), 0, kvExp.getColumnFamily().length,
                                kv.getFamilyArray(), kv.getFamilyOffset(), kv.getFamilyLength())
                                && Bytes.equals(kvExp.getColumnName(), 0, kvExp.getColumnName().length,
                                    kv.getQualifierArray(), kv.getQualifierOffset(), kv.getQualifierLength())) {
                                // remove the kv that has the full array values.
View Full Code Here

        ImmutableBytesWritable tempPtr = new ImmutableBytesWritable();
        boolean success = false;
        try {
            boolean hasMore;

            MultiKeyValueTuple result = new MultiKeyValueTuple();
            if (logger.isDebugEnabled()) {
                logger.debug("Spillable groupby enabled: " + spillableEnabled);
            }

            HRegion region = c.getEnvironment().getRegion();
            region.startRegionOperation();
            try {
                do {
                    List<Cell> results = new ArrayList<Cell>();
                    // Results are potentially returned even when the return
                    // value of s.next is false
                    // since this is an indication of whether or not there are
                    // more values after the
                    // ones returned
                    hasMore = s.nextRaw(results);
                    if (!results.isEmpty()) {
                        if (localIndexScan) {
                            IndexUtil.wrapResultUsingOffset(results, offset, dataColumns, tupleProjector,
                                dataRegion, indexMaintainers == null ? null : indexMaintainers.get(0),
                                viewConstants, tempPtr);
                        }
                        result.setKeyValues(results);
                        ImmutableBytesWritable key =
                                TupleUtil.getConcatenatedValue(result, expressions);
                        Aggregator[] rowAggregators = groupByCache.cache(key);
                        // Aggregate values here
                        aggregators.aggregate(rowAggregators, result);
View Full Code Here

            @Override
            public boolean next(List<Cell> results) throws IOException {
                boolean hasMore;
                boolean atLimit;
                boolean aggBoundary = false;
                MultiKeyValueTuple result = new MultiKeyValueTuple();
                ImmutableBytesWritable key = null;
                Aggregator[] rowAggregators = aggregators.getAggregators();
                // If we're calculating no aggregate functions, we can exit at the
                // start of a new row. Otherwise, we have to wait until an agg
                int countOffset = rowAggregators.length == 0 ? 1 : 0;
                HRegion region = c.getEnvironment().getRegion();
                region.startRegionOperation();
                try {
                    do {
                        List<Cell> kvs = new ArrayList<Cell>();
                        // Results are potentially returned even when the return
                        // value of s.next is false
                        // since this is an indication of whether or not there
                        // are more values after the
                        // ones returned
                        hasMore = s.nextRaw(kvs);
                        if (!kvs.isEmpty()) {
                            if (localIndexScan) {
                                IndexUtil.wrapResultUsingOffset(kvs, offset, dataColumns, tupleProjector,
                                    dataRegion, indexMaintainers == null ? null : indexMaintainers.get(0),
                                    viewConstants, tempPtr);
                            }
                            result.setKeyValues(kvs);
                            key = TupleUtil.getConcatenatedValue(result, expressions);
                            aggBoundary = currentKey != null && currentKey.compareTo(key) != 0;
                            if (!aggBoundary) {
                                aggregators.aggregate(rowAggregators, result);
                                if (logger.isDebugEnabled()) {
View Full Code Here

        Aggregators aggregators = ServerAggregators.deserialize(
                scan.getAttribute(BaseScannerRegionObserver.AGGREGATORS), c.getEnvironment().getConfiguration());
        Aggregator[] rowAggregators = aggregators.getAggregators();
        boolean hasMore;
        boolean hasAny = false;
        MultiKeyValueTuple result = new MultiKeyValueTuple();
        if (logger.isInfoEnabled()) {
          logger.info("Starting ungrouped coprocessor scan " + scan);
        }
        long rowCount = 0;
        region.startRegionOperation();
        ImmutableBytesWritable tempPtr = new ImmutableBytesWritable();
        try {
            do {
                List<Cell> results = new ArrayList<Cell>();
                // Results are potentially returned even when the return value of s.next is false
                // since this is an indication of whether or not there are more values after the
                // ones returned
                hasMore = innerScanner.nextRaw(results);
               
                if (!results.isEmpty()) {
                    if (localIndexScan && !isDelete) {
                        IndexUtil.wrapResultUsingOffset(results, offset, dataColumns, scanProjector,
                            dataRegion, indexMaintainers == null ? null : indexMaintainers.get(0),
                            viewConstants, tempPtr);
                    }
                    rowCount++;
                    result.setKeyValues(results);
                    try {
                        if (buildLocalIndex) {
                            for (IndexMaintainer maintainer : indexMaintainers) {
                                if (!results.isEmpty()) {
                                    result.getKey(ptr);
                                    ValueGetter valueGetter = maintainer.createGetterFromKeyValues(results);
                                    Put put = maintainer.buildUpdateMutation(kvBuilder, valueGetter, ptr, ts, c.getEnvironment().getRegion().getStartKey(), c.getEnvironment().getRegion().getEndKey());
                                    indexMutations.add(put);
                                }
                            }
                            result.setKeyValues(results);
                        } else if (isDelete) {
                            // FIXME: the version of the Delete constructor without the lock args was introduced
                            // in 0.94.4, thus if we try to use it here we can no longer use the 0.94.2 version
                            // of the client.
                            Cell firstKV = results.get(0);
                            Delete delete = new Delete(firstKV.getRowArray(), firstKV.getRowOffset(),
                                firstKV.getRowLength(),ts);
                            mutations.add(delete);
                        } else if (isUpsert) {
                            Arrays.fill(values, null);
                            int i = 0;
                            List<PColumn> projectedColumns = projectedTable.getColumns();
                            for (; i < projectedTable.getPKColumns().size(); i++) {
                                Expression expression = selectExpressions.get(i);
                                if (expression.evaluate(result, ptr)) {
                                    values[i] = ptr.copyBytes();
                                    // If SortOrder from expression in SELECT doesn't match the
                                    // column being projected into then invert the bits.
                                    if (expression.getSortOrder() != projectedColumns.get(i).getSortOrder()) {
                                        SortOrder.invert(values[i], 0, values[i], 0, values[i].length);
                                    }
                                }
                            }
                            projectedTable.newKey(ptr, values);
                            PRow row = projectedTable.newRow(kvBuilder, ts, ptr);
                            for (; i < projectedColumns.size(); i++) {
                                Expression expression = selectExpressions.get(i);
                                if (expression.evaluate(result, ptr)) {
                                    PColumn column = projectedColumns.get(i);
                                    Object value = expression.getDataType().toObject(ptr, column.getSortOrder());
                                    // We are guaranteed that the two column will have the same type.
                                    if (!column.getDataType().isSizeCompatible(ptr, value, column.getDataType(),
                                            expression.getMaxLength(),  expression.getScale(),
                                            column.getMaxLength(), column.getScale())) {
                                        throw new ValueTypeIncompatibleException(column.getDataType(),
                                                column.getMaxLength(), column.getScale());
                                    }
                                    column.getDataType().coerceBytes(ptr, value, expression.getDataType(),
                                            expression.getMaxLength(), expression.getScale(), expression.getSortOrder(),
                                            column.getMaxLength(), column.getScale(), column.getSortOrder());
                                    byte[] bytes = ByteUtil.copyKeyBytesIfNecessary(ptr);
                                    row.setValue(column, bytes);
                                }
                            }
                            for (Mutation mutation : row.toRowMutations()) {
                                mutations.add(mutation);
                            }
                        } else if (deleteCF != null && deleteCQ != null) {
                            // No need to search for delete column, since we project only it
                            // if no empty key value is being set
                            if (emptyCF == null || result.getValue(deleteCF, deleteCQ) != null) {
                                Delete delete = new Delete(results.get(0).getRowArray(), results.get(0).getRowOffset(),
                                  results.get(0).getRowLength());
                                delete.deleteColumns(deleteCF,  deleteCQ, ts);
                                mutations.add(delete);
                            }
View Full Code Here

        boolean success = false;
        try {
            boolean hasMore;

            MultiKeyValueTuple result = new MultiKeyValueTuple();
            if (logger.isDebugEnabled()) {
                logger.debug("Spillable groupby enabled: " + spillableEnabled);
            }

            HRegion region = c.getEnvironment().getRegion();
            region.startRegionOperation();
            try {
                do {
                    List<Cell> results = new ArrayList<Cell>();
                    // Results are potentially returned even when the return
                    // value of s.next is false
                    // since this is an indication of whether or not there are
                    // more values after the
                    // ones returned
                    hasMore = s.nextRaw(results);
                    if (!results.isEmpty()) {
                        result.setKeyValues(results);
                        ImmutableBytesWritable key =
                                TupleUtil.getConcatenatedValue(result, expressions);
                        Aggregator[] rowAggregators = groupByCache.cache(key);
                        // Aggregate values here
                        aggregators.aggregate(rowAggregators, result);
View Full Code Here

            @Override
            public boolean next(List<Cell> results) throws IOException {
                boolean hasMore;
                boolean atLimit;
                boolean aggBoundary = false;
                MultiKeyValueTuple result = new MultiKeyValueTuple();
                ImmutableBytesWritable key = null;
                Aggregator[] rowAggregators = aggregators.getAggregators();
                // If we're calculating no aggregate functions, we can exit at the
                // start of a new row. Otherwise, we have to wait until an agg
                int countOffset = rowAggregators.length == 0 ? 1 : 0;
                HRegion region = c.getEnvironment().getRegion();
                region.startRegionOperation();
                try {
                    do {
                        List<Cell> kvs = new ArrayList<Cell>();
                        // Results are potentially returned even when the return
                        // value of s.next is false
                        // since this is an indication of whether or not there
                        // are more values after the
                        // ones returned
                        hasMore = s.nextRaw(kvs);
                        if (!kvs.isEmpty()) {
                            result.setKeyValues(kvs);
                            key = TupleUtil.getConcatenatedValue(result, expressions);
                            aggBoundary = currentKey != null && currentKey.compareTo(key) != 0;
                            if (!aggBoundary) {
                                aggregators.aggregate(rowAggregators, result);
                                if (logger.isDebugEnabled()) {
View Full Code Here

                }
            }

            private void replaceArrayIndexElement(final List<KeyValueColumnExpression> arrayKVRefs,
                    final Expression[] arrayFuncRefs, List<Cell> result) {
                MultiKeyValueTuple tuple = new MultiKeyValueTuple(result);
                // The size of both the arrays would be same?
                // Using KeyValueSchema to set and retrieve the value
                // collect the first kv to get the row
                Cell rowKv = result.get(0);
                for (int i = 0; i < arrayKVRefs.size(); i++) {
                    KeyValueColumnExpression kvExp = arrayKVRefs.get(i);
                    if (kvExp.evaluate(tuple, ptr)) {
                        for (int idx = tuple.size() - 1; idx >= 0; idx--) {
                          Cell kv = tuple.getValue(idx);
                            if (Bytes.equals(kvExp.getColumnFamily(), 0, kvExp.getColumnFamily().length,
                                kv.getFamilyArray(), kv.getFamilyOffset(), kv.getFamilyLength())
                                && Bytes.equals(kvExp.getColumnName(), 0, kvExp.getColumnName().length,
                                    kv.getQualifierArray(), kv.getQualifierOffset(), kv.getQualifierLength())) {
                                // remove the kv that has the full array values.
View Full Code Here

TOP

Related Classes of org.apache.phoenix.schema.tuple.MultiKeyValueTuple

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.