[ 
https://issues.apache.org/jira/browse/VELOCITY-814?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Nathan Bubna resolved VELOCITY-814.
-----------------------------------

       Resolution: Fixed
    Fix Version/s:     (was: 1.7.x)
                   2.x

Sorry it took so long.  Holidays and all...

I applied the patch to 2.x, as that is the trunk now and likely next version.
                
> Allow for overriding the query used by DataSourceResourceLoader
> ---------------------------------------------------------------
>
>                 Key: VELOCITY-814
>                 URL: https://issues.apache.org/jira/browse/VELOCITY-814
>             Project: Velocity
>          Issue Type: Improvement
>          Components: Engine
>    Affects Versions: 1.7.x
>            Reporter: Darren Cruse
>            Priority: Minor
>              Labels: patch
>             Fix For: 2.x
>
>         Attachments: DataSourceResourceLoader.java
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> In future versions of Velocity 1.7, allow users of DataSourceResourceLoader 
> to customize the database query used by extending the class and overriding 
> the getStatement() method.
> This would be helpful for users in cases where the table being accessed is 
> pre-existing and has a structure that does not match the default query.  e.g. 
> The default query does not work if the table has a compound key rather than a 
> single column key.
> This feature is also helpful if the template name passed by velocity differs 
> from what is actually stored in their table's keys - by overriding 
> getStatement() they can parse the template name passed prior to the query 
> being run to deal with such differences.
> Without this change such users will likely copy and modify the entire 
> DataSourceResourceLoader.java file, but with this change it's far easier to 
> simply override the getStatement() function alone. 
> The necessary changes are simply to: 
> a. make the getStatement() function protected not private, and
> b.  pass in tableName and keyColumn so the function doesn't need access those 
> as private members.
> i.e. the getStatement() function becomes as follows:
>     /**
>      * Creates the following PreparedStatement query :
>      * <br>
>      *  SELECT columnNames FROM tableName WHERE keyColumn
>      *     = 'templateName'
>      * <br>
>      * where keyColumn is a class member set in init()
>      *
>      * @param conn connection to datasource
>      * @param columnNames columns to fetch from datasource
>      * @param tableName table to fetch from
>      * @param keyColumn column whose value should match templateName
>      * @param templateName name of template to fetch
>      * @return PreparedStatement
>      */
>     protected PreparedStatement getStatement(final Connection conn,
>                                final String columnNames,
>                                final String tableName,
>                                final String keyColumn,
>                                final String templateName) throws SQLException
>     {
>         PreparedStatement ps = conn.prepareStatement("SELECT " + columnNames 
> + " FROM "+ tableName + " WHERE " + keyColumn + " = ?");
>         ps.setString(1, templateName);
>         return ps;
>     }
> And then the two calls to getStatement() are changed to pass the tableName 
> and keyColumn name as parameters:
> 1. The call to getStatement() at line 232 changes from:
>             ps = getStatement(conn, templateColumn, name);
> to:
>             ps = getStatement(conn, templateColumn, tableName, keyColumn, 
> name);
> 2. The call to getStatement() at line 308 changes from:
>             ps = getStatement(conn, timestampColumn, name);
> to:
>             ps = getStatement(conn, timestampColumn, tableName, keyColumn, 
> name);
> The changed and tested Velocity 1.7 DataSourceResourceLoader.java is attached.
> This JIRA was originally discussed in the Velocity Old Nabble forum message 
> at: 
>     
> http://old.nabble.com/Customizing-the-query-used-by-DataSourceResourceLoader-to32957497.html

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to