/*****************************************************************************
*
* Copyright (C) Zenoss, Inc. 2011, all rights reserved.
*
* This content is made available according to terms specified in
* License.zenoss under the directory where your Zenoss product is installed.
*
****************************************************************************/
package org.zenoss.zep.dao.impl.compat;
import org.springframework.jdbc.core.SqlParameterValue;
import org.zenoss.utils.dao.RangePartitioner;
import org.zenoss.utils.dao.impl.PostgreSqlRangePartitioner;
import javax.sql.DataSource;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.sql.Types;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import java.util.concurrent.TimeUnit;
/**
* Database compatibility interface for PostgreSQL support.
*/
public class DatabaseCompatibilityPostgreSQL implements DatabaseCompatibility {
private final TypeConverter<String> uuidConverter = new UUIDConverterPostgreSQL();
private static final TimeZone UTC = TimeZone.getTimeZone("UTC");
@Override
public DatabaseType getDatabaseType() {
return DatabaseType.POSTGRESQL;
}
@Override
public TypeConverter<Long> getTimestampConverter() {
return new TypeConverter<Long>() {
@Override
public Long fromDatabaseType(ResultSet rs, String columnName) throws SQLException {
Timestamp ts = rs.getTimestamp(columnName);
return (ts != null) ? ts.getTime() : null;
}
@Override
public Object toDatabaseType(Long timestampInMillis) {
if (timestampInMillis == null) {
return null;
}
return new Timestamp(timestampInMillis);
}
};
}
@Override
public TypeConverter<String> getUUIDConverter() {
return this.uuidConverter;
}
@Override
public RangePartitioner getRangePartitioner(DataSource ds,
String tableName, String columnName,
long duration, TimeUnit unit) {
return new PostgreSqlRangePartitioner(ds, tableName,
columnName, duration, unit);
}
}