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

ASF GitHub Bot commented on RYA-260:
------------------------------------

Github user meiercaleb commented on a diff in the pull request:

    https://github.com/apache/incubator-rya/pull/156#discussion_r112546328
  
    --- Diff: 
extras/rya.pcj.fluo/pcj.fluo.app/src/main/java/org/apache/rya/indexing/pcj/fluo/app/observers/TripleObserver.java
 ---
    @@ -62,85 +66,113 @@ public ObservedColumn getObservedColumn() {
     
         @Override
         public void process(final TransactionBase tx, final Bytes brow, final 
Column column) {
    -        //get string representation of triple
    -        String row = brow.toString();
    -        final String triple = IncUpdateDAO.getTripleString(brow);
    -        String visibility = tx.gets(row, FluoQueryColumns.TRIPLES, "");
    -       
    -        //get variable metadata for all SP in table
    -        RowScanner rscanner = 
tx.scanner().over(Span.prefix(SP_PREFIX)).fetch(FluoQueryColumns.STATEMENT_PATTERN_VARIABLE_ORDER).byRow().build();
    -       
    +        // Get string representation of triple.
    +        final RyaStatement ryaStatement = 
IncUpdateDAO.deserializeTriple(brow);
    +        log.trace(
    +                "Transaction ID: " + tx.getStartTimestamp() + "\n" +
    +                "Rya Statement: " + ryaStatement + "\n");
     
    -        //see if triple matches conditions of any of the SP
    +        final String triple = IncUpdateDAO.getTripleString(ryaStatement);
     
    -        for (ColumnScanner colScanner : rscanner) {
    +        // Iterate over each of the Statement Patterns that are being 
matched against.
    +        final RowScanner spScanner = tx.scanner()
    +                .over(Span.prefix(SP_PREFIX))
    +
    +                // Only fetch rows that have the pattern in them. There 
will only be a single row with a pattern per SP.
    +                .fetch(FluoQueryColumns.STATEMENT_PATTERN_PATTERN)
    +                .byRow()
    +                .build();
    +
    +        //see if triple matches conditions of any of the SP
    +        for (final ColumnScanner colScanner : spScanner) {
    +            // Get the Statement Pattern's node id.
                 final String spID = colScanner.getsRow();
     
    -            final StatementPatternMetadata spMetadata = 
QUERY_DAO.readStatementPatternMetadata(tx, spID);
    +            // Fetch its metadata.
    +            final StatementPatternMetadata spMetadata = 
QUERY_METADATA_DAO.readStatementPatternMetadata(tx, spID);
    +
    +            // Attempt to match the triple against the pattern.
                 final String pattern = spMetadata.getStatementPattern();
    -            
    -            for (ColumnValue cv : colScanner) {
    -                final String varOrders = cv.getsValue();
    -                final VariableOrder varOrder = new 
VariableOrder(varOrders);
    -                final String bindingSetString = getBindingSet(triple, 
pattern, varOrders);
    -
    -                //Statement matches to a binding set
    -                if(bindingSetString.length() != 0) {
    -                    final VisibilityBindingSet bindingSet = new 
VisibilityBindingSet(
    -                        CONVERTER.convert(bindingSetString, varOrder),
    -                        visibility);
    -                    final String valueString = 
CONVERTER.convert(bindingSet, varOrder);
    -                    tx.set(spID + NODEID_BS_DELIM + bindingSetString, 
FluoQueryColumns.STATEMENT_PATTERN_BINDING_SET, valueString);
    +            final VariableOrder varOrder = spMetadata.getVariableOrder();
    +            final String bindingSetString = getBindingSet(triple, pattern, 
varOrder);
    +
    +            // Statement matches to a binding set.
    +            if(bindingSetString.length() != 0) {
    +                // Fetch the triple's visibility label.
    +                final String visibility = tx.gets(brow.toString(), 
FluoQueryColumns.TRIPLES, "");
    +
    +                // Create the Row ID for the emitted binding set. It does 
not contain visibilities.
    +                final String row = spID + NODEID_BS_DELIM + 
bindingSetString;
    +                final Bytes rowBytes = Bytes.of( 
row.getBytes(Charsets.UTF_8) );
    +
    +                // If this is a new Binding Set, then emit it.
    +                if(tx.get(rowBytes, 
FluoQueryColumns.STATEMENT_PATTERN_BINDING_SET) == null) {
    --- End diff --
    
    This is a worthwhile optimization.


> Add Aggregation support for Fluo/PCJ app
> ----------------------------------------
>
>                 Key: RYA-260
>                 URL: https://issues.apache.org/jira/browse/RYA-260
>             Project: Rya
>          Issue Type: New Feature
>            Reporter: Andrew Smith
>            Assignee: Kevin Chilton
>
> A user must be able to submit a PCJ query that contains the following 
> aggregation functions from SPARQL:
> * Sum
> * Count
> * Average
> * Min
> * Max
> This task does not include any aggregations that appear within a GroupBy 
> clause. We only need to support queries that have the aggregation within the 
> SELECT section.
> For example, the following query should be processed:
> {code}
> SELECT (avg(?price) as ?averagePrice)
> {
>     urn:BookA urn:price ?price.
> }
> {code}
> And the following query should not be processed because it requires a group 
> by:
> {code}
> SELECT ?title (avg(?price) as ?averagePrice)
> {
>     ?title urn:price ?price.
> }
> GROUP BY ?title
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to