
com.blazebit.persistence.impl.dialect.OracleDbmsDialect Maven / Gradle / Ivy
package com.blazebit.persistence.impl.dialect;
import java.util.Map;
import com.blazebit.persistence.spi.DbmsModificationState;
import com.blazebit.persistence.spi.DbmsStatementType;
public class OracleDbmsDialect extends DefaultDbmsDialect {
// private static final Method registerReturnParameter;
// private static final Method getReturnResultSet;
//
// static {
// Method registerReturnParameterMethod = null;
// Method getReturnResultSetMethod = null;
// try {
// Class> clazz = Class.forName("oracle.jdbc.OraclePreparedStatement");
// registerReturnParameterMethod = clazz.getMethod("registerReturnParameter", int.class, int.class);
// getReturnResultSetMethod = clazz.getMethod("getReturnResultSet");
// } catch (Exception e) {
// // Ignore
// }
//
// registerReturnParameter = registerReturnParameterMethod;
// getReturnResultSet = getReturnResultSetMethod;
// }
@Override
public Map appendExtendedSql(StringBuilder sqlSb, DbmsStatementType statementType, boolean isSubquery, boolean isEmbedded, StringBuilder withClause, String limit, String offset, String[] returningColumns, Map includedModificationStates) {
if (isSubquery) {
sqlSb.insert(0, '(');
}
// TODO: implement
sqlSb.insert(indexOfIgnoreCase(sqlSb, "select"), withClause);
if (isSubquery) {
sqlSb.append(')');
}
return null;
}
@Override
public boolean supportsReturningColumns() {
return true;
}
@Override
public void appendLimit(StringBuilder sqlSb, boolean isSubquery, String limit, String offset) {
if (offset == null) {
sqlSb.insert(0, "select * from (");
sqlSb.append(") where rownum <= ").append(limit);
} else {
// TODO: This is selecting the rownum too...
// TODO: See the following
// https://groups.google.com/forum/#!topic/jooq-user/G9Op6cQwMkY/discussion
// http://www.inf.unideb.hu/~gabora/pagination/results.html
sqlSb.insert(0, "select * from ( select row_.*, rownum rownum_ from (");
sqlSb.append(") row_ ) where rownum_ <= ").append(limit).append(" and rownum_ > ").append(offset);
}
}
// @Override
// public void applyQueryReturning(StringBuilder sqlSb, String[] returningColumns) {
// sqlSb.append(" returning ");
// for (int i = 0; i < returningColumns.length; i++) {
// if (i != 0) {
// sqlSb.append(',');
// }
// sqlSb.append(returningColumns[i]);
// }
// sqlSb.append(" into ");
// for (int i = 0; i < returningColumns.length; i++) {
// if (i != 0) {
// sqlSb.append(',');
// }
// sqlSb.append('?');
// }
// }
//
// @Override
// public void applyQueryReturning(PreparedStatement ps, int[] returningSqlTypes) throws SQLException {
// if (registerReturnParameter == null) {
// throw new IllegalStateException("Could not apply query returning because the class oracle.jdbc.OraclePreparedStatement could not be loaded!");
// }
//
// try {
// int offset = (ps.getParameterMetaData().getParameterCount() - returningSqlTypes.length) + 1;
// for (int i = 0; i < returningSqlTypes.length; i++) {
// registerReturnParameter.invoke(ps, offset + i, returningSqlTypes[i]);
// }
// } catch (Exception e) {
// throw new RuntimeException(e);
// }
// }
//
// @Override
// public List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy