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 2d16f603f18532e20e66b1190a98a8377206f23c
Merge: 6a4d9a5 2c8ecbf
Author: Dmitry Lychagin <[email protected]>
AuthorDate: Wed Dec 9 08:22:21 2020 -0800

    Merge commit '4e4d6d7', '2c8ecbf'
    
    Change-Id: Ia80b1b362a1b0cefc791a445455c4e89296769fc

 .../translator/LangExpressionToPlanTranslator.java |  2 +-
 .../asterix/app/translator/QueryTranslator.java    | 69 +++++++++++-----------
 .../invalid-dataset-name.3.ddl.sqlpp               |  6 +-
 .../invalid-dataset-name.4.ddl.sqlpp}              |  0
 .../invalid-dataverse-name.3.ddl.sqlpp}            |  6 +-
 .../invalid-feed-name.2.ddl.sqlpp                  |  2 -
 .../invalid-feed-name.3.ddl.sqlpp                  | 20 +++++++
 .../invalid-feed-name.4.ddl.sqlpp}                 |  0
 .../invalid-index-name.3.ddl.sqlpp                 |  6 +-
 .../invalid-index-name.4.ddl.sqlpp}                |  0
 .../invalid-type-name.3.ddl.sqlpp                  |  8 ++-
 .../invalid-type-name.4.ddl.sqlpp}                 |  0
 .../invalid-udf-name/invalid-udf-name.3.ddl.sqlpp  |  8 ++-
 ...me.3.ddl.sqlpp => invalid-udf-name.4.ddl.sqlpp} |  0
 .../queries_sqlpp/flwor/at00/at00.3.query.sqlpp    |  2 +-
 .../test/resources/runtimets/testsuite_sqlpp.xml   | 26 ++++----
 .../src/main/resources/asx_errormsg/en.properties  |  2 +-
 .../asterix/lang/common/util/FunctionUtil.java     |  2 +-
 .../metadata/declared/MetadataProvider.java        | 26 ++++++++
 19 files changed, 130 insertions(+), 55 deletions(-)

diff --cc 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index e446ab8,2ba5c0e..3e079af
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@@ -996,13 -974,12 +1002,14 @@@ public class QueryTranslator extends Ab
      public void handleCreateIndexStatement(MetadataProvider metadataProvider, 
Statement stmt,
              IHyracksClientConnection hcc, IRequestParameters 
requestParameters) throws Exception {
          CreateIndexStatement stmtCreateIndex = (CreateIndexStatement) stmt;
-         DataverseName dataverseName = 
getActiveDataverseName(stmtCreateIndex.getDataverseName());
          String datasetName = stmtCreateIndex.getDatasetName().getValue();
          String indexName = stmtCreateIndex.getIndexName().getValue();
-         validateDatabaseObjectName(indexName, stmt.getSourceLocation());
 +        String fullTextConfigName = stmtCreateIndex.getFullTextConfigName();
+         
metadataProvider.validateDatabaseObjectName(stmtCreateIndex.getDataverseName(), 
indexName,
+                 stmt.getSourceLocation());
+         DataverseName dataverseName = 
getActiveDataverseName(stmtCreateIndex.getDataverseName());
 -        lockUtil.createIndexBegin(lockManager, metadataProvider.getLocks(), 
dataverseName, datasetName);
 +        lockUtil.createIndexBegin(lockManager, metadataProvider.getLocks(), 
dataverseName, datasetName,
 +                fullTextConfigName);
          try {
              doCreateIndex(metadataProvider, stmtCreateIndex, dataverseName, 
datasetName, hcc, requestParameters);
          } finally {
@@@ -1164,133 -1140,6 +1171,135 @@@
          }
      }
  
 +    public void handleCreateFullTextFilterStatement(MetadataProvider 
metadataProvider, Statement stmt)
 +            throws Exception {
 +        CreateFullTextFilterStatement stmtCreateFilter = 
(CreateFullTextFilterStatement) stmt;
-         DataverseName dataverseName = 
getActiveDataverseName(stmtCreateFilter.getDataverseName());
 +        String fullTextFilterName = stmtCreateFilter.getFilterName();
-         validateDatabaseObjectName(fullTextFilterName, 
stmt.getSourceLocation());
++        
metadataProvider.validateDatabaseObjectName(stmtCreateFilter.getDataverseName(),
 fullTextFilterName,
++                stmt.getSourceLocation());
++        DataverseName dataverseName = 
getActiveDataverseName(stmtCreateFilter.getDataverseName());
 +
 +        lockUtil.createFullTextFilterBegin(lockManager, 
metadataProvider.getLocks(), dataverseName, fullTextFilterName);
 +        try {
 +            doCreateFullTextFilter(metadataProvider, stmtCreateFilter, 
dataverseName);
 +        } finally {
 +            metadataProvider.getLocks().unlock();
 +        }
 +    }
 +
 +    protected void doCreateFullTextFilter(MetadataProvider metadataProvider,
 +            CreateFullTextFilterStatement stmtCreateFilter, DataverseName 
dataverseName) throws Exception {
 +        AbstractFullTextFilterDescriptor filterDescriptor;
 +
 +        String filterType = stmtCreateFilter.getFilterType();
 +        if (filterType == null) {
 +            throw new CompilationException(ErrorCode.PARSE_ERROR, 
stmtCreateFilter.getSourceLocation(),
 +                    "full-text filter type is null");
 +        }
 +
 +        switch (filterType) {
 +            case FIELD_TYPE_STOPWORDS: {
 +                filterDescriptor = new 
StopwordsFullTextFilterDescriptor(dataverseName,
 +                        stmtCreateFilter.getFilterName(), 
stmtCreateFilter.getStopwordsList());
 +                break;
 +            }
 +            default:
 +                throw new CompilationException(ErrorCode.COMPILATION_ERROR, 
stmtCreateFilter.getSourceLocation(),
 +                        "Unexpected full-text filter type: " + filterType);
 +        }
 +
 +        MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
 +        metadataProvider.setMetadataTxnContext(mdTxnCtx);
 +        try {
 +            Dataverse dv = MetadataManager.INSTANCE.getDataverse(mdTxnCtx, 
dataverseName);
 +            if (dv == null) {
 +                throw new CompilationException(ErrorCode.UNKNOWN_DATAVERSE, 
stmtCreateFilter.getSourceLocation(),
 +                        dataverseName);
 +            }
 +
 +            String filterName = stmtCreateFilter.getFilterName();
 +            FullTextFilterMetadataEntity existingFilter =
 +                    MetadataManager.INSTANCE.getFullTextFilter(mdTxnCtx, 
dataverseName, filterName);
 +            if (existingFilter != null) {
 +                if (stmtCreateFilter.getIfNotExists()) {
 +                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
 +                    return;
 +                } else {
 +                    throw new 
CompilationException(ErrorCode.FULL_TEXT_FILTER_ALREADY_EXISTS,
 +                            stmtCreateFilter.getSourceLocation(), filterName);
 +                }
 +            }
 +
 +            MetadataManager.INSTANCE.addFullTextFilter(mdTxnCtx, new 
FullTextFilterMetadataEntity(filterDescriptor));
 +            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
 +        } catch (Exception e) {
 +            abort(e, e, mdTxnCtx);
 +            throw e;
 +        }
 +    }
 +
 +    public void handleCreateFullTextConfigStatement(MetadataProvider 
metadataProvider, Statement stmt)
 +            throws Exception {
 +        CreateFullTextConfigStatement stmtCreateConfig = 
(CreateFullTextConfigStatement) stmt;
-         DataverseName dataverseName = 
getActiveDataverseName(stmtCreateConfig.getDataverseName());
 +        String configName = stmtCreateConfig.getConfigName();
-         validateDatabaseObjectName(configName, stmt.getSourceLocation());
++        
metadataProvider.validateDatabaseObjectName(stmtCreateConfig.getDataverseName(),
 configName,
++                stmt.getSourceLocation());
++        DataverseName dataverseName = 
getActiveDataverseName(stmtCreateConfig.getDataverseName());
 +        ImmutableList<String> filterNames = stmtCreateConfig.getFilterNames();
 +
 +        lockUtil.createFullTextConfigBegin(lockManager, 
metadataProvider.getLocks(), dataverseName, configName,
 +                filterNames);
 +        try {
 +            doCreateFullTextConfig(metadataProvider, stmtCreateConfig, 
dataverseName, configName, filterNames);
 +        } finally {
 +            metadataProvider.getLocks().unlock();
 +        }
 +    }
 +
 +    protected void doCreateFullTextConfig(MetadataProvider metadataProvider,
 +            CreateFullTextConfigStatement stmtCreateConfig, DataverseName 
dataverseName, String configName,
 +            ImmutableList<String> filterNames) throws Exception {
 +
 +        MetadataTransactionContext mdTxnCtx = 
MetadataManager.INSTANCE.beginTransaction();
 +        metadataProvider.setMetadataTxnContext(mdTxnCtx);
 +
 +        try {
 +            FullTextConfigMetadataEntity existingConfig =
 +                    MetadataManager.INSTANCE.getFullTextConfig(mdTxnCtx, 
dataverseName, configName);
 +            if (existingConfig != null) {
 +                if (stmtCreateConfig.getIfNotExists()) {
 +                    MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
 +                    return;
 +                } else {
 +                    throw new 
CompilationException(ErrorCode.FULL_TEXT_CONFIG_ALREADY_EXISTS,
 +                            stmtCreateConfig.getSourceLocation(), configName);
 +                }
 +            }
 +
 +            ImmutableList.Builder<IFullTextFilterDescriptor> 
filterDescriptorsBuilder =
 +                    ImmutableList.<IFullTextFilterDescriptor> builder();
 +            for (String filterName : filterNames) {
 +                FullTextFilterMetadataEntity filterMetadataEntity =
 +                        MetadataManager.INSTANCE.getFullTextFilter(mdTxnCtx, 
dataverseName, filterName);
 +                if (filterMetadataEntity == null) {
 +                    throw new 
CompilationException(ErrorCode.FULL_TEXT_FILTER_NOT_FOUND,
 +                            stmtCreateConfig.getSourceLocation(), filterName);
 +                }
 +            }
 +
 +            TokenizerCategory tokenizerCategory = 
stmtCreateConfig.getTokenizerCategory();
 +            FullTextConfigDescriptor configDescriptor =
 +                    new FullTextConfigDescriptor(dataverseName, configName, 
tokenizerCategory, filterNames);
 +            FullTextConfigMetadataEntity configMetadataEntity = new 
FullTextConfigMetadataEntity(configDescriptor);
 +
 +            MetadataManager.INSTANCE.addFullTextConfig(mdTxnCtx, 
configMetadataEntity);
 +            MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
 +        } catch (Exception e) {
 +            abort(e, e, mdTxnCtx);
 +            throw e;
 +        }
 +    }
 +
      private void doCreateIndexImpl(IHyracksClientConnection hcc, 
MetadataProvider metadataProvider, Dataset ds,
              Index index, EnumSet<JobFlag> jobFlags, SourceLocation sourceLoc) 
throws Exception {
          ProgressState progress = ProgressState.NO_PROGRESS;

Reply via email to