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]); }
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())); }