This looks fine. Can you attach the patch to a feature request in JIRA (you can create a free account)?
On Sun, Dec 11, 2011 at 4:41 PM, darrencruse <[email protected]> wrote: > > Hi guys new to the forum hope I'm posting this to the right place - apologies > if not please let me know what/where else I should ask this if so. I notice > there's references to Jira here if this should be one of those please let me > know (I'm dumb about Jira not sure if I'm even allowed?) > > Basically I'm needing to use DataSourceResourceLoader against a pre-existing > table that I have no control over, and the table doesn't quite match what > the DataSourceResourceLoader's query requires. > > e.g. My table uses a compound key rather than a single column (it's actually > a template name in one column and a template version number in the other and > I have to pick the most recent version). > > Plus what's in the template name column doesn't match what Velocity passes > through as the templateName used in the DataSourceResourceLoader's query. > > i.e. Velocity will give me a template name something like > "templates/template.vm" and what I have in my db table is just the > "template" part. > > So anyway from what I can see the DataSourceResourceLoader will not work > with my table as is. Please correct me if I'm wrong. Unfortunately I don't > really have control to change the table... > > I had the thought that I could extend DataSourceResourceLoader and simply > override the part where the query is constructed, but unfortunately > DataSourceResourceLoader has a private method getStatement(), so that would > need a little tweaking to be overriden in a class extending > DataSourceResourceLoader. > > If everything above seems correct what I was hoping to ask/suggest is a tiny > modification to the class that would allow myself and others to customize > the query. > > And that is simply: > a. to make that function protected not private, and > b. to pass in tableName and keyColumn so the function doesn't need to > access those private members as it does now. > > i.e. the function becomes as follows, and the two calls to the originally > private getStatement() in the are changed to pass the private members as > arguments: > > /** > * 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; > } > > Does this seem like a reasonable enhancement? (has nobody requested > something like this before?) > > Can anybody see any harm in it? > > At the moment I've made my own copy of DataSourceResourceLoader that I've > modified as described above, I just hate that on a Velocity upgrade things > could break. > > Attaching my modified DataSourceResourceLoader.java file with these changes > in case the change really could be considered for the next version of > Velocity. This is from the velocity-1.7 source btw. > > Thanks and hope this doesn't seem pushy I do think it would be nice to have > in the official code base if others also think it's worthwhile. > > Darren > > http://old.nabble.com/file/p32957497/DataSourceResourceLoader.java > DataSourceResourceLoader.java > > -- > View this message in context: > http://old.nabble.com/Customizing-the-query-used-by-DataSourceResourceLoader-tp32957497p32957497.html > Sent from the Velocity - Dev mailing list archive at Nabble.com. > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
