public boolean isSecondaryIndex() { return !isPrimaryIndex(); }
/** * Checks whether the primary index exists among the applicable indexes and return it if is exists. * * @param chosenIndexes * @return Pair<IAccessMethod, Index> for the primary index * null otherwise * @throws AlgebricksException */ private Pair<IAccessMethod, Index> fetchPrimaryIndexAmongChosenIndexes( List<Pair<IAccessMethod, Index>> chosenIndexes) throws AlgebricksException { Optional<Pair<IAccessMethod, Index>> primaryIndex = chosenIndexes.stream().filter(pair -> pair.second.isPrimaryIndex()).findFirst(); if (primaryIndex.isPresent()) { return primaryIndex.get(); } return null; }
public static int[] getFilterFields(Dataset dataset, Index index, ITypeTraits[] filterTypeTraits) throws AlgebricksException { if (index.isPrimaryIndex()) { return DatasetUtil.createFilterFields(dataset); } return secondaryFilterFields(dataset, index, filterTypeTraits); }
public static int[] getBtreeFieldsIfFiltered(Dataset dataset, Index index) throws AlgebricksException { if (index.isPrimaryIndex()) { return DatasetUtil.createBTreeFieldsWhenThereisAFilter(dataset); } int numPrimaryKeys = dataset.getPrimaryKeys().size(); int numSecondaryKeys = index.getKeyFieldNames().size(); int[] btreeFields = new int[numSecondaryKeys + numPrimaryKeys]; for (int k = 0; k < btreeFields.length; k++) { btreeFields[k] = k; } return btreeFields; }
private void ensureNonPrimaryIndexDrop(Index index, SourceLocation sourceLoc) throws AlgebricksException { if (index.isPrimaryIndex()) { throw new MetadataException(ErrorCode.CANNOT_DROP_INDEX, sourceLoc, index.getIndexName(), index.getDatasetName()); } }
/** * get the IndexOperationTrackerFactory for a particular index on the dataset * * @param index * the index * @return an instance of {@link org.apache.hyracks.storage.am.lsm.common.api.ILSMOperationTrackerFactory} */ public ILSMOperationTrackerFactory getIndexOperationTrackerFactory(Index index) { return index.isPrimaryIndex() ? new PrimaryIndexOperationTrackerFactory(getDatasetId()) : new SecondaryIndexOperationTrackerFactory(getDatasetId()); }
private static int[] getBloomFilterFields(Dataset dataset, Index index) throws AlgebricksException { if (index.isPrimaryIndex()) { return dataset.getPrimaryBloomFilterFields(); } else if (dataset.getDatasetType() == DatasetType.EXTERNAL) { if (index.getIndexName().equals(IndexingConstants.getFilesIndexName(dataset.getDatasetName()))) { return FilesIndexDescription.BLOOM_FILTER_FIELDS; } else { return new int[] { index.getKeyFieldNames().size() }; } } int numKeys = index.getKeyFieldNames().size(); int[] bloomFilterKeyFields = new int[numKeys]; for (int i = 0; i < numKeys; i++) { bloomFilterKeyFields[i] = i; } return bloomFilterKeyFields; } }
private static ITypeTraits[] getTypeTraits(MetadataProvider metadataProvider, Dataset dataset, Index index, ARecordType recordType, ARecordType metaType) throws AlgebricksException { ITypeTraits[] primaryTypeTraits = dataset.getPrimaryTypeTraits(metadataProvider, recordType, metaType); if (index.isPrimaryIndex()) { return primaryTypeTraits; } else if (dataset.getDatasetType() == DatasetType.EXTERNAL
IBinaryComparatorFactory[] primaryCmpFactories = dataset.getPrimaryComparatorFactories(metadataProvider, recordType, metaType); if (index.isPrimaryIndex()) { return dataset.getPrimaryComparatorFactories(metadataProvider, recordType, metaType); } else if (dataset.getDatasetType() == DatasetType.EXTERNAL
SourceLocation sourceLoc = currentTop.getSourceLocation(); for (Index index : indexes) { if (index.isPrimaryIndex()) { continue;
@Override public boolean exprIsOptimizable(Index index, IOptimizableFuncExpr optFuncExpr) throws AlgebricksException { // If we are optimizing a join, check for the indexed nested-loop join hint. if (optFuncExpr.getNumLogicalVars() == 2) { if (optFuncExpr.getOperatorSubTree(0) == optFuncExpr.getOperatorSubTree(1)) { if ((optFuncExpr.getSourceVar(0) == null && optFuncExpr.getFieldType(0) != null) || (optFuncExpr.getSourceVar(1) == null && optFuncExpr.getFieldType(1) != null)) { //We are in the select case (trees are the same, and one field comes from non-scan) //We can do the index search } else { //One of the vars was from an assign rather than a scan //And we were unable to determine its type return false; } } else if (!optFuncExpr.getFuncExpr().getAnnotations() .containsKey(IndexedNLJoinExpressionAnnotation.INSTANCE)) { return false; } } if (!index.isPrimaryIndex() && optFuncExpr.getFuncExpr().getAnnotations() .containsKey(SkipSecondaryIndexSearchExpressionAnnotation.INSTANCE)) { return false; } // No additional analysis required for BTrees. return true; }
private static int[] getBloomFilterFields(Dataset dataset, Index index) throws AlgebricksException { if (index.isPrimaryIndex()) { return dataset.getPrimaryBloomFilterFields(); } else if (dataset.getDatasetType() == DatasetType.EXTERNAL) { if (index.getIndexName().equals(IndexingConstants.getFilesIndexName(dataset.getDatasetName()))) { return FilesIndexDescription.BLOOM_FILTER_FIELDS; } else { return new int[] { index.getKeyFieldNames().size() }; } } int numKeys = index.getKeyFieldNames().size(); int[] bloomFilterKeyFields = new int[numKeys]; for (int i = 0; i < numKeys; i++) { bloomFilterKeyFields[i] = i; } return bloomFilterKeyFields; } }
String datasetName = ConstantExpressionUtil.getStringArgument(functionCallExpression, 3); Index index = ((MetadataProvider) metadataProvider).getIndex(dataverseName, datasetName, indexName); if (!index.isPrimaryIndex()) { return null;
private static ITypeTraits[] getTypeTraits(MetadataProvider metadataProvider, Dataset dataset, Index index, ARecordType recordType, ARecordType metaType) throws AlgebricksException { ITypeTraits[] primaryTypeTraits = dataset.getPrimaryTypeTraits(metadataProvider, recordType, metaType); if (index.isPrimaryIndex()) { return primaryTypeTraits; } else if (dataset.getDatasetType() == DatasetType.EXTERNAL
IBinaryComparatorFactory[] primaryCmpFactories = dataset.getPrimaryComparatorFactories(metadataProvider, recordType, metaType); if (index.isPrimaryIndex()) { return dataset.getPrimaryComparatorFactories(metadataProvider, recordType, metaType); } else if (dataset.getDatasetType() == DatasetType.EXTERNAL
Index index, IndexOperation op, int[] primaryKeyFields, int[] primaryKeyFieldsInSecondaryIndex, boolean proceedIndexOnlyPlan) throws AlgebricksException { if (index.isPrimaryIndex()) {
if (index.isPrimaryIndex()) { metadataPageManagerFactory, vbcProvider, ioSchedulerProvider, mergePolicyFactory, mergePolicyProperties, true, bloomFilterFields, bloomFilterFalsePositiveRate, index.isPrimaryIndex(), btreeFields, compDecompFactory); default: throw new CompilationException(ErrorCode.COMPILATION_UNKNOWN_DATASET_TYPE,
new Quadruple<>(isIndexOnlyPlan, false, requireVerificationAfterSIdxSearch, false); if (dataset.getDatasetType() == DatasetType.INTERNAL && !chosenIndex.isPrimaryIndex()) { AccessMethodUtils.indexOnlyPlanCheck(afterSelectRefs, selectRef, subTree, null, chosenIndex, analysisCtx, context, indexOnlyPlanInfo);
IStorageComponentProvider componentProvider, Index index, IndexOperation op, int[] primaryKeyFields) throws AlgebricksException { if (index.isPrimaryIndex()) { return op == IndexOperation.UPSERT ? new UpsertOperationCallbackFactory(getDatasetId(), primaryKeyFields, componentProvider.getTransactionSubsystemProvider(), Operation.get(op), index.resourceType())
@Override public IResourceFactory getResourceFactory(MetadataProvider mdProvider, Dataset dataset, Index index, ARecordType recordType, ARecordType metaType, ILSMMergePolicyFactory mergePolicyFactory, Map<String, String> mergePolicyProperties, ITypeTraits[] filterTypeTraits, IBinaryComparatorFactory[] filterCmpFactories) throws AlgebricksException { int[] filterFields = IndexUtil.getFilterFields(dataset, index, filterTypeTraits); int[] btreeFields = IndexUtil.getBtreeFieldsIfFiltered(dataset, index); IStorageComponentProvider storageComponentProvider = mdProvider.getStorageComponentProvider(); ITypeTraits[] typeTraits = getTypeTraits(mdProvider, dataset, index, recordType, metaType); IBinaryComparatorFactory[] cmpFactories = getCmpFactories(mdProvider, dataset, index, recordType, metaType); int[] bloomFilterFields = getBloomFilterFields(dataset, index); double bloomFilterFalsePositiveRate = mdProvider.getStorageProperties().getBloomFilterFalsePositiveRate(); ILSMOperationTrackerFactory opTrackerFactory = dataset.getIndexOperationTrackerFactory(index); if (opTrackerFactory instanceof PrimaryIndexOperationTrackerFactory) { opTrackerFactory = new TestPrimaryIndexOperationTrackerFactory(dataset.getDatasetId()); } ILSMIOOperationCallbackFactory ioOpCallbackFactory = dataset.getIoOperationCallbackFactory(index); IStorageManager storageManager = storageComponentProvider.getStorageManager(); IMetadataPageManagerFactory metadataPageManagerFactory = storageComponentProvider.getMetadataPageManagerFactory(); ILSMIOOperationSchedulerProvider ioSchedulerProvider = storageComponentProvider.getIoOperationSchedulerProvider(); AsterixVirtualBufferCacheProvider vbcProvider = new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()); return new TestLsmBtreeLocalResourceFactory(storageManager, typeTraits, cmpFactories, filterTypeTraits, filterCmpFactories, filterFields, opTrackerFactory, ioOpCallbackFactory, metadataPageManagerFactory, vbcProvider, ioSchedulerProvider, mergePolicyFactory, mergePolicyProperties, true, bloomFilterFields, bloomFilterFalsePositiveRate, index.isPrimaryIndex(), btreeFields); }