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;
}
//-----------------------------------------------------------------------------------
}