Taewoo Kim has posted comments on this change.

Change subject: Index-only plan
......................................................................


Patch Set 9:

(238 comments)

https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java:

Line 457:     protected boolean findIndexAndFillExprs(List<Index> 
datasetIndexes, List<String> fieldName, IAType fieldType,
> MAJOR SonarQube violation:
Done


Line 646:                         if (subTreePKs.contains(dsVar) && dsVarIndex 
<= subTreePKs.size() - 1) {
> CRITICAL SonarQube violation:
Done


Line 737:             List<LogicalVariable> primaryKeyVarList = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 922:             if (optFuncExpr.getFuncExpr().getFunctionIdentifier() == 
AsterixBuiltinFunctions.EDIT_DISTANCE_CHECK) {
> MAJOR SonarQube violation:
Done


Line 984:             if (unnestExpr.getExpressionTag() != 
LogicalExpressionTag.FUNCTION_CALL) {
> BLOCKER SonarQube violation:
Done


Line 1009:         ArrayList<Mutable<ILogicalExpression>> idxFuncArgs = new 
ArrayList<Mutable<ILogicalExpression>>();
> MAJOR SonarQube violation:
Done


Line 1032:             boolean isInnerJoin) throws AlgebricksException {
> MAJOR SonarQube violation:
Done


Line 1032:             boolean isInnerJoin) throws AlgebricksException {
> MAJOR SonarQube violation:
Done


Line 1057:                             if (subTree.selectRefs != null && 
subTree.selectRefs.size() > 0) {
> MAJOR SonarQube violation:
Done


Line 1098:                 if (subTree.selectRefs != null && 
subTree.selectRefs.size() > 0) {
> MAJOR SonarQube violation:
Done


Line 1147:                         // secondary-index search in non-index only 
plan can keep the original attribute order from the search
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodAnalysisContext.java:

Line 59:     private boolean isIndexOnlyPlan = false;
> MAJOR SonarQube violation:
Done


Line 72:     private Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


Line 72:     private Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodJobGenParams.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodJobGenParams.java:

Line 53:     private final int NUM_PARAMS = 8;
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java:

Line 253:         int numOutputVars = (primaryKeysOnly) ? numPrimaryKeys : 
numPrimaryKeys + numSecondaryKeys;
> MAJOR SonarQube violation:
Done


Line 257:         // If not, add one more variables to put the result of 
instantTryLock - whether this lock can be granted on a primary key
> MAJOR SonarQube violation:
Done


Line 259:         // If it is not granted, then we need to do a secondary index 
lookup, sort PKs, do a primary index lookup, and select.
> MAJOR SonarQube violation:
Done


Line 333:         List<LogicalVariable> keyVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 334:         List<LogicalVariable> sourceVars = null;
> MAJOR SonarQube violation:
Done


Line 346:         switch (keyType) {
> MAJOR SonarQube violation:
Done


Line 387:      * If we are optimizing a selection query then this method 
returns a ConstantExpression from the first constant value
> MAJOR SonarQube violation:
Done


Line 440:                                 // we need to check a corner case 
where two real values are located between an INT value.
> MAJOR SonarQube violation:
Done


Line 447:                                 // It should generate a result if 
there is a tuple that satisfies the condition, which is 3,
> MAJOR SonarQube violation:
Done


Line 449:                                 // fail after truncating the fraction 
part (there is no INT whose value is greater than 2 and less than 3.)
> MAJOR SonarQube violation:
Done


Line 467:                                 // IntVar = 4.3 ==> round-down and 
round-up: IntVar = 4 and IntVar = 5 (eventually - false)
> MAJOR SonarQube violation:
Done


Line 468:                                 // IntVar = 4.0 ==> round-down and 
round-up: IntVar = 4 and IntVar = 4 (eventually - true)
> MAJOR SonarQube violation:
Done


Line 475:                                     
mathFunctionTypeForNumericTypeCasting = TypeCastingMathFunctionType.FLOOR; // 
round-down
> MAJOR SonarQube violation:
Done


Line 477:                                     
mathFunctionTypeForNumericTypeCasting = TypeCastingMathFunctionType.CEIL_FLOOR; 
// both
> MAJOR SonarQube violation:
Done


Line 506:                     return new Pair<ILogicalExpression, 
ILogicalExpression>(
> MAJOR SonarQube violation:
Done


Line 510:                     return new Pair<ILogicalExpression, 
ILogicalExpression>(
> MAJOR SonarQube violation:
Done


Line 514:                 return new Pair<ILogicalExpression, 
ILogicalExpression>(optFuncExpr.getConstantAtRuntimeExpr(0), null);
> MAJOR SonarQube violation:
Done


Line 519:                 return new Pair<ILogicalExpression, 
ILogicalExpression>(
> MAJOR SonarQube violation:
Done


Line 522:                 return new Pair<ILogicalExpression, 
ILogicalExpression>(
> MAJOR SonarQube violation:
Done


Line 577:         List<LogicalVariable> usedVarsInSelectJoinOpTemp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 578:         List<LogicalVariable> usedVarsInSelectJoinOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 584:         List<LogicalVariable> dataScanPKRecordVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 585:         List<LogicalVariable> dataScanPKVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 586:         List<LogicalVariable> dataScanRecordVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 604:         List<LogicalVariable> selectInIndexSubTreeVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 631:         List<LogicalVariable> liveVarsInSubTreeRootOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 632:         List<LogicalVariable> producedVarsInSubTreeRootOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 651:         // For the select case, it doesn't do anything since live 
variables includes all variables used in that operator.
> MAJOR SonarQube violation:
Done


Line 685:             List<LogicalVariable> chosenIndexVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 689:             List<LogicalVariable> constantVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 773:             List<LogicalVariable> countUsedVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 774:             List<LogicalVariable> producedVarsAfterSelectOrJoinOp = 
new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 785:                     List<LogicalVariable> usedVarsAfterSelectOrJoinOp 
= new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 822:                             // If this operator is using the 
variables that are produced before the SELECT or JOIN operator
> MAJOR SonarQube violation:
Done


Line 838:                                         // Unlike B+Tree or R-Tree on 
POINT or RECTANGLE type, we can't use or reconstruct
> MAJOR SonarQube violation:
Done


Line 840:                                         // Therefore, if a secondary 
key field value is used after SELECT operator, this cannot be
> MAJOR SonarQube violation:
Done


Line 841:                                         // an index-only plan. 
Therefore, we can only check whether PK is used after SELECT operator.
> MAJOR SonarQube violation:
Done


Line 847:                                     // If an ASSIGN or UNNEST before 
SELECT or JOIN operator contain the given variable and
> MAJOR SonarQube violation:
Done


Line 848:                                     // the given variable is a 
secondary key field (this happens when we have a composite secondary index)
> MAJOR SonarQube violation:
Done


Line 965:                                     List<LogicalVariable> 
producedVarsFromProbeTree = new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 966:                                     List<LogicalVariable> 
usedVarsFromProbeTree = new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 966:                                     List<LogicalVariable> 
usedVarsFromProbeTree = new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1024:                                             } catch (Exception e) {
> CRITICAL SonarQube violation:
Done


Line 1038:                                 // we don't need to verify it again 
using SELECT operator since there are no false positive results.
> MAJOR SonarQube violation:
Done


Line 1047:                                 // If the type of an R-Tree index is 
not a point or rectangle, an index-only plan is not possible
> MAJOR SonarQube violation:
Done


Line 1063:         // this can't be qualified as an index-only plan since an 
inverted index contains a part of a field value, not all of it.
> MAJOR SonarQube violation:
Done


Line 1068:             if (secondaryKeyFieldUsedAfterSelectOrJoinOp) {
> MAJOR SonarQube violation:
Done


Line 1169:         // the combination of the SELECT condition and the chosen 
secondary index do not generate false positive results,
> MAJOR SonarQube violation:
Done


Line 1176:         //        (left)    secondary index-search -> split --+--> 
primary index-search -> select (verification) --+--> UNION -> ...
> MAJOR SonarQube violation:
Done


Line 1203:         boolean doesSIdxSearchCoverAllPredicates = 
indexOnlyPlanInfo.fifth;
> MAJOR SonarQube violation:
Done


Line 1210:         HashMap<LogicalVariable, LogicalVariable> 
keyMappingBetweenNewSIdxSrchAndOrigianlScan = new HashMap<LogicalVariable, 
LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1235:         // construct an additional ASSIGN to restore the original 
secondary key field(s) from the results of the secondary index search
> MAJOR SonarQube violation:
Done


Line 1250:             restoredSecondaryKeyFieldExprs = new 
ArrayList<Mutable<ILogicalExpression>>();
> MAJOR SonarQube violation:
Done


Line 1251:             restoredSecondaryKeyFieldVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1257:                 List<Mutable<ILogicalExpression>> expressions = new 
ArrayList<Mutable<ILogicalExpression>>();
> MAJOR SonarQube violation:
Done


Line 1271:                 List<Mutable<ILogicalExpression>> expressions = new 
ArrayList<Mutable<ILogicalExpression>>();
> MAJOR SonarQube violation:
Done


Line 1306:         List<LogicalVariable> varsUsedInTopOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1307:         List<LogicalVariable> uniqueVarsUsedInTopOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1311:         List<LogicalVariable> liveVarsInTopOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1316:         List<LogicalVariable> liveVarsInSubTreeRootOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1317:         List<LogicalVariable> producedVarsInSubTreeRootOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1357:         varsUsedInAssignUnnestBeforeTopOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1358:         List<LogicalVariable> varsUsedInAssignUnnestBeforeTopOpTmp = 
new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1378:         List<LogicalVariable> varsUsedAfterTopOp = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1398:             unionVarMap = new ArrayList<Triple<LogicalVariable, 
LogicalVariable, LogicalVariable>>();
> MAJOR SonarQube violation:
Done


Line 1400:             // Is the used variables after SELECT operator from the 
primary index? Then, create the mapping between two paths.
> MAJOR SonarQube violation:
Done


Line 1418:                     // If the index means -1, either it is a 
secondary key variable or a variable from different branch (join case).
> MAJOR SonarQube violation:
Done


Line 1424:                         // Construct the mapping between the PK from 
the original plan to the PK from the secondary index search
> MAJOR SonarQube violation:
Done


Line 1429:                     //                    iterator.remove();
> MAJOR SonarQube violation:
Done


Line 1453:                         // For the join-case, the match might not 
exist. In this case, we just propagate the variables later.
> MAJOR SonarQube violation:
Done


Line 1458:                             // Construct the mapping between the SK 
from the original plan to the SK from the secondary index search
> MAJOR SonarQube violation:
Done


Line 1473:                         // For the join-case, the match might not 
exist. In this case, we just propagate the variables later.
> MAJOR SonarQube violation:
Done


Line 1480:                                     
fetchedSecondaryKeyFieldVarsFromPIdxLookUp = new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1504:                 varsLiveInSelect = new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1548:                 Mutable<ILogicalExpression> vRef = new 
MutableObject<ILogicalExpression>(
> MAJOR SonarQube violation:
Done


Line 1561:         List<Mutable<ILogicalExpression>> primaryIndexFuncArgs = new 
ArrayList<Mutable<ILogicalExpression>>();
> MAJOR SonarQube violation:
Done


Line 1614:             // If not, we just need to use the original select 
operator in the left path (tryLock on PK fail path) to do final verification.
> MAJOR SonarQube violation:
Done


Line 1644:                 //                
context.computeAndSetTypeEnvironmentForOperator(lastAssignBeforeTopOp);
> MAJOR SonarQube violation:
Done


Line 1671:                 //                
assignRestoredSecondaryKeyFieldOp.setExecutionMode(lastAssignBeforeTopOp.getExecutionMode());
> MAJOR SonarQube violation:
Done


Line 1671:                 //                
assignRestoredSecondaryKeyFieldOp.setExecutionMode(lastAssignBeforeTopOp.getExecutionMode());
> MAJOR SonarQube violation:
Done


Line 1683:             // Lastly, if there is an index-nested-loop-join and the 
join contains more conditions other than joining fields,
> MAJOR SonarQube violation:
Done


Line 1684:             // then those conditions need to be applied to filter 
out false positive results in the right path (tryLock success path).
> MAJOR SonarQube violation:
Done


Line 1719:                             //                            int 
sIndexIdx = 
chosenIndexFieldNames.indexOf(subTree.fieldNames.get(uniqueVarsUsedInTopOp
> MAJOR SonarQube violation:
Done


Line 1720:                             //                                    
.get(i)));
> MAJOR SonarQube violation:
Done


Line 1722:                             //                            if 
(sIndexIdx > -1) {
> MAJOR SonarQube violation:
Done


Line 1724:                             //                                       
   secondaryKeyVarsFromSIdxSearch.get(sIndexIdx));
> MAJOR SonarQube violation:
Done


Line 1749:             List<LogicalVariable> leftVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1750:             List<LogicalVariable> rightVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1778:             //            unionAllOp.getInputs().add(new 
MutableObject<ILogicalOperator>(newSelectOp));
> MAJOR SonarQube violation:
Done


Line 1781:             //            StringBuilder sb = new StringBuilder();
> MAJOR SonarQube violation:
Done


Line 1871:             // If it is used somewhere else except the group-by 
operator, we can't delete it since we need to propagate it.
> MAJOR SonarQube violation:
Done


Line 1874:                 List<LogicalVariable> usedVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1918:             // When changes in the variable mapping are happened, we 
need to adjust Project operator before UnionAll operators.
> MAJOR SonarQube violation:
Done


Line 1939:                     List<LogicalVariable> leftVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 1940:                     List<LogicalVariable> rightVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 2112:         return new Pair<Boolean, Boolean>(functionFound, 
doesSIdxSearchGenerateNoFalsePositiveResults);
> MAJOR SonarQube violation:
Done


Line 2146:         // The order of operators: union <- project (current) <- 
select <- assign? <- unnest-map (PIdx) <- split <- unnest-map (SIdx) <- ...
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/BTreeAccessMethod.java:

Line 90:     private static List<Pair<FunctionIdentifier, Boolean>> funcIdents 
= new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 90:     private static List<Pair<FunctionIdentifier, Boolean>> funcIdents 
= new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 137:         Mutable<ILogicalOperator> assignBeforeSelectOpRef = 
(subTree.assignsAndUnnestsRefs.isEmpty()) ? null
> MAJOR SonarQube violation:
Done


Line 172:         Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


Line 172:         Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


Line 305:         Mutable<ILogicalOperator> assignBeforeJoinOpRef = 
(indexSubTree.assignsAndUnnestsRefs.isEmpty()) ? null
> MAJOR SonarQube violation:
Done


Line 307:         ILogicalOperator assignBeforeJoinOp = null;
> MAJOR SonarQube violation:
Done


Line 309:             assignBeforeJoinOp = assignBeforeJoinOpRef.getValue();
> MAJOR SonarQube violation:
Done


Line 337:         Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


Line 337:         Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


Line 372:             List<LogicalVariable> LOJNullVariables = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 375:             if (LOJNullVariables.size() > 0) {
> MAJOR SonarQube violation:
Done


Line 435:     public ILogicalOperator 
createSecondaryToPrimaryPlan(List<Mutable<ILogicalOperator>> afterTopOpRefs,
> MAJOR SonarQube violation:
Done


Line 453:         boolean secondaryKeyFieldUsedAfterSelectOrJoinOp = 
indexOnlyPlanInfo.second;
> MAJOR SonarQube violation:
Done


Line 453:         boolean secondaryKeyFieldUsedAfterSelectOrJoinOp = 
indexOnlyPlanInfo.second;
> MAJOR SonarQube violation:
Done


Line 454:         boolean requireVerificationAfterSIdxSearch = 
indexOnlyPlanInfo.third;
> MAJOR SonarQube violation:
Done


Line 455:         boolean doesSIdxSearchGenerateNoFalsePositiveResults = 
indexOnlyPlanInfo.fourth;
> MAJOR SonarQube violation:
Done


Line 455:         boolean doesSIdxSearchGenerateNoFalsePositiveResults = 
indexOnlyPlanInfo.fourth;
> MAJOR SonarQube violation:
Done


Line 456:         boolean doesSIdxSearchCoverAllPredicates = 
indexOnlyPlanInfo.fifth;
> MAJOR SonarQube violation:
Done


Line 456:         boolean doesSIdxSearchCoverAllPredicates = 
indexOnlyPlanInfo.fifth;
> MAJOR SonarQube violation:
Done


Line 804:                 // since we can't guarantee that the results will be 
the final results and an additional SELECT needs to be applied.
> MAJOR SonarQube violation:
Done


Line 806:                 // The job gen parameters are transferred to the 
actual job gen via the UnnestMapOperator's function arguments.
> MAJOR SonarQube violation:
Done


Line 807:                 ArrayList<Mutable<ILogicalExpression>> 
primaryIndexFuncArgs = new ArrayList<Mutable<ILogicalExpression>>();
> MAJOR SonarQube violation:
Done


Line 807:                 ArrayList<Mutable<ILogicalExpression>> 
primaryIndexFuncArgs = new ArrayList<Mutable<ILogicalExpression>>();
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java:

Line 66:  * (limit)* <-- (order)* <-- (select) <-- (assign) <-- (btree search) 
<-- (sort) <-- (unnest(index search)) <-- (assign) <-- (datasource scan | 
unnest-map)
> MAJOR SonarQube violation:
Done


Line 94:  * 2) A secondary index search or a primary index search of INNER 
branch can cover the given condition in the given join operator.
> MAJOR SonarQube violation:
Done


Line 95:  * = no more verification is required after an index search assuming 
that we can get a trustworthy tuple from that index search.
> MAJOR SonarQube violation:
Done


Line 99:  * 4-1) Also, the attribute order in the given "order by" should be 
consistent with the attribute order in the first index search
> MAJOR SonarQube violation:
Done


Line 156:             if (op.getOperatorTag() != LogicalOperatorTag.SINK) {
> MAJOR SonarQube violation:
Done


Line 161:         afterJoinRefs = new ArrayList<Mutable<ILogicalOperator>>();
> MAJOR SonarQube violation:
Done


Line 162:         boolean planTransformed = false;
> MAJOR SonarQube violation:
Done


Line 211:                     // We check the dataset name and the subtree to 
make sure that this index come from the inner branch.
> MAJOR SonarQube violation:
Done


Line 348:         // We first check the children of the given operator to make 
sure an earlier join in the path is optimized first.
> MAJOR SonarQube violation:
Done


Line 373:                 Map<IAccessMethod, AccessMethodAnalysisContext> 
analyzedAMs = new HashMap<IAccessMethod, AccessMethodAnalysisContext>();
> MAJOR SonarQube violation:
Done


Line 373:                 Map<IAccessMethod, AccessMethodAnalysisContext> 
analyzedAMs = new HashMap<IAccessMethod, AccessMethodAnalysisContext>();
> MAJOR SonarQube violation:
Done


Line 423:                             String innerDataset = null;
> MAJOR SonarQube violation:
Done


Line 425:                                 innerDataset = 
rightSubTree.dataset.getDatasetName();
> MAJOR SonarQube violation:
Done


Line 449:                                 // For LOJ with GroupBy, prepare 
objects to reset LOJ nullPlaceHolderVariable in GroupByOp.
> MAJOR SonarQube violation:
Done


Line 462:                                 // We assume that the left subtree is 
the outer branch and the right subtree is the inner branch.
> MAJOR SonarQube violation:
Done


Line 479:                                 ArrayList<LogicalVariable> pkVars = 
new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 502:                                     // 2) This index-search can 
generate the final results (trustworthy results in the outer branch).
> MAJOR SonarQube violation:
Done


Line 503:                                     // 3) the order of attribute from 
its index-search (data-scan) is the same as the attributes
> MAJOR SonarQube violation:
Done


Line 505:                                     // In this case, the index-search 
of the OUTER branch can generate just enough number of results
> MAJOR SonarQube violation:
Done


Line 508:                                     // INNER-JOIN case: we pass limit 
to inner branch since we can't count the final results
> MAJOR SonarQube violation:
Done


Line 510:                                     // or primary-index search of the 
inner branch. And the index should cover all join condition(s),
> MAJOR SonarQube violation:
Done


Line 549:                                 // If the plan transformation is 
successful, we don't need to traverse the plan any more,
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceSelectAccessMethodRule.java:

Line 72:  * NEW: the left path (union) <-- (select) <-- (assign)+ <-- (btree 
search) <-- (sort) <-- (split) <-- (unnest-map(index search)) <-- (assign)
> MAJOR SonarQube violation:
Done


Line 176:             if (op.getOperatorTag() != LogicalOperatorTag.SINK) {
> MAJOR SonarQube violation:
Done


Line 181:         afterSelectRefs = new ArrayList<Mutable<ILogicalOperator>>();
> MAJOR SonarQube violation:
Done


Line 182:         boolean planTransformed = false;
> MAJOR SonarQube violation:
Done


Line 326:                 Map<IAccessMethod, AccessMethodAnalysisContext> 
analyzedAMs = new LinkedHashMap<IAccessMethod, AccessMethodAnalysisContext>();
> MAJOR SonarQube violation:
Done


Line 326:                 Map<IAccessMethod, AccessMethodAnalysisContext> 
analyzedAMs = new LinkedHashMap<IAccessMethod, AccessMethodAnalysisContext>();
> MAJOR SonarQube violation:
Done


Line 336:                     if (subTree.selectRefs == null || 
(subTree.selectRefs != null && subTree.selectRefs.size() == 0)) {
> MAJOR SonarQube violation:
Done


Line 372:                                         // We also check whether we 
can pass LIMIT information to this index-search so that
> MAJOR SonarQube violation:
Done


Line 384:                                         ArrayList<LogicalVariable> 
pkVars = new ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 399:                                                 // an R-Tree or an 
inverted index doesn't have any particular ordering of elements
> MAJOR SonarQube violation:
Done


Line 400:                                                 // from the index so 
we can't pass LIMIT information if there is an order by.
> MAJOR SonarQube violation:
Done


Line 422:                                             // We have all matching 
conditions for passing LIMIT information to the chosen index-search.
> MAJOR SonarQube violation:
Done


Line 424:                                                 // To prepare for a 
case where an index is being updated, we generate slightly
> MAJOR SonarQube violation:
Done


Line 437:                                     // If the plan transformation is 
successful, we don't need to traverse the plan any more,
> MAJOR SonarQube violation:
Done


Line 438:                                     // since if there are more SELECT 
operators, the next trigger on this plan will find them.
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/InvertedIndexAccessMethod.java:

Line 108:     private static List<Pair<FunctionIdentifier, Boolean>> funcIdents 
= new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 108:     private static List<Pair<FunctionIdentifier, Boolean>> funcIdents 
= new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 121:     private static List<Pair<FunctionIdentifier, Boolean>> 
secondLevelFuncIdents = new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 121:     private static List<Pair<FunctionIdentifier, Boolean>> 
secondLevelFuncIdents = new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 232:             if (fID.equals(matchedFuncExpr.getFunctionIdentifier())) {
> BLOCKER SonarQube violation:
Done


Line 307:             // The arguments of edit-distance-string-contains() 
function are asymmetrical, we can only use index if it is on the first argument
> MAJOR SonarQube violation:
Done


Line 391:      * ......... union <- select <- assign? <- unnest-map (primary 
index look-up) <- split <- unnest-map (secondary index look-up) <- assign? <- 
datasource-scan
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableFuncExpr.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableFuncExpr.java:

Line 220:         if (!(o instanceof OptimizableFuncExpr))
> MAJOR SonarQube violation:
Done


Line 222:         else
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/OptimizableOperatorSubTree.java:

Line 59:  * (limit)? <-- (assign | unnest)* <-- (orderby)? <-- (select)? <-- 
(assign | unnest)* <-- (datasource scan | unnest-map)*
> MAJOR SonarQube violation:
Done


Line 75:     public final List<AbstractLogicalOperator> assignsAndUnnestsOps = 
new ArrayList<AbstractLogicalOperator>();
> MAJOR SonarQube violation:
Done


Line 83:     public HashMap<LogicalVariable, List<String>> varsTofieldNameMap = 
new HashMap<LogicalVariable, List<String>>();
> MAJOR SonarQube violation:
Done


Line 83:     public HashMap<LogicalVariable, List<String>> varsTofieldNameMap = 
new HashMap<LogicalVariable, List<String>>();
> MAJOR SonarQube violation:
Done


Line 102:     public final List<Mutable<ILogicalOperator>> selectRefs = new 
ArrayList<Mutable<ILogicalOperator>>();
> MAJOR SonarQube violation:
Done


Line 189:                 if (subTreeOp.getInputs().size() < 1 || 
subTreeOp.getInputs() == null) {
> MAJOR SonarQube violation:
Done


Line 279:             Mutable<ILogicalOperator> subTreeOpRef, 
IOptimizationContext context) throws AlgebricksException {
> MAJOR SonarQube violation:
Done


Line 297:         // ... <- UNION <- PROJECT <- SELECT <- ASSIGN? <- 
UNNEST_MAP(PIdx) <- SPLIT <- UNNEST_MAP (SIdx) <- ASSIGN? <- ...
> MAJOR SonarQube violation:
Done


Line 340:             if (subTreeOp.getOperatorTag() == 
LogicalOperatorTag.ASSIGN) {
> MAJOR SonarQube violation:
Done


Line 804:             dataSourceRefToFetch = dataSourceRef;
> MAJOR SonarQube violation:
Done


Line 851:                 List<LogicalVariable> pkVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 872:                     List<LogicalVariable> PKVars = new 
ArrayList<LogicalVariable>();
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/RTreeAccessMethod.java
File 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/RTreeAccessMethod.java:

Line 68:     // The second boolean value means that this function can produce 
false positive results if this value is set to false.
> MAJOR SonarQube violation:
Done


Line 71:     // In R-Tree case, depending on the parameters of the 
SPATIAL_INTERSECT function, it may/may not produce false positive results.
> MAJOR SonarQube violation:
Done


Line 72:     // Thus, we need to have one more step to check whether the 
SPATIAL_INTERSECT generates false positive results or not.
> MAJOR SonarQube violation:
Done


Line 73:     private static List<Pair<FunctionIdentifier, Boolean>> funcIdents 
= new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 73:     private static List<Pair<FunctionIdentifier, Boolean>> funcIdents 
= new ArrayList<Pair<FunctionIdentifier, Boolean>>();
> MAJOR SonarQube violation:
Done


Line 128:         Mutable<ILogicalOperator> assignBeforeSelectOpRef = 
(subTree.assignsAndUnnestsRefs.isEmpty()) ? null
> MAJOR SonarQube violation:
Done


Line 130:         ILogicalOperator assignBeforeSelectOp = null;
> MAJOR SonarQube violation:
Done


Line 130:         ILogicalOperator assignBeforeSelectOp = null;
> MAJOR SonarQube violation:
Done


Line 132:             assignBeforeSelectOp = assignBeforeSelectOpRef.getValue();
> MAJOR SonarQube violation:
Done


Line 171:         Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


Line 171:         Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean> 
indexOnlyPlanInfo = new Quintuple<Boolean, Boolean, Boolean, Boolean, Boolean>(
> MAJOR SonarQube violation:
Done


Line 263:         if (indexSubTree == null) {
> BLOCKER SonarQube violation:
Done


Line 275:         Mutable<ILogicalOperator> assignBeforeJoinOpRef = 
(indexSubTree.assignsAndUnnestsRefs.isEmpty()) ? null
> MAJOR SonarQube violation:
Done


Line 346:             if (LOJNullVariables.size() > 0) {
> MAJOR SonarQube violation:
Done


Line 403:     public ILogicalOperator 
createSecondaryToPrimaryPlan(List<Mutable<ILogicalOperator>> afterTopRefs,
> MAJOR SonarQube violation:
Done


Line 432:         boolean requireVerificationAfterSIdxSearch = 
indexOnlyPlanInfo.third;
> MAJOR SonarQube violation:
Done


Line 462:         //        Pair<ILogicalExpression, Boolean> 
returnedSearchKeyExpr = AccessMethodUtils.createSearchKeyExpr(optFuncExpr,
> MAJOR SonarQube violation:
Done


Line 463:         //                indexSubTree, probeSubTree);
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-app/src/main/java/org/apache/asterix/aql/translator/QueryTranslator.java
File 
asterixdb/asterix-app/src/main/java/org/apache/asterix/aql/translator/QueryTranslator.java:

Line 432:         //        if(ExperimentProfiler.PROFILE_MODE) {
> MAJOR SonarQube violation:
Done


Line 435:         //            
OperatorExecutionTimeProfiler.INSTANCE.executionTimeProfiler.add("compileAndExecute",
 String.valueOf(profilerSW.getStartTimeStamp()), 
profilerSW.getMessage("compileAndExecute", profilerSW.getStartTimeStamp()), 
true);
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/IndexInfoOperatorDescriptor.java
File 
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/operators/IndexInfoOperatorDescriptor.java:

Line 134:         return null;
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java
File 
asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/declared/AqlMetadataProvider.java:

Line 655:             AqlMetadataImplConfig aqlMetadataImplConfig = 
(AqlMetadataImplConfig) implConfig;
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryTokenizerFactoryProvider.java
File 
asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryTokenizerFactoryProvider.java:

Line 41:     private static final IBinaryTokenizerFactory 
aqlStringWithOutTypeTagTokenizer = new 
DelimitedUTF8StringBinaryTokenizerFactory(
> MAJOR SonarQube violation:
Done


Line 41:     private static final IBinaryTokenizerFactory 
aqlStringWithOutTypeTagTokenizer = new 
DelimitedUTF8StringBinaryTokenizerFactory(
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java
File 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractLogicalOperator.java:

Line 62:     public static enum canDecreaseCardinalityCode {
> MAJOR SonarQube violation:
Done


Line 70:     public static enum canPreserveOrderCode {
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractReplicateOperator.java
File 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/logical/AbstractReplicateOperator.java:

Line 42:         this.outputs = new ArrayList<Mutable<ILogicalOperator>>();
> MAJOR SonarQube violation:
Done


Line 48:         this.outputs = new ArrayList<Mutable<ILogicalOperator>>();
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/IntroduceProjectsRule.java
File 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/IntroduceProjectsRule.java:

Line 57:     private final HashMap<AbstractLogicalOperator, 
HashSet<LogicalVariable>> allUsedVarsAfterOpMap = new 
HashMap<AbstractLogicalOperator, HashSet<LogicalVariable>>();
> MAJOR SonarQube violation:
Done


Line 57:     private final HashMap<AbstractLogicalOperator, 
HashSet<LogicalVariable>> allUsedVarsAfterOpMap = new 
HashMap<AbstractLogicalOperator, HashSet<LogicalVariable>>();
> MAJOR SonarQube violation:
Done


https://asterix-gerrit.ics.uci.edu/#/c/744/9/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
File 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java:

Line 56:     private static final Logger LOGGER = 
Logger.getLogger(RemoveUnusedAssignAndAggregateRule.class.getName());
> MAJOR SonarQube violation:
Done


Line 57:     private static final Level LVL = Level.WARNING;
> MAJOR SonarQube violation:
Done


Line 60:     Map<Mutable<ILogicalOperator>, Set<LogicalVariable>> 
assignedVarMap = new LinkedHashMap<Mutable<ILogicalOperator>, 
Set<LogicalVariable>>();
> MAJOR SonarQube violation:
Done


Line 60:     Map<Mutable<ILogicalOperator>, Set<LogicalVariable>> 
assignedVarMap = new LinkedHashMap<Mutable<ILogicalOperator>, 
Set<LogicalVariable>>();
> MAJOR SonarQube violation:
Done


Line 61:     Set<LogicalVariable> assignedVarSet = new 
HashSet<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 64:     Map<Mutable<ILogicalOperator>, Set<LogicalVariable>> 
accumulatedUsedVarFromRootMap = new LinkedHashMap<Mutable<ILogicalOperator>, 
Set<LogicalVariable>>();
> MAJOR SonarQube violation:
Done


Line 64:     Map<Mutable<ILogicalOperator>, Set<LogicalVariable>> 
accumulatedUsedVarFromRootMap = new LinkedHashMap<Mutable<ILogicalOperator>, 
Set<LogicalVariable>>();
> MAJOR SonarQube violation:
Done


Line 71:     Set<LogicalVariable> survivedUnionSourceVarSet = new 
HashSet<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 86:         Set<LogicalVariable> accumulatedUsedVarFromRootSet = new 
HashSet<LogicalVariable>();
> MAJOR SonarQube violation:
Done


Line 113:         if (assignVarsSetForThisOp != null && 
assignVarsSetForThisOp.size() > 0) {
> MAJOR SonarQube violation:
Done


Line 117:                 if (usedVarsSetForThisOp.contains(v) || 
survivedUnionSourceVarSet.contains(v)) {
> BLOCKER SonarQube violation:
Done


Line 194:         //        LOGGER.log(LVL, op + " " + toRemove);
> MAJOR SonarQube violation:
Done


Line 240:         if (toRemove != null && toRemove.size() > 0) {
> MAJOR SonarQube violation:
Done


Line 261:         if (toRemove != null && toRemove.size() > 0) {
> MAJOR SonarQube violation:
Done


-- 
To view, visit https://asterix-gerrit.ics.uci.edu/744
To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings

Gerrit-MessageType: comment
Gerrit-Change-Id: Ifa02c13d4fddd880e1ee9e85eef6577301fb4560
Gerrit-PatchSet: 9
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Owner: Taewoo Kim <wangs...@yahoo.com>
Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Gerrit-Reviewer: Taewoo Kim <wangs...@yahoo.com>
Gerrit-Reviewer: Till Westmann <ti...@apache.org>
Gerrit-Reviewer: Yingyi Bu <buyin...@gmail.com>
Gerrit-Reviewer: Young-Seok Kim <kiss...@gmail.com>
Gerrit-HasComments: Yes

Reply via email to