You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by "Darren Cruse (Updated) (JIRA)" <de...@velocity.apache.org> on 2012/01/02 21:12:30 UTC

[jira] [Updated] (VELOCITY-814) Allow for overriding the query used by DataSourceResourceLoader

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

Darren Cruse updated VELOCITY-814:
----------------------------------

    Attachment: DataSourceResourceLoader.java

File with suggested changes.
                
> 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: 1.7.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 file is also available as an attachment to the 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: dev-unsubscribe@velocity.apache.org
For additional commands, e-mail: dev-help@velocity.apache.org