/*******************************************************************************
* Copyright (c) 2014 BestSolution.at and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
*******************************************************************************/
package at.bestsolution.persistence.java;
import java.math.BigDecimal;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import at.bestsolution.persistence.DynamicSelectQuery;
import at.bestsolution.persistence.MappedUpdateQuery;
import at.bestsolution.persistence.MappedQuery;
import at.bestsolution.persistence.java.query.DynamicListDelegate;
import at.bestsolution.persistence.java.query.JDBCType;
import at.bestsolution.persistence.java.query.ListDelegate;
import at.bestsolution.persistence.java.query.UpdateDelegate;
public interface DatabaseSupport {
public String getDatabaseType();
public QueryBuilder createQueryBuilder(JavaObjectMapper<?> rootMapper, String tableName);
public PrimaryKeyGenType getPrimaryKeyType();
public <O> MappedQuery<O> createMappedQuery(JavaObjectMapper<?> rootMapper, String rootPrefix, ListDelegate<O> listDelegate);
public <T,O> DynamicSelectQuery<T,O> createMappedSelectQuery(JavaObjectMapper<?> rootMapper, String rootPrefix, DynamicListDelegate<T,O> listDelegate);
public <O> MappedUpdateQuery<O> createMappedUpdateQuery(JavaObjectMapper<O> rootMapper, String rootPrefix, UpdateDelegate<O> updateDelegate);
public boolean isArrayStoreSupported(Class<?> type);
public boolean isNestedResultSetsSupported();
public Timestamp getServerTime(Connection connection);
public boolean isDefaultLowerCase();
public enum PrimaryKeyGenType {
AUTO,
SEQUENCE
}
public interface QueryBuilder {
public UpdateStatement createUpdateStatement(String pkColumn, String lockColumn);
public InsertStatement createInsertStatement(String pkColumn, String sequenceName, String lockColumn);
public ExtendsInsertStatement createExtendsInsertStatement(String pkColumn);
}
public interface Statement {
public void addInt(String column, int value);
public void addInt(String column, Integer value);
public void addDouble(String column, double value);
public void addDouble(String column, Double value);
public void addBigDecimal(String column, BigDecimal value);
public void addString(String column, String value);
public void addTimestamp(String column, Date value);
public void addLong(String column, long value);
public void addLong(String column, Long value);
public void addBoolean(String column, boolean value);
public void addBoolean(String column, Boolean value);
public void addNull(String column, JDBCType type);
public void addEnum(String column, Enum<?> value);
public void addBlob(String column, Blob value);
}
public interface InsertStatement extends Statement {
public long execute(Connection connection) throws SQLException;
}
public interface ExtendsInsertStatement extends Statement {
public boolean execute(Connection connection, long primaryKeyValue) throws SQLException;
}
public interface UpdateStatement extends Statement {
public boolean execute(Connection connection, long primaryKeyValue, long version) throws SQLException;
}
}