com.tesora.dve.db.mysql.MysqlNativeResultHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.tesora.dve.db.mysql.MysqlNativeResultHandler.java

Source

package com.tesora.dve.db.mysql;

/*
 * #%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 java.sql.Time;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.Date;

import org.apache.commons.lang.time.FastDateFormat;

import com.tesora.dve.common.DateUtils;
import com.tesora.dve.db.NativeResultHandler;
import com.tesora.dve.resultset.ColumnMetadata;

public class MysqlNativeResultHandler extends NativeResultHandler {
    private static final Date ZERO_DATE_INDICATOR = DateUtils.getSpecifiedDate(1, 1, 1);
    private static final String ZERO_DATE = "0000-00-00";
    private static final String ZERO_DATETIME = "0000-00-00 00:00:00";

    private static final FastDateFormat dateFormatter = FastDateFormat
            .getInstance(MysqlNativeConstants.MYSQL_DATE_FORMAT);
    private static final FastDateFormat timeFormatter = FastDateFormat
            .getInstance(MysqlNativeConstants.MYSQL_TIME_FORMAT);
    private static final FastDateFormat timestampFormatter = FastDateFormat
            .getInstance(MysqlNativeConstants.MYSQL_TIMESTAMP_FORMAT);

    private static final long serialVersionUID = 1L;

    @Override
    protected byte[] getBooleanAsBytes(ColumnMetadata uc, Object obj) {
        return (((Boolean) obj == true) ? "1".getBytes() : "0".getBytes());
    }

    @Override
    protected byte[] getDateAsBytes(ColumnMetadata uc, Object obj) {
        if (uc.getDataType() == Types.TIME)
            return getTimeAsBytes(uc, new Time(((Date) obj).getTime()));

        if (uc.getDataType() == Types.TIMESTAMP)
            return getTimestampAsBytes(uc, new Timestamp(((Date) obj).getTime()));

        if (((Date) obj).equals(ZERO_DATE_INDICATOR))
            return ZERO_DATE.getBytes();

        return dateFormatter.format((Date) obj).getBytes();
    }

    @Override
    protected byte[] getTimeAsBytes(ColumnMetadata uc, Object obj) {
        return timeFormatter.format((Time) obj).getBytes();
    }

    @Override
    protected byte[] getTimestampAsBytes(ColumnMetadata uc, Object obj) {
        // for some reason doing .equals on Timestamp doesn't work....
        if (((Timestamp) obj).getTime() == ZERO_DATE_INDICATOR.getTime())
            return ZERO_DATETIME.getBytes();

        return timestampFormatter.format((Timestamp) obj).getBytes();
    }
}