[
http://issues.apache.org/jira/browse/DERBY-1015?page=comments#action_12418344 ]
Sunitha Kambhampati commented on DERBY-1015:
--------------------------------------------
Thanks for the feedbac, Dan.
Looking at this some more, I think it is better to define a new interface for
ParameterMetaData for the following reasons:
-- no need to import a impl class in iapi
-- this implementation seems clean for use in server.
So the new interface EnginePreparedStatement will return
EngineParameterMetaData instead of EmbedParameterSetMetaData.
Here are the two interfaces I am proposing:
NEW INTERFACE: EngineParameterMetaData
/**
* An internal api only, mainly for use in the network server.
*
* This interface imitates the ParameterMetaData interface from JDBC3.0
* We want to provide the ParameterMetaData functionality to JDKs before
JDBC3.0.
* org.apache.derby.iapi.jdbc.EnginePreparedStatement interface returns an
object
* of this type on a getEmbedParameterSetMetaData
* Once,JDK1.3 stops being supported, this interface can be removed and
* instead the JDBC 3.0 class ParameterMetaData can be used
*/
public interface EngineParameterMetaData {
public int getParameterCount();
public int isNullable(int param) throws SQLException;
public boolean isSigned(int param) throws SQLException;
public int getPrecision(int param) throws SQLException;
public int getScale(int param) throws SQLException;
public int getParameterType(int param) throws SQLException;
public String getParameterTypeName(int param) throws SQLException;
public String getParameterClassName(int param) throws SQLException;
public int getParameterMode(int param) throws SQLException;
}
(Note: javadoc comments for the methods will be added in the actual patch)
EmbedParameterSetMetaData implements EngineParameterMetaData
-----------------------------------------------------------------------------------------------------------------------------------------------
NEW INTERFACE: EnginePreparedStatement
/**
* Additional methods the embedded engine exposes on its
* PreparedStatement object implementations. An internal api only, mainly
* for the network server. Allows consistent interaction between embedded
* PreparedStatement and Brokered PreparedStatements.
*
*/
public interface EnginePreparedStatement extends PreparedStatement {
/**
* Immitate the getParameterMetaData() that is in JDBC 3.0
* Once,JDK1.3 stops being supported, instead of returning
EngineParameterMetaData
* the JDBC 3.0 Class - ParameterMetaData can be used.
*
* Retrieves the number, types and properties of this PreparedStatement
* object's parameters.
*
* @return a EngineParameterMetaData object that contains information about
the
* number, types and properties of this PreparedStatement object's
parameters.
* @exception SQLException if a database access error occurs
*/
public EngineParameterMetaData getEmbedParameterSetMetaData()
throws SQLException;
}
EmbedPreparedStatement implements EnginePreparedStatement
BrokeredPreparedStatement implements EnginePreparedStatement
--------------------------------------------------------------------------------------------------------------
Thoughts/comments ? Thanks.
> Define interface between network server and engine through Java interfaces.
> ---------------------------------------------------------------------------
>
> Key: DERBY-1015
> URL: http://issues.apache.org/jira/browse/DERBY-1015
> Project: Derby
> Type: Improvement
> Components: JDBC
> Reporter: Daniel John Debrunner
> Assignee: Daniel John Debrunner
> Fix For: 10.2.0.0
>
> API between the network server and engine is not well defined, leading to
> inconsistent & multiple ways of handling the different objects returned, such
> as reflection, explicit casting etc. This in turn has lead to bugs such as
> DERBY-966 . DERBY-1005, and DERBY-1006, and access to underlying objects by
> the application that should be hidden.
> Define interfaces, such as EngineConnection, that both EmbedConnection and
> BrokeredConnection implement. Thus the network server can rely on the fact
> that any connection it obtains will implement EngineConnection, and call the
> required methods through that interface.
> Most likely will need EngineConnection, EnginePreparedStatement and
> EngineResultSet.. These interfaces would be internal to derby and not exposed
> to applications.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira