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

Reply via email to