package com.tesora.dve.db; /* * #%L * Tesora Inc. * Database Virtualization Engine * %% * Copyright (C) 2011 - 2014 Tesora Inc. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License, version 3, * 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. See the * GNU Affero General Public License for more details. * * 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/>. * #L% */ import io.netty.util.CharsetUtil; import java.io.Serializable; import java.math.BigDecimal; import java.math.BigInteger; import java.sql.Time; import java.sql.Timestamp; import java.sql.Types; import java.util.Date; import com.tesora.dve.exceptions.PEException; import com.tesora.dve.resultset.ColumnMetadata; public abstract class NativeResultHandler implements Serializable { private static final long serialVersionUID = 1L; public String getObjectAsString(ColumnMetadata uc, Object obj) throws PEException { String colStr; byte[] b = getObjectAsBytes(uc, obj); // try { if (uc.getDataType() == Types.BLOB || uc.getDataType() == Types.LONGVARBINARY) { colStr = new String(b, CharsetUtil.ISO_8859_1); } else { colStr = new String(b, CharsetUtil.UTF_8); } // } catch (UnsupportedEncodingException e) { // // Just return the default encoding // colStr = new String(b); // } return colStr; } public byte[] getObjectAsBytes(ColumnMetadata uc, Object obj) { byte[] ret = null; if (obj == null) return null; if (obj instanceof String) { ret = getStringAsBytes(uc, obj); } else if (obj instanceof byte[]) { ret = getBytesAsBytes(uc, obj); } else if (obj instanceof Byte) { ret = getByteAsBytes(uc, obj); } else if (obj instanceof Boolean) { ret = getBooleanAsBytes(uc, obj); } else if (obj instanceof Short) { ret = getShortAsBytes(uc, obj); } else if (obj instanceof Integer) { ret = getIntegerAsBytes(uc, obj); } else if (obj instanceof Long) { ret = getLongAsBytes(uc, obj); } else if (obj instanceof BigInteger) { ret = getBigIntegerAsBytes(uc, obj); } else if (obj instanceof BigDecimal) { ret = getBigDecimalAsBytes(uc, obj); } else if (obj instanceof Float) { ret = getFloatAsBytes(uc, obj); } else if (obj instanceof Double) { ret = getDoubleAsBytes(uc, obj); } else if (obj instanceof Date) { ret = getDateAsBytes(uc, obj); } else if (obj instanceof Time) { ret = getTimeAsBytes(uc, obj); } else if (obj instanceof Timestamp) { ret = getTimestampAsBytes(uc, obj); } else { throw new IllegalArgumentException("Unhandled type " + obj.getClass().getName()); } return ret; } protected byte[] getBytesAsBytes(ColumnMetadata uc, Object obj) { return (byte[]) obj; } protected byte[] getByteAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getBooleanAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getShortAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getIntegerAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getLongAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getBigIntegerAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getBigDecimalAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getStringAsBytes(ColumnMetadata uc, Object obj) { return ((String) obj).getBytes(); } protected byte[] getFloatAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getDoubleAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getDateAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getTimeAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } protected byte[] getTimestampAsBytes(ColumnMetadata uc, Object obj) { return obj.toString().getBytes(); } }