0 Replies Latest reply: Nov 4, 2011 1:53 PM by Helmut Melcher RSS

    bug with cross products: V9? And V10??

    Helmut Melcher

      I have developed hundreds of lines of QV code for our company. At one point, I got a problem. I think, that I found a bug in the QV interpreter of V9 (9.00.7502.8 SR 5 64 bit x64).

       

      Could anybody having V9 still in use please check?

      We plan to upgrade to V10. Could anybody please check for V10?

      Many thanks in advance.

       

      I reduced and simplified the code to the following trivial demo code.

       

      The JOIN calculates a complete cross product of Table2 and Table3. The resulting table cannot be CONCATENATEd to Table1! The concatenate is simply ignored. When I view Table1 in the GUI, it still has only two rows.

       

      If I add an arbitrary field with arbitrary content to the cross product, the resulting table can be concatenated and the expected result for Table1 is generated: 6 rows (the original 2 rows plus 2x2=4 rows for the cross product of Table2 and Table3).

       

       

      //-------

      Table1:

      LOAD * INLINE [

          A, B

          A1, B1

          A2, B2

      ];

       

      Table2:

      LOAD * INLINE [

          A

          A3

          A4

      ];

       

      Table3:

      LOAD * INLINE [

          B

          B3

          B4

      ];

       

      Table4:

      NOCONCATENATE LOAD * RESIDENT Table2;

      JOIN (Table4) LOAD * RESIDENT Table3;

       

      // Code version1: This code does not work: Table4, generated as full cross product by the JOIN, is not appended to Table1!

      // Result (GUI): Table1 with the original two rows

      CONCATENATE (Table1) LOAD * RESIDENT Table4;

       

      // Code version2: This code does work - with the work-around. The concatenate is done after having added a dummy field to the cross product.

      // Result (GUI): Table 1 with the expected 6 rows

      /*

      CONCATENATE (Table1) LOAD *, null() as dummy RESIDENT Table4;

      DROP FIELD dummy FROM Table1;

      */

       

      // clean up

      DROP TABLE Table2, Table3, Table4;