/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library 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
* Lesser General Public License for more details.
*/
package org.geotools.data.db2;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Map;
import java.util.Set;
import org.geotools.factory.Hints.Key;
import org.geotools.jdbc.JDBCDataStore;
import org.geotools.jdbc.PreparedFilterToSQL;
import org.geotools.jdbc.PreparedStatementSQLDialect;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.feature.type.GeometryDescriptor;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;
import com.vividsolutions.jts.geom.GeometryFactory;
public class DB2SQLDialectPrepared extends PreparedStatementSQLDialect {
private DB2SQLDialect delegate = null;
public DB2SQLDialectPrepared(JDBCDataStore dataStore, DB2DialectInfo info) {
super(dataStore);
delegate = new DB2SQLDialect(dataStore,info);
}
/* (non-Javadoc)
* @see org.geotools.jdbc.SQLDialect#createCRS(int, java.sql.Connection)
*
*/
@Override
public CoordinateReferenceSystem createCRS(int srid, Connection cx) throws SQLException {
return delegate.createCRS(srid, cx);
}
@Override
public PreparedFilterToSQL createPreparedFilterToSQL() {
return new DB2FilterToSQL(this);
}
@Override
public void encodePrimaryKey(String column, StringBuffer sql) {
delegate.encodePrimaryKey(column, sql);
}
@Override
public String getGeometryTypeName(Integer type) {
return delegate.getGeometryTypeName(type);
}
@Override
public Integer getGeometrySRID(String schemaName, String tableName, String columnName,
Connection cx) throws SQLException {
return delegate.getGeometrySRID(schemaName, tableName, columnName, cx);
}
public void encodeGeometryColumn(GeometryDescriptor gatt, StringBuffer sql) {
delegate.encodeGeometryColumn(gatt, sql);
}
public void encodeGeometryColumn(GeometryDescriptor gatt, int srid, StringBuffer sql) {
delegate.encodeGeometryColumn(gatt, srid, sql);
}
@Override
public void encodeGeometryEnvelope(String tableName,String geometryColumn, StringBuffer sql) {
delegate.encodeGeometryEnvelope(tableName, geometryColumn, sql);
}
@Override
public Envelope decodeGeometryEnvelope(ResultSet rs, int column,
Connection cx) throws SQLException, IOException {
return delegate.decodeGeometryEnvelope(rs, column, cx);
}
@Override
public Geometry decodeGeometryValue(GeometryDescriptor descriptor, ResultSet rs, String name,
GeometryFactory factory, Connection cx ) throws IOException, SQLException {
return delegate.decodeGeometryValue(descriptor, rs, name, factory, cx);
}
@Override
public Geometry decodeGeometryValue(GeometryDescriptor descriptor, ResultSet rs, int column,
GeometryFactory factory, Connection cx) throws IOException, SQLException {
return delegate.decodeGeometryValue(descriptor, rs, column, factory, cx);
}
@Override
public void registerClassToSqlMappings(Map<Class<?>, Integer> mappings) {
delegate.registerClassToSqlMappings(mappings);
}
@Override
public void registerSqlTypeToClassMappings(Map<Integer, Class<?>> mappings) {
delegate.registerSqlTypeToClassMappings(mappings);
}
@Override
public void registerSqlTypeNameToClassMappings(Map<String, Class<?>> mappings) {
delegate.registerSqlTypeNameToClassMappings(mappings);
}
@Override
public void prepareFunctionArgument(Class clazz, StringBuffer sql) {
String castExpression = DB2Util.getCastExpression(clazz);
if (castExpression!=null)
sql.append(castExpression);
else
super.prepareFunctionArgument(clazz, sql);
}
@Override
public void postCreateTable(String schemaName, SimpleFeatureType featureType, Connection cx)
throws SQLException {
delegate.postCreateTable(schemaName, featureType, cx);
}
@Override
public void setGeometryValue(Geometry g, int srid, Class binding, PreparedStatement ps, int column) throws SQLException {
if (g ==null) {
//ps.setNull(column, Types.OTHER);
ps.setBytes(column, null);
return;
}
DB2WKBWriter w = new DB2WKBWriter(DB2WKBWriter.guessCoorinateDims(g),getDb2DialectInfo().isHasOGCWkbZTyps());
byte[] bytes = w.write(g);
ps.setBytes(column, bytes);
}
@Override
public String getSequenceForColumn(String schemaName, String tableName,
String columnName, Connection cx) throws SQLException {
return delegate.getSequenceForColumn(schemaName, tableName, columnName, cx);
}
@Override
public Object getNextSequenceValue(String schemaName, String sequenceName,
Connection cx) throws SQLException {
return delegate.getNextSequenceValue(schemaName, sequenceName, cx);
}
@Override
public boolean lookupGeneratedValuesPostInsert() {
return delegate.lookupGeneratedValuesPostInsert();
}
@Override
public Object getLastAutoGeneratedValue(String schemaName, String tableName, String columnName,
Connection cx) throws SQLException {
return delegate.getLastAutoGeneratedValue(schemaName, tableName, columnName, cx);
}
@Override
public void prepareGeometryValue(Geometry geom, int srid, Class binding, StringBuffer sql) {
DB2Util.prepareGeometryValue(geom, srid, binding, sql);
}
public boolean isLimitOffsetSupported() {
return delegate.isLimitOffsetSupported();
}
public void applyLimitOffset(StringBuffer sql, int limit, int offset) {
delegate.applyLimitOffset(sql, limit, offset);
}
public void encodeGeometryColumnGeneralized(GeometryDescriptor gatt, int srid,StringBuffer sql,Double distance) {
delegate.encodeGeometryColumnGeneralized(gatt,srid,sql,distance);
}
@Override
protected void addSupportedHints(Set<Key> hints) {
delegate.addSupportedHints(hints);
}
@Override
public boolean includeTable(String schemaName, String tableName, Connection cx) throws SQLException {
return delegate.includeTable(schemaName, tableName, cx);
}
public DB2DialectInfo getDb2DialectInfo() {
return delegate.getDb2DialectInfo();
}
}