public void testParameterMetadata() throws ReportDataFactoryException { final DriverConnectionProvider drc = new DriverConnectionProvider(); drc.setDriver("org.hsqldb.jdbcDriver"); drc.setUrl("jdbc:hsqldb:mem:SampleData"); drc.setProperty("user", "sa"); drc.setProperty("password", ""); final SQLReportDataFactory sqlReportDataFactory = new SQLReportDataFactory(drc); initializeDataFactory(sqlReportDataFactory); final DataFactoryMetaData metaData = sqlReportDataFactory.getMetaData(); sqlReportDataFactory.setQuery("test", "SELECT * FROM TABLE WHERE p=${x}"); String[] fields = metaData.getReferencedFields(sqlReportDataFactory, "test", new StaticDataRow()); assertNotNull(fields); assertEquals(2, fields.length); assertEquals("x", fields[0]); assertEquals(DataFactory.QUERY_LIMIT, fields[1]); sqlReportDataFactory.setQuery("test2", "SELECT * FROM TABLE WHERE p=${x} OR p=${y} OR p=${x}"); fields = metaData.getReferencedFields(sqlReportDataFactory, "test2", new StaticDataRow()); assertNotNull(fields); assertEquals(3, fields.length); assertEquals("x", fields[0]); assertEquals("y", fields[1]); assertEquals(DataFactory.QUERY_LIMIT, fields[2]); }
protected DataFactory createDataFactory(final String query) { final DriverConnectionProvider drc = new DriverConnectionProvider(); drc.setDriver("org.hsqldb.jdbcDriver"); drc.setUrl("jdbc:hsqldb:./sql/sampledata"); drc.setProperty("user", "sa"); drc.setProperty("password", ""); final SQLReportDataFactory sqlReportDataFactory = new SQLReportDataFactory(drc); sqlReportDataFactory.setQuery("default", query); return sqlReportDataFactory; }
/** * Returns the data factory which will be used to generate the data used during report generation. * In this example, we will return null since the data factory has been defined in the report * definition. * * @return the data factory used with the report generator */ public DataFactory getDataFactory() { final DriverConnectionProvider sampleDriverConnectionProvider = new DriverConnectionProvider(); sampleDriverConnectionProvider.setDriver("org.hsqldb.jdbcDriver"); sampleDriverConnectionProvider.setUrl("jdbc:hsqldb:./sql/sampledata"); sampleDriverConnectionProvider.setProperty("user", "sa"); sampleDriverConnectionProvider.setProperty("password", ""); final SQLReportDataFactory dataFactory = new SQLReportDataFactory(sampleDriverConnectionProvider); dataFactory.setQuery( QUERY_NAME, "select CUSTOMERNAME, CITY, STATE, POSTALCODE, COUNTRY from CUSTOMERS order by UPPER(CUSTOMERNAME)"); return dataFactory; }
public void testMetaDataDrc() { final DriverConnectionProvider drc = new DriverConnectionProvider(); drc.setDriver("org.hsqldb.jdbcDriver"); drc.setUrl("jdbc:hsqldb:mem:SampleData"); drc.setProperty("user", "sa"); drc.setProperty("password", ""); final SQLReportDataFactory sqlReportDataFactory = new SQLReportDataFactory(drc); final DataFactoryMetaData metaData = sqlReportDataFactory.getMetaData(); assertNull( "No name property set, so display-name must be null", metaData.getDisplayConnectionName(sqlReportDataFactory)); drc.setProperty("::pentaho-reporting::name", "test"); assertEquals( "Name property set, so display name must be test", "test", metaData.getDisplayConnectionName(sqlReportDataFactory)); sqlReportDataFactory.setQuery("test", "SELECT * FROM TABLE"); assertNotNull( "QueryHash must exist", metaData.getQueryHash(sqlReportDataFactory, "test", new StaticDataRow())); final SQLReportDataFactory sqlReportDataFactory2 = new SQLReportDataFactory(drc); sqlReportDataFactory2.setQuery("test", "SELECT * FROM TABLE2"); assertNotEquals( "Physical Queries do not match, so query hash must be different", metaData.getQueryHash(sqlReportDataFactory, "test", new StaticDataRow()), (metaData.getQueryHash(sqlReportDataFactory2, "test", new StaticDataRow()))); sqlReportDataFactory2.setQuery("test2", "SELECT * FROM TABLE"); final Object qh1 = metaData.getQueryHash(sqlReportDataFactory, "test", new StaticDataRow()); final Object qh2 = metaData.getQueryHash(sqlReportDataFactory2, "test2", new StaticDataRow()); assertEquals("Physical Queries match, so queries are considered the same", qh1, qh2); final DriverConnectionProvider drc2 = new DriverConnectionProvider(); drc.setDriver("org.hsqldb.jdbcDriver"); drc.setUrl("jdbc:hsqldb:mem:SampleData2"); drc.setProperty("user", "sa"); drc.setProperty("password", ""); final SQLReportDataFactory sqlReportDataFactory3 = new SQLReportDataFactory(drc2); sqlReportDataFactory3.setQuery("test", "SELECT * FROM TABLE2"); assertNotEquals( "Connections do not match, so query hash must be different", metaData.getQueryHash(sqlReportDataFactory, "test", new StaticDataRow()), (metaData.getQueryHash(sqlReportDataFactory3, "test", new StaticDataRow()))); sqlReportDataFactory3.setQuery("test2", "SELECT * FROM TABLE"); assertNotEquals( "Connections do not match, so queries are considered the same", metaData.getQueryHash(sqlReportDataFactory, "test", new StaticDataRow()), metaData.getQueryHash(sqlReportDataFactory3, "test2", new StaticDataRow())); }
public void testWrite() throws Exception { final JndiConnectionProvider dummy = new JndiConnectionProvider(); dummy.setConnectionPath("Dummy"); final SQLReportDataFactory df = new SQLReportDataFactory(dummy); df.setGlobalScript("GlobalScript"); df.setGlobalScriptLanguage("GlobalScriptLanguage"); df.setQuery("QueryName", "QueryText", "ScriptLanguage", "Script"); final MasterReport report = new MasterReport(); report.setDataFactory(df); final MasterReport masterReport = postProcess(report); final SQLReportDataFactory dataFactory = (SQLReportDataFactory) masterReport.getDataFactory(); assertEquals("QueryName", dataFactory.getQueryNames()[0]); assertEquals("QueryText", dataFactory.getQuery("QueryName")); assertEquals("ScriptLanguage", dataFactory.getScriptingLanguage("QueryName")); assertEquals("Script", dataFactory.getScript("QueryName")); assertEquals("GlobalScript", dataFactory.getGlobalScript()); assertEquals("GlobalScriptLanguage", dataFactory.getGlobalScriptLanguage()); }