Taewoo Kim has uploaded a new change for review. https://asterix-gerrit.ics.uci.edu/1422
Change subject: Full-text implementation step 4 ...................................................................... Full-text implementation step 4 - Follows the new error handling proposal. - Introduces Full-TextTypeComputer. Change-Id: Ib909882c43a3fc1401eceec1e1ddd981f40b6dee --- M asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java M asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains-without-option.aql M asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains.aql M asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.1.ddl.aql R asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.2.query.aql D asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.2.update.aql M asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.1.ddl.aql R asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.2.query.aql D asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.2.update.aql M asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.1.ddl.aql R asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.2.query.aql D asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.2.update.aql R asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-04/fulltext-04.2.adm R asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-05/fulltext-05.2.adm R asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-06/fulltext-06.2.adm M asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java M asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties M asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java A asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java M hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java M hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties M hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java M hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/search/AbstractTOccurrenceSearcher.java 23 files changed, 87 insertions(+), 85 deletions(-) git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb refs/changes/22/1422/1 diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java index 2e6518b..40124ca 100644 --- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java +++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java @@ -28,6 +28,8 @@ import org.apache.asterix.common.config.DatasetConfig.DatasetType; import org.apache.asterix.common.config.DatasetConfig.IndexType; import org.apache.asterix.common.exceptions.AsterixException; +import org.apache.asterix.common.exceptions.CompilationException; +import org.apache.asterix.common.exceptions.ErrorCode; import org.apache.asterix.external.indexing.IndexingConstants; import org.apache.asterix.lang.common.util.FunctionUtil; import org.apache.asterix.metadata.declared.DataSourceId; @@ -204,7 +206,8 @@ argValue = ConstantExpressionUtil.getStringConstant(element); checkAndGenerateFTSearchExceptionForStringPhrase(argValue); } else { - throw new AlgebricksException("Each element in the list should be a string in the Full-text search."); + throw new CompilationException(ErrorCode.ERROR_COMPILATION_TYPE_UNSUPPORTED, + BuiltinFunctions.FULLTEXT_CONTAINS.getName(), element.getType().getTypeTag()); } } } @@ -230,8 +233,8 @@ checkEachElementInFTSearchListPredicate(oListCursor); break; default: - throw new AlgebricksException( - "A full-text Search predicate should be a string or an (un)ordered list."); + throw new CompilationException(ErrorCode.ERROR_COMPILATION_TYPE_UNSUPPORTED, + BuiltinFunctions.FULLTEXT_CONTAINS.getName(), objectFromExpr.getType().getTypeTag()); } } @@ -240,9 +243,7 @@ public static void checkAndGenerateFTSearchExceptionForStringPhrase(String value) throws AlgebricksException { for (int j = 0; j < value.length(); j++) { if (DelimitedUTF8StringBinaryTokenizer.isSeparator(value.charAt(j))) { - throw new AlgebricksException( - "Phrase search in Full-text is not yet supported. Only one keyword per expression is permitted." - + value.charAt(j)); + throw new CompilationException(ErrorCode.COMPILATION_FULLTEXT_PHRASE_FOUND); } } } diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains-without-option.aql b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains-without-option.aql index eee411c..3c924f9 100644 --- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains-without-option.aql +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains-without-option.aql @@ -47,8 +47,6 @@ create index fulltext_index_title on MyData(title) type fulltext; -write output to asterix_nc1:"rttest/inverted-index-basic_fulltext-contains-without-option.adm"; - for $o in dataset MyData where ftcontains($o.title, "database") order by $o.id diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains.aql b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains.aql index bc697df..3ef8cd8 100644 --- a/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains.aql +++ b/asterixdb/asterix-app/src/test/resources/optimizerts/queries/inverted-index-basic/fulltext-contains.aql @@ -47,8 +47,6 @@ create index fulltext_index_title on MyData(title) type fulltext; -write output to asterix_nc1:"rttest/inverted-index-basic_fulltext-contains.adm"; - for $o in dataset MyData where ftcontains($o.title, "database", {"mode":"any"}) order by $o.id diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.1.ddl.aql index 5664ee9..7d62aeb 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.1.ddl.aql +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.1.ddl.aql @@ -20,7 +20,7 @@ /* * Description : Full-text search index test * : This test is intended to verify that the full-text search DOES NOT work as expected. - * : query #3 - a string phrase is provided as a query predicate. + * : query #2 - a string phrase is provided as a query predicate. * : this should throw an exception since we don't support a phrase search yet. * Expected Result : Exception * diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.2.query.aql similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.3.query.aql rename to asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.2.query.aql diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.2.update.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.2.update.aql deleted file mode 100644 index bd244d0..0000000 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-04/fulltext-index-04.2.update.aql +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.1.ddl.aql index 07ebb6c..d34bae3 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.1.ddl.aql +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.1.ddl.aql @@ -20,7 +20,7 @@ /* * Description : Full-text search index test * : This test is intended to verify that the full-text search DOES NOT work as expected. - * : query #3 - a string phrase in an ordered list is provided as a query predicate. + * : query #2 - a string phrase in an ordered list is provided as a query predicate. * : this should throw an exception since we don't support a phrase search yet. * Expected Result : Exception * diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.2.query.aql similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.3.query.aql rename to asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.2.query.aql diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.2.update.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.2.update.aql deleted file mode 100644 index bd244d0..0000000 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-05/fulltext-index-05.2.update.aql +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.1.ddl.aql index 7295edf..f45d679 100644 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.1.ddl.aql +++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.1.ddl.aql @@ -20,7 +20,7 @@ /* * Description : Full-text search index test * : This test is intended to verify that the full-text search DOES NOT work as expected. - * : query #3 - a string phrase in an unordered list is provided as a query predicate. + * : query #2 - a string phrase in an unordered list is provided as a query predicate. * : this should throw an exception since we don't support a phrase search yet. * Expected Result : Exception * diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.2.query.aql similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.3.query.aql rename to asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.2.query.aql diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.2.update.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.2.update.aql deleted file mode 100644 index bd244d0..0000000 --- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/fulltext/fulltext-index-06/fulltext-index-06.2.update.aql +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ - diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-04/fulltext-04.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-04/fulltext-04.2.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-04/fulltext-04.3.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-04/fulltext-04.2.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-05/fulltext-05.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-05/fulltext-05.2.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-05/fulltext-05.3.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-05/fulltext-05.2.adm diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-06/fulltext-06.3.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-06/fulltext-06.2.adm similarity index 100% rename from asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-06/fulltext-06.3.adm rename to asterixdb/asterix-app/src/test/resources/runtimets/results/fulltext/fulltext-06/fulltext-06.2.adm diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java index 2e7c69b..9bbc1c9 100644 --- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java +++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java @@ -63,6 +63,7 @@ public static final int ERROR_COMPILATION_INVALID_EXPRESSION = 1007; public static final int ERROR_COMPILATION_INVALID_PARAMETER_NUMBER = 1008; public static final int ERROR_COMPILATION_INVALID_RETURNING_EXPRESSION = 1009; + public static final int COMPILATION_FULLTEXT_PHRASE_FOUND = 1010; // Loads the map that maps error codes to error message templates. private static Map<Integer, String> errorMessageMap = null; diff --git a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties index 85fa1d1..a3a5d41 100644 --- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties +++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties @@ -48,3 +48,4 @@ # Compile-time check errors 1007=Invalid expression: function %1$s expects its %2$s input parameter to be a %3$s expression, but the actual expression is %4$s 1008=Invalid parameter number: function %1$s cannot take %2$s parameters +1010=Phrase search in Full-text is not yet supported. Only one keyword per expression is permitted \ No newline at end of file diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java index 3f3a5bd..6eaf4ae 100644 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java @@ -64,6 +64,7 @@ import org.apache.asterix.om.typecomputer.impl.FieldAccessByIndexResultType; import org.apache.asterix.om.typecomputer.impl.FieldAccessByNameResultType; import org.apache.asterix.om.typecomputer.impl.FieldAccessNestedResultType; +import org.apache.asterix.om.typecomputer.impl.FullTextContainsResultTypeComputer; import org.apache.asterix.om.typecomputer.impl.GetOverlappingInvervalTypeComputer; import org.apache.asterix.om.typecomputer.impl.InjectFailureTypeComputer; import org.apache.asterix.om.typecomputer.impl.LocalAvgTypeComputer; @@ -1035,8 +1036,8 @@ addPrivateFunction(SIMILARITY_JACCARD_PREFIX_CHECK, OrderedListOfAnyTypeComputer.INSTANCE, true); // Full-text function - addFunction(FULLTEXT_CONTAINS, ABooleanTypeComputer.INSTANCE, true); - addFunction(FULLTEXT_CONTAINS_WO_OPTION, ABooleanTypeComputer.INSTANCE, true); + addFunction(FULLTEXT_CONTAINS, FullTextContainsResultTypeComputer.INSTANCE, true); + addFunction(FULLTEXT_CONTAINS_WO_OPTION, FullTextContainsResultTypeComputer.INSTANCE, true); // Spatial functions addFunction(SPATIAL_AREA, ADoubleTypeComputer.INSTANCE, true); diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java new file mode 100644 index 0000000..f2398e1 --- /dev/null +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FullTextContainsResultTypeComputer.java @@ -0,0 +1,63 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.asterix.om.typecomputer.impl; + +import org.apache.asterix.om.exceptions.TypeMismatchException; +import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer; +import org.apache.asterix.om.types.ATypeTag; +import org.apache.asterix.om.types.BuiltinType; +import org.apache.asterix.om.types.IAType; +import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression; + +public class FullTextContainsResultTypeComputer extends AbstractResultTypeComputer { + + public static final FullTextContainsResultTypeComputer INSTANCE = new FullTextContainsResultTypeComputer(); + + private FullTextContainsResultTypeComputer() { + } + + @Override + protected void checkArgType(String funcName, int argIndex, IAType type) throws AlgebricksException { + ATypeTag actualTypeTag = type.getTypeTag(); + // Expression1 should be a string. + if (argIndex == 0 && actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.ANY) { + throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING); + } + // Expression2 should be a string, or an (un)ordered list. + if (argIndex == 1 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.UNORDEREDLIST + && actualTypeTag != ATypeTag.ORDEREDLIST && actualTypeTag != ATypeTag.ANY)) { + throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.UNORDEREDLIST, + ATypeTag.ORDEREDLIST); + } + // Each option name should be a string if it is already processed by FullTextContainsParameterCheckRule. + // Before, the third argument should be a record if exists. + // The structure is: arg2 = optionName1, arg3 = optionValue1, arg4 = optionName1, arg5 = optionValue2, ... + if (argIndex > 1 && argIndex % 2 == 0 && (actualTypeTag != ATypeTag.STRING && actualTypeTag != ATypeTag.RECORD + && actualTypeTag != ATypeTag.ANY)) { + throw new TypeMismatchException(funcName, argIndex, actualTypeTag, ATypeTag.STRING, ATypeTag.RECORD); + } + } + + @Override + protected IAType getResultType(ILogicalExpression expr, IAType... strippedInputTypes) throws AlgebricksException { + return BuiltinType.ABOOLEAN; + } + +} diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java index 95f2e8e..888f82a 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/ErrorCode.java @@ -34,6 +34,8 @@ public static final int INVALID_OPERATOR_OPERATION = 1; public static final int ERROR_PROCESSING_TUPLE = 2; public static final int FAILURE_ON_NODE = 3; + public static final int RUNTIME_FILE_WITH_ABSOULTE_PATH_NOT_WITHIN_ANY_IO_DEVICE = 4; + public static final int RUNTIME_FULLTEXT_PHRASE_FOUND = 5; // Loads the map that maps error codes to error message templates. private static Map<Integer, String> errorMessageMap = null; diff --git a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties index 890021b..8ebafef 100644 --- a/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties +++ b/hyracks-fullstack/hyracks/hyracks-api/src/main/resources/errormsg/en.properties @@ -19,3 +19,5 @@ 1=Unsupported operation %1$s in %2$s operator 2=Error in processing tuple %1$s in a frame +4=The file with absolute path %1$s is not within any of the current IO devices +5=Phrase search in Full-text is not supported. An expression should include only one word \ No newline at end of file diff --git a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java index 352f912..cb38076 100644 --- a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java +++ b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/io/IOManager.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.concurrent.Executor; +import org.apache.hyracks.api.exceptions.ErrorCode; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.api.io.FileReference; import org.apache.hyracks.api.io.IFileDeviceComputer; @@ -338,17 +339,11 @@ return new FileReference(deviceComputer.compute(path), path); } - // Temp: @Override public FileReference resolveAbsolutePath(String path) throws HyracksDataException { IODeviceHandle devHandle = getDevice(path); if (devHandle == null) { - String errorMessage = "The file with absolute path: " + path - + " is outside all IO devices. IO devices in this node are \n"; - for (IODeviceHandle d : ioDevices) { - errorMessage = errorMessage.concat(d.toString() + '\n'); - } - throw new HyracksDataException(errorMessage); + throw HyracksDataException.create(ErrorCode.RUNTIME_FILE_WITH_ABSOULTE_PATH_NOT_WITHIN_ANY_IO_DEVICE, path); } String relativePath = devHandle.getRelativePath(path); return new FileReference(devHandle, relativePath); diff --git a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/search/AbstractTOccurrenceSearcher.java b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/search/AbstractTOccurrenceSearcher.java index cfc9fc6..9e6afa7 100644 --- a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/search/AbstractTOccurrenceSearcher.java +++ b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-invertedindex/src/main/java/org/apache/hyracks/storage/am/lsm/invertedindex/search/AbstractTOccurrenceSearcher.java @@ -29,6 +29,7 @@ import org.apache.hyracks.api.context.IHyracksCommonContext; import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer; import org.apache.hyracks.api.dataflow.value.RecordDescriptor; +import org.apache.hyracks.api.exceptions.ErrorCode; import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.primitive.IntegerPointable; import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder; @@ -121,16 +122,12 @@ // If it's a list, it can have multiple keywords in it. But, each keyword should not be a phrase. if (isFullTextSearchQuery) { if (queryTokenizerType == TokenizerType.STRING && tokenCountInOneField > 1) { - throw new HyracksDataException( - "Phrase search in Full-text is not supported. " - + "An expression should include only one word."); + throw HyracksDataException.create(ErrorCode.RUNTIME_FULLTEXT_PHRASE_FOUND); } else if (queryTokenizerType == TokenizerType.LIST) { for (int j = 1; j < token.getTokenLength(); j++) { if (DelimitedUTF8StringBinaryTokenizer .isSeparator((char) token.getData()[token.getStartOffset() + j])) { - throw new HyracksDataException( - "Phrase search in Full-text is not supported. " - + "An expression should include only one word."); + throw HyracksDataException.create(ErrorCode.RUNTIME_FULLTEXT_PHRASE_FOUND); } } } -- To view, visit https://asterix-gerrit.ics.uci.edu/1422 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib909882c43a3fc1401eceec1e1ddd981f40b6dee Gerrit-PatchSet: 1 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Taewoo Kim <wangs...@yahoo.com>