This is an automated email from the ASF dual-hosted git repository. dlych pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit a8f889d024ac7ee58bd8414dcff4f32f39fc2cf5 Merge: b99ca94 eb3cf8a Author: Dmitry Lychagin <[email protected]> AuthorDate: Mon Mar 8 18:19:35 2021 -0800 Merge branch 'gerrit/cheshire-cat' Change-Id: Ic5e4d53932054abcd1fd7bfb27016861106bc462 ...e.2.update.sqlpp => drop-dataverse.2.ddl.sqlpp} | 25 +++- .../check-dependencies-1.1.ddl.sqlpp | 8 ++ .../drop-dependency-4.3.ddl.sqlpp} | 46 ++----- .../drop-dependency-4.4.ddl.sqlpp} | 46 ++----- .../drop-dependency-6.3.ddl.sqlpp} | 50 ++----- .../drop-dependency-6.4.ddl.sqlpp} | 50 ++----- .../check-dependencies-1.1.adm | 1 + .../test/resources/runtimets/testsuite_sqlpp.xml | 13 +- .../asterix/lang/common/util/FunctionUtil.java | 55 ++++---- .../visitor/VariableCheckAndRewriteVisitor.java | 24 +++- .../sqlpp/visitor/SqlppSynonymRewriteVisitor.java | 10 +- .../org/apache/asterix/metadata/MetadataNode.java | 151 ++++++++++++--------- .../metadata/declared/MetadataProvider.java | 9 +- .../apache/asterix/metadata/entities/Function.java | 39 ++++++ 14 files changed, 261 insertions(+), 266 deletions(-) diff --cc asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java index 37aae78,85ab549..09709d0 --- a/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java +++ b/asterixdb/asterix-metadata/src/main/java/org/apache/asterix/metadata/MetadataNode.java @@@ -1237,33 -1037,17 +1229,48 @@@ public class MetadataNode implements IM } } + private void confirmFullTextConfigCanBeDeleted(TxnId txnId, DataverseName dataverseNameFullTextConfig, + String configName) throws AlgebricksException { + if (Strings.isNullOrEmpty(configName)) { + throw new MetadataException(FULL_TEXT_DEFAULT_CONFIG_CANNOT_BE_DELETED_OR_CREATED); + } + + // If any index uses this full-text config, throw an error + List<Dataset> datasets = getAllDatasets(txnId); + for (Dataset dataset : datasets) { + List<Index> indexes = getDatasetIndexes(txnId, dataset.getDataverseName(), dataset.getDatasetName()); + for (Index index : indexes) { + // ToDo: to support index to access full-text config in another dataverse, + // we may need to include the dataverse of the full-text config in the index.getFullTextConfigDataverse() + // and instead of checking index.getDataverseName(), we need to check index.getFullTextConfigDataverse() + // to see if it is the same as the dataverse of the full-text config + if (index.getIndexDetails() instanceof Index.TextIndexDetails) { + String indexConfigName = ((Index.TextIndexDetails) index.getIndexDetails()).getFullTextConfigName(); + if (index.getDataverseName().equals(dataverseNameFullTextConfig) + && !Strings.isNullOrEmpty(indexConfigName) && indexConfigName.equals(configName)) { - throw new AlgebricksException("Cannot drop full-text config " - + " because it is being used by index " + index.getIndexName()); ++ throw new AsterixException( ++ org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, ++ "full-text config", ++ MetadataUtil.getFullyQualifiedDisplayName(dataverseNameFullTextConfig, configName), ++ "index", DatasetUtil.getFullyQualifiedDisplayName(index.getDataverseName(), ++ index.getDatasetName()) + "." + index.getIndexName()); + } + } + } + } + } + + private void confirmDatasetCanBeDeleted(TxnId txnId, DataverseName dataverseName, String datasetName) + throws AlgebricksException { + confirmDatasetIsUnusedByFunctions(txnId, dataverseName, datasetName); + } + + private void confirmDatasetIsUnusedByFunctions(TxnId txnId, DataverseName dataverseName, String datasetName) + throws AlgebricksException { + confirmObjectIsUnusedByFunctions(txnId, Function.FunctionDependencyKind.DATASET, dataverseName, datasetName, + null); + } + private void confirmLibraryCanBeDeleted(TxnId txnId, DataverseName dataverseName, String libraryName) throws AlgebricksException { confirmLibraryIsUnusedByFunctions(txnId, dataverseName, libraryName); @@@ -1347,36 -1131,10 +1354,26 @@@ private void confirmDatatypeIsUnusedByFunctions(TxnId txnId, DataverseName dataverseName, String dataTypeName) throws AlgebricksException { - // If any function uses this type, throw an error - List<Function> functions = getAllFunctions(txnId); - for (Function function : functions) { - for (Triple<DataverseName, String, String> datasetDependency : function.getDependencies().get(2)) { - if (datasetDependency.first.equals(dataverseName) && datasetDependency.second.equals(dataTypeName)) { - throw new AsterixException( - org.apache.asterix.common.exceptions.ErrorCode.CANNOT_DROP_OBJECT_DEPENDENT_EXISTS, "type", - TypeUtil.getFullyQualifiedDisplayName(dataverseName, dataTypeName), "function", - function.getSignature()); - } - } - } + confirmObjectIsUnusedByFunctions(txnId, Function.FunctionDependencyKind.TYPE, dataverseName, dataTypeName, + null); } + private void confirmFullTextFilterCanBeDeleted(TxnId txnId, DataverseName dataverseName, String fullTextFilterName) + throws AlgebricksException { + List<FullTextConfigMetadataEntity> configMetadataEntities = getDataverseFullTextConfigs(txnId, dataverseName); + for (FullTextConfigMetadataEntity configMetadataEntity : configMetadataEntities) { + FullTextConfigDescriptor config = configMetadataEntity.getFullTextConfig(); + for (String filterName : config.getFilterNames()) { + if (filterName.equals(fullTextFilterName)) { + throw new AlgebricksException("Cannot drop full-text filter " + + TypeUtil.getFullyQualifiedDisplayName(dataverseName, fullTextFilterName) + + " being used by full-text config " + + TypeUtil.getFullyQualifiedDisplayName(dataverseName, config.getName())); + } + } + } + } + private List<String> getNestedComplexDatatypeNamesForThisDatatype(TxnId txnId, DataverseName dataverseName, String datatypeName) throws AlgebricksException { // Return all field types that aren't builtin types
