Uploaded image for project: 'Teiid Designer'
  1. Teiid Designer
  2. TEIIDDES-3182

SQL Transformation validation doesn't consider Source functions as Aggregate

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Won't Do
    • Icon: Major Major
    • None
    • 11.1.2
    • None
    • None
    • Hide

      1. Create a Source Function for Oracle LEAD, with 1 input parameter and 1 RETURN
      2. Create a View using the LEAD() function with the OVER clause, i.e.

      SELECT
      HRSPROD.VDB_TEST_TBL.NM, HRSPROD.VDB_TEST_TBL.ADDDATE, GREATEST('HARRY', 'HARRIOT', 'HAROLD') AS greatest, LEAD(HRSPROD.VDB_TEST_TBL.ADDDATE) OVER (PARTITION BY NM Order by ADDDATE) AS LEAD_DT
      FROM
      HRSPROD.VDB_TEST_TBL

      3. Transformation validation will give ERROR: Error in parsing of sql - No enum constant org.teiid.designer.query.sql.symbol.IAggregateSymbol.Type.LEAD

      Show
      1. Create a Source Function for Oracle LEAD, with 1 input parameter and 1 RETURN 2. Create a View using the LEAD() function with the OVER clause, i.e. SELECT HRSPROD.VDB_TEST_TBL.NM, HRSPROD.VDB_TEST_TBL.ADDDATE, GREATEST('HARRY', 'HARRIOT', 'HAROLD') AS greatest, LEAD(HRSPROD.VDB_TEST_TBL.ADDDATE) OVER (PARTITION BY NM Order by ADDDATE) AS LEAD_DT FROM HRSPROD.VDB_TEST_TBL 3. Transformation validation will give ERROR: Error in parsing of sql - No enum constant org.teiid.designer.query.sql.symbol.IAggregateSymbol.Type.LEAD
    • Workaround Exists
    • Hide

      Use Dynamic VDB instead:

      <?xml version="1.0" encoding="UTF-8" standalone="no"?>
      <vdb name="LPIN_TEST_VDB" version="2">
      <description/>
      <property name="validationDateTime" value="Tue Feb 27 12:35:47 CST 2018"/>
      <property name="validationVersion" value="8.12.13"/>
      <model name="HRSPROD">
      <source connection-jndi-name="java:/BQT" name="HRSPROD" translator-name="oracle"/>
      <metadata type="DDL"><![CDATA[

      CREATE FOREIGN TABLE VDB_TEST_TBL (
      NM string(30) OPTIONS(NAMEINSOURCE '"NM"', NATIVE_TYPE 'VARCHAR2'),
      ADDDATE date OPTIONS(NAMEINSOURCE '"ADDDATE"', NATIVE_TYPE 'DATE', FIXED_LENGTH 'TRUE')
      ) OPTIONS(NAMEINSOURCE '"VDB_TEST_TBL"', UPDATABLE 'TRUE');

      CREATE FOREIGN FUNCTION GREATEST (
      IN newParameter_1 string(4000),
      IN newParameter_2 string(4000),
      IN newParameter_3 string(4000),
      OUT newParameter_4 string(4000) NOT NULL RESULT
      ) OPTIONS(NAMEINSOURCE 'GREATEST');

      CREATE FOREIGN FUNCTION LEAD (
      IN newParameter_1 string(4000),
      OUT newParameter_2 string(4000) RESULT
      ) OPTIONS(NAMEINSOURCE 'LEAD', AGGREGATE 'TRUE', "ALLOWS-ORDERBY" 'TRUE', "ALLOWS-DISTINCT" 'TRUE');

      ]]></metadata>
      </model>
      <model name="VBL" type="VIRTUAL">
      <property name="imports" value="HRSPROD"/>
      <metadata type="DDL"><![CDATA[
      CREATE VIEW TESTVIEW (
      NM string(30),
      ADDDATE date,
      greatest string,
      LEAD_DT string
      )
      AS
      SELECT
      HRSPROD.VDB_TEST_TBL.NM, HRSPROD.VDB_TEST_TBL.ADDDATE, GREATEST('HARRY', 'HARRIOT', 'HAROLD') AS greatest, LEAD(HRSPROD.VDB_TEST_TBL.ADDDATE) OVER (PARTITION BY NM Order by ADDDATE) AS LEAD_DT
      FROM
      HRSPROD.VDB_TEST_TBL;

      ]]></metadata>
      </model>
      </vdb>

      Show
      Use Dynamic VDB instead: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <vdb name="LPIN_TEST_VDB" version="2"> <description/> <property name="validationDateTime" value="Tue Feb 27 12:35:47 CST 2018"/> <property name="validationVersion" value="8.12.13"/> <model name="HRSPROD"> <source connection-jndi-name="java:/BQT" name="HRSPROD" translator-name="oracle"/> <metadata type="DDL"><![CDATA[ CREATE FOREIGN TABLE VDB_TEST_TBL ( NM string(30) OPTIONS(NAMEINSOURCE '"NM"', NATIVE_TYPE 'VARCHAR2'), ADDDATE date OPTIONS(NAMEINSOURCE '"ADDDATE"', NATIVE_TYPE 'DATE', FIXED_LENGTH 'TRUE') ) OPTIONS(NAMEINSOURCE '"VDB_TEST_TBL"', UPDATABLE 'TRUE'); CREATE FOREIGN FUNCTION GREATEST ( IN newParameter_1 string(4000), IN newParameter_2 string(4000), IN newParameter_3 string(4000), OUT newParameter_4 string(4000) NOT NULL RESULT ) OPTIONS(NAMEINSOURCE 'GREATEST'); CREATE FOREIGN FUNCTION LEAD ( IN newParameter_1 string(4000), OUT newParameter_2 string(4000) RESULT ) OPTIONS(NAMEINSOURCE 'LEAD', AGGREGATE 'TRUE', "ALLOWS-ORDERBY" 'TRUE', "ALLOWS-DISTINCT" 'TRUE'); ]]></metadata> </model> <model name="VBL" type="VIRTUAL"> <property name="imports" value="HRSPROD"/> <metadata type="DDL"><![CDATA[ CREATE VIEW TESTVIEW ( NM string(30), ADDDATE date, greatest string, LEAD_DT string ) AS SELECT HRSPROD.VDB_TEST_TBL.NM, HRSPROD.VDB_TEST_TBL.ADDDATE, GREATEST('HARRY', 'HARRIOT', 'HAROLD') AS greatest, LEAD(HRSPROD.VDB_TEST_TBL.ADDDATE) OVER (PARTITION BY NM Order by ADDDATE) AS LEAD_DT FROM HRSPROD.VDB_TEST_TBL; ]]></metadata> </model> </vdb>

      When modeling Source Functions if Aggregate property is set to true the SQL transformation validator doesn't recognize it as such and errors with ERROR: Error in parsing of sql - No enum constant org.teiid.designer.query.sql.symbol.IAggregateSymbol.Type.LEAD

            blafond Barry LaFond
            rhn-support-dsteigner Deborah Steigner (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: