[ 
https://issues.apache.org/jira/browse/CALCITE-501?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14239900#comment-14239900
 ] 

Julian Hyde commented on CALCITE-501:
-------------------------------------

FWIW, to solve #2 you could give a custom metadata provider for stats, and you 
wouldn't need to change ReflectiveSchema.

I think what you're hitting is the phase-change between database optimization 
and programming language optimization. Databases assume stats at compile time, 
programming languages work with no stats, but (comparatively recently) have 
stats for JIT. But AFAIK JIT focuses on hotspots, not global optimization.

Depending on how you look at it, solving the disconnect between those two 
approaches is a world of pain or an opportunity for academic stardom. So I 
don't blame you for taking an easier path!

> Implement indexed access paths in ReflectiveSchema
> --------------------------------------------------
>
>                 Key: CALCITE-501
>                 URL: https://issues.apache.org/jira/browse/CALCITE-501
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.0.0-incubating
>            Reporter: Vladimir Sitnikov
>            Assignee: Julian Hyde
>
> {{ReflectiveSchema}} is not able to perform indexed scan of a particular 
> collection.
> It would be nice if it could find rows by a given key.
> This would demonstrate the way to implement indexed access path in Calcite: 
> rules, filter matching.
> The sketch API can be as follows:
> {code:java}
>   public static class CatchallSchema {
>     public final Employee[] employees = {
>       new Employee(1, 10, "A", 0f, null),
>       new Employee(2, 10, "Ab", 0f, null),
>       new Employee(3, 10, "Abc", 0f, null),
>       new Employee(4, 10, "Abd", 0f, null),
>     };
> // Return the data
>    public Employee[] findEmployeesByName(String name);
> // or
> // List of indices into "employees" collection
>    public int[] findEmployeesByName(String name);
> }
> {code}
> Alternative solution is to treat {{Map/SortedMap}} somehow in a special way.
> {code:java}
> // When Filter(name=?, Scan) can be transformed to MapGet(name=?)
> public Map<String, Employee> employees;
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to