All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.blazebit.persistence.impl.dialect.OracleDbmsDialect Maven / Gradle / Ivy

The newest version!
package com.blazebit.persistence.impl.dialect;

import java.util.Map;

import com.blazebit.persistence.spi.DbmsLimitHandler;
import com.blazebit.persistence.spi.DbmsModificationState;
import com.blazebit.persistence.spi.DbmsStatementType;
import com.blazebit.persistence.spi.ValuesStrategy;


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 boolean supportsTupleDistinctCounts() {
		return false;
	}

    @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 DbmsLimitHandler createLimitHandler() {
        // NOTE: Oracle12c should use SQL2008DbmsLimitHandler
        return new OracleDbmsLimitHandler();
    }

    @Override
    public ValuesStrategy getValuesStrategy() {
        return ValuesStrategy.SELECT_UNION;
    }

    @Override
    public String getDummyTable() {
        return "dual";
    }

//	@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 getQueryReturning(PreparedStatement ps, int[] returningSqlTypes) throws SQLException {
//		List results = new ArrayList(1);
//		
//		try {
//			ResultSet rs = (ResultSet) getReturnResultSet.invoke(ps);
//			while (rs.next()) {
//				Object[] resultRow = new Object[returningSqlTypes.length];
//				for (int i = 0; i < returningSqlTypes.length; i++) {
//					switch (returningSqlTypes[i]) {
//						case Types.BIT:
//							boolean b = rs.getBoolean(i);
//							resultRow[i] = rs.wasNull() ? null : b;
//							break;
//						case Types.TINYINT:
//							byte by = rs.getByte(i);
//							resultRow[i] = rs.wasNull() ? null : by;
//							break;
//						case Types.SMALLINT:
//							short s = rs.getShort(i);
//							resultRow[i] = rs.wasNull() ? null : s;
//							break;
//						case Types.INTEGER:
//							int integer = rs.getInt(i);
//							resultRow[i] = rs.wasNull() ? null : integer;
//							break;
//						case Types.BIGINT:
//							long l = rs.getLong(i);
//							resultRow[i] = rs.wasNull() ? null : l;
//							break;
//						case Types.REAL:
//							float f = rs.getFloat(i);
//							resultRow[i] = rs.wasNull() ? null : f;
//							break;
//						case Types.FLOAT:
//						case Types.DOUBLE:
//							double d = rs.getDouble(i);
//							resultRow[i] = rs.wasNull() ? null : d;
//							break;
//						case Types.DECIMAL:
//						case Types.NUMERIC:
//							resultRow[i] = rs.getBigDecimal(i);
//							break;
//						case Types.CHAR:
//						case Types.VARCHAR:
//						case Types.LONGVARCHAR:
//							resultRow[i] = rs.getString(i);
//							break;
//						case Types.DATE:
//							resultRow[i] = rs.getDate(i);
//							break;
//						case Types.TIME:
//							resultRow[i] = rs.getTime(i);
//							break;
//						case Types.TIMESTAMP:
//							resultRow[i] = rs.getTimestamp(i);
//							break;
//						case Types.BINARY:
//						case Types.VARBINARY:
//						case Types.LONGVARBINARY:
//							resultRow[i] = rs.getBytes(i);
//							break;
//						case Types.ARRAY:
//							resultRow[i] = rs.getArray(i);
//							break;
//						default:
//							throw new IllegalArgumentException("Unsupported JDBC returning type: " + returningSqlTypes[i]);
//					}
//				}
//				results.add(resultRow);
//			}
//		} catch (Exception e) {
//			throw new RuntimeException(e);
//		}
//		
//		return results;
//	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy