db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Knut Anders Hatlen (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (DERBY-6003) Create row templates outside of the generated code
Date Fri, 07 Dec 2012 13:55:21 GMT

     [ https://issues.apache.org/jira/browse/DERBY-6003?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Knut Anders Hatlen updated DERBY-6003:

    Attachment: d6003-5a-sort-vti-aggregate-window.diff

Attaching d6003-5a-sort-vti-aggregate-window.diff which makes the
result sets for distinct scans, VTIs, aggregations and window
functions use ExecRowBuilder instead of generated methods.

The code that creates the generated method is still there, since it's
still needed by IndexToBaseRowNode. I plan to address that in the next

All the regression tests ran cleanly with the 5a patch.


- java/engine/org/apache/derby/iapi/sql/execute/ResultSetFactory.java
- java/engine/org/apache/derby/impl/sql/execute/GenericResultSetFactory.java

Signature changes to allow callers to pass a reference to a saved
object (the ExecRowBuilder) instead of a generated method.

- java/engine/org/apache/derby/impl/sql/compile/DistinctNode.java
- java/engine/org/apache/derby/impl/sql/compile/FromVTI.java
- java/engine/org/apache/derby/impl/sql/compile/GroupByNode.java
- java/engine/org/apache/derby/impl/sql/compile/OrderByList.java
- java/engine/org/apache/derby/impl/sql/compile/WindowResultSetNode.java

Push a reference to an ExecRowBuilder as argument to the result set
creation method instead of generating a row allocator method.

- java/engine/org/apache/derby/impl/sql/execute/DistinctGroupedAggregateResultSet.java
- java/engine/org/apache/derby/impl/sql/execute/DistinctScalarAggregateResultSet.java
- java/engine/org/apache/derby/impl/sql/execute/GenericAggregateResultSet.java
- java/engine/org/apache/derby/impl/sql/execute/GroupedAggregateResultSet.java
- java/engine/org/apache/derby/impl/sql/execute/ScalarAggregateResultSet.java
- java/engine/org/apache/derby/impl/sql/execute/SortResultSet.java
- java/engine/org/apache/derby/impl/sql/execute/VTIResultSet.java
- java/engine/org/apache/derby/impl/sql/execute/WindowResultSet.java

Use the ExecRowBuilder to produce the row template instead of invoking
the generated method.

- java/engine/org/apache/derby/impl/sql/compile/ResultColumnList.java

Remove the two-argument generateHolder() method, as it is no longer used.
> Create row templates outside of the generated code
> --------------------------------------------------
>                 Key: DERBY-6003
>                 URL: https://issues.apache.org/jira/browse/DERBY-6003
>             Project: Derby
>          Issue Type: Improvement
>          Components: SQL
>    Affects Versions:
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>            Priority: Minor
>         Attachments: d6003-1a-cleanup.diff, d6003-2a-unused-field.diff, d6003-3a-safe-downgrade.diff,
d6003-3b-downgrade-workaround-in-tests.diff, d6003-3c-downgrade-with-stored-proc.diff, d6003-4a-scanresultset.diff,
> The constructors for many of the result set classes take GeneratedMethod parameters that
create row templates (an ExecRow of a certain size and column types, each column initialized
to an SQL null value).
> As an alternative, the compiler could produce an ExecRow instance and put it into the
savedObjects field of GenericPreparedStatement, and the constructors could take parameter
that points to the object in savedObjects. Where the result sets currently invoke the generated
method to produce a fresh template, they could instead clone the saved object.
> Advantages with the suggested approach would be:
> - Reduce the size of the code generator, which should reduce total code complexity.
> - Reduce the amount of generated code, which makes it easier for tools (profilers, static
code analyzers, IDEs) to map executable code to source code.
> - Reduce the actual number of generated methods, which makes it less likely that queries
need to use reflection to invoke the remaining generated methods (there's a switchover from
DirectCall to ReflectCall when the number of generated methods exceeds 10).

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

View raw message