0

Hi how can I use database stored GString definitions for dynamically generated data. I was able to use GString for pick and choose row attributes if format is defined in the code

code_format = "${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}" 

However if same definition is extracted from database my code is not working.

Sql sql = Sql.newInstance(url, login, password, driver);

sql.eachRow(SQL) { row ->
    code_format = "${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}" 
    database_format = "${-> row.REPORT_ATTRIBUTES}"

    println "1-  " + code_format
    println "2-  " + database_format         
    println "CODE : " + code_format.dump()
    println "DB   : " + database_format.dump()

}   

When I run this code I am getting following output;

1-  FlowerHouse Joe
2-  ${-> row.ACCOUNT} ${-> row.ACCOUNT_OWNER}
CODE : <org.codehaus.groovy.runtime.GStringImpl@463cf024 strings=[,  , ] values=[GString$_run_closure1_closure2@44f289ee, GString$_run_closure1_closure3@f3d8b9f]>
DB   : org.codehaus.groovy.runtime.GStringImpl@4f5e9da9 strings=[, ] values=[GString$_run_closure1_closure4@11997b8a]
LSasmazel
  • 21
  • 1
  • 4

1 Answers1

1

row.REPORT_ATTRIBUTES returns String because database doesn't know groovy stings format.

GString is template, which can be created from string.

So you can do something like:

def engine = new groovy.text.SimpleTemplateEngine()
println engine.createTemplate(row.REPORT_ATTRIBUTES).make([row:row]).toString()
Evgeny Smirnov
  • 2,886
  • 1
  • 12
  • 22