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;
