@Override public PhoenixArray newArray(PDataType type, Object[] elements) { return new PhoenixArray(type, elements); } };
@Override public List<?> getList(Object data) { if (data == null) { return null; } PhoenixArray array = (PhoenixArray) data; int valueLength = array.getDimensions(); List<Object> valueList = Lists.newArrayListWithExpectedSize(valueLength); for (int i = 0; i < valueLength; i++) { valueList.add(array.getElement(i)); } return valueList; }
protected boolean isPrimitive(PhoenixArray arr) { return arr.isPrimitiveType(); }
public PhoenixArray(PhoenixArray pArr, Integer desiredMaxLength) { this.baseType = pArr.baseType; Object[] elements = (Object[])pArr.array; if (baseType.isFixedWidth()) { if (baseType.getByteSize() == null) { elements = coerceToNewLength(baseType, (Object[])pArr.array, desiredMaxLength); maxLength = desiredMaxLength; } } this.array = convertObjectArrayToPrimitiveArray(elements); this.numElements = elements.length; }
public PhoenixArray(PDataType baseType, Object[] elements) { // As we are dealing with primitive types and only the Boxed objects this.baseType = baseType; if (baseType.isFixedWidth()) { if (baseType.getByteSize() == null) { elements = coerceToEqualLength(baseType, elements); if (elements != null && elements.length > 0) { for(int i = 0; i < elements.length; i++) { if(elements[i] != null) { maxLength = baseType.getMaxLength(elements[i]); break; } } } } } this.array = convertObjectArrayToPrimitiveArray(elements); this.numElements = elements.length; }
if (!pArr.isPrimitiveType()) { pArr = new PhoenixArray(pArr, desiredMaxLength); if (actualType == desiredType && !pArr.isPrimitiveType() && maxLength != null && maxLength != desiredMaxLength) { pArr = new PhoenixArray(pArr, desiredMaxLength); pArr = (PhoenixArray) value; if (!Objects.equal(maxLength, desiredMaxLength)) { pArr = new PhoenixArray(pArr, desiredMaxLength);
@Override public int getListLength(Object data) { if (data == null) { return -1; } PhoenixArray array = (PhoenixArray) data; return array.getDimensions(); }
@Override public Object getListElement(Object data, int index) { if (data == null) { return null; } PhoenixArray array = (PhoenixArray) data; return array.getElement(index); }
int totalNulls = 0; for (int i = 0; i < noOfElements; i++) { totalVarSize += array.estimateByteSize(i); if (!PDataType.fromTypeId((baseType.getSqlType() - PDataType.ARRAY_TYPE_BASE)).isFixedWidth()) { if (array.isNull(i)) { nulls++; } else {
@SuppressWarnings("unchecked") public <T> List<T> toList(PhoenixArray value) { try { if (value.isPrimitiveType()) { return toModifiableList(value); } else { return Arrays.asList((T[]) value.getArray()); } } catch (SQLException e) { throw new IllegalStateException(e); } }
@Override public int compareTo(Object lhs, Object rhs) { if (lhs == rhs) { return 0; } if (lhs == null) { return -1; } if (rhs == null) { return 1; } PhoenixArray lhsArr = (PhoenixArray)lhs; PhoenixArray rhsArr = (PhoenixArray)rhs; if (lhsArr.equals(rhsArr)) { return 0; } return 1; }
public int estimateByteSize(Object o) { if (isFixedWidth()) { return getByteSize(); } if (isArrayType()) { PhoenixArray array = (PhoenixArray)o; int noOfElements = array.numElements; int totalVarSize = 0; for (int i = 0; i < noOfElements; i++) { totalVarSize += array.estimateByteSize(i); } return totalVarSize; } // Non fixed width types must override this throw new UnsupportedOperationException(); }
@Override public Object getArray(long index, int count) throws SQLException { if(index < 1) { throw new IllegalArgumentException("Index cannot be less than 1"); } // Get the set of elements from the given index to the specified count Object[] intArr = (Object[]) array; boundaryCheck(index, count, intArr); Object[] newArr = new Object[count]; // Add checks() here. int i = 0; for (int j = (int) index; j < count; j++) { newArr[i] = intArr[j]; i++; } return newArr; }
private static Object[] coerceToEqualLength(PDataType baseType, Object[] elements) { if (elements == null || elements.length == 0) { return elements; } int maxLength = 0; boolean resizeElements = false; for (int i = 0; i < elements.length; i++) { Integer length = baseType.getMaxLength(elements[i]); if (length != null) { if (maxLength == 0){ maxLength = length; continue; } if (length > maxLength) { maxLength = length; resizeElements = true; } else if (length < maxLength) { resizeElements = true; } } else { resizeElements = true; } } if (!resizeElements) { return elements; } return coerceToNewLength(baseType, elements, maxLength); }
if (!pArr.isPrimitiveType()) { pArr = new PhoenixArray(pArr, desiredMaxLength); if (actualType == desiredType && !pArr.isPrimitiveType() && maxLength != null && maxLength != desiredMaxLength) { pArr = new PhoenixArray(pArr, desiredMaxLength); pArr = (PhoenixArray) value; if (!Objects.equal(maxLength, desiredMaxLength)) { pArr = new PhoenixArray(pArr, desiredMaxLength);
@Override public Expression visitLeave(ExistsParseNode node, List<Expression> l) throws SQLException { LiteralExpression child = (LiteralExpression) l.get(0); PhoenixArray array = (PhoenixArray) child.getValue(); return LiteralExpression.newConstant(array.getDimensions() > 0 ^ node.isNegate(), PBoolean.INSTANCE); }
@Override public boolean isSizeCompatible(ImmutableBytesWritable ptr, Object value, PDataType srcType, SortOrder sortOrder, Integer maxLength, Integer scale, Integer desiredMaxLength, Integer desiredScale) { if (value == null) return true; PhoenixArray pArr = (PhoenixArray)value; PDataType baseType = PDataType.fromTypeId(srcType.getSqlType() - PDataType.ARRAY_TYPE_BASE); // Since we only have a value and no byte[], use an empty length byte[] as otherwise // isSizeCompatible will attempt to interpret the array ptr as a ptr to an element. ImmutableBytesWritable elementPtr = new ImmutableBytesWritable(ByteUtil.EMPTY_BYTE_ARRAY); for (int i = 0; i < pArr.numElements; i++) { Object val = pArr.getElement(i); if (!baseType.isSizeCompatible(elementPtr, val, baseType, sortOrder, srcType.getMaxLength(val), scale, desiredMaxLength, desiredScale)) { return false; } } return true; }
public PhoenixArray(PhoenixArray pArr, Integer desiredMaxLength) { this.baseType = pArr.baseType; Object[] elements = (Object[])pArr.array; if (baseType.isFixedWidth()) { if (baseType.getByteSize() == null) { elements = coerceToNewLength(baseType, (Object[])pArr.array, desiredMaxLength); maxLength = desiredMaxLength; } } this.array = convertObjectArrayToPrimitiveArray(elements); this.numElements = elements.length; }
public PhoenixArray(PDataType baseType, Object[] elements) { // As we are dealing with primitive types and only the Boxed objects this.baseType = baseType; if (baseType.isFixedWidth()) { if (baseType.getByteSize() == null) { elements = coerceToEqualLength(baseType, elements); if (elements != null && elements.length > 0) { for(int i = 0; i < elements.length; i++) { if(elements[i] != null) { maxLength = baseType.getMaxLength(elements[i]); break; } } } } } this.array = convertObjectArrayToPrimitiveArray(elements); this.numElements = elements.length; }
int totalNulls = 0; for (int i = 0; i < noOfElements; i++) { totalVarSize += array.estimateByteSize(i); if (!PDataType.fromTypeId((baseType.getSqlType() - PDataType.ARRAY_TYPE_BASE)).isFixedWidth()) { if (array.isNull(i)) { nulls++; } else {