Kurt Westerfeld (JIRA) wrote:

> VTI Interface "IQualifyable" Semantics Unclear or Broken
> --------------------------------------------------------
> 
>          Key: DERBY-703
>          URL: http://issues.apache.org/jira/browse/DERBY-703
>      Project: Derby
>         Type: Improvement
>   Components: Store  
>     Versions: 10.1.2.1, 10.1.2.0, 10.1.1.2, 10.1.1.1, 10.1.1.0, 10.0.2.1, 
> 10.0.2.0    
>  Environment: This is not a platform-specific issue--more of the programming 
> interface for internal VTI genration
>     Reporter: Kurt Westerfeld
> 
> 
> Our application wishes to generate some custom VTI implementations.  The VTI 
> package has an interface called IQualifyable, which when implemented seems 
> like it should pass all query parameters for the table.  It actually does 
> this, but when implemented by the VTI, effectlively removes all "WHERE" 
> clause filtering from the SQL engine processing the VTI table request.  
> Implementing this interface requires the VTI to handle all such processing.
> 
> As an example, if you had a VTI with table columns "one", "two" and "three", 
> and wanted to do some special processing for one of the columns by 
> intercepting the IQualifyable interface (say, column "one"), processing for 
> all three columns would be the responsibility for the VTI.
> 
> I would propose one of two improvements to resolve this issue:
>    1. Allow the IQualifyable interface to simply have a "crack at it" to see 
> what the query parameters are, and then allow additional selection processing 
> to occur by the SQL engine, or 
>    2. Implement a new marker interface or sub-interface of IQualifyable which 
> allows for the new semantic of intercepting the query parameters 
> provided--similar to IQualifyable but allowing filtering to occur
> 

That was the original thought, if you see the code you can see a
commented out (partial) method called handleQualifier. This would be
called to dertermine which qualifiers can be pushed down.

I think that currently only qualifiers that can be pushed to the store
are pushed into a vti, thus with this where clause:

   WHERE NAME LIKE 'Smith%' and balance < ?

only the balance < ? would be pushed into the VTI. The LIKE would be
executed with the Derby engine itself.

Dan.

Reply via email to