private void initMemory() throws MemoryException { if (columnPageEncoderMeta.getStoreDataType() == DataTypes.BYTE || columnPageEncoderMeta.getStoreDataType() == DataTypes.SHORT || columnPageEncoderMeta.getStoreDataType() == DataTypes.INT || columnPageEncoderMeta.getStoreDataType() == DataTypes.LONG) { int size = pageSize << columnPageEncoderMeta.getStoreDataType().getSizeBits(); memoryBlock = UnsafeMemoryManager.allocateMemoryWithRetry(taskId, size); } else if (columnPageEncoderMeta.getStoreDataType() == DataTypes.SHORT_INT) { int size = pageSize * 3; memoryBlock = UnsafeMemoryManager.allocateMemoryWithRetry(taskId, size); } else if (DataTypes.isDecimal(columnPageEncoderMeta.getStoreDataType())) { memoryBlock = UnsafeMemoryManager.allocateMemoryWithRetry(taskId, (long) (capacity)); } else if (columnPageEncoderMeta.getStoreDataType() == DataTypes.BYTE_ARRAY) { memoryBlock = UnsafeMemoryManager.allocateMemoryWithRetry(taskId, (long) (capacity)); } else { throw new UnsupportedOperationException( "invalid data type: " + columnPageEncoderMeta.getStoreDataType()); } baseAddress = memoryBlock.getBaseObject(); baseOffset = memoryBlock.getBaseOffset(); }
UnsafeFixLengthColumnPage(ColumnPageEncoderMeta columnPageEncoderMeta, int pageSize) throws MemoryException { super(columnPageEncoderMeta, pageSize); if (columnPageEncoderMeta.getStoreDataType() == DataTypes.BOOLEAN || columnPageEncoderMeta.getStoreDataType() == DataTypes.BYTE || columnPageEncoderMeta.getStoreDataType() == DataTypes.SHORT || columnPageEncoderMeta.getStoreDataType() == DataTypes.INT || columnPageEncoderMeta.getStoreDataType() == DataTypes.LONG || columnPageEncoderMeta.getStoreDataType() == DataTypes.FLOAT || columnPageEncoderMeta.getStoreDataType() == DataTypes.DOUBLE) { int size = pageSize << columnPageEncoderMeta.getStoreDataType().getSizeBits(); memoryBlock = UnsafeMemoryManager.allocateMemoryWithRetry(taskId, size); baseAddress = memoryBlock.getBaseObject(); baseOffset = memoryBlock.getBaseOffset(); capacity = size; } else if (columnPageEncoderMeta.getStoreDataType() == DataTypes.SHORT_INT) { int size = pageSize * 3; memoryBlock = UnsafeMemoryManager.allocateMemoryWithRetry(taskId, size); baseAddress = memoryBlock.getBaseObject(); baseOffset = memoryBlock.getBaseOffset(); capacity = size; } else if (DataTypes.isDecimal(columnPageEncoderMeta.getStoreDataType()) || columnPageEncoderMeta.getStoreDataType() == DataTypes.STRING) { throw new UnsupportedOperationException( "invalid data type: " + columnPageEncoderMeta.getStoreDataType()); } totalLength = 0; }