in server/pxf-hive/src/main/java/org/greenplum/pxf/plugins/hive/HiveORCVectorizedResolver.java [136:350]
private void populatePrimitiveColumn(PrimitiveCategory primitiveCategory, ObjectInspector oi, VectorizedRowBatch vectorizedBatch, int columnIndex) {
ColumnVector columnVector = vectorizedBatch.cols[columnIndex];
Object fieldValue;
DataType fieldType;
switch (primitiveCategory) {
case BOOLEAN: {
fieldType = BOOLEAN;
LongColumnVector lcv = (LongColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (lcv != null) {
int rowId = lcv.isRepeating ? 0 : rowIndex;
if (!lcv.isNull[rowId]) {
fieldValue = lcv.vector[rowId] == 1;
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case SHORT: {
fieldType = SMALLINT;
LongColumnVector lcv = (LongColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (lcv != null) {
int rowId = lcv.isRepeating ? 0 : rowIndex;
if (!lcv.isNull[rowId]) {
fieldValue = (short) lcv.vector[rowId];
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case INT: {
fieldType = INTEGER;
LongColumnVector lcv = (LongColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (lcv != null) {
int rowId = lcv.isRepeating ? 0 : rowIndex;
if (!lcv.isNull[rowId]) {
fieldValue = (int) lcv.vector[rowId];
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case LONG: {
fieldType = BIGINT;
LongColumnVector lcv = (LongColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (lcv != null) {
int rowId = lcv.isRepeating ? 0 : rowIndex;
if (!lcv.isNull[rowId]) {
fieldValue = lcv.vector[rowId];
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case FLOAT: {
fieldType = REAL;
DoubleColumnVector dcv = (DoubleColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (dcv != null) {
int rowId = dcv.isRepeating ? 0 : rowIndex;
if (!dcv.isNull[rowId]) {
fieldValue = (float) dcv.vector[rowId];
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case DOUBLE: {
fieldType = FLOAT8;
DoubleColumnVector dcv = (DoubleColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (dcv != null) {
int rowId = dcv.isRepeating ? 0 : rowIndex;
if (!dcv.isNull[rowId]) {
fieldValue = dcv.vector[rowId];
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case DECIMAL: {
fieldType = NUMERIC;
DecimalColumnVector dcv = (DecimalColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (dcv != null) {
int rowId = dcv.isRepeating ? 0 : rowIndex;
if (!dcv.isNull[rowId]) {
fieldValue = dcv.vector[rowId];
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case VARCHAR: {
fieldType = VARCHAR;
BytesColumnVector bcv = (BytesColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (columnVector != null) {
int rowId = bcv.isRepeating ? 0 : rowIndex;
if (!bcv.isNull[rowId]) {
Text textValue = new Text();
textValue.set(bcv.vector[rowId], bcv.start[rowId], bcv.length[rowId]);
fieldValue = textValue;
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case CHAR: {
fieldType = BPCHAR;
BytesColumnVector bcv = (BytesColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (columnVector != null) {
int rowId = bcv.isRepeating ? 0 : rowIndex;
if (!bcv.isNull[rowId]) {
Text textValue = new Text();
textValue.set(bcv.vector[rowId], bcv.start[rowId], bcv.length[rowId]);
fieldValue = textValue;
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case STRING: {
fieldType = TEXT;
BytesColumnVector bcv = (BytesColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (columnVector != null) {
int rowId = bcv.isRepeating ? 0 : rowIndex;
if (!bcv.isNull[rowId]) {
Text textValue = new Text();
textValue.set(bcv.vector[rowId], bcv.start[rowId], bcv.length[rowId]);
fieldValue = textValue;
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case BINARY: {
fieldType = BYTEA;
BytesColumnVector bcv = (BytesColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (columnVector != null) {
int rowId = bcv.isRepeating ? 0 : rowIndex;
if (!bcv.isNull[rowId]) {
fieldValue = new byte[bcv.length[rowId]];
System.arraycopy(bcv.vector[rowId], bcv.start[rowId], fieldValue, 0, bcv.length[rowId]);
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case DATE: {
fieldType = DATE;
LongColumnVector lcv = (LongColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (lcv != null) {
int rowId = lcv.isRepeating ? 0 : rowIndex;
if (!lcv.isNull[rowId]) {
fieldValue = new Date(org.apache.hadoop.hive.serde2.io.DateWritable.daysToMillis((int) lcv.vector[rowId]));
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
case BYTE: {
fieldType = SMALLINT;
LongColumnVector lcv = (LongColumnVector) columnVector;
for (int rowIndex = 0; rowIndex < vectorizedBatch.size; rowIndex++) {
fieldValue = null;
if (lcv != null) {
int rowId = lcv.isRepeating ? 0 : rowIndex;
if (!lcv.isNull[rowId]) {
fieldValue = (short) lcv.vector[rowId];
}
}
addValueToColumn(columnIndex, rowIndex, new OneField(fieldType.getOID(), fieldValue));
}
break;
}
default: {
throw new UnsupportedTypeException(oi.getTypeName()
+ " conversion is not supported by "
+ getClass().getSimpleName());
}
}
}