package org.castor.cpa.persistence.sql.driver; import java.sql.Types; import org.exolab.castor.persist.spi.PersistenceQuery; import org.exolab.castor.persist.spi.QueryExpression; /** * Persistence factory for InstantDB database (<a href="http://instantdb.enhydra.org/">http://instantdb.enhydra.org/</a> ). * <p> * Example <code>database.xml</code> file for JDO * <br> * <pre> * <database name="test" engine="instantdb" > * <driver class-name="org.enhydra.instantdb.jdbc.idbDriver" * url="jdbc:idb:C:\\castor-0.8.8\\db\\test\\test.prp"> * <param name="user" value="" /> * <param name="password" value="" /> * </driver> * <mapping href="mapping.xml" /> * </database> * </pre> * * @author <a href="mailto:bozyurt@san.rr.com">I. Burak Ozyurt</a> * @version 1.0 */ public final class InstantDBFactory extends GenericFactory { //----------------------------------------------------------------------------------- public static final String FACTORY_NAME = "instantdb"; /** * @inheritDoc */ public String getFactoryName() { return FACTORY_NAME; } /** * @inheritDoc */ public QueryExpression getQueryExpression() { return new InstantDBQueryExpression(this); } /** * Needed to process OQL queries of "CALL" type (using stored procedure * call). This feature is specific for JDO. * * @param call Stored procedure call (without "{call") * @param paramTypes The types of the query parameters * @param javaClass The Java class of the query results * @param fields The field names * @param sqlTypes The field SQL types * @return null if this feature is not supported. */ public PersistenceQuery getCallQuery(final String call, final Class<?>[] paramTypes, final Class<?> javaClass, final String[] fields, final int[] sqlTypes) { // stored procedures are not supported by Instant DB return null; } /** * For NUMERIC type ResultSet.getObject() returns Double instead of BigDecimal for InstantDB. * <br/> * @inheritDoc */ public Class<?> adjustSqlType(final Class<?> sqlType) { if (sqlType == java.math.BigDecimal.class) { return java.lang.Double.class; } return sqlType; } //----------------------------------------------------------------------------------- }