[
https://issues.apache.org/jira/browse/DERBY-4357?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12751114#action_12751114
]
Chris Goodacre commented on DERBY-4357:
---------------------------------------
I think it would be helpful to be a little clearer about the semantics and
invocation of the the RestrictedVTI interface methods. I'd like to see
something like this (if this is actually correct):
There is no implicit or explicit order of invocation for
setMaterializedColumnNames() and setRestriction().
The setMaterializedColumnNames(...) method is guaranteed to be invoked only 1
time per TableFunction execution. This invocation must occur prior to any
invocation of any of the following methods:
getXXXXXX()
next()
isFirst()
first()
isLast()
last()
The setRestriction(....) method is guaranteed to be invoked only 1 time per
TableFunction execution. NOTE: the Restriction class is a binary tree
representing all restrictions in the WHERE clause of the underlying query in
which a column/field from the TableFunction is compared against a constant
value. Specifically, setRestriction is *not* invoked once for each
restriction. This invocation must occur prior to any invocation of the methods
enumated in setMaterializedColumnNames().
Btw- I realize that the API doc for Restriction also specifically states that
it is a binary tree, I just think it's helpful in the interface doc to head off
any misunderstanding.
> TableFunctions provide no information to limit underlying query
> ---------------------------------------------------------------
>
> Key: DERBY-4357
> URL: https://issues.apache.org/jira/browse/DERBY-4357
> Project: Derby
> Issue Type: Improvement
> Components: SQL
> Affects Versions: 10.4.1.3, 10.4.2.0, 10.5.1.1, 10.5.2.0, 10.5.3.0
> Environment: ALL
> Reporter: Chris Goodacre
> Attachments: RestrictedTableFunctions.html
>
>
> The API specification for TableFunctions cannot provide information to the
> implementer of the TableFunction about the details of the query. For
> example:
> (a) I defined a table function named MyFunction with columns a,b, & c
> (b) I bind the table function properly using the CREATE FUNCTION SQL.
> User executes the following SQL:
> select a,b from table ( MyFunction() ) where c = 123
> Without passing the column list and/or where clause as arguments to the table
> function, my implementation can not know that it only needs two of the three
> columns, and only rows where c = 123.
> For TableFunctions that are built to integrate distant/legacy data, the cost
> of the query can be prohibitive. It would be better if information
> regarding the columns in the select and restrictions from the where clause
> could be passed to the developer.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.