/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2013, Geomatys
*
* 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.geotoolkit.db.dialect;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.sis.feature.SingleAttributeTypeBuilder;
import org.geotoolkit.filter.capability.DefaultFilterCapabilities;
import org.geotoolkit.filter.visitor.CapabilitiesFilterSplitter;
import org.opengis.feature.AttributeType;
import org.opengis.feature.FeatureType;
import org.opengis.filter.Filter;
/**
*
* @author Johann Sorel (Geomatys)
*/
public abstract class AbstractSQLDialect implements SQLDialect {
@Override
public boolean ignoreTable(String name) {
return false;
}
/**
* Default implementation handles no filter.
* Everything will be added in the post filter.
*/
@Override
public Filter[] splitFilter(Filter filter, FeatureType type) {
final CapabilitiesFilterSplitter splitter = new CapabilitiesFilterSplitter(
(DefaultFilterCapabilities)getFilterCapabilities(), type);
filter.accept(splitter, null);
return new Filter[]{splitter.getPreFilter(),splitter.getPostFilter()};
}
@Override
public void encodeColumnName(StringBuilder sql, String name) {
sql.append(getTableEscape()).append(name).append(getTableEscape());
}
@Override
public void encodeColumnAlias(StringBuilder sql, String name) {
sql.append(" as ");
encodeColumnName(sql, name);
}
@Override
public void encodeSchemaName(StringBuilder sql, String name) {
sql.append(getTableEscape()).append(name).append(getTableEscape());
}
@Override
public void encodeTableName(StringBuilder sql, String name) {
final String tableEscape = getTableEscape();
//we double the character to escape it
name = name.replaceAll(tableEscape,tableEscape+tableEscape);
sql.append(tableEscape).append(name).append(tableEscape);
}
@Override
public void encodeSchemaAndTableName(StringBuilder sql, String databaseSchema, String tableName) {
if (databaseSchema != null && !databaseSchema.isEmpty()) {
encodeSchemaName(sql, databaseSchema);
sql.append('.');
}
encodeTableName(sql, tableName);
}
@Override
public void encodePostColumnCreateTable(StringBuilder sql, AttributeType att) {
}
@Override
public void postCreateTable(String schemaName, FeatureType featureType,
Connection cx) throws SQLException {
}
@Override
public void encodePostCreateTable(StringBuilder sql, String tableName) {
}
@Override
public void decodeColumnType(final SingleAttributeTypeBuilder atb, final Connection cx,
final String typeName, final int datatype, final String schemaName,
final String tableName, final String columnName) throws SQLException {
final Class binding = getJavaType(datatype, typeName);
atb.setName(columnName);
atb.setValueClass(binding);
}
}