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;
 }
Esempio n. 3
0
  /**
   * 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());
  }