[ 
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

Reply via email to