[
https://issues.apache.org/jira/browse/TINKERPOP-1236?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15212326#comment-15212326
]
ASF GitHub Bot commented on TINKERPOP-1236:
-------------------------------------------
GitHub user okram opened a pull request:
https://github.com/apache/incubator-tinkerpop/pull/277
TINKERPOP-1236: SelectDenormalizationStrategy for select().by(starGraph) in
OLAP.
https://issues.apache.org/jira/browse/TINKERPOP-1236
This is massive. We have been plagued by
`select("a","b").by("name").by("age")`-style traversals not working in OLAP
because they are `PathProcessor` traversals are grab `ReferenceElements` out of
the LABELED_PATH. However, you can compile these to work:
``
select("a").by("name") -> select("a").map(values("name"))
select("a","b").by("name").by("age") ->
select("a").map(values("name")).as("a").select("b").map(values("name")).as("b").select(last,"a","b")
```
When we are able to drop path labels, we will be able to open up
`where(as("a").outE().count().is(gt(10))`-style traversals to OLAP as well.
Note that this type of `WhereTraversalStep` typically is used in conjunction
with `MatchStep` and `MatchPredicateStrategy` handles it appropriately so we
are not missing out too much.
CHANGELOG
```
* `select("a","b").by("name").by("age")`-style traversals now work in OLAP
with new `PathProcessorStrategy`.
```
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/apache/incubator-tinkerpop TINKERPOP-1236
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/incubator-tinkerpop/pull/277.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #277
----
commit 7a52aa4ebd072cdacdf07005eb587815e39835e7
Author: Marko A. Rodriguez <[email protected]>
Date: 2016-03-25T15:01:19Z
Created SelectLinearizationStrategy which for OLAP. Right now, it just does
the easy part of making select('a').by('name') into
select('a').map(values('name')). This doesn't cover the full range of what we
want, but a start.
commit bb06ee5a6f2347fd0495485bbbaaedf5e049a438
Author: Marko A. Rodriguez <[email protected]>
Date: 2016-03-25T16:53:21Z
Merge branch 'master' into TINKERPOP-1236
commit 9ff33dda97a4fa1927f1689b19a04d7e2e2b2f9b
Author: Marko A. Rodriguez <[email protected]>
Date: 2016-03-25T19:24:44Z
Renamed SelectLinearizationStrategy to PathProcessorStrategy as it handles
SelectStep, SelectOneStep, and WhereTraversalStep. Opened up a bunch more tests
throughout in WhereTest, SelectTest, and MatchTest.
commit 69d8ce69c148481c88f733fe90b6076c6f3d0341
Author: Marko A. Rodriguez <[email protected]>
Date: 2016-03-25T19:50:47Z
added PathProcessStratergyTest to ensure that the compilation is as
expected. Found a bug around TraversalFilterStep conversion required when a
WhereTraversal is stripped of its start/end labels. Fixed. This is ready to go.
----
> SelectDenormalizationStrategy for select().by(starGraph) in OLAP.
> -----------------------------------------------------------------
>
> Key: TINKERPOP-1236
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1236
> Project: TinkerPop
> Issue Type: Improvement
> Components: process
> Affects Versions: 3.1.1-incubating
> Reporter: Marko A. Rodriguez
>
> Right now, if you do anything beyond {{select().by(id)}} in OLAP, you get a
> {{PathProcessor can't go beyond ElementRequirements.ID}}-style exception.
> This is TOTALLY unacceptable (like totally... I know right.) because
> {{select()}} is so heavily used that it makes the OLAP experience not so
> bueno.
> Enter -- {{SelectDenomalizationStrategy}} which will only be used in OLAP
> compilations.
> {code}
> select("a").by("name") // not allowed in OLAP right now. (1)
> select("a").map(values("name")) // allowed in OLAP. (2)
> {code}
> Thus, compile (1) into (2). However, in a {{while(true)}}-loop until
> {{boolean fullyDenormalized}} you also check on this pattern:
> {code}
> select("a","b").by(outE().count()).by("name") // not allowed in OLAP right
> now (1)
> select("a").by(outE().count()).as("a").select("b").by("name").as("b").select("a","b",Pop.last)
> // not allowed in OLAP right now, but this denormalizes again given the
> first SelectOne pattern
> {code}
> The only problem with this is that future {{select()}} will {{Pop}} a list.
> We need to really make it so we can drop path labels.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)