[TD-2070]
This commit is contained in:
parent
87ab74823d
commit
07bd21e6c6
|
@ -0,0 +1,650 @@
|
||||||
|
/***************************************************************************
|
||||||
|
* Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
|
||||||
|
*
|
||||||
|
* This program is free software: you can use, redistribute, and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License, version 3
|
||||||
|
* or later ("AGPL"), as published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*****************************************************************************/
|
||||||
|
package com.taosdata.jdbc;
|
||||||
|
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
|
import java.nio.ByteOrder;
|
||||||
|
import java.nio.DoubleBuffer;
|
||||||
|
import java.nio.FloatBuffer;
|
||||||
|
import java.nio.IntBuffer;
|
||||||
|
import java.nio.LongBuffer;
|
||||||
|
import java.nio.ShortBuffer;
|
||||||
|
import java.sql.SQLDataException;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Timestamp;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class TSDBResultSetBlockData {
|
||||||
|
private int numOfRows = 0;
|
||||||
|
private int numOfCols = 0;
|
||||||
|
|
||||||
|
private int rowIndex = 0;
|
||||||
|
|
||||||
|
private List<ColumnMetaData> columnMetaDataList;
|
||||||
|
private ArrayList<Object> colData = null;
|
||||||
|
|
||||||
|
public TSDBResultSetBlockData(List<ColumnMetaData> colMeta, int numOfCols) {
|
||||||
|
this.columnMetaDataList = colMeta;
|
||||||
|
this.setNumOfCols(numOfCols);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TSDBResultSetBlockData() {
|
||||||
|
this.colData = new ArrayList<Object>();
|
||||||
|
this.setNumOfCols(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void clear() {
|
||||||
|
if (this.colData != null) {
|
||||||
|
this.colData.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.numOfCols == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.colData = new ArrayList<Object>(numOfCols);
|
||||||
|
this.colData.addAll(Collections.nCopies(this.numOfCols, null));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean wasNull(int col) {
|
||||||
|
return colData.get(col) == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNumOfRows() {
|
||||||
|
return this.numOfRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumOfRows(int numOfRows) {
|
||||||
|
this.numOfRows = numOfRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getNumOfCols() {
|
||||||
|
return numOfCols;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNumOfCols(int numOfCols) {
|
||||||
|
this.numOfCols = numOfCols;
|
||||||
|
this.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setColumnData(int col, byte val) {
|
||||||
|
this.colData.set(col, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasMore() {
|
||||||
|
return this.rowIndex < this.numOfRows;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean forward() {
|
||||||
|
this.rowIndex++;
|
||||||
|
return (this.rowIndex < this.numOfRows);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void resetCursor() {
|
||||||
|
this.rowIndex = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBoolean(int col, boolean value) {
|
||||||
|
colData.set(col, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setByteArray(int col, int length, byte[] value) {
|
||||||
|
try {
|
||||||
|
switch (this.columnMetaDataList.get(col).getColType()) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BOOL: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
buf.order(ByteOrder.LITTLE_ENDIAN).asCharBuffer();
|
||||||
|
this.colData.set(col, buf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
buf.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
this.colData.set(col, buf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
ShortBuffer sb = buf.order(ByteOrder.LITTLE_ENDIAN).asShortBuffer();
|
||||||
|
this.colData.set(col, sb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
IntBuffer ib = buf.order(ByteOrder.LITTLE_ENDIAN).asIntBuffer();
|
||||||
|
this.colData.set(col, ib);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
LongBuffer lb = buf.order(ByteOrder.LITTLE_ENDIAN).asLongBuffer();
|
||||||
|
this.colData.set(col, lb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
FloatBuffer fb = buf.order(ByteOrder.LITTLE_ENDIAN).asFloatBuffer();
|
||||||
|
this.colData.set(col, fb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
DoubleBuffer db = buf.order(ByteOrder.LITTLE_ENDIAN).asDoubleBuffer();
|
||||||
|
this.colData.set(col, db);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
buf.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
this.colData.set(col, buf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
LongBuffer lb = buf.order(ByteOrder.LITTLE_ENDIAN).asLongBuffer();
|
||||||
|
this.colData.set(col, lb);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR: {
|
||||||
|
ByteBuffer buf = ByteBuffer.wrap(value, 0, length);
|
||||||
|
buf.order(ByteOrder.LITTLE_ENDIAN);
|
||||||
|
this.colData.set(col, buf);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class NullType {
|
||||||
|
public String toString() {
|
||||||
|
return new String("null");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The original type may not be a string type, but will be converted to by
|
||||||
|
* calling this method
|
||||||
|
*
|
||||||
|
* @param col column index
|
||||||
|
* @return
|
||||||
|
* @throws SQLException
|
||||||
|
*/
|
||||||
|
public String getString(int col) throws SQLException {
|
||||||
|
Object obj = get(col);
|
||||||
|
if (obj == null) {
|
||||||
|
return new NullType().toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
return obj.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isBooleanNull(byte val) {
|
||||||
|
return val == 0x2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isTinyIntNull(byte val) {
|
||||||
|
return val == 0x80;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isSmallIntNull(short val) {
|
||||||
|
return val == 0x8000;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isIntNull(int val) {
|
||||||
|
return val == 0x80000000L;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isBigIntNull(long val) {
|
||||||
|
return val == 0x8000000000000000L;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isFloatNull(float val) {
|
||||||
|
return Float.isNaN(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isDoubleNull(double val) {
|
||||||
|
return Double.isNaN(val);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isBinaryNull(byte[] val, int length) {
|
||||||
|
return val[0] == 0xFF && length == 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isNcharNull(byte[] val, int length) {
|
||||||
|
return (val[0] & val[1] & val[2] & val[3]) == 0xFF && length == 4;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getInt(int col) {
|
||||||
|
Object obj = get(col);
|
||||||
|
if (obj == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int type = this.columnMetaDataList.get(col).getColType();
|
||||||
|
switch (type) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BOOL:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT: {
|
||||||
|
return (int) obj;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP: {
|
||||||
|
return ((Long) obj).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE: {
|
||||||
|
return ((Double) obj).intValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY: {
|
||||||
|
return Integer.parseInt((String) obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getBoolean(int col) throws SQLException {
|
||||||
|
Object obj = get(col);
|
||||||
|
if (obj == null) {
|
||||||
|
return Boolean.FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int type = this.columnMetaDataList.get(col).getColType();
|
||||||
|
switch (type) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BOOL:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT: {
|
||||||
|
return ((int) obj == 0L)? Boolean.FALSE:Boolean.TRUE;
|
||||||
|
}
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP: {
|
||||||
|
return (((Long) obj) == 0L)? Boolean.FALSE:Boolean.TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE: {
|
||||||
|
return (((Double) obj) == 0)? Boolean.FALSE:Boolean.TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY: {
|
||||||
|
if ("TRUE".compareToIgnoreCase((String) obj) == 0) {
|
||||||
|
return Boolean.TRUE;
|
||||||
|
} else if ("FALSE".compareToIgnoreCase((String) obj) == 0) {
|
||||||
|
return Boolean.TRUE;
|
||||||
|
} else {
|
||||||
|
throw new SQLDataException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Boolean.FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getLong(int col) throws SQLException {
|
||||||
|
int fieldSize = this.columnMetaDataList.get(col).getColSize();
|
||||||
|
ByteBuffer bb = (ByteBuffer) this.colData.get(col);
|
||||||
|
|
||||||
|
switch (this.columnMetaDataList.get(col).getColType()) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BOOL: {
|
||||||
|
byte val = bb.get(this.rowIndex);
|
||||||
|
if (isBooleanNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (val == 0x0) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT: {
|
||||||
|
byte val = bb.get(this.rowIndex);
|
||||||
|
if (isTinyIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT: {
|
||||||
|
ShortBuffer sb = (ShortBuffer) this.colData.get(col);
|
||||||
|
short val = sb.get(this.rowIndex);
|
||||||
|
if (isSmallIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT: {
|
||||||
|
IntBuffer ib = (IntBuffer) this.colData.get(col);
|
||||||
|
int val = ib.get(this.rowIndex);
|
||||||
|
if (isIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT: {
|
||||||
|
LongBuffer lb = (LongBuffer) this.colData.get(col);
|
||||||
|
long val = lb.get(this.rowIndex);
|
||||||
|
if (isBigIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long) val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT: {
|
||||||
|
FloatBuffer fb = (FloatBuffer) this.colData.get(col);
|
||||||
|
float val = fb.get(this.rowIndex);
|
||||||
|
if (isFloatNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long) val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE: {
|
||||||
|
DoubleBuffer lb = (DoubleBuffer) this.colData.get(col);
|
||||||
|
double val = lb.get(this.rowIndex);
|
||||||
|
if (isDoubleNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long) val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY: {
|
||||||
|
bb.position(fieldSize * this.rowIndex);
|
||||||
|
|
||||||
|
int length = bb.getShort();
|
||||||
|
|
||||||
|
byte[] dest = new byte[length];
|
||||||
|
bb.get(dest, 0, length);
|
||||||
|
if (isBinaryNull(dest, length)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Long.parseLong(new String(dest));
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR: {
|
||||||
|
bb.position(fieldSize * this.rowIndex);
|
||||||
|
|
||||||
|
int length = bb.getShort();
|
||||||
|
|
||||||
|
byte[] dest = new byte[length];
|
||||||
|
bb.get(dest, 0, length);
|
||||||
|
if (isNcharNull(dest, length)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Long.parseLong(new String(dest, TaosGlobalConfig.getCharset()));
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Timestamp getTimestamp(int col) {
|
||||||
|
try {
|
||||||
|
return new Timestamp(getLong(col));
|
||||||
|
} catch (SQLException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getDouble(int col) {
|
||||||
|
int fieldSize = this.columnMetaDataList.get(col).getColSize();
|
||||||
|
ByteBuffer bb = (ByteBuffer) this.colData.get(col);
|
||||||
|
|
||||||
|
switch (this.columnMetaDataList.get(col).getColType()) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BOOL: {
|
||||||
|
byte val = bb.get(this.rowIndex);
|
||||||
|
if (isBooleanNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (val == 0x0) ? 0 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT: {
|
||||||
|
byte val = bb.get(this.rowIndex);
|
||||||
|
if (isTinyIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT: {
|
||||||
|
ShortBuffer sb = (ShortBuffer) this.colData.get(col);
|
||||||
|
short val = sb.get(this.rowIndex);
|
||||||
|
if (isSmallIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT: {
|
||||||
|
IntBuffer ib = (IntBuffer) this.colData.get(col);
|
||||||
|
int val = ib.get(this.rowIndex);
|
||||||
|
if (isIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT: {
|
||||||
|
LongBuffer lb = (LongBuffer) this.colData.get(col);
|
||||||
|
long val = lb.get(this.rowIndex);
|
||||||
|
if (isBigIntNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long) val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT: {
|
||||||
|
FloatBuffer fb = (FloatBuffer) this.colData.get(col);
|
||||||
|
float val = fb.get(this.rowIndex);
|
||||||
|
if (isFloatNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long) val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE: {
|
||||||
|
DoubleBuffer lb = (DoubleBuffer) this.colData.get(col);
|
||||||
|
double val = lb.get(this.rowIndex);
|
||||||
|
if (isDoubleNull(val)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long) val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY: {
|
||||||
|
bb.position(fieldSize * this.rowIndex);
|
||||||
|
|
||||||
|
int length = bb.getShort();
|
||||||
|
|
||||||
|
byte[] dest = new byte[length];
|
||||||
|
bb.get(dest, 0, length);
|
||||||
|
if (isBinaryNull(dest, length)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Double.parseDouble(new String(dest));
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR: {
|
||||||
|
bb.position(fieldSize * this.rowIndex);
|
||||||
|
|
||||||
|
int length = bb.getShort();
|
||||||
|
|
||||||
|
byte[] dest = new byte[length];
|
||||||
|
bb.get(dest, 0, length);
|
||||||
|
if (isNcharNull(dest, length)) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return Double.parseDouble(new String(dest, TaosGlobalConfig.getCharset()));
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Object get(int col) {
|
||||||
|
int fieldSize = this.columnMetaDataList.get(col).getColSize();
|
||||||
|
|
||||||
|
switch (this.columnMetaDataList.get(col).getColType()) {
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BOOL: {
|
||||||
|
ByteBuffer bb = (ByteBuffer) this.colData.get(col);
|
||||||
|
|
||||||
|
byte val = bb.get(this.rowIndex);
|
||||||
|
if (isBooleanNull(val)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (val == 0x0) ? Boolean.FALSE : Boolean.TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TINYINT: {
|
||||||
|
ByteBuffer bb = (ByteBuffer) this.colData.get(col);
|
||||||
|
|
||||||
|
byte val = bb.get(this.rowIndex);
|
||||||
|
if (isTinyIntNull(val)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_SMALLINT: {
|
||||||
|
ShortBuffer sb = (ShortBuffer) this.colData.get(col);
|
||||||
|
short val = sb.get(this.rowIndex);
|
||||||
|
if (isSmallIntNull(val)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_INT: {
|
||||||
|
IntBuffer ib = (IntBuffer) this.colData.get(col);
|
||||||
|
int val = ib.get(this.rowIndex);
|
||||||
|
if (isIntNull(val)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_TIMESTAMP:
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BIGINT: {
|
||||||
|
LongBuffer lb = (LongBuffer) this.colData.get(col);
|
||||||
|
long val = lb.get(this.rowIndex);
|
||||||
|
if (isBigIntNull(val)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (long) val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_FLOAT: {
|
||||||
|
FloatBuffer fb = (FloatBuffer) this.colData.get(col);
|
||||||
|
float val = fb.get(this.rowIndex);
|
||||||
|
if (isFloatNull(val)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_DOUBLE: {
|
||||||
|
DoubleBuffer lb = (DoubleBuffer) this.colData.get(col);
|
||||||
|
double val = lb.get(this.rowIndex);
|
||||||
|
if (isDoubleNull(val)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_BINARY: {
|
||||||
|
ByteBuffer bb = (ByteBuffer) this.colData.get(col);
|
||||||
|
bb.position(fieldSize * this.rowIndex);
|
||||||
|
|
||||||
|
int length = bb.getShort();
|
||||||
|
|
||||||
|
byte[] dest = new byte[length];
|
||||||
|
bb.get(dest, 0, length);
|
||||||
|
if (isBinaryNull(dest, length)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return new String(dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
case TSDBConstants.TSDB_DATA_TYPE_NCHAR: {
|
||||||
|
ByteBuffer bb = (ByteBuffer) this.colData.get(col);
|
||||||
|
bb.position(fieldSize * this.rowIndex);
|
||||||
|
|
||||||
|
int length = bb.getShort();
|
||||||
|
|
||||||
|
byte[] dest = new byte[length];
|
||||||
|
bb.get(dest, 0, length);
|
||||||
|
if (isNcharNull(dest, length)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
return new String(dest, TaosGlobalConfig.getCharset());
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue