diff --git a/config/alfresco/core-services-context.xml b/config/alfresco/core-services-context.xml index 77d97fe631..bf95720ed0 100644 --- a/config/alfresco/core-services-context.xml +++ b/config/alfresco/core-services-context.xml @@ -540,6 +540,9 @@ + + + diff --git a/config/alfresco/hibernate-context.xml b/config/alfresco/hibernate-context.xml index 588a1bac54..5a7daf70d1 100644 --- a/config/alfresco/hibernate-context.xml +++ b/config/alfresco/hibernate-context.xml @@ -408,4 +408,10 @@ + + + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/cmis/search/QueryTest.java b/source/java/org/alfresco/cmis/search/QueryTest.java index 74e5e2a37e..232805ca43 100644 --- a/source/java/org/alfresco/cmis/search/QueryTest.java +++ b/source/java/org/alfresco/cmis/search/QueryTest.java @@ -37,17 +37,36 @@ import org.alfresco.cmis.dictionary.CMISScope; import org.alfresco.cmis.dictionary.CMISTypeId; import org.alfresco.repo.search.impl.parsers.CMISLexer; import org.alfresco.repo.search.impl.parsers.CMISParser; +import org.alfresco.repo.search.impl.parsers.FTSLexer; +import org.alfresco.repo.search.impl.parsers.FTSParser; import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; import org.alfresco.repo.search.impl.querymodel.Column; import org.alfresco.repo.search.impl.querymodel.Constraint; import org.alfresco.repo.search.impl.querymodel.Function; import org.alfresco.repo.search.impl.querymodel.JoinType; +import org.alfresco.repo.search.impl.querymodel.Order; +import org.alfresco.repo.search.impl.querymodel.Ordering; +import org.alfresco.repo.search.impl.querymodel.Query; import org.alfresco.repo.search.impl.querymodel.QueryModelFactory; import org.alfresco.repo.search.impl.querymodel.Selector; import org.alfresco.repo.search.impl.querymodel.Source; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Child; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Descendant; import org.alfresco.repo.search.impl.querymodel.impl.functions.Equals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Exists; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSExactTerm; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSPhrase; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSTerm; +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThan; +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.In; +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThan; +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Like; import org.alfresco.repo.search.impl.querymodel.impl.functions.Lower; +import org.alfresco.repo.search.impl.querymodel.impl.functions.NotEquals; import org.alfresco.repo.search.impl.querymodel.impl.functions.PropertyAccessor; import org.alfresco.repo.search.impl.querymodel.impl.functions.Score; import org.alfresco.repo.search.impl.querymodel.impl.functions.Upper; @@ -67,7 +86,7 @@ public class QueryTest extends BaseCMISTest { public void testParse() { - String input = "SELECT UPPER(1.0) AS WOOF FROM DOCUMENT_OBJECT_TYPE AS DOC LEFT OUTER JOIN FOLDER_OBJECT_TYPE AS FOLDER ON (DOC.NAME = FOLDER.NAME)"; + String input = "SELECT UPPER(1.0) AS WOOF FROM DOCUMENT_OBJECT_TYPE AS DOC LEFT OUTER JOIN FOLDER_OBJECT_TYPE AS FOLDER ON (DOC.NAME = FOLDER.NAME) WHERE CONTAINS('DOC.NAME:lemur AND woof') AND (DOC.NAME in ('one', 'two') AND IN_FOLDER('meep') AND DOC.NAME like 'woof' and DOC.NAME = 'woof' and DOC.OBJECT_ID = 'meep') ORDER BY DOC.NAME DESC, WOOF"; CMISParser parser = null; try { @@ -81,13 +100,27 @@ public class QueryTest extends BaseCMISTest QueryModelFactory factory = new LuceneQueryModelFactory(); CommonTree sourceNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.SOURCE); - Source s = buildSource(sourceNode, true, factory); - Map selectors = s.getSelectors(); + Source source = buildSource(sourceNode, true, factory); + Map selectors = source.getSelectors(); ArrayList columns = buildColumns(queryNode, factory, selectors); - System.out.println(s); + ArrayList orderings = buildOrderings(queryNode, factory, selectors, columns); + + Constraint constraint = null; + CommonTree orNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.DISJUNCTION); + if (orNode != null) + { + constraint = buildDisjunction(orNode, factory, selectors, columns); + } + + System.out.println(source); System.out.println(selectors); System.out.println(columns); + System.out.println(orderings); + System.out.println(constraint); + + Query query = factory.createQuery(columns, source, constraint, orderings); + System.out.println(query); } catch (RecognitionException e) { @@ -102,6 +135,506 @@ public class QueryTest extends BaseCMISTest } + /** + * @param queryNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildDisjunction(CommonTree orNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(orNode.getChildCount()); + for (int i = 0; i < orNode.getChildCount(); i++) + { + CommonTree andNode = (CommonTree) orNode.getChild(i); + Constraint constraint = buildConjunction(andNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createDisjunction(constraints); + } + } + + /** + * @param andNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildConjunction(CommonTree andNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(andNode.getChildCount()); + for (int i = 0; i < andNode.getChildCount(); i++) + { + CommonTree notNode = (CommonTree) andNode.getChild(i); + Constraint constraint = buildNegation(notNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createConjunction(constraints); + } + } + + /** + * @param notNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildNegation(CommonTree notNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + if (notNode.getType() == CMISParser.NEGATION) + { + Constraint constraint = buildTest(notNode, factory, selectors, columns); + return factory.createNegation(constraint); + } + else + { + return buildTest(notNode, factory, selectors, columns); + } + } + + /** + * @param notNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildTest(CommonTree testNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + if (testNode.getType() == CMISParser.DISJUNCTION) + { + return buildDisjunction(testNode, factory, selectors, columns); + } + else + { + return buildPredicate(testNode, factory, selectors, columns); + } + } + + /** + * @param orNode + * @param factory + * @param selectors + * @param columns + * @return + */ + private Constraint buildPredicate(CommonTree predicateNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + String functionName; + Function function; + CommonTree argNode; + List functionArguments; + Argument arg; + switch (predicateNode.getType()) + { + case CMISParser.PRED_CHILD: + functionName = Child.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(0); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); + functionArguments.add(arg); + if (predicateNode.getChildCount() > 1) + { + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_COMPARISON: + switch (predicateNode.getChild(2).getType()) + { + case CMISParser.EQUALS: + functionName = Equals.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.NOTEQUALS: + functionName = NotEquals.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.GREATERTHAN: + functionName = GreaterThan.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.GREATERTHANOREQUALS: + functionName = GreaterThanOrEquals.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.LESSTHAN: + functionName = LessThan.NAME; + function = factory.getFunction(functionName); + break; + case CMISParser.LESSTHANOREQUALS: + functionName = LessThanOrEquals.NAME; + function = factory.getFunction(functionName); + break; + default: + throw new CMISQueryException("Unknown comparison function " + predicateNode.getChild(2).getText()); + } + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_LHS), factory, selectors); + functionArguments.add(arg); + argNode = (CommonTree) predicateNode.getChild(3); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_RHS), factory, selectors); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_DESCENDANT: + functionName = Descendant.NAME; + function = factory.getFunction(functionName); + argNode = (CommonTree) predicateNode.getChild(0); + functionArguments = new ArrayList(); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); + functionArguments.add(arg); + if (predicateNode.getChildCount() > 1) + { + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_EXISTS: + functionName = Exists.NAME; + function = factory.getFunction(functionName); + argNode = (CommonTree) predicateNode.getChild(0); + functionArguments = new ArrayList(); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Exists.ARG_PROPERTY), factory, selectors); + functionArguments.add(arg); + arg = factory.createLiteralArgument(Exists.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() == 1)); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_FTS: + String ftsExpression = predicateNode.getChild(0).getText(); + return buildFTS(ftsExpression, factory, selectors, columns); + case CMISParser.PRED_IN: + functionName = In.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(0); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_PROPERTY), factory, selectors); + functionArguments.add(arg); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_COLLECTION), factory, selectors); + functionArguments.add(arg); + arg = factory.createLiteralArgument(In.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 2)); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + case CMISParser.PRED_LIKE: + functionName = Like.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + argNode = (CommonTree) predicateNode.getChild(0); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_PROPERTY), factory, selectors); + functionArguments.add(arg); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_EXP), factory, selectors); + functionArguments.add(arg); + arg = factory.createLiteralArgument(Like.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 2)); + functionArguments.add(arg); + return factory.createFunctionalConstraint(function, functionArguments); + default: + return null; + } + } + + private Constraint buildFTS(String ftsExpression, QueryModelFactory factory, Map selectors, ArrayList columns) + { + // TODO: transform '' to ' to reverse encoding + FTSParser parser = null; + try + { + CharStream cs = new ANTLRStringStream(ftsExpression); + FTSLexer lexer = new FTSLexer(cs); + CommonTokenStream tokens = new CommonTokenStream(lexer); + parser = new FTSParser(tokens); + CommonTree ftsNode = (CommonTree) parser.fts().getTree(); + if (ftsNode.getType() == FTSParser.CONJUNCTION) + { + return buildFTSConjunction(ftsNode, factory, selectors, columns); + } + else + { + return buildFTSDisjunction(ftsNode, factory, selectors, columns); + } + } + catch (RecognitionException e) + { + if (parser != null) + { + String[] tokenNames = parser.getTokenNames(); + String hdr = parser.getErrorHeader(e); + String msg = parser.getErrorMessage(e, tokenNames); + throw new CMISQueryException(hdr + "\n" + msg, e); + } + return null; + } + + } + + private Constraint buildFTSDisjunction(CommonTree orNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(orNode.getChildCount()); + for (int i = 0; i < orNode.getChildCount(); i++) + { + CommonTree andNode = (CommonTree) orNode.getChild(i); + Constraint constraint = buildFTSConjunction(andNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createDisjunction(constraints); + } + } + + private Constraint buildFTSConjunction(CommonTree andNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + List constraints = new ArrayList(andNode.getChildCount()); + for (int i = 0; i < andNode.getChildCount(); i++) + { + CommonTree notNode = (CommonTree) andNode.getChild(i); + Constraint constraint = buildFTSNegation(notNode, factory, selectors, columns); + constraints.add(constraint); + } + if (constraints.size() == 1) + { + return constraints.get(0); + } + else + { + return factory.createConjunction(constraints); + } + } + + private Constraint buildFTSNegation(CommonTree notNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + if (notNode.getType() == FTSParser.NEGATION) + { + Constraint constraint = buildFTSTest(notNode, factory, selectors, columns); + return factory.createNegation(constraint); + } + else + { + return buildFTSTest(notNode, factory, selectors, columns); + } + } + + private Constraint buildFTSTest(CommonTree testNode, QueryModelFactory factory, Map selectors, ArrayList columns) + { + String term; + String phrase; + String functionName; + Function function; + List functionArguments; + Argument arg; + switch (testNode.getType()) + { + case FTSParser.DISJUNCTION: + return buildFTSDisjunction(testNode, factory, selectors, columns); + case FTSParser.CONJUNCTION: + return buildFTSConjunction(testNode, factory, selectors, columns); + case FTSParser.TERM: + functionName = FTSTerm.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + arg = factory.createLiteralArgument(FTSTerm.ARG_TERM, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); + functionArguments.add(arg); + if(testNode.getChildCount() > 1) + { + arg = buildColumnReference(FTSTerm.ARG_PROPERTY, (CommonTree)testNode.getChild(1), factory); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case FTSParser.EXACT_TERM: + functionName = FTSExactTerm.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + arg = factory.createLiteralArgument(FTSExactTerm.ARG_TERM, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); + functionArguments.add(arg); + if(testNode.getChildCount() > 1) + { + arg = buildColumnReference(FTSExactTerm.ARG_PROPERTY, (CommonTree)testNode.getChild(1), factory); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case FTSParser.PHRASE: + // TODO: transform "" to " to reverse escaping + functionName = FTSPhrase.NAME; + function = factory.getFunction(functionName); + functionArguments = new ArrayList(); + arg = factory.createLiteralArgument(FTSPhrase.ARG_PHRASE, DataTypeDefinition.TEXT, testNode.getChild(0).getText()); + functionArguments.add(arg); + if(testNode.getChildCount() > 1) + { + arg = buildColumnReference(FTSPhrase.ARG_PROPERTY, (CommonTree)testNode.getChild(1), factory); + functionArguments.add(arg); + } + return factory.createFunctionalConstraint(function, functionArguments); + case FTSParser.SYNONYM: + case FTSParser.FG_PROXIMITY: + case FTSParser.FG_RANGE: + case FTSParser.FIELD_GROUP: + case FTSParser.FIELD_CONJUNCTION: + case FTSParser.FIELD_DISJUNCTION: + default: + throw new CMISQueryException("Unsupported FTS option "+testNode.getText()); + } + } + + /** + * @param queryNode + * @param factory + * @param selectors + * @return + */ + private ArrayList buildOrderings(CommonTree queryNode, QueryModelFactory factory, Map selectors, List columns) + { + ArrayList orderings = new ArrayList(); + CommonTree orderNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.ORDER); + if (orderNode != null) + { + for (int i = 0; i < orderNode.getChildCount(); i++) + { + CommonTree current = (CommonTree) orderNode.getChild(i); + + CommonTree columnRefNode = (CommonTree) current.getFirstChildWithType(CMISParser.COLUMN_REF); + if (columnRefNode != null) + { + String columnName = columnRefNode.getChild(0).getText(); + String qualifier = ""; + if (columnRefNode.getChildCount() > 1) + { + qualifier = columnRefNode.getChild(1).getText(); + } + + Order order = Order.ASCENDING; + + if (current.getChild(1).getType() == CMISParser.DESC) + { + order = Order.DESCENDING; + } + + Column orderColumn = null; + + if (qualifier.length() == 0) + { + Column match = null; + for (Column column : columns) + { + if (column.getAlias().equals(columnName)) + { + match = column; + break; + } + } + if (match == null) + { + + Selector selector = selectors.get(qualifier); + if (selector == null) + { + throw new CMISQueryException("No selector for " + qualifier); + } + QName cmisType = CMISMapping.getCmisType(selector.getType()); + CMISTypeId typeId = null; + if (CMISMapping.isValidCmisDocument(dictionaryService, cmisType)) + { + typeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); + } + else if (CMISMapping.isValidCmisFolder(dictionaryService, cmisType)) + { + typeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); + } + else + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); + + if (definition == null) + { + throw new CMISQueryException("Invalid column for " + CMISMapping.getQueryName(namespaceService, typeId.getQName()) + "." + columnName); + } + + Function function = factory.getFunction(PropertyAccessor.NAME); + QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), definition.getPropertyName()); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); + List functionArguments = new ArrayList(1); + functionArguments.add(arg); + + String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); + + match = factory.createColumn(function, functionArguments, alias); + } + orderColumn = match; + } + else + { + Selector selector = selectors.get(qualifier); + if (selector == null) + { + throw new CMISQueryException("No selector for " + qualifier); + } + QName cmisType = CMISMapping.getCmisType(selector.getType()); + CMISTypeId typeId = null; + if (CMISMapping.isValidCmisDocument(dictionaryService, cmisType)) + { + typeId = CMISMapping.getCmisTypeId(CMISScope.DOCUMENT, cmisType); + } + else if (CMISMapping.isValidCmisFolder(dictionaryService, cmisType)) + { + typeId = CMISMapping.getCmisTypeId(CMISScope.FOLDER, cmisType); + } + else + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + CMISPropertyDefinition definition = cmisDictionaryService.getPropertyDefinition(typeId, columnName); + + if (definition == null) + { + throw new CMISQueryException("Invalid column for " + + CMISMapping.getQueryName(namespaceService, typeId.getQName()) + "." + columnName + " selector alias " + selector.getAlias()); + } + + Function function = factory.getFunction(PropertyAccessor.NAME); + QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), definition.getPropertyName()); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, selector.getAlias(), propertyQName); + List functionArguments = new ArrayList(1); + functionArguments.add(arg); + + String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyName() : definition.getPropertyName(); + + orderColumn = factory.createColumn(function, functionArguments, alias); + } + + // TODO: check orderable - add to the column definition + + Ordering ordering = factory.createOrdering(orderColumn, order); + orderings.add(ordering); + + } + } + } + return orderings; + } + private ArrayList buildColumns(CommonTree queryNode, QueryModelFactory factory, Map selectors) { ArrayList columns = new ArrayList(); @@ -252,78 +785,15 @@ public class QueryTest extends BaseCMISTest if (functionNode.getChildCount() > childIndex) { CommonTree argNode = (CommonTree) functionNode.getChild(childIndex++); - if (argNode.getType() == CMISParser.COLUMN_REF) - { - Argument arg = buildColumnReference(definition.getName(), argNode, factory); - functionArguments.add(arg); - } - else if (argNode.getType() == CMISParser.ID) - { - Argument arg; - String id = argNode.getText(); - if(selectors.containsKey(id)) - { - arg = factory.createSelectorArgument(definition.getName(), id); - } - else - { - QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), id); - arg = factory.createPropertyArgument(definition.getName(), "", propertyQName); - } - functionArguments.add(arg); - } - else if(argNode.getType() == CMISParser.PARAMETER) - { - Argument arg = factory.createParameterArgument(definition.getName(), argNode.getText()); - functionArguments.add(arg); - } - else if(argNode.getType() == CMISParser.NUMERIC_LITERAL) - { - CommonTree literalNode = (CommonTree) argNode.getChild(0); - if(literalNode.getType() == CMISParser.FLOATING_POINT_LITERAL) - { - QName type = DataTypeDefinition.DOUBLE; - Number value = Double.parseDouble(literalNode.getText()); - if(value.floatValue() == value.doubleValue()) - { - type = DataTypeDefinition.FLOAT; - value = Float.valueOf(value.floatValue()); - } - Argument arg = factory.createLiteralArgument(definition.getName(), type, value); - functionArguments.add(arg); - } - else if(literalNode.getType() == CMISParser.DECIMAL_INTEGER_LITERAL) - { - QName type = DataTypeDefinition.LONG; - Number value = Long.parseLong(literalNode.getText()); - if(value.intValue() == value.longValue()) - { - type = DataTypeDefinition.INT; - value = Integer.valueOf(value.intValue()); - } - Argument arg = factory.createLiteralArgument(definition.getName(), type, value); - functionArguments.add(arg); - } - else - { - throw new CMISQueryException("Invalid numeric literal "+literalNode.getText()); - } - } - else if(argNode.getType() == CMISParser.STRING_LITERAL) - { - Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getChild(0).getText()); - functionArguments.add(arg); - } - else - { - throw new CMISQueryException("Invalid query argument "+argNode.getText()); - } + Argument arg = getFunctionArgument(argNode, definition, factory, selectors); + functionArguments.add(arg); } else { if (definition.isMandatory()) { - //throw new CMISQueryException("Insufficient aruments for function " + ((CommonTree) functionNode.getChild(0)).getText() ); + // throw new CMISQueryException("Insufficient aruments for function " + ((CommonTree) + // functionNode.getChild(0)).getText() ); break; } else @@ -332,23 +802,114 @@ public class QueryTest extends BaseCMISTest } } } - + String alias = function.getName(); if (columnNode.getChildCount() > 1) { alias = columnNode.getChild(1).getText(); } - + Column column = factory.createColumn(function, functionArguments, alias); columns.add(column); } - + } } return columns; } + private Argument getFunctionArgument(CommonTree argNode, ArgumentDefinition definition, QueryModelFactory factory, Map selectors) + { + if (argNode.getType() == CMISParser.COLUMN_REF) + { + Argument arg = buildColumnReference(definition.getName(), argNode, factory); + return arg; + } + else if (argNode.getType() == CMISParser.ID) + { + Argument arg; + String id = argNode.getText(); + if (selectors.containsKey(id)) + { + arg = factory.createSelectorArgument(definition.getName(), id); + } + else + { + QName propertyQName = CMISMapping.getPropertyQName(dictionaryService, serviceRegistry.getNamespaceService(), id); + arg = factory.createPropertyArgument(definition.getName(), "", propertyQName); + } + return arg; + } + else if (argNode.getType() == CMISParser.PARAMETER) + { + Argument arg = factory.createParameterArgument(definition.getName(), argNode.getText()); + return arg; + } + else if (argNode.getType() == CMISParser.NUMERIC_LITERAL) + { + CommonTree literalNode = (CommonTree) argNode.getChild(0); + if (literalNode.getType() == CMISParser.FLOATING_POINT_LITERAL) + { + QName type = DataTypeDefinition.DOUBLE; + Number value = Double.parseDouble(literalNode.getText()); + if (value.floatValue() == value.doubleValue()) + { + type = DataTypeDefinition.FLOAT; + value = Float.valueOf(value.floatValue()); + } + Argument arg = factory.createLiteralArgument(definition.getName(), type, value); + return arg; + } + else if (literalNode.getType() == CMISParser.DECIMAL_INTEGER_LITERAL) + { + QName type = DataTypeDefinition.LONG; + Number value = Long.parseLong(literalNode.getText()); + if (value.intValue() == value.longValue()) + { + type = DataTypeDefinition.INT; + value = Integer.valueOf(value.intValue()); + } + Argument arg = factory.createLiteralArgument(definition.getName(), type, value); + return arg; + } + else + { + throw new CMISQueryException("Invalid numeric literal " + literalNode.getText()); + } + } + else if (argNode.getType() == CMISParser.STRING_LITERAL) + { + Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getChild(0).getText()); + return arg; + } + else if (argNode.getType() == CMISParser.LIST) + { + ArrayList arguments = new ArrayList(); + for (int i = 0; i < argNode.getChildCount(); i++) + { + CommonTree arg = (CommonTree) argNode.getChild(i); + arguments.add(getFunctionArgument(arg, definition, factory, selectors)); + } + Argument arg = factory.createListArgument(definition.getName(), arguments); + return arg; + } + else if (argNode.getType() == CMISParser.ANY) + { + Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); + return arg; + } + else if (argNode.getType() == CMISParser.NOT) + { + Argument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); + return arg; + } + else + { + throw new CMISQueryException("Invalid query argument " + argNode.getText()); + } + } + @SuppressWarnings("unchecked") private Source buildSource(CommonTree source, boolean supportJoins, QueryModelFactory factory) { diff --git a/source/java/org/alfresco/repo/domain/hibernate/BulkLoader.java b/source/java/org/alfresco/repo/domain/hibernate/BulkLoader.java new file mode 100644 index 0000000000..019cc5fda1 --- /dev/null +++ b/source/java/org/alfresco/repo/domain/hibernate/BulkLoader.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.domain.hibernate; + +import java.util.Collection; + +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * @author andyh + * + */ +public interface BulkLoader +{ + public void loadIntoCache(Collection nodeRefs); +} diff --git a/source/java/org/alfresco/repo/domain/hibernate/HibernateL1CacheBulkLoader.java b/source/java/org/alfresco/repo/domain/hibernate/HibernateL1CacheBulkLoader.java new file mode 100644 index 0000000000..1d19bb660a --- /dev/null +++ b/source/java/org/alfresco/repo/domain/hibernate/HibernateL1CacheBulkLoader.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.domain.hibernate; + +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.alfresco.repo.domain.Node; +import org.alfresco.service.cmr.repository.NodeRef; +import org.hibernate.CacheMode; +import org.hibernate.Criteria; +import org.hibernate.EntityMode; +import org.hibernate.FetchMode; +import org.hibernate.FlushMode; +import org.hibernate.Session; +import org.hibernate.criterion.Projections; +import org.hibernate.criterion.Property; +import org.hibernate.criterion.Restrictions; +import org.hibernate.engine.EntityKey; +import org.hibernate.metadata.ClassMetadata; +import org.hibernate.metadata.CollectionMetadata; +import org.hibernate.stat.SessionStatistics; +import org.hibernate.stat.Statistics; +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +/** + * @author andyh + */ +public class HibernateL1CacheBulkLoader extends HibernateDaoSupport implements BulkLoader +{ + public void loadIntoCache(Collection nodeRefs) + { + // TODO: only do if dirty. + //getSession().flush(); + + String[] guids = new String[nodeRefs.size()]; + int index = 0; + for (NodeRef nodeRef : nodeRefs) + { + guids[index++] = nodeRef.getId(); + } + + Criteria criteria = getSession().createCriteria(NodeStatusImpl.class, "status"); + criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); + criteria.add(Restrictions.in("key.guid", guids)); + criteria.createAlias("status.node", "node"); + criteria.setFetchMode("node.aspects", FetchMode.SELECT); + criteria.setFetchMode("node.properties", FetchMode.JOIN); + criteria.setFetchMode("node.store", FetchMode.SELECT); + criteria.setCacheMode(CacheMode.IGNORE); + criteria.setFlushMode(FlushMode.MANUAL); + + criteria.list(); + + criteria = getSession().createCriteria(NodeStatusImpl.class, "status"); + criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); + criteria.add(Restrictions.in("key.guid", guids)); + criteria.createAlias("status.node", "node"); + criteria.setFetchMode("node.aspects", FetchMode.JOIN); + criteria.setFetchMode("node.properties", FetchMode.SELECT); + criteria.setFetchMode("node.store", FetchMode.SELECT); + criteria.setCacheMode(CacheMode.IGNORE); + criteria.setFlushMode(FlushMode.MANUAL); + + criteria.list(); + + + } + + public void clear() + { + getSession().flush(); + getSession().clear(); + Map classes = getSessionFactory().getAllClassMetadata(); + for (ClassMetadata clazz : classes.values()) + { + getSessionFactory().evict(clazz.getMappedClass(EntityMode.POJO)); + } + Map collections = getSessionFactory().getAllCollectionMetadata(); + for (CollectionMetadata clazz : collections.values()) + { + getSessionFactory().evictCollection(clazz.getRole()); + } + + } +} diff --git a/source/java/org/alfresco/repo/search/AVMSnapShotTriggeredIndexingMethodInterceptor.java b/source/java/org/alfresco/repo/search/AVMSnapShotTriggeredIndexingMethodInterceptor.java index 6abd4cb315..a12b957ffa 100644 --- a/source/java/org/alfresco/repo/search/AVMSnapShotTriggeredIndexingMethodInterceptor.java +++ b/source/java/org/alfresco/repo/search/AVMSnapShotTriggeredIndexingMethodInterceptor.java @@ -35,7 +35,6 @@ import org.alfresco.repo.avm.AVMNodeConverter; import org.alfresco.repo.domain.PropertyValue; import org.alfresco.repo.search.impl.lucene.AVMLuceneIndexer; import org.alfresco.service.cmr.avm.AVMService; -import org.alfresco.service.cmr.avm.AVMStoreDescriptor; import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.namespace.QName; import org.aopalliance.intercept.MethodInterceptor; diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java index 39414c4a06..b714435db6 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneCategoryTest.java @@ -31,8 +31,6 @@ import java.util.HashMap; import java.util.List; import java.util.Random; -import javax.transaction.NotSupportedException; -import javax.transaction.SystemException; import javax.transaction.UserTransaction; import junit.framework.TestCase; diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java index ee95643cc9..930cf16b5f 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneSearcherImpl.java @@ -27,7 +27,6 @@ package org.alfresco.repo.search.impl.lucene; import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; @@ -42,11 +41,9 @@ import org.alfresco.repo.search.QueryRegisterComponent; import org.alfresco.repo.search.SearcherException; import org.alfresco.repo.search.impl.NodeSearcher; import org.alfresco.repo.search.impl.lucene.QueryParser.Operator; -import org.alfresco.repo.tenant.TenantService; import org.alfresco.repo.search.impl.lucene.analysis.DateTimeAnalyser; -import org.alfresco.repo.search.results.SortedResultSet; +import org.alfresco.repo.tenant.TenantService; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; -import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.PropertyDefinition; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.NodeRef; @@ -69,7 +66,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; -import org.apache.lucene.index.TermDocs; import org.apache.lucene.index.TermEnum; import org.apache.lucene.search.Hits; import org.apache.lucene.search.Query; @@ -320,7 +316,7 @@ public class ADMLuceneSearcherImpl extends AbstractLuceneBase implements LuceneS } Path[] paths = searchParameters.getAttributePaths().toArray(new Path[0]); - ResultSet rs = new LuceneResultSet(hits, searcher, nodeService, tenantService, paths, searchParameters); + ResultSet rs = new LuceneResultSet(hits, searcher, nodeService, tenantService, paths, searchParameters, getLuceneConfig()); if(requiresPostSort) { ResultSet sorted = new SortedResultSet(rs, nodeService, searchParameters, namespacePrefixResolver); @@ -362,7 +358,7 @@ public class ADMLuceneSearcherImpl extends AbstractLuceneBase implements LuceneS return new EmptyResultSet(); } Hits hits = searcher.search(query); - return new LuceneResultSet(hits, searcher, nodeService, tenantService, searchParameters.getAttributePaths().toArray(new Path[0]), searchParameters); + return new LuceneResultSet(hits, searcher, nodeService, tenantService, searchParameters.getAttributePaths().toArray(new Path[0]), searchParameters, getLuceneConfig()); } catch (SAXPathException e) { diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java index cc730d254e..8e7bd54ce7 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -51,6 +51,7 @@ import org.alfresco.repo.dictionary.DictionaryDAO; import org.alfresco.repo.dictionary.DictionaryNamespaceComponent; import org.alfresco.repo.dictionary.M2Model; import org.alfresco.repo.dictionary.NamespaceDAOImpl; +import org.alfresco.repo.domain.hibernate.HibernateL1CacheBulkLoader; import org.alfresco.repo.domain.hibernate.SessionSizeResourceManager; import org.alfresco.repo.node.BaseNodeServiceTest; import org.alfresco.repo.search.MLAnalysisMode; @@ -133,7 +134,7 @@ public class ADMLuceneTest extends TestCase NodeService nodeService; DictionaryService dictionaryService; - + TenantService tenantService; private NodeRef rootNodeRef; @@ -198,6 +199,8 @@ public class ADMLuceneTest extends TestCase private Date testDate; + private HibernateL1CacheBulkLoader hibernateL1CacheBulkLoader; + /** * */ @@ -220,7 +223,9 @@ public class ADMLuceneTest extends TestCase transactionService = (TransactionService) ctx.getBean("transactionComponent"); retryingTransactionHelper = (RetryingTransactionHelper) ctx.getBean("retryingTransactionHelper"); tenantService = (TenantService) ctx.getBean("tenantService"); - + + hibernateL1CacheBulkLoader = (HibernateL1CacheBulkLoader) ctx.getBean("hibernateL1CacheBulkLoader"); + serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); namespaceDao = (NamespaceDAOImpl) ctx.getBean("namespaceDAO"); @@ -469,6 +474,7 @@ public class ADMLuceneTest extends TestCase super(arg0); } + public void testOverWritetoZeroSize() throws Exception { testTX.commit(); @@ -512,6 +518,247 @@ public class ADMLuceneTest extends TestCase } + public void testBulkResultSet1() throws Exception + { + doBulkTest(1); + } + + public void testBulkResultSet10() throws Exception + { + doBulkTest(10); + } + + public void testBulkResultSet100() throws Exception + { + + doBulkTest(100); + } + + public void testBulkResultSet1000() throws Exception + { + doBulkTest(1000); + } + + public void xtestBulkResultSet10000() throws Exception + { + doBulkTest(10000); + } + + private void doBulkTest(int n) throws Exception + { + + Map testProperties = new HashMap(); + testProperties.put(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic"), "BULK"); + for (int i = 0; i < n; i++) + { + nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}texas-" + i), testSuperType, testProperties).getChildRef(); + } + testTX.commit(); + testTX = transactionService.getUserTransaction(); + testTX.begin(); + + ADMLuceneSearcherImpl searcher = ADMLuceneSearcherImpl.getSearcher(rootNodeRef.getStoreRef(), indexerAndSearcher); + searcher.setNodeService(nodeService); + searcher.setDictionaryService(dictionaryService); + searcher.setTenantService(tenantService); + searcher.setNamespacePrefixResolver(getNamespacePrefixReolsver("namespace")); + SearchParameters sp = new SearchParameters(); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setLanguage("lucene"); + sp.setQuery("\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"BULK\""); + sp.setBulkFetch(false); + sp.setBulkFetchSize(10); + ResultSet results = searcher.query(sp); + assertEquals(n, results.length()); + results.close(); + + getCold(searcher, n); + getWarm(searcher, n); + getCold(searcher, n); + getCold10(searcher, n); + getCold100(searcher, n); + getCold1000(searcher, n); + getCold10000(searcher, n); + + testTX.commit(); + testTX = transactionService.getUserTransaction(); + testTX.begin(); + + } + + private void getCold(ADMLuceneSearcherImpl searcher, int n) + { + hibernateL1CacheBulkLoader.clear(); + + long start; + + long end; + + start = System.nanoTime(); + + SearchParameters sp = new SearchParameters(); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setLanguage("lucene"); + sp.setQuery("\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"BULK\""); + sp.setBulkFetch(false); + sp.setBulkFetchSize(0); + ResultSet results = searcher.query(sp); + for (ResultSetRow row : results) + { + nodeService.getAspects(row.getNodeRef()); + nodeService.getProperties(row.getNodeRef()); + } + results.close(); + + end = System.nanoTime(); + + System.out.println(n + " Cold in " + ((end - start) / 10e9)); + } + + private void getWarm(ADMLuceneSearcherImpl searcher, int n) + { + + long start; + + long end; + + start = System.nanoTime(); + + SearchParameters sp = new SearchParameters(); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setLanguage("lucene"); + sp.setQuery("\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"BULK\""); + sp.setBulkFetch(false); + sp.setBulkFetchSize(0); + ResultSet results = searcher.query(sp); + for (ResultSetRow row : results) + { + nodeService.getAspects(row.getNodeRef()); + nodeService.getProperties(row.getNodeRef()); + } + results.close(); + + end = System.nanoTime(); + + System.out.println(n + " Warm in " + ((end - start) / 10e9)); + } + + private void getCold10(ADMLuceneSearcherImpl searcher, int n) + { + hibernateL1CacheBulkLoader.clear(); + + long start; + + long end; + + start = System.nanoTime(); + + SearchParameters sp = new SearchParameters(); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setLanguage("lucene"); + sp.setQuery("\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"BULK\""); + sp.setBulkFetch(true); + sp.setBulkFetchSize(10); + ResultSet results = searcher.query(sp); + for (ResultSetRow row : results) + { + nodeService.getAspects(row.getNodeRef()); + nodeService.getProperties(row.getNodeRef()); + } + results.close(); + + end = System.nanoTime(); + + System.out.println(n + " Prefetch 10 in " + ((end - start) / 10e9)); + } + + private void getCold100(ADMLuceneSearcherImpl searcher, int n) + { + hibernateL1CacheBulkLoader.clear(); + + long start; + + long end; + + start = System.nanoTime(); + + SearchParameters sp = new SearchParameters(); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setLanguage("lucene"); + sp.setQuery("\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"BULK\""); + sp.setBulkFetch(true); + sp.setBulkFetchSize(100); + ResultSet results = searcher.query(sp); + for (ResultSetRow row : results) + { + nodeService.getAspects(row.getNodeRef()); + nodeService.getProperties(row.getNodeRef()); + } + results.close(); + + end = System.nanoTime(); + + System.out.println(n + " Prefetch 100 in " + ((end - start) / 10e9)); + } + + private void getCold1000(ADMLuceneSearcherImpl searcher, int n) + { + hibernateL1CacheBulkLoader.clear(); + + long start; + + long end; + + start = System.nanoTime(); + + SearchParameters sp = new SearchParameters(); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setLanguage("lucene"); + sp.setQuery("\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"BULK\""); + sp.setBulkFetch(true); + sp.setBulkFetchSize(1000); + ResultSet results = searcher.query(sp); + for (ResultSetRow row : results) + { + nodeService.getAspects(row.getNodeRef()); + nodeService.getProperties(row.getNodeRef()); + } + results.close(); + + end = System.nanoTime(); + + System.out.println(n + " Prefetch 1000 in " + ((end - start) / 10e9)); + } + + private void getCold10000(ADMLuceneSearcherImpl searcher, int n) + { + hibernateL1CacheBulkLoader.clear(); + + long start; + + long end; + + start = System.nanoTime(); + + SearchParameters sp = new SearchParameters(); + sp.addStore(rootNodeRef.getStoreRef()); + sp.setLanguage("lucene"); + sp.setQuery("\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"BULK\""); + sp.setBulkFetch(true); + sp.setBulkFetchSize(10000); + ResultSet results = searcher.query(sp); + for (ResultSetRow row : results) + { + nodeService.getAspects(row.getNodeRef()); + nodeService.getProperties(row.getNodeRef()); + } + results.close(); + + end = System.nanoTime(); + + System.out.println(n + " Prefetch 10000 in " + ((end - start) / 10e9)); + } + /** * Test bug fix * @@ -4097,7 +4344,7 @@ public class ADMLuceneTest extends TestCase results = searcher.query(sp); assertEquals(1, results.length()); results.close(); - + sp = new SearchParameters(); sp.addStore(rootNodeRef.getStoreRef()); sp.setLanguage("lucene"); @@ -4105,7 +4352,7 @@ public class ADMLuceneTest extends TestCase results = searcher.query(sp); assertEquals(1, results.length()); results.close(); - + sp = new SearchParameters(); sp.addStore(rootNodeRef.getStoreRef()); sp.setLanguage("lucene"); @@ -5230,7 +5477,7 @@ public class ADMLuceneTest extends TestCase searcher.setNamespacePrefixResolver(getNamespacePrefixReolsver("namespace")); searcher.setDictionaryService(dictionaryService); searcher.setTenantService(tenantService); - + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(QName.createQName(TEST_NAMESPACE, "text-indexed-stored-tokenised-atomic")) + ":\"keyone\"", null, null); assertEquals(1, results.length()); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java b/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java index 28d600a7aa..624fad8cac 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/AbstractLuceneIndexerAndSearcherFactory.java @@ -47,6 +47,7 @@ import javax.transaction.xa.Xid; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.avm.AVMNodeService; +import org.alfresco.repo.domain.hibernate.BulkLoader; import org.alfresco.repo.search.IndexerException; import org.alfresco.repo.search.MLAnalysisMode; import org.alfresco.repo.search.QueryRegisterComponent; @@ -117,7 +118,7 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI private static final int DEFAULT_TIMEOUT = 600000; protected TenantService tenantService; - + private String indexRootLocation; private QueryRegisterComponent queryRegister; @@ -139,6 +140,8 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI private ThreadPoolExecutor threadPoolExecutor; + private BulkLoader bulkLoader; + /** * Private constructor for the singleton TODO: FIt in with IOC */ @@ -168,7 +171,7 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI { this.tenantService = tenantService; } - + /** * Set the query register * @@ -211,6 +214,16 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI return maxAtomicTransformationTime; } + public BulkLoader getBulkLoader() + { + return bulkLoader; + } + + public void setBulkLoader(BulkLoader bulkLoader) + { + this.bulkLoader = bulkLoader; + } + /** * Check if we are in a global transactoin according to the transaction manager * @@ -256,7 +269,7 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI public LuceneIndexer getIndexer(StoreRef storeRef) throws IndexerException { storeRef = tenantService.getName(storeRef); - + // register to receive txn callbacks // TODO: make this conditional on whether the XA stuff is being used // directly on not @@ -369,7 +382,7 @@ public abstract class AbstractLuceneIndexerAndSearcherFactory implements LuceneI public LuceneSearcher getSearcher(StoreRef storeRef, boolean searchDelta) throws SearcherException { storeRef = tenantService.getName(storeRef); - + String deltaId = null; LuceneIndexer indexer = null; if (searchDelta) diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java index 1630dede63..88b2684f81 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneConfig.java @@ -26,6 +26,7 @@ package org.alfresco.repo.search.impl.lucene; import java.util.concurrent.ThreadPoolExecutor; +import org.alfresco.repo.domain.hibernate.BulkLoader; import org.alfresco.repo.search.MLAnalysisMode; public interface LuceneConfig @@ -36,13 +37,14 @@ public interface LuceneConfig * @param lockDirectory */ public void setLockDirectory(String lockDirectory); - + /** - * The path to the index location + * The path to the index location + * * @return */ public String getIndexRootLocation(); - + /** * The batch size in which to group flushes of the index. * @@ -52,35 +54,44 @@ public interface LuceneConfig /** * The maximum numbr of sub-queries the can be generated out of wild card expansion etc + * * @return */ public int getQueryMaxClauses(); - + /** * The default mode for analysing ML text during index. * * @return */ public MLAnalysisMode getDefaultMLIndexAnalysisMode(); - + /** * The default mode for analysis of ML text during search. * * @return */ public MLAnalysisMode getDefaultMLSearchAnalysisMode(); - + /** * Get the max field length that determine how many tokens are put into the index + * * @return */ public int getIndexerMaxFieldLength(); - + /** * Get the thread pool for index merging etc * * @return */ public ThreadPoolExecutor getThreadPoolExecutor(); - + + /** + * Get preloader - may be null if preloading is not supported + * + * @return + */ + public BulkLoader getBulkLoader(); + } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java index 6e2ca16091..ba81fde969 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexer.java @@ -26,14 +26,9 @@ package org.alfresco.repo.search.impl.lucene; import java.util.Set; -import org.alfresco.repo.search.BackgroundIndexerAware; import org.alfresco.repo.search.Indexer; import org.alfresco.repo.search.TransactionSynchronisationAwareIndexer; -import org.alfresco.repo.search.impl.lucene.fts.FullTextSearchIndexer; import org.alfresco.repo.search.impl.lucene.index.IndexInfo; -import org.alfresco.service.cmr.dictionary.DictionaryService; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; /** * @author Andy Hind diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexerAndSearcher.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexerAndSearcher.java index 156eacba8f..0dcd404b24 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexerAndSearcher.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneIndexerAndSearcher.java @@ -24,13 +24,8 @@ */ package org.alfresco.repo.search.impl.lucene; -import java.util.List; - import org.alfresco.repo.search.IndexerAndSearcher; import org.alfresco.repo.search.IndexerException; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.util.Pair; public interface LuceneIndexerAndSearcher extends IndexerAndSearcher, LuceneConfig { diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java index 0623692114..f28e352bbb 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java @@ -33,12 +33,10 @@ import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.Date; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Set; -import java.util.Vector; import org.alfresco.i18n.I18NUtil; import org.alfresco.repo.search.MLAnalysisMode; @@ -71,7 +69,6 @@ import org.apache.lucene.search.BooleanClause; import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.ConstantScoreRangeQuery; import org.apache.lucene.search.MultiPhraseQuery; -import org.apache.lucene.search.PhraseQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardTermEnum; diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java index dc1f79be2b..1f691759ec 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneResultSet.java @@ -25,6 +25,8 @@ package org.alfresco.repo.search.impl.lucene; import java.io.IOException; +import java.util.ArrayList; +import java.util.BitSet; import org.alfresco.repo.search.AbstractResultSet; import org.alfresco.repo.search.ResultSetRowIterator; @@ -48,7 +50,6 @@ import org.apache.lucene.search.Searcher; * Implementation of a ResultSet on top of Lucene Hits class. * * @author andyh - * */ public class LuceneResultSet extends AbstractResultSet { @@ -58,20 +59,26 @@ public class LuceneResultSet extends AbstractResultSet Hits hits; private Searcher searcher; - + private NodeService nodeService; private TenantService tenantService; SearchParameters searchParameters; + + private LuceneConfig config; + + private BitSet prefetch; + /** * Wrap a lucene seach result with node support * * @param storeRef * @param hits */ - public LuceneResultSet(Hits hits, Searcher searcher, NodeService nodeService, TenantService tenantService, Path[]propertyPaths, SearchParameters searchParameters) + public LuceneResultSet(Hits hits, Searcher searcher, NodeService nodeService, TenantService tenantService, Path[] propertyPaths, SearchParameters searchParameters, + LuceneConfig config) { super(propertyPaths); this.hits = hits; @@ -79,6 +86,8 @@ public class LuceneResultSet extends AbstractResultSet this.nodeService = nodeService; this.tenantService = tenantService; this.searchParameters = searchParameters; + this.config = config; + prefetch = new BitSet(hits.length()); } /* @@ -97,18 +106,11 @@ public class LuceneResultSet extends AbstractResultSet public NodeRef getNodeRef(int n) { - try - { - // We have to get the document to resolve this - // It is possible the store ref is also stored in the index - Document doc = hits.doc(n); - String id = doc.get("ID"); - return tenantService.getBaseName(new NodeRef(id)); - } - catch (IOException e) - { - throw new SearcherException("IO Error reading reading node ref from the result set", e); - } + // We have to get the document to resolve this + // It is possible the store ref is also stored in the index + Document doc = getDocument(n); + String id = doc.get("ID"); + return tenantService.getBaseName(new NodeRef(id)); } public float getScore(int n) throws SearcherException @@ -128,6 +130,10 @@ public class LuceneResultSet extends AbstractResultSet try { Document doc = hits.doc(n); + if (!prefetch.get(n)) + { + fetch(n); + } return doc; } catch (IOException e) @@ -136,6 +142,50 @@ public class LuceneResultSet extends AbstractResultSet } } + private void fetch(int n) + { + if (searchParameters.getBulkFetch() && (config.getBulkLoader() != null)) + { + while (!prefetch.get(n)) + { + fetch(); + } + } + } + + private void fetch() + { + try + { + if (searchParameters.getBulkFetch() && (config.getBulkLoader() != null)) + { + for (int i = 0; (i < hits.length()); i += searchParameters.getBulkFecthSize()) + { + if (!prefetch.get(i)) + { + ArrayList fetchList = new ArrayList(searchParameters.getBulkFecthSize()); + for (int j = i; (j < i + searchParameters.getBulkFecthSize()) && (j < hits.length()); j++) + { + Document doc = hits.doc(j); + String id = doc.get("ID"); + NodeRef nodeRef = tenantService.getBaseName(new NodeRef(id)); + fetchList.add(nodeRef); + } + config.getBulkLoader().loadIntoCache(fetchList); + for (int j = i; j < i + searchParameters.getBulkFecthSize(); j++) + { + prefetch.set(j); + } + } + } + } + } + catch (IOException e) + { + throw new SearcherException("IO Error reading reading document from the result set", e); + } + } + public void close() { try @@ -155,9 +205,9 @@ public class LuceneResultSet extends AbstractResultSet public ResultSetRow getRow(int i) { - if(i < length()) + if (i < length()) { - return new LuceneResultSetRow(this, i); + return new LuceneResultSetRow(this, i); } else { @@ -167,10 +217,9 @@ public class LuceneResultSet extends AbstractResultSet public ChildAssociationRef getChildAssocRef(int n) { - return getRow(n).getChildAssocRef(); + return getRow(n).getChildAssocRef(); } - public ResultSetMetaData getResultSetMetaData() { return new SimpleResultSetMetaData(LimitBy.UNLIMITED, PermissionEvaluationMode.EAGER, searchParameters); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneSearcher.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneSearcher.java index c18dfbae8e..44369cd998 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneSearcher.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneSearcher.java @@ -27,7 +27,6 @@ package org.alfresco.repo.search.impl.lucene; import java.util.List; import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.namespace.NamespacePrefixResolver; import org.alfresco.util.Pair; diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g index 5e15e49f45..6c37f0dc04 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g @@ -334,7 +334,7 @@ literal inPredicate : columnReference NOT? IN LPAREN inValueList RPAREN - -> ^(PRED_IN ANY columnReference NOT? inValueList) + -> ^(PRED_IN ANY columnReference inValueList NOT?) ; inValueList @@ -344,7 +344,7 @@ inValueList likePredicate : columnReference NOT? LIKE characterStringLiteral - -> ^(PRED_LIKE columnReference NOT? characterStringLiteral) + -> ^(PRED_LIKE columnReference characterStringLiteral NOT?) ; nullPredicate @@ -360,12 +360,12 @@ quantifiedComparisonPredicate quantifiedInPredicate : ANY multiValuedColumnReference NOT? IN LPAREN inValueList RPAREN - -> ^(PRED_IN ANY multiValuedColumnReference NOT? inValueList) + -> ^(PRED_IN ANY multiValuedColumnReference inValueList NOT?) ; textSearchPredicate : CONTAINS LPAREN (qualifier COMMA | COMMA)? textSearchExpression RPAREN - -> ^(PRED_FTS textSearchExpression qualifier) + -> ^(PRED_FTS textSearchExpression qualifier?) ; folderPredicate @@ -388,10 +388,10 @@ orderByClause ; sortSpecification - : columnName - -> ^(SORT_SPECIFICATION columnName ASC) - | columnName ( by=ASC | by=DESC ) - -> ^(SORT_SPECIFICATION columnName $by) + : columnReference + -> ^(SORT_SPECIFICATION columnReference ASC) + | columnReference ( by=ASC | by=DESC ) + -> ^(SORT_SPECIFICATION columnReference $by) ; correlationName diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java b/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java index 25441d1cef..296b78bf2e 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMISLexer.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\CMIS.g 2008-07-08 14:37:53 +// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\CMIS.g 2008-07-15 16:24:40 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java b/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java index 19da9c26af..c7c78e2cc3 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMISParser.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\CMIS.g 2008-07-08 14:37:52 +// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\CMIS.g 2008-07-15 16:24:39 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; @@ -278,7 +278,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: selectList, orderByClause, whereClause, fromClause + // elements: fromClause, selectList, whereClause, orderByClause // token labels: // rule labels: retval // token list labels: @@ -715,7 +715,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: columnName, valueExpression + // elements: valueExpression, columnName // token labels: // rule labels: retval // token list labels: @@ -1248,7 +1248,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: multiValuedColumnName, qualifier + // elements: qualifier, multiValuedColumnName // token labels: // rule labels: retval // token list labels: @@ -2382,7 +2382,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: joinType, joinSpecification, JOIN, tableReference + // elements: joinSpecification, tableReference, JOIN, joinType // token labels: // rule labels: retval // token list labels: @@ -2765,7 +2765,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: EQUALS, ON, lhs, rhs + // elements: rhs, EQUALS, lhs, ON // token labels: // rule labels: retval, rhs, lhs // token list labels: @@ -3607,7 +3607,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: compOp, valueExpression, literalOrParameterName + // elements: valueExpression, literalOrParameterName, compOp // token labels: // rule labels: retval // token list labels: @@ -3893,7 +3893,7 @@ public class CMISParser extends Parser { }; // $ANTLR start inPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:335:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference ( NOT )? inValueList ) ; + // W:\\workspace-cmis\\ANTLR\\CMIS.g:335:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ; public final CMISParser.inPredicate_return inPredicate() throws RecognitionException { CMISParser.inPredicate_return retval = new CMISParser.inPredicate_return(); retval.start = input.LT(1); @@ -3920,7 +3920,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:336:2: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference ( NOT )? inValueList ) ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:336:2: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:336:4: columnReference ( NOT )? IN LPAREN inValueList RPAREN { pushFollow(FOLLOW_columnReference_in_inPredicate1207); @@ -3967,7 +3967,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: NOT, columnReference, inValueList + // elements: inValueList, NOT, columnReference // token labels: // rule labels: retval // token list labels: @@ -3977,22 +3977,22 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 337:3: -> ^( PRED_IN ANY columnReference ( NOT )? inValueList ) + // 337:3: -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:337:6: ^( PRED_IN ANY columnReference ( NOT )? inValueList ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:337:6: ^( PRED_IN ANY columnReference inValueList ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_IN, "PRED_IN"), root_1); adaptor.addChild(root_1, (Object)adaptor.create(ANY, "ANY")); adaptor.addChild(root_1, stream_columnReference.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:337:36: ( NOT )? + adaptor.addChild(root_1, stream_inValueList.nextTree()); + // W:\\workspace-cmis\\ANTLR\\CMIS.g:337:48: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); } stream_NOT.reset(); - adaptor.addChild(root_1, stream_inValueList.nextTree()); adaptor.addChild(root_0, root_1); } @@ -4148,7 +4148,7 @@ public class CMISParser extends Parser { }; // $ANTLR start likePredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:345:1: likePredicate : columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference ( NOT )? characterStringLiteral ) ; + // W:\\workspace-cmis\\ANTLR\\CMIS.g:345:1: likePredicate : columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ; public final CMISParser.likePredicate_return likePredicate() throws RecognitionException { CMISParser.likePredicate_return retval = new CMISParser.likePredicate_return(); retval.start = input.LT(1); @@ -4169,7 +4169,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:346:2: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference ( NOT )? characterStringLiteral ) ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:346:2: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:346:4: columnReference ( NOT )? LIKE characterStringLiteral { pushFollow(FOLLOW_columnReference_in_likePredicate1278); @@ -4210,7 +4210,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: characterStringLiteral, columnReference, NOT + // elements: characterStringLiteral, NOT, columnReference // token labels: // rule labels: retval // token list labels: @@ -4220,21 +4220,21 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 347:3: -> ^( PRED_LIKE columnReference ( NOT )? characterStringLiteral ) + // 347:3: -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:347:6: ^( PRED_LIKE columnReference ( NOT )? characterStringLiteral ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:347:6: ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_LIKE, "PRED_LIKE"), root_1); adaptor.addChild(root_1, stream_columnReference.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:347:34: ( NOT )? + adaptor.addChild(root_1, stream_characterStringLiteral.nextTree()); + // W:\\workspace-cmis\\ANTLR\\CMIS.g:347:57: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); } stream_NOT.reset(); - adaptor.addChild(root_1, stream_characterStringLiteral.nextTree()); adaptor.addChild(root_0, root_1); } @@ -4448,7 +4448,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: NOT, columnReference + // elements: columnReference, NOT // token labels: // rule labels: retval // token list labels: @@ -4554,7 +4554,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: ANY, multiValuedColumnReference, compOp, literalOrParameterName + // elements: ANY, literalOrParameterName, multiValuedColumnReference, compOp // token labels: // rule labels: retval // token list labels: @@ -4609,7 +4609,7 @@ public class CMISParser extends Parser { }; // $ANTLR start quantifiedInPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:361:1: quantifiedInPredicate : ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference ( NOT )? inValueList ) ; + // W:\\workspace-cmis\\ANTLR\\CMIS.g:361:1: quantifiedInPredicate : ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ; public final CMISParser.quantifiedInPredicate_return quantifiedInPredicate() throws RecognitionException { CMISParser.quantifiedInPredicate_return retval = new CMISParser.quantifiedInPredicate_return(); retval.start = input.LT(1); @@ -4639,7 +4639,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:362:2: ( ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference ( NOT )? inValueList ) ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:362:2: ( ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:362:4: ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN { ANY111=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedInPredicate1391); if (state.failed) return retval; @@ -4689,7 +4689,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: inValueList, multiValuedColumnReference, ANY, NOT + // elements: inValueList, ANY, multiValuedColumnReference, NOT // token labels: // rule labels: retval // token list labels: @@ -4699,22 +4699,22 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 363:3: -> ^( PRED_IN ANY multiValuedColumnReference ( NOT )? inValueList ) + // 363:3: -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:363:6: ^( PRED_IN ANY multiValuedColumnReference ( NOT )? inValueList ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:363:6: ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_IN, "PRED_IN"), root_1); adaptor.addChild(root_1, stream_ANY.nextNode()); adaptor.addChild(root_1, stream_multiValuedColumnReference.nextTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:363:47: ( NOT )? + adaptor.addChild(root_1, stream_inValueList.nextTree()); + // W:\\workspace-cmis\\ANTLR\\CMIS.g:363:59: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); } stream_NOT.reset(); - adaptor.addChild(root_1, stream_inValueList.nextTree()); adaptor.addChild(root_0, root_1); } @@ -4749,7 +4749,7 @@ public class CMISParser extends Parser { }; // $ANTLR start textSearchPredicate - // W:\\workspace-cmis\\ANTLR\\CMIS.g:366:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression qualifier ) ; + // W:\\workspace-cmis\\ANTLR\\CMIS.g:366:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ; public final CMISParser.textSearchPredicate_return textSearchPredicate() throws RecognitionException { CMISParser.textSearchPredicate_return retval = new CMISParser.textSearchPredicate_return(); retval.start = input.LT(1); @@ -4778,7 +4778,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_textSearchExpression=new RewriteRuleSubtreeStream(adaptor,"rule textSearchExpression"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:2: ( CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression qualifier ) ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:2: ( CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:367:4: CONTAINS LPAREN ( qualifier COMMA | COMMA )? textSearchExpression RPAREN { CONTAINS118=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_textSearchPredicate1434); if (state.failed) return retval; @@ -4847,15 +4847,20 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 368:3: -> ^( PRED_FTS textSearchExpression qualifier ) + // 368:3: -> ^( PRED_FTS textSearchExpression ( qualifier )? ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:368:6: ^( PRED_FTS textSearchExpression qualifier ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:368:6: ^( PRED_FTS textSearchExpression ( qualifier )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_FTS, "PRED_FTS"), root_1); adaptor.addChild(root_1, stream_textSearchExpression.nextTree()); - adaptor.addChild(root_1, stream_qualifier.nextTree()); + // W:\\workspace-cmis\\ANTLR\\CMIS.g:368:38: ( qualifier )? + if ( stream_qualifier.hasNext() ) { + adaptor.addChild(root_1, stream_qualifier.nextTree()); + + } + stream_qualifier.reset(); adaptor.addChild(root_0, root_1); } @@ -4931,10 +4936,10 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:372:4: IN_FOLDER folderPredicateArgs { - IN_FOLDER125=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_folderPredicate1475); if (state.failed) return retval; + IN_FOLDER125=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_folderPredicate1476); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN_FOLDER.add(IN_FOLDER125); - pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1478); + pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1479); folderPredicateArgs126=folderPredicateArgs(); state._fsp--; @@ -4973,10 +4978,10 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:374:10: IN_TREE folderPredicateArgs { - IN_TREE127=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_folderPredicate1499); if (state.failed) return retval; + IN_TREE127=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_folderPredicate1500); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN_TREE.add(IN_TREE127); - pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1501); + pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1502); folderPredicateArgs128=folderPredicateArgs(); state._fsp--; @@ -5068,7 +5073,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:2: ( LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN -> folderId ( qualifier )? ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:4: LPAREN ( qualifier COMMA | COMMA )? folderId RPAREN { - LPAREN129=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_folderPredicateArgs1523); if (state.failed) return retval; + LPAREN129=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_folderPredicateArgs1524); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN129); // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:11: ( qualifier COMMA | COMMA )? @@ -5085,13 +5090,13 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:12: qualifier COMMA { - pushFollow(FOLLOW_qualifier_in_folderPredicateArgs1526); + pushFollow(FOLLOW_qualifier_in_folderPredicateArgs1527); qualifier130=qualifier(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_qualifier.add(qualifier130.getTree()); - COMMA131=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1528); if (state.failed) return retval; + COMMA131=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1529); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA131); @@ -5100,7 +5105,7 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:379:30: COMMA { - COMMA132=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1532); if (state.failed) return retval; + COMMA132=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1533); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA132); @@ -5109,19 +5114,19 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_folderId_in_folderPredicateArgs1536); + pushFollow(FOLLOW_folderId_in_folderPredicateArgs1537); folderId133=folderId(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_folderId.add(folderId133.getTree()); - RPAREN134=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_folderPredicateArgs1538); if (state.failed) return retval; + RPAREN134=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_folderPredicateArgs1539); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN134); // AST REWRITE - // elements: qualifier, folderId + // elements: folderId, qualifier // token labels: // rule labels: retval // token list labels: @@ -5198,13 +5203,13 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:386:2: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:386:4: ORDER BY sortSpecification ( COMMA sortSpecification )* { - ORDER135=(Token)match(input,ORDER,FOLLOW_ORDER_in_orderByClause1577); if (state.failed) return retval; + ORDER135=(Token)match(input,ORDER,FOLLOW_ORDER_in_orderByClause1578); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ORDER.add(ORDER135); - BY136=(Token)match(input,BY,FOLLOW_BY_in_orderByClause1579); if (state.failed) return retval; + BY136=(Token)match(input,BY,FOLLOW_BY_in_orderByClause1580); if (state.failed) return retval; if ( state.backtracking==0 ) stream_BY.add(BY136); - pushFollow(FOLLOW_sortSpecification_in_orderByClause1581); + pushFollow(FOLLOW_sortSpecification_in_orderByClause1582); sortSpecification137=sortSpecification(); state._fsp--; @@ -5225,10 +5230,10 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:386:33: COMMA sortSpecification { - COMMA138=(Token)match(input,COMMA,FOLLOW_COMMA_in_orderByClause1585); if (state.failed) return retval; + COMMA138=(Token)match(input,COMMA,FOLLOW_COMMA_in_orderByClause1586); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA138); - pushFollow(FOLLOW_sortSpecification_in_orderByClause1587); + pushFollow(FOLLOW_sortSpecification_in_orderByClause1588); sortSpecification139=sortSpecification(); state._fsp--; @@ -5246,7 +5251,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: ORDER, sortSpecification + // elements: sortSpecification, ORDER // token labels: // rule labels: retval // token list labels: @@ -5308,7 +5313,7 @@ public class CMISParser extends Parser { }; // $ANTLR start sortSpecification - // W:\\workspace-cmis\\ANTLR\\CMIS.g:390:1: sortSpecification : ( columnName -> ^( SORT_SPECIFICATION columnName ASC ) | columnName (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnName $by) ); + // W:\\workspace-cmis\\ANTLR\\CMIS.g:390:1: sortSpecification : ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ); public final CMISParser.sortSpecification_return sortSpecification() throws RecognitionException { CMISParser.sortSpecification_return retval = new CMISParser.sortSpecification_return(); retval.start = input.LT(1); @@ -5316,125 +5321,33 @@ public class CMISParser extends Parser { Object root_0 = null; Token by=null; - CMISParser.columnName_return columnName140 = null; + CMISParser.columnReference_return columnReference140 = null; - CMISParser.columnName_return columnName141 = null; + CMISParser.columnReference_return columnReference141 = null; Object by_tree=null; RewriteRuleTokenStream stream_ASC=new RewriteRuleTokenStream(adaptor,"token ASC"); RewriteRuleTokenStream stream_DESC=new RewriteRuleTokenStream(adaptor,"token DESC"); - RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); + RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:391:2: ( columnName -> ^( SORT_SPECIFICATION columnName ASC ) | columnName (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnName $by) ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:391:2: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) int alt41=2; - int LA41_0 = input.LA(1); - - if ( (LA41_0==ID) ) { - int LA41_1 = input.LA(2); - - if ( (LA41_1==EOF||LA41_1==COMMA) ) { - alt41=1; - } - else if ( ((LA41_1>=ASC && LA41_1<=DESC)) ) { - alt41=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 41, 1, input); - - throw nvae; - } - } - else if ( (LA41_0==DOUBLE_QUOTE) ) { - int LA41_2 = input.LA(2); - - if ( (LA41_2==SELECT||LA41_2==AS||(LA41_2>=FROM && LA41_2<=ON)||(LA41_2>=WHERE && LA41_2<=NOT)||(LA41_2>=IN && LA41_2<=DESC)||(LA41_2>=UPPER && LA41_2<=SCORE)) ) { - int LA41_5 = input.LA(3); - - if ( (LA41_5==DOUBLE_QUOTE) ) { - int LA41_7 = input.LA(4); - - if ( (LA41_7==EOF||LA41_7==COMMA) ) { - alt41=1; - } - else if ( ((LA41_7>=ASC && LA41_7<=DESC)) ) { - alt41=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 41, 7, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 41, 5, input); - - throw nvae; - } - } - else if ( (LA41_2==ID) ) { - int LA41_6 = input.LA(3); - - if ( (LA41_6==DOUBLE_QUOTE) ) { - int LA41_7 = input.LA(4); - - if ( (LA41_7==EOF||LA41_7==COMMA) ) { - alt41=1; - } - else if ( ((LA41_7>=ASC && LA41_7<=DESC)) ) { - alt41=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 41, 7, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 41, 6, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 41, 2, input); - - throw nvae; - } - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 41, 0, input); - - throw nvae; - } + alt41 = dfa41.predict(input); switch (alt41) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:391:4: columnName + // W:\\workspace-cmis\\ANTLR\\CMIS.g:391:4: columnReference { - pushFollow(FOLLOW_columnName_in_sortSpecification1613); - columnName140=columnName(); + pushFollow(FOLLOW_columnReference_in_sortSpecification1614); + columnReference140=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnName.add(columnName140.getTree()); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference140.getTree()); // AST REWRITE - // elements: columnName + // elements: columnReference // token labels: // rule labels: retval // token list labels: @@ -5444,14 +5357,14 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 392:3: -> ^( SORT_SPECIFICATION columnName ASC ) + // 392:3: -> ^( SORT_SPECIFICATION columnReference ASC ) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:392:6: ^( SORT_SPECIFICATION columnName ASC ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:392:6: ^( SORT_SPECIFICATION columnReference ASC ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); - adaptor.addChild(root_1, stream_columnName.nextTree()); + adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, (Object)adaptor.create(ASC, "ASC")); adaptor.addChild(root_0, root_1); @@ -5463,15 +5376,15 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:4: columnName (by= ASC | by= DESC ) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:4: columnReference (by= ASC | by= DESC ) { - pushFollow(FOLLOW_columnName_in_sortSpecification1631); - columnName141=columnName(); + pushFollow(FOLLOW_columnReference_in_sortSpecification1632); + columnReference141=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnName.add(columnName141.getTree()); - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:15: (by= ASC | by= DESC ) + if ( state.backtracking==0 ) stream_columnReference.add(columnReference141.getTree()); + // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:20: (by= ASC | by= DESC ) int alt40=2; int LA40_0 = input.LA(1); @@ -5490,18 +5403,18 @@ public class CMISParser extends Parser { } switch (alt40) { case 1 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:17: by= ASC + // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:22: by= ASC { - by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification1637); if (state.failed) return retval; + by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification1638); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ASC.add(by); } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:26: by= DESC + // W:\\workspace-cmis\\ANTLR\\CMIS.g:393:31: by= DESC { - by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification1643); if (state.failed) return retval; + by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification1644); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DESC.add(by); @@ -5513,7 +5426,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: columnName, by + // elements: by, columnReference // token labels: by // rule labels: retval // token list labels: @@ -5524,14 +5437,14 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 394:3: -> ^( SORT_SPECIFICATION columnName $by) + // 394:3: -> ^( SORT_SPECIFICATION columnReference $by) { - // W:\\workspace-cmis\\ANTLR\\CMIS.g:394:6: ^( SORT_SPECIFICATION columnName $by) + // W:\\workspace-cmis\\ANTLR\\CMIS.g:394:6: ^( SORT_SPECIFICATION columnReference $by) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); - adaptor.addChild(root_1, stream_columnName.nextTree()); + adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_by.nextNode()); adaptor.addChild(root_0, root_1); @@ -5586,7 +5499,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_identifier_in_correlationName1670); + pushFollow(FOLLOW_identifier_in_correlationName1671); identifier142=identifier(); state._fsp--; @@ -5635,7 +5548,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:406:2: ( identifier -> identifier ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:406:4: identifier { - pushFollow(FOLLOW_identifier_in_tableName1684); + pushFollow(FOLLOW_identifier_in_tableName1685); identifier143=identifier(); state._fsp--; @@ -5703,7 +5616,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:411:2: ( identifier -> identifier ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:411:4: identifier { - pushFollow(FOLLOW_identifier_in_columnName1702); + pushFollow(FOLLOW_identifier_in_columnName1703); identifier144=identifier(); state._fsp--; @@ -5771,7 +5684,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:416:2: ( identifier -> identifier ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:416:4: identifier { - pushFollow(FOLLOW_identifier_in_multiValuedColumnName1721); + pushFollow(FOLLOW_identifier_in_multiValuedColumnName1722); identifier145=identifier(); state._fsp--; @@ -5842,10 +5755,10 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:421:2: ( COLON identifier -> ^( PARAMETER identifier ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:421:4: COLON identifier { - COLON146=(Token)match(input,COLON,FOLLOW_COLON_in_parameterName1739); if (state.failed) return retval; + COLON146=(Token)match(input,COLON,FOLLOW_COLON_in_parameterName1740); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COLON.add(COLON146); - pushFollow(FOLLOW_identifier_in_parameterName1741); + pushFollow(FOLLOW_identifier_in_parameterName1742); identifier147=identifier(); state._fsp--; @@ -5921,7 +5834,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:426:3: ( characterStringLiteral -> characterStringLiteral ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:426:5: characterStringLiteral { - pushFollow(FOLLOW_characterStringLiteral_in_folderId1764); + pushFollow(FOLLOW_characterStringLiteral_in_folderId1765); characterStringLiteral148=characterStringLiteral(); state._fsp--; @@ -5991,7 +5904,7 @@ public class CMISParser extends Parser { { root_0 = (Object)adaptor.nil(); - QUOTED_STRING149=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_textSearchExpression1785); if (state.failed) return retval; + QUOTED_STRING149=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_textSearchExpression1786); if (state.failed) return retval; if ( state.backtracking==0 ) { QUOTED_STRING149_tree = (Object)adaptor.create(QUOTED_STRING149); adaptor.addChild(root_0, QUOTED_STRING149_tree); @@ -6065,7 +5978,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:435:4: ID { - ID150=(Token)match(input,ID,FOLLOW_ID_in_identifier1797); if (state.failed) return retval; + ID150=(Token)match(input,ID,FOLLOW_ID_in_identifier1798); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ID.add(ID150); @@ -6093,16 +6006,16 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:437:4: DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE { - DOUBLE_QUOTE151=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1808); if (state.failed) return retval; + DOUBLE_QUOTE151=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1809); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE151); - pushFollow(FOLLOW_keyWordOrId_in_identifier1810); + pushFollow(FOLLOW_keyWordOrId_in_identifier1811); keyWordOrId152=keyWordOrId(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_keyWordOrId.add(keyWordOrId152.getTree()); - DOUBLE_QUOTE153=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1812); if (state.failed) return retval; + DOUBLE_QUOTE153=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier1813); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE153); @@ -6196,7 +6109,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:442:4: FLOATING_POINT_LITERAL { - FLOATING_POINT_LITERAL154=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1832); if (state.failed) return retval; + FLOATING_POINT_LITERAL154=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1833); if (state.failed) return retval; if ( state.backtracking==0 ) stream_FLOATING_POINT_LITERAL.add(FLOATING_POINT_LITERAL154); @@ -6232,7 +6145,7 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:444:4: integerLiteral { - pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral1847); + pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral1848); integerLiteral155=integerLiteral(); state._fsp--; @@ -6303,7 +6216,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:449:2: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:449:4: DECIMAL_INTEGER_LITERAL { - DECIMAL_INTEGER_LITERAL156=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1866); if (state.failed) return retval; + DECIMAL_INTEGER_LITERAL156=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1867); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL156); @@ -6377,7 +6290,7 @@ public class CMISParser extends Parser { // W:\\workspace-cmis\\ANTLR\\CMIS.g:454:2: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) // W:\\workspace-cmis\\ANTLR\\CMIS.g:454:4: QUOTED_STRING { - QUOTED_STRING157=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_characterStringLiteral1889); if (state.failed) return retval; + QUOTED_STRING157=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_characterStringLiteral1890); if (state.failed) return retval; if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING157); @@ -6528,7 +6441,7 @@ public class CMISParser extends Parser { case 1 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:489:4: keyWord { - pushFollow(FOLLOW_keyWord_in_keyWordOrId2098); + pushFollow(FOLLOW_keyWord_in_keyWordOrId2099); keyWord159=keyWord(); state._fsp--; @@ -6559,7 +6472,7 @@ public class CMISParser extends Parser { case 2 : // W:\\workspace-cmis\\ANTLR\\CMIS.g:491:4: ID { - ID160=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId2110); if (state.failed) return retval; + ID160=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId2111); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ID.add(ID160); @@ -6756,6 +6669,7 @@ public class CMISParser extends Parser { protected DFA25 dfa25 = new DFA25(this); protected DFA27 dfa27 = new DFA27(this); + protected DFA41 dfa41 = new DFA41(this); static final String DFA25_eotS = "\31\uffff"; static final String DFA25_eofS = @@ -6947,6 +6861,71 @@ public class CMISParser extends Parser { return "300:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate );"; } } + static final String DFA41_eotS = + "\16\uffff"; + static final String DFA41_eofS = + "\1\uffff\1\4\6\uffff\1\4\1\uffff\1\4\2\uffff\1\4"; + static final String DFA41_minS = + "\1\103\1\37\1\35\1\103\2\uffff\2\104\1\37\1\35\1\37\2\104\1\37"; + static final String DFA41_maxS = + "\1\104\1\100\1\111\1\104\2\uffff\2\104\1\100\1\111\1\100\2\104"+ + "\1\100"; + static final String DFA41_acceptS = + "\4\uffff\1\1\1\2\10\uffff"; + static final String DFA41_specialS = + "\16\uffff}>"; + static final String[] DFA41_transitionS = { + "\1\1\1\2", + "\1\4\2\uffff\1\3\34\uffff\2\5", + "\1\6\2\uffff\1\6\4\uffff\6\6\1\uffff\4\6\5\uffff\14\6\2\uffff"+ + "\1\7\3\uffff\3\6", + "\1\10\1\11", + "", + "", + "\1\12", + "\1\12", + "\1\4\37\uffff\2\5", + "\1\13\2\uffff\1\13\4\uffff\6\13\1\uffff\4\13\5\uffff\14\13"+ + "\2\uffff\1\14\3\uffff\3\13", + "\1\4\2\uffff\1\3\34\uffff\2\5", + "\1\15", + "\1\15", + "\1\4\37\uffff\2\5" + }; + + static final short[] DFA41_eot = DFA.unpackEncodedString(DFA41_eotS); + static final short[] DFA41_eof = DFA.unpackEncodedString(DFA41_eofS); + static final char[] DFA41_min = DFA.unpackEncodedStringToUnsignedChars(DFA41_minS); + static final char[] DFA41_max = DFA.unpackEncodedStringToUnsignedChars(DFA41_maxS); + static final short[] DFA41_accept = DFA.unpackEncodedString(DFA41_acceptS); + static final short[] DFA41_special = DFA.unpackEncodedString(DFA41_specialS); + static final short[][] DFA41_transition; + + static { + int numStates = DFA41_transitionS.length; + DFA41_transition = new short[numStates][]; + for (int i=0; i ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) );"; + } + } public static final BitSet FOLLOW_SELECT_in_query172 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); @@ -7076,44 +7055,44 @@ public class CMISParser extends Parser { public static final BitSet FOLLOW_COMMA_in_textSearchPredicate1445 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x000000000000039DL}); public static final BitSet FOLLOW_textSearchExpression_in_textSearchPredicate1449 = new BitSet(new long[]{0x0000001000000000L}); public static final BitSet FOLLOW_RPAREN_in_textSearchPredicate1451 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_FOLDER_in_folderPredicate1475 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1478 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_TREE_in_folderPredicate1499 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1501 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_folderPredicateArgs1523 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); - public static final BitSet FOLLOW_qualifier_in_folderPredicateArgs1526 = new BitSet(new long[]{0x0000000080000000L}); - public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1528 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); - public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1532 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); - public static final BitSet FOLLOW_folderId_in_folderPredicateArgs1536 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_RPAREN_in_folderPredicateArgs1538 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ORDER_in_orderByClause1577 = new BitSet(new long[]{0x4000000000000000L}); - public static final BitSet FOLLOW_BY_in_orderByClause1579 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_sortSpecification_in_orderByClause1581 = new BitSet(new long[]{0x0000000080000002L}); - public static final BitSet FOLLOW_COMMA_in_orderByClause1585 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_sortSpecification_in_orderByClause1587 = new BitSet(new long[]{0x0000000080000002L}); - public static final BitSet FOLLOW_columnName_in_sortSpecification1613 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnName_in_sortSpecification1631 = new BitSet(new long[]{0x8000000000000000L,0x0000000000000001L}); - public static final BitSet FOLLOW_ASC_in_sortSpecification1637 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DESC_in_sortSpecification1643 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_correlationName1670 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_tableName1684 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_columnName1702 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_multiValuedColumnName1721 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_COLON_in_parameterName1739 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_identifier_in_parameterName1741 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_characterStringLiteral_in_folderId1764 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_QUOTED_STRING_in_textSearchExpression1785 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_identifier1797 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1808 = new BitSet(new long[]{0xFFE0F7E120000000L,0x0000000000000399L}); - public static final BitSet FOLLOW_keyWordOrId_in_identifier1810 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1812 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1832 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integerLiteral_in_signedNumericLiteral1847 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1866 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_QUOTED_STRING_in_characterStringLiteral1889 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_FOLDER_in_folderPredicate1476 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1479 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_TREE_in_folderPredicate1500 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1502 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_folderPredicateArgs1524 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); + public static final BitSet FOLLOW_qualifier_in_folderPredicateArgs1527 = new BitSet(new long[]{0x0000000080000000L}); + public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1529 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); + public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1533 = new BitSet(new long[]{0xFFE0F7E1E0000000L,0x00000000000003FDL}); + public static final BitSet FOLLOW_folderId_in_folderPredicateArgs1537 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_RPAREN_in_folderPredicateArgs1539 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ORDER_in_orderByClause1578 = new BitSet(new long[]{0x4000000000000000L}); + public static final BitSet FOLLOW_BY_in_orderByClause1580 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_sortSpecification_in_orderByClause1582 = new BitSet(new long[]{0x0000000080000002L}); + public static final BitSet FOLLOW_COMMA_in_orderByClause1586 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_sortSpecification_in_orderByClause1588 = new BitSet(new long[]{0x0000000080000002L}); + public static final BitSet FOLLOW_columnReference_in_sortSpecification1614 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_sortSpecification1632 = new BitSet(new long[]{0x8000000000000000L,0x0000000000000001L}); + public static final BitSet FOLLOW_ASC_in_sortSpecification1638 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DESC_in_sortSpecification1644 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_correlationName1671 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_tableName1685 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_columnName1703 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_multiValuedColumnName1722 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_COLON_in_parameterName1740 = new BitSet(new long[]{0xFFE0F7E160000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_identifier_in_parameterName1742 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_characterStringLiteral_in_folderId1765 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_QUOTED_STRING_in_textSearchExpression1786 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_identifier1798 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1809 = new BitSet(new long[]{0xFFE0F7E120000000L,0x0000000000000399L}); + public static final BitSet FOLLOW_keyWordOrId_in_identifier1811 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier1813 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral1833 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integerLiteral_in_signedNumericLiteral1848 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral1867 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_QUOTED_STRING_in_characterStringLiteral1890 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_set_in_keyWord0 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_keyWord_in_keyWordOrId2098 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_keyWordOrId2110 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_keyWord_in_keyWordOrId2099 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_keyWordOrId2111 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_valueExpression_in_synpred1_CMIS287 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_tableName_in_synpred2_CMIS562 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_joinedTable_in_synpred3_CMIS640 = new BitSet(new long[]{0x0000000000000002L}); diff --git a/source/java/org/alfresco/repo/search/impl/parsers/FTS.g b/source/java/org/alfresco/repo/search/impl/parsers/FTS.g index 576141408b..012b42f551 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTS.g +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTS.g @@ -68,21 +68,69 @@ tokens @members { + private Stack paraphrases = new Stack(); + + public boolean defaultConjunction() + { + return true; + } + + public boolean defaultFieldConjunction() + { + return true; + } + + protected void mismatch(IntStream input, int ttype, BitSet follow) throws RecognitionException + { + throw new MismatchedTokenException(ttype, input); + } + + public Object recoverFromMismatchedSet(IntStream input, RecognitionException e, BitSet follow) throws RecognitionException + { + throw e; + } + + public String getErrorMessage(RecognitionException e, String[] tokenNames) + { + List stack = getRuleInvocationStack(e, this.getClass().getName()); + String msg = null; + if(e instanceof NoViableAltException) + { + NoViableAltException nvae = (NoViableAltException)e; + msg = " no viable alt; token="+e.token+ + " (decision="+nvae.decisionNumber+ + " state "+nvae.stateNumber+")"+ + " decision=<<"+nvae.grammarDecisionDescription+">>"; + } + else + { + msg = super.getErrorMessage(e, tokenNames); + } + if(paraphrases.size() > 0) + { + String paraphrase = (String)paraphrases.peek(); + msg = msg+" "+paraphrase; + } - public boolean defaultConjunction() - { - return true; - } - - public boolean defaultFieldConjunction() - { - return true; - } - - + return stack+" "+msg; + } + + public String getTokenErrorDisplay(Token t) + { + return t.toString(); + } } -fts : ftsImplicitConjunctionOrDisjunction +@rulecatch +{ +catch(RecognitionException e) +{ + throw e; +} +} + +fts + : ftsImplicitConjunctionOrDisjunction EOF -> ftsImplicitConjunctionOrDisjunction ; @@ -104,32 +152,34 @@ ftsExplictConjunction ; -ftsNot : MINUS ftsTest +ftsNot + : MINUS ftsTest -> ^(NEGATION ftsTest) | ftsTest -> ftsTest ; -ftsTest : ftsTerm +ftsTest + : ftsTerm -> ^(TERM ftsTerm) | ftsExactTerm -> ^(EXACT_TERM ftsExactTerm) - | ftsPhrase - -> ^(PHRASE ftsPhrase) - | ftsSynonym - -> ^(SYNONYM ftsSynonym) - | ftsFieldGroupProximity - -> ^(FG_PROXIMITY ftsFieldGroupProximity) - | ftsFieldGroupRange - -> ^(FG_RANGE ftsFieldGroupRange) - | ftsFieldGroup + | ftsPhrase + -> ^(PHRASE ftsPhrase) + | ftsSynonym + -> ^(SYNONYM ftsSynonym) + | ftsFieldGroupProximity + -> ^(FG_PROXIMITY ftsFieldGroupProximity) + | ftsFieldGroupRange + -> ^(FG_RANGE ftsFieldGroupRange) + | ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction ; ftsTerm - : (columnReference COLON)? FTSWORD - -> FTSWORD columnReference? + : (columnReference COLON)? ftsWord + -> ftsWord columnReference? ; ftsExactTerm @@ -187,16 +237,16 @@ ftsFieldGroupTest -> ^(FG_PHRASE ftsFieldGroupPhrase) | ftsFieldGroupSynonym -> ^(FG_SYNONYM ftsFieldGroupSynonym) - | ftsFieldGroupProximity + | ftsFieldGroupProximity -> ^(FG_PROXIMITY ftsFieldGroupProximity) - | ftsFieldGroupRange - -> ^(FG_RANGE ftsFieldGroupRange) + | ftsFieldGroupRange + -> ^(FG_RANGE ftsFieldGroupRange) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction ; ftsFieldGroupTerm - : FTSWORD + : ftsWord ; ftsFieldGroupExactTerm @@ -223,7 +273,7 @@ ftsFieldGroupRange: ftsFieldGroupTerm DOTDOT ftsFieldGroupTerm ; columnReference - : ( qualifier=identifier DOT )? name=identifier + : ( qualifier=identifier DOT )? name=identifier -> ^(COLUMN_REF $name $qualifier?) ; @@ -231,6 +281,11 @@ identifier : ID ; +ftsWord + : ID + | FTSWORD + ; + OR : ('O'|'o')('R'|'r'); AND : ('A'|'a')('N'|'n')('D'|'d'); NOT : ('N'|'n')('O'|'o')('T'|'t'); @@ -244,6 +299,8 @@ STAR : '*' ; DOTDOT : '..' ; DOT : '.' ; +ID : ('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0'..'0'|'_'|'$'|'#')* ; + FTSWORD : INWORD+; fragment @@ -279,6 +336,4 @@ INWORD : '\u0041' .. '\u005A' FTSPHRASE : '"' (~'"' | '""')* '"' ; -ID : ('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0'..'0'|'_'|'$'|'#')* ; - WS : ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN; } ; diff --git a/source/java/org/alfresco/repo/search/impl/parsers/FTS.tokens b/source/java/org/alfresco/repo/search/impl/parsers/FTS.tokens index 4adf08a891..f46e6c263a 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTS.tokens +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTS.tokens @@ -1,5 +1,5 @@ TERM=8 -STAR=33 +STAR=32 FG_PROXIMITY=20 CONJUNCTION=6 FG_TERM=16 @@ -7,28 +7,28 @@ EXACT_TERM=9 FIELD_GROUP=15 INWORD=38 FIELD_DISJUNCTION=12 -DOTDOT=34 +DOTDOT=33 NOT=37 FG_EXACT_TERM=17 MINUS=25 -ID=36 +ID=35 AND=24 -FTSWORD=29 +FTSWORD=36 LPAREN=26 PHRASE=10 COLON=28 DISJUNCTION=5 RPAREN=27 -TILDA=32 +TILDA=31 FTS=4 WS=39 FG_SYNONYM=19 NEGATION=7 -FTSPHRASE=31 +FTSPHRASE=30 FIELD_CONJUNCTION=13 OR=23 -PLUS=30 -DOT=35 +PLUS=29 +DOT=34 COLUMN_REF=22 FG_RANGE=21 SYNONYM=11 diff --git a/source/java/org/alfresco/repo/search/impl/parsers/FTSLexer.java b/source/java/org/alfresco/repo/search/impl/parsers/FTSLexer.java index 20b7899bef..a5fce29509 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTSLexer.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTSLexer.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\FTS.g 2008-07-03 14:45:12 +// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\FTS.g 2008-07-15 16:32:02 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; @@ -8,7 +8,7 @@ import java.util.ArrayList; public class FTSLexer extends Lexer { public static final int TERM=8; - public static final int STAR=33; + public static final int STAR=32; public static final int FG_PROXIMITY=20; public static final int CONJUNCTION=6; public static final int FG_TERM=16; @@ -16,29 +16,29 @@ public class FTSLexer extends Lexer { public static final int FIELD_GROUP=15; public static final int INWORD=38; public static final int FIELD_DISJUNCTION=12; - public static final int DOTDOT=34; + public static final int DOTDOT=33; public static final int NOT=37; public static final int FG_EXACT_TERM=17; public static final int MINUS=25; - public static final int ID=36; + public static final int ID=35; public static final int AND=24; public static final int EOF=-1; public static final int PHRASE=10; public static final int LPAREN=26; - public static final int FTSWORD=29; + public static final int FTSWORD=36; public static final int COLON=28; public static final int DISJUNCTION=5; public static final int RPAREN=27; public static final int FTS=4; - public static final int TILDA=32; + public static final int TILDA=31; public static final int FG_SYNONYM=19; public static final int WS=39; public static final int NEGATION=7; - public static final int FTSPHRASE=31; + public static final int FTSPHRASE=30; public static final int FIELD_CONJUNCTION=13; public static final int OR=23; - public static final int PLUS=30; - public static final int DOT=35; + public static final int PLUS=29; + public static final int DOT=34; public static final int COLUMN_REF=22; public static final int SYNONYM=11; public static final int FG_RANGE=21; @@ -63,8 +63,8 @@ public class FTSLexer extends Lexer { try { int _type = OR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:234:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:234:6: ( 'O' | 'o' ) ( 'R' | 'r' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:289:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:289:6: ( 'O' | 'o' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -100,8 +100,8 @@ public class FTSLexer extends Lexer { try { int _type = AND; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:235:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:235:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:290:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:290:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -146,8 +146,8 @@ public class FTSLexer extends Lexer { try { int _type = NOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:236:5: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:236:7: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:291:5: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:291:7: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -192,8 +192,8 @@ public class FTSLexer extends Lexer { try { int _type = TILDA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:237:7: ( '~' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:237:9: '~' + // W:\\workspace-cmis\\ANTLR\\FTS.g:292:7: ( '~' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:292:9: '~' { match('~'); @@ -212,8 +212,8 @@ public class FTSLexer extends Lexer { try { int _type = LPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:238:8: ( '(' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:238:10: '(' + // W:\\workspace-cmis\\ANTLR\\FTS.g:293:8: ( '(' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:293:10: '(' { match('('); @@ -232,8 +232,8 @@ public class FTSLexer extends Lexer { try { int _type = RPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:239:8: ( ')' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:239:10: ')' + // W:\\workspace-cmis\\ANTLR\\FTS.g:294:8: ( ')' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:294:10: ')' { match(')'); @@ -252,8 +252,8 @@ public class FTSLexer extends Lexer { try { int _type = PLUS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:240:6: ( '+' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:240:8: '+' + // W:\\workspace-cmis\\ANTLR\\FTS.g:295:6: ( '+' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:295:8: '+' { match('+'); @@ -272,8 +272,8 @@ public class FTSLexer extends Lexer { try { int _type = MINUS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:241:7: ( '-' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:241:9: '-' + // W:\\workspace-cmis\\ANTLR\\FTS.g:296:7: ( '-' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:296:9: '-' { match('-'); @@ -292,8 +292,8 @@ public class FTSLexer extends Lexer { try { int _type = COLON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:242:7: ( ':' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:242:9: ':' + // W:\\workspace-cmis\\ANTLR\\FTS.g:297:7: ( ':' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:297:9: ':' { match(':'); @@ -312,8 +312,8 @@ public class FTSLexer extends Lexer { try { int _type = STAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:243:6: ( '*' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:243:8: '*' + // W:\\workspace-cmis\\ANTLR\\FTS.g:298:6: ( '*' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:298:8: '*' { match('*'); @@ -332,8 +332,8 @@ public class FTSLexer extends Lexer { try { int _type = DOTDOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:244:8: ( '..' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:244:10: '..' + // W:\\workspace-cmis\\ANTLR\\FTS.g:299:8: ( '..' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:299:10: '..' { match(".."); @@ -353,8 +353,8 @@ public class FTSLexer extends Lexer { try { int _type = DOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:245:5: ( '.' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:245:7: '.' + // W:\\workspace-cmis\\ANTLR\\FTS.g:300:5: ( '.' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:300:7: '.' { match('.'); @@ -368,29 +368,90 @@ public class FTSLexer extends Lexer { } // $ANTLR end DOT - // $ANTLR start FTSWORD - public final void mFTSWORD() throws RecognitionException { + // $ANTLR start ID + public final void mID() throws RecognitionException { try { - int _type = FTSWORD; + int _type = ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:247:9: ( ( INWORD )+ ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:247:12: ( INWORD )+ + // W:\\workspace-cmis\\ANTLR\\FTS.g:302:5: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:302:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* { - // W:\\workspace-cmis\\ANTLR\\FTS.g:247:12: ( INWORD )+ - int cnt1=0; + if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + // W:\\workspace-cmis\\ANTLR\\FTS.g:302:32: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* loop1: do { int alt1=2; int LA1_0 = input.LA(1); - if ( ((LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||(LA1_0>='a' && LA1_0<='z')||(LA1_0>='\u00C0' && LA1_0<='\u00D6')||(LA1_0>='\u00D8' && LA1_0<='\u00F6')||(LA1_0>='\u00F8' && LA1_0<='\u1FFF')||(LA1_0>='\u3040' && LA1_0<='\u318F')||(LA1_0>='\u3300' && LA1_0<='\u337F')||(LA1_0>='\u3400' && LA1_0<='\u3D2D')||(LA1_0>='\u4E00' && LA1_0<='\u9FFF')||(LA1_0>='\uAC00' && LA1_0<='\uD7AF')||(LA1_0>='\uF900' && LA1_0<='\uFAFF')) ) { + if ( ((LA1_0>='#' && LA1_0<='$')||LA1_0=='0'||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z')) ) { alt1=1; } switch (alt1) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:247:12: INWORD + // W:\\workspace-cmis\\ANTLR\\FTS.g: + { + if ( (input.LA(1)>='#' && input.LA(1)<='$')||input.LA(1)=='0'||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { + input.consume(); + + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop1; + } + } while (true); + + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end ID + + // $ANTLR start FTSWORD + public final void mFTSWORD() throws RecognitionException { + try { + int _type = FTSWORD; + int _channel = DEFAULT_TOKEN_CHANNEL; + // W:\\workspace-cmis\\ANTLR\\FTS.g:304:9: ( ( INWORD )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:304:12: ( INWORD )+ + { + // W:\\workspace-cmis\\ANTLR\\FTS.g:304:12: ( INWORD )+ + int cnt2=0; + loop2: + do { + int alt2=2; + int LA2_0 = input.LA(1); + + if ( ((LA2_0>='0' && LA2_0<='9')||(LA2_0>='A' && LA2_0<='Z')||(LA2_0>='a' && LA2_0<='z')||(LA2_0>='\u00C0' && LA2_0<='\u00D6')||(LA2_0>='\u00D8' && LA2_0<='\u00F6')||(LA2_0>='\u00F8' && LA2_0<='\u1FFF')||(LA2_0>='\u3040' && LA2_0<='\u318F')||(LA2_0>='\u3300' && LA2_0<='\u337F')||(LA2_0>='\u3400' && LA2_0<='\u3D2D')||(LA2_0>='\u4E00' && LA2_0<='\u9FFF')||(LA2_0>='\uAC00' && LA2_0<='\uD7AF')||(LA2_0>='\uF900' && LA2_0<='\uFAFF')) ) { + alt2=1; + } + + + switch (alt2) { + case 1 : + // W:\\workspace-cmis\\ANTLR\\FTS.g:304:12: INWORD { mINWORD(); @@ -398,12 +459,12 @@ public class FTSLexer extends Lexer { break; default : - if ( cnt1 >= 1 ) break loop1; + if ( cnt2 >= 1 ) break loop2; EarlyExitException eee = - new EarlyExitException(1, input); + new EarlyExitException(2, input); throw eee; } - cnt1++; + cnt2++; } while (true); @@ -420,7 +481,7 @@ public class FTSLexer extends Lexer { // $ANTLR start INWORD public final void mINWORD() throws RecognitionException { try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:250:8: ( '\\u0041' .. '\\u005A' | '\\u0061' .. '\\u007A' | '\\u00C0' .. '\\u00D6' | '\\u00D8' .. '\\u00F6' | '\\u00F8' .. '\\u00FF' | '\\u0100' .. '\\u1FFF' | '\\u3040' .. '\\u318F' | '\\u3300' .. '\\u337F' | '\\u3400' .. '\\u3D2D' | '\\u4E00' .. '\\u9FFF' | '\\uF900' .. '\\uFAFF' | '\\uAC00' .. '\\uD7AF' | '\\u0030' .. '\\u0039' | '\\u0660' .. '\\u0669' | '\\u06F0' .. '\\u06F9' | '\\u0966' .. '\\u096F' | '\\u09E6' .. '\\u09EF' | '\\u0A66' .. '\\u0A6F' | '\\u0AE6' .. '\\u0AEF' | '\\u0B66' .. '\\u0B6F' | '\\u0BE7' .. '\\u0BEF' | '\\u0C66' .. '\\u0C6F' | '\\u0CE6' .. '\\u0CEF' | '\\u0D66' .. '\\u0D6F' | '\\u0E50' .. '\\u0E59' | '\\u0ED0' .. '\\u0ED9' | '\\u1040' .. '\\u1049' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:307:8: ( '\\u0041' .. '\\u005A' | '\\u0061' .. '\\u007A' | '\\u00C0' .. '\\u00D6' | '\\u00D8' .. '\\u00F6' | '\\u00F8' .. '\\u00FF' | '\\u0100' .. '\\u1FFF' | '\\u3040' .. '\\u318F' | '\\u3300' .. '\\u337F' | '\\u3400' .. '\\u3D2D' | '\\u4E00' .. '\\u9FFF' | '\\uF900' .. '\\uFAFF' | '\\uAC00' .. '\\uD7AF' | '\\u0030' .. '\\u0039' | '\\u0660' .. '\\u0669' | '\\u06F0' .. '\\u06F9' | '\\u0966' .. '\\u096F' | '\\u09E6' .. '\\u09EF' | '\\u0A66' .. '\\u0A6F' | '\\u0AE6' .. '\\u0AEF' | '\\u0B66' .. '\\u0B6F' | '\\u0BE7' .. '\\u0BEF' | '\\u0C66' .. '\\u0C6F' | '\\u0CE6' .. '\\u0CEF' | '\\u0D66' .. '\\u0D6F' | '\\u0E50' .. '\\u0E59' | '\\u0ED0' .. '\\u0ED9' | '\\u1040' .. '\\u1049' ) // W:\\workspace-cmis\\ANTLR\\FTS.g: { if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z')||(input.LA(1)>='\u00C0' && input.LA(1)<='\u00D6')||(input.LA(1)>='\u00D8' && input.LA(1)<='\u00F6')||(input.LA(1)>='\u00F8' && input.LA(1)<='\u1FFF')||(input.LA(1)>='\u3040' && input.LA(1)<='\u318F')||(input.LA(1)>='\u3300' && input.LA(1)<='\u337F')||(input.LA(1)>='\u3400' && input.LA(1)<='\u3D2D')||(input.LA(1)>='\u4E00' && input.LA(1)<='\u9FFF')||(input.LA(1)>='\uAC00' && input.LA(1)<='\uD7AF')||(input.LA(1)>='\uF900' && input.LA(1)<='\uFAFF') ) { @@ -446,33 +507,33 @@ public class FTSLexer extends Lexer { try { int _type = FTSPHRASE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:280:2: ( '\"' (~ '\"' | '\"\"' )* '\"' ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:280:4: '\"' (~ '\"' | '\"\"' )* '\"' + // W:\\workspace-cmis\\ANTLR\\FTS.g:337:2: ( '\"' (~ '\"' | '\"\"' )* '\"' ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:337:4: '\"' (~ '\"' | '\"\"' )* '\"' { match('\"'); - // W:\\workspace-cmis\\ANTLR\\FTS.g:280:8: (~ '\"' | '\"\"' )* - loop2: + // W:\\workspace-cmis\\ANTLR\\FTS.g:337:8: (~ '\"' | '\"\"' )* + loop3: do { - int alt2=3; - int LA2_0 = input.LA(1); + int alt3=3; + int LA3_0 = input.LA(1); - if ( (LA2_0=='\"') ) { - int LA2_1 = input.LA(2); + if ( (LA3_0=='\"') ) { + int LA3_1 = input.LA(2); - if ( (LA2_1=='\"') ) { - alt2=2; + if ( (LA3_1=='\"') ) { + alt3=2; } } - else if ( ((LA2_0>='\u0000' && LA2_0<='!')||(LA2_0>='#' && LA2_0<='\uFFFE')) ) { - alt2=1; + else if ( ((LA3_0>='\u0000' && LA3_0<='!')||(LA3_0>='#' && LA3_0<='\uFFFE')) ) { + alt3=1; } - switch (alt2) { + switch (alt3) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:280:9: ~ '\"' + // W:\\workspace-cmis\\ANTLR\\FTS.g:337:9: ~ '\"' { if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='\uFFFE') ) { input.consume(); @@ -487,7 +548,7 @@ public class FTSLexer extends Lexer { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:280:16: '\"\"' + // W:\\workspace-cmis\\ANTLR\\FTS.g:337:16: '\"\"' { match("\"\""); @@ -496,7 +557,7 @@ public class FTSLexer extends Lexer { break; default : - break loop2; + break loop3; } } while (true); @@ -512,76 +573,15 @@ public class FTSLexer extends Lexer { } // $ANTLR end FTSPHRASE - // $ANTLR start ID - public final void mID() throws RecognitionException { - try { - int _type = ID; - int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:282:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:282:6: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* - { - if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { - input.consume(); - - } - else { - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse;} - - // W:\\workspace-cmis\\ANTLR\\FTS.g:282:29: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '0' | '_' | '$' | '#' )* - loop3: - do { - int alt3=2; - int LA3_0 = input.LA(1); - - if ( ((LA3_0>='#' && LA3_0<='$')||LA3_0=='0'||(LA3_0>='A' && LA3_0<='Z')||LA3_0=='_'||(LA3_0>='a' && LA3_0<='z')) ) { - alt3=1; - } - - - switch (alt3) { - case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g: - { - if ( (input.LA(1)>='#' && input.LA(1)<='$')||input.LA(1)=='0'||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { - input.consume(); - - } - else { - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse;} - - - } - break; - - default : - break loop3; - } - } while (true); - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - } - } - // $ANTLR end ID - // $ANTLR start WS public final void mWS() throws RecognitionException { try { int _type = WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\workspace-cmis\\ANTLR\\FTS.g:284:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:284:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\workspace-cmis\\ANTLR\\FTS.g:339:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:339:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // W:\\workspace-cmis\\ANTLR\\FTS.g:284:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\workspace-cmis\\ANTLR\\FTS.g:339:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt4=0; loop4: do { @@ -632,7 +632,7 @@ public class FTSLexer extends Lexer { // $ANTLR end WS public void mTokens() throws RecognitionException { - // W:\\workspace-cmis\\ANTLR\\FTS.g:1:8: ( OR | AND | NOT | TILDA | LPAREN | RPAREN | PLUS | MINUS | COLON | STAR | DOTDOT | DOT | FTSWORD | FTSPHRASE | ID | WS ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:1:8: ( OR | AND | NOT | TILDA | LPAREN | RPAREN | PLUS | MINUS | COLON | STAR | DOTDOT | DOT | ID | FTSWORD | FTSPHRASE | WS ) int alt5=16; alt5 = dfa5.predict(input); switch (alt5) { @@ -721,24 +721,24 @@ public class FTSLexer extends Lexer { } break; case 13 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:1:74: FTSWORD + // W:\\workspace-cmis\\ANTLR\\FTS.g:1:74: ID + { + mID(); + + } + break; + case 14 : + // W:\\workspace-cmis\\ANTLR\\FTS.g:1:77: FTSWORD { mFTSWORD(); } break; - case 14 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:1:82: FTSPHRASE + case 15 : + // W:\\workspace-cmis\\ANTLR\\FTS.g:1:85: FTSPHRASE { mFTSPHRASE(); - } - break; - case 15 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:1:92: ID - { - mID(); - } break; case 16 : @@ -756,34 +756,40 @@ public class FTSLexer extends Lexer { protected DFA5 dfa5 = new DFA5(this); static final String DFA5_eotS = - "\1\uffff\3\16\7\uffff\1\26\1\16\4\uffff\1\27\3\16\3\uffff\1\32"+ + "\1\uffff\3\15\7\uffff\1\26\1\15\4\uffff\1\27\3\15\3\uffff\1\32"+ "\1\33\2\uffff"; static final String DFA5_eofS = "\34\uffff"; static final String DFA5_minS = - "\1\11\3\43\7\uffff\1\56\1\43\4\uffff\4\43\3\uffff\2\43\2\uffff"; + "\1\11\3\60\7\uffff\1\56\1\60\4\uffff\1\43\3\60\3\uffff\2\43\2\uffff"; static final String DFA5_maxS = - "\1\ufaff\3\172\7\uffff\1\56\1\172\4\uffff\1\ufaff\3\172\3\uffff"+ - "\2\ufaff\2\uffff"; + "\4\ufaff\7\uffff\1\56\1\ufaff\4\uffff\4\ufaff\3\uffff\2\ufaff\2"+ + "\uffff"; static final String DFA5_acceptS = - "\4\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12\2\uffff\1\16\1\15\1\17"+ + "\4\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12\2\uffff\1\15\1\16\1\17"+ "\1\20\4\uffff\1\13\1\14\1\1\2\uffff\1\2\1\3"; static final String DFA5_specialS = "\34\uffff}>"; static final String[] DFA5_transitionS = { - "\2\20\2\uffff\1\20\22\uffff\1\20\1\uffff\1\15\5\uffff\1\5\1"+ + "\2\20\2\uffff\1\20\22\uffff\1\20\1\uffff\1\17\5\uffff\1\5\1"+ "\6\1\12\1\7\1\uffff\1\10\1\13\1\uffff\12\16\1\11\6\uffff\1\2"+ - "\14\14\1\3\1\1\13\14\4\uffff\1\17\1\uffff\1\2\14\14\1\3\1\1"+ + "\14\14\1\3\1\1\13\14\4\uffff\1\15\1\uffff\1\2\14\14\1\3\1\1"+ "\13\14\3\uffff\1\4\101\uffff\27\16\1\uffff\37\16\1\uffff\u1f08"+ "\16\u1040\uffff\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e"+ "\16\u10d2\uffff\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200"+ "\16", - "\2\17\13\uffff\1\22\20\uffff\21\22\1\21\10\22\4\uffff\1\17"+ - "\1\uffff\21\22\1\21\10\22", - "\2\17\13\uffff\1\22\20\uffff\15\22\1\23\14\22\4\uffff\1\17"+ - "\1\uffff\15\22\1\23\14\22", - "\2\17\13\uffff\1\22\20\uffff\16\22\1\24\13\22\4\uffff\1\17"+ - "\1\uffff\16\22\1\24\13\22", + "\1\22\11\16\7\uffff\21\22\1\21\10\22\6\uffff\21\22\1\21\10"+ + "\22\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040\uffff"+ + "\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2\uffff"+ + "\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", + "\1\22\11\16\7\uffff\15\22\1\23\14\22\6\uffff\15\22\1\23\14"+ + "\22\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040\uffff"+ + "\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2\uffff"+ + "\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", + "\1\22\11\16\7\uffff\16\22\1\24\13\22\6\uffff\16\22\1\24\13"+ + "\22\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040\uffff"+ + "\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2\uffff"+ + "\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", "", "", "", @@ -792,30 +798,38 @@ public class FTSLexer extends Lexer { "", "", "\1\25", - "\2\17\13\uffff\1\22\20\uffff\32\22\4\uffff\1\17\1\uffff\32"+ - "\22", + "\1\22\11\16\7\uffff\32\22\6\uffff\32\22\105\uffff\27\16\1"+ + "\uffff\37\16\1\uffff\u1f08\16\u1040\uffff\u0150\16\u0170\uffff"+ + "\u0080\16\u0080\uffff\u092e\16\u10d2\uffff\u5200\16\u0c00\uffff"+ + "\u2bb0\16\u2150\uffff\u0200\16", "", "", "", "", - "\2\17\13\uffff\1\22\11\16\7\uffff\32\22\4\uffff\1\17\1\uffff"+ + "\2\15\13\uffff\1\22\11\16\7\uffff\32\22\4\uffff\1\15\1\uffff"+ "\32\22\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040"+ "\uffff\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2"+ "\uffff\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", - "\2\17\13\uffff\1\22\20\uffff\32\22\4\uffff\1\17\1\uffff\32"+ - "\22", - "\2\17\13\uffff\1\22\20\uffff\3\22\1\30\26\22\4\uffff\1\17"+ - "\1\uffff\3\22\1\30\26\22", - "\2\17\13\uffff\1\22\20\uffff\23\22\1\31\6\22\4\uffff\1\17"+ - "\1\uffff\23\22\1\31\6\22", + "\1\22\11\16\7\uffff\32\22\6\uffff\32\22\105\uffff\27\16\1"+ + "\uffff\37\16\1\uffff\u1f08\16\u1040\uffff\u0150\16\u0170\uffff"+ + "\u0080\16\u0080\uffff\u092e\16\u10d2\uffff\u5200\16\u0c00\uffff"+ + "\u2bb0\16\u2150\uffff\u0200\16", + "\1\22\11\16\7\uffff\3\22\1\30\26\22\6\uffff\3\22\1\30\26\22"+ + "\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040\uffff"+ + "\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2\uffff"+ + "\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", + "\1\22\11\16\7\uffff\23\22\1\31\6\22\6\uffff\23\22\1\31\6\22"+ + "\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040\uffff"+ + "\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2\uffff"+ + "\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", "", "", "", - "\2\17\13\uffff\1\22\11\16\7\uffff\32\22\4\uffff\1\17\1\uffff"+ + "\2\15\13\uffff\1\22\11\16\7\uffff\32\22\4\uffff\1\15\1\uffff"+ "\32\22\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040"+ "\uffff\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2"+ "\uffff\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", - "\2\17\13\uffff\1\22\11\16\7\uffff\32\22\4\uffff\1\17\1\uffff"+ + "\2\15\13\uffff\1\22\11\16\7\uffff\32\22\4\uffff\1\15\1\uffff"+ "\32\22\105\uffff\27\16\1\uffff\37\16\1\uffff\u1f08\16\u1040"+ "\uffff\u0150\16\u0170\uffff\u0080\16\u0080\uffff\u092e\16\u10d2"+ "\uffff\u5200\16\u0c00\uffff\u2bb0\16\u2150\uffff\u0200\16", @@ -853,7 +867,7 @@ public class FTSLexer extends Lexer { this.transition = DFA5_transition; } public String getDescription() { - return "1:1: Tokens : ( OR | AND | NOT | TILDA | LPAREN | RPAREN | PLUS | MINUS | COLON | STAR | DOTDOT | DOT | FTSWORD | FTSPHRASE | ID | WS );"; + return "1:1: Tokens : ( OR | AND | NOT | TILDA | LPAREN | RPAREN | PLUS | MINUS | COLON | STAR | DOTDOT | DOT | ID | FTSWORD | FTSPHRASE | WS );"; } } diff --git a/source/java/org/alfresco/repo/search/impl/parsers/FTSParser.java b/source/java/org/alfresco/repo/search/impl/parsers/FTSParser.java index 04f7552b69..90ba3b14ca 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTSParser.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTSParser.java @@ -1,4 +1,4 @@ -// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\FTS.g 2008-07-03 14:45:12 +// $ANTLR 3.1b1 W:\\workspace-cmis\\ANTLR\\FTS.g 2008-07-15 16:32:01 package org.alfresco.repo.search.impl.parsers; import org.antlr.runtime.*; @@ -11,10 +11,10 @@ import org.antlr.runtime.tree.*; public class FTSParser extends Parser { public static final String[] tokenNames = new String[] { - "", "", "", "", "FTS", "DISJUNCTION", "CONJUNCTION", "NEGATION", "TERM", "EXACT_TERM", "PHRASE", "SYNONYM", "FIELD_DISJUNCTION", "FIELD_CONJUNCTION", "FIELD_NEGATION", "FIELD_GROUP", "FG_TERM", "FG_EXACT_TERM", "FG_PHRASE", "FG_SYNONYM", "FG_PROXIMITY", "FG_RANGE", "COLUMN_REF", "OR", "AND", "MINUS", "LPAREN", "RPAREN", "COLON", "FTSWORD", "PLUS", "FTSPHRASE", "TILDA", "STAR", "DOTDOT", "DOT", "ID", "NOT", "INWORD", "WS" + "", "", "", "", "FTS", "DISJUNCTION", "CONJUNCTION", "NEGATION", "TERM", "EXACT_TERM", "PHRASE", "SYNONYM", "FIELD_DISJUNCTION", "FIELD_CONJUNCTION", "FIELD_NEGATION", "FIELD_GROUP", "FG_TERM", "FG_EXACT_TERM", "FG_PHRASE", "FG_SYNONYM", "FG_PROXIMITY", "FG_RANGE", "COLUMN_REF", "OR", "AND", "MINUS", "LPAREN", "RPAREN", "COLON", "PLUS", "FTSPHRASE", "TILDA", "STAR", "DOTDOT", "DOT", "ID", "FTSWORD", "NOT", "INWORD", "WS" }; public static final int TERM=8; - public static final int STAR=33; + public static final int STAR=32; public static final int FG_PROXIMITY=20; public static final int CONJUNCTION=6; public static final int FG_TERM=16; @@ -22,29 +22,29 @@ public class FTSParser extends Parser { public static final int FIELD_GROUP=15; public static final int INWORD=38; public static final int FIELD_DISJUNCTION=12; - public static final int DOTDOT=34; + public static final int DOTDOT=33; public static final int NOT=37; public static final int FG_EXACT_TERM=17; public static final int MINUS=25; - public static final int ID=36; + public static final int ID=35; public static final int AND=24; public static final int EOF=-1; - public static final int FTSWORD=29; + public static final int FTSWORD=36; public static final int LPAREN=26; public static final int PHRASE=10; public static final int COLON=28; public static final int DISJUNCTION=5; public static final int RPAREN=27; - public static final int TILDA=32; + public static final int TILDA=31; public static final int FTS=4; public static final int WS=39; public static final int FG_SYNONYM=19; public static final int NEGATION=7; - public static final int FTSPHRASE=31; + public static final int FTSPHRASE=30; public static final int FIELD_CONJUNCTION=13; public static final int OR=23; - public static final int PLUS=30; - public static final int DOT=35; + public static final int PLUS=29; + public static final int DOT=34; public static final int COLUMN_REF=22; public static final int FG_RANGE=21; public static final int SYNONYM=11; @@ -75,18 +75,57 @@ public class FTSParser extends Parser { public String getGrammarFileName() { return "W:\\workspace-cmis\\ANTLR\\FTS.g"; } + private Stack paraphrases = new Stack(); + + public boolean defaultConjunction() + { + return true; + } + + public boolean defaultFieldConjunction() + { + return true; + } + + protected void mismatch(IntStream input, int ttype, BitSet follow) throws RecognitionException + { + throw new MismatchedTokenException(ttype, input); + } + + public Object recoverFromMismatchedSet(IntStream input, RecognitionException e, BitSet follow) throws RecognitionException + { + throw e; + } + + public String getErrorMessage(RecognitionException e, String[] tokenNames) + { + List stack = getRuleInvocationStack(e, this.getClass().getName()); + String msg = null; + if(e instanceof NoViableAltException) + { + NoViableAltException nvae = (NoViableAltException)e; + msg = " no viable alt; token="+e.token+ + " (decision="+nvae.decisionNumber+ + " state "+nvae.stateNumber+")"+ + " decision=<<"+nvae.grammarDecisionDescription+">>"; + } + else + { + msg = super.getErrorMessage(e, tokenNames); + } + if(paraphrases.size() > 0) + { + String paraphrase = (String)paraphrases.peek(); + msg = msg+" "+paraphrase; + } - public boolean defaultConjunction() - { - return true; - } - - public boolean defaultFieldConjunction() - { - return true; - } - - + return stack+" "+msg; + } + + public String getTokenErrorDisplay(Token t) + { + return t.toString(); + } public static class fts_return extends ParserRuleReturnScope { @@ -95,27 +134,33 @@ public class FTSParser extends Parser { }; // $ANTLR start fts - // W:\\workspace-cmis\\ANTLR\\FTS.g:85:1: fts : ftsImplicitConjunctionOrDisjunction -> ftsImplicitConjunctionOrDisjunction ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:132:1: fts : ftsImplicitConjunctionOrDisjunction EOF -> ftsImplicitConjunctionOrDisjunction ; public final FTSParser.fts_return fts() throws RecognitionException { FTSParser.fts_return retval = new FTSParser.fts_return(); retval.start = input.LT(1); Object root_0 = null; + Token EOF2=null; FTSParser.ftsImplicitConjunctionOrDisjunction_return ftsImplicitConjunctionOrDisjunction1 = null; + Object EOF2_tree=null; + RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF"); RewriteRuleSubtreeStream stream_ftsImplicitConjunctionOrDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsImplicitConjunctionOrDisjunction"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:85:5: ( ftsImplicitConjunctionOrDisjunction -> ftsImplicitConjunctionOrDisjunction ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:85:8: ftsImplicitConjunctionOrDisjunction + // W:\\workspace-cmis\\ANTLR\\FTS.g:133:5: ( ftsImplicitConjunctionOrDisjunction EOF -> ftsImplicitConjunctionOrDisjunction ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:133:8: ftsImplicitConjunctionOrDisjunction EOF { - pushFollow(FOLLOW_ftsImplicitConjunctionOrDisjunction_in_fts135); + pushFollow(FOLLOW_ftsImplicitConjunctionOrDisjunction_in_fts146); ftsImplicitConjunctionOrDisjunction1=ftsImplicitConjunctionOrDisjunction(); state._fsp--; stream_ftsImplicitConjunctionOrDisjunction.add(ftsImplicitConjunctionOrDisjunction1.getTree()); + EOF2=(Token)match(input,EOF,FOLLOW_EOF_in_fts148); + stream_EOF.add(EOF2); + // AST REWRITE @@ -128,7 +173,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 86:3: -> ftsImplicitConjunctionOrDisjunction + // 134:3: -> ftsImplicitConjunctionOrDisjunction { adaptor.addChild(root_0, stream_ftsImplicitConjunctionOrDisjunction.nextTree()); @@ -143,11 +188,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -161,61 +205,61 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsImplicitConjunctionOrDisjunction - // W:\\workspace-cmis\\ANTLR\\FTS.g:89:1: ftsImplicitConjunctionOrDisjunction : ({...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) ); + // W:\\workspace-cmis\\ANTLR\\FTS.g:137:1: ftsImplicitConjunctionOrDisjunction : ({...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) ); public final FTSParser.ftsImplicitConjunctionOrDisjunction_return ftsImplicitConjunctionOrDisjunction() throws RecognitionException { FTSParser.ftsImplicitConjunctionOrDisjunction_return retval = new FTSParser.ftsImplicitConjunctionOrDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction2 = null; - FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction3 = null; FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction4 = null; FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction5 = null; + FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction6 = null; + RewriteRuleSubtreeStream stream_ftsExplicitDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsExplicitDisjunction"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:90:2: ({...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:138:2: ({...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) ) int alt3=2; alt3 = dfa3.predict(input); switch (alt3) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:90:4: {...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:138:4: {...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* { if ( !(defaultConjunction()) ) { throw new FailedPredicateException(input, "ftsImplicitConjunctionOrDisjunction", "defaultConjunction()"); } - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction157); - ftsExplicitDisjunction2=ftsExplicitDisjunction(); + pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction170); + ftsExplicitDisjunction3=ftsExplicitDisjunction(); state._fsp--; - stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction2.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:90:51: ( ftsExplicitDisjunction )* + stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction3.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:138:51: ( ftsExplicitDisjunction )* loop1: do { int alt1=2; int LA1_0 = input.LA(1); - if ( ((LA1_0>=MINUS && LA1_0<=LPAREN)||(LA1_0>=FTSWORD && LA1_0<=TILDA)||LA1_0==ID) ) { + if ( ((LA1_0>=MINUS && LA1_0<=LPAREN)||(LA1_0>=PLUS && LA1_0<=TILDA)||(LA1_0>=ID && LA1_0<=FTSWORD)) ) { alt1=1; } switch (alt1) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:90:52: ftsExplicitDisjunction + // W:\\workspace-cmis\\ANTLR\\FTS.g:138:52: ftsExplicitDisjunction { - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction160); - ftsExplicitDisjunction3=ftsExplicitDisjunction(); + pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction173); + ftsExplicitDisjunction4=ftsExplicitDisjunction(); state._fsp--; - stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction3.getTree()); + stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction4.getTree()); } break; @@ -237,9 +281,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 91:3: -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) + // 139:3: -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:91:6: ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:139:6: ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); @@ -262,35 +306,35 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:92:5: ftsExplicitDisjunction ( ftsExplicitDisjunction )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:140:5: ftsExplicitDisjunction ( ftsExplicitDisjunction )* { - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction179); - ftsExplicitDisjunction4=ftsExplicitDisjunction(); + pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction192); + ftsExplicitDisjunction5=ftsExplicitDisjunction(); state._fsp--; - stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction4.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:92:28: ( ftsExplicitDisjunction )* + stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction5.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:140:28: ( ftsExplicitDisjunction )* loop2: do { int alt2=2; int LA2_0 = input.LA(1); - if ( ((LA2_0>=MINUS && LA2_0<=LPAREN)||(LA2_0>=FTSWORD && LA2_0<=TILDA)||LA2_0==ID) ) { + if ( ((LA2_0>=MINUS && LA2_0<=LPAREN)||(LA2_0>=PLUS && LA2_0<=TILDA)||(LA2_0>=ID && LA2_0<=FTSWORD)) ) { alt2=1; } switch (alt2) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:92:29: ftsExplicitDisjunction + // W:\\workspace-cmis\\ANTLR\\FTS.g:140:29: ftsExplicitDisjunction { - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction182); - ftsExplicitDisjunction5=ftsExplicitDisjunction(); + pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction195); + ftsExplicitDisjunction6=ftsExplicitDisjunction(); state._fsp--; - stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction5.getTree()); + stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction6.getTree()); } break; @@ -312,9 +356,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 93:3: -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) + // 141:3: -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:93:6: ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:141:6: ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); @@ -344,11 +388,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -362,33 +405,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsExplicitDisjunction - // W:\\workspace-cmis\\ANTLR\\FTS.g:96:1: ftsExplicitDisjunction : ftsExplictConjunction ( OR ftsExplictConjunction )* -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:144:1: ftsExplicitDisjunction : ftsExplictConjunction ( OR ftsExplictConjunction )* -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) ; public final FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction() throws RecognitionException { FTSParser.ftsExplicitDisjunction_return retval = new FTSParser.ftsExplicitDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - Token OR7=null; - FTSParser.ftsExplictConjunction_return ftsExplictConjunction6 = null; + Token OR8=null; + FTSParser.ftsExplictConjunction_return ftsExplictConjunction7 = null; - FTSParser.ftsExplictConjunction_return ftsExplictConjunction8 = null; + FTSParser.ftsExplictConjunction_return ftsExplictConjunction9 = null; - Object OR7_tree=null; + Object OR8_tree=null; RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR"); RewriteRuleSubtreeStream stream_ftsExplictConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsExplictConjunction"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:97:2: ( ftsExplictConjunction ( OR ftsExplictConjunction )* -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:97:4: ftsExplictConjunction ( OR ftsExplictConjunction )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:145:2: ( ftsExplictConjunction ( OR ftsExplictConjunction )* -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:145:4: ftsExplictConjunction ( OR ftsExplictConjunction )* { - pushFollow(FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction207); - ftsExplictConjunction6=ftsExplictConjunction(); + pushFollow(FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction220); + ftsExplictConjunction7=ftsExplictConjunction(); state._fsp--; - stream_ftsExplictConjunction.add(ftsExplictConjunction6.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:97:26: ( OR ftsExplictConjunction )* + stream_ftsExplictConjunction.add(ftsExplictConjunction7.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:145:26: ( OR ftsExplictConjunction )* loop4: do { int alt4=2; @@ -401,17 +444,17 @@ public class FTSParser extends Parser { switch (alt4) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:97:27: OR ftsExplictConjunction + // W:\\workspace-cmis\\ANTLR\\FTS.g:145:27: OR ftsExplictConjunction { - OR7=(Token)match(input,OR,FOLLOW_OR_in_ftsExplicitDisjunction210); - stream_OR.add(OR7); + OR8=(Token)match(input,OR,FOLLOW_OR_in_ftsExplicitDisjunction223); + stream_OR.add(OR8); - pushFollow(FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction212); - ftsExplictConjunction8=ftsExplictConjunction(); + pushFollow(FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction225); + ftsExplictConjunction9=ftsExplictConjunction(); state._fsp--; - stream_ftsExplictConjunction.add(ftsExplictConjunction8.getTree()); + stream_ftsExplictConjunction.add(ftsExplictConjunction9.getTree()); } break; @@ -433,9 +476,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 98:3: -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) + // 146:3: -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:98:6: ^( DISJUNCTION ( ftsExplictConjunction )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:146:6: ^( DISJUNCTION ( ftsExplictConjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); @@ -463,11 +506,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -481,33 +523,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsExplictConjunction - // W:\\workspace-cmis\\ANTLR\\FTS.g:101:1: ftsExplictConjunction : ftsNot ( AND ftsNot )* -> ^( CONJUNCTION ftsNot ) ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:149:1: ftsExplictConjunction : ftsNot ( AND ftsNot )* -> ^( CONJUNCTION ftsNot ) ; public final FTSParser.ftsExplictConjunction_return ftsExplictConjunction() throws RecognitionException { FTSParser.ftsExplictConjunction_return retval = new FTSParser.ftsExplictConjunction_return(); retval.start = input.LT(1); Object root_0 = null; - Token AND10=null; - FTSParser.ftsNot_return ftsNot9 = null; + Token AND11=null; + FTSParser.ftsNot_return ftsNot10 = null; - FTSParser.ftsNot_return ftsNot11 = null; + FTSParser.ftsNot_return ftsNot12 = null; - Object AND10_tree=null; + Object AND11_tree=null; RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND"); RewriteRuleSubtreeStream stream_ftsNot=new RewriteRuleSubtreeStream(adaptor,"rule ftsNot"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:102:2: ( ftsNot ( AND ftsNot )* -> ^( CONJUNCTION ftsNot ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:102:4: ftsNot ( AND ftsNot )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:150:2: ( ftsNot ( AND ftsNot )* -> ^( CONJUNCTION ftsNot ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:150:4: ftsNot ( AND ftsNot )* { - pushFollow(FOLLOW_ftsNot_in_ftsExplictConjunction237); - ftsNot9=ftsNot(); + pushFollow(FOLLOW_ftsNot_in_ftsExplictConjunction250); + ftsNot10=ftsNot(); state._fsp--; - stream_ftsNot.add(ftsNot9.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:102:11: ( AND ftsNot )* + stream_ftsNot.add(ftsNot10.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:150:11: ( AND ftsNot )* loop5: do { int alt5=2; @@ -520,17 +562,17 @@ public class FTSParser extends Parser { switch (alt5) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:102:12: AND ftsNot + // W:\\workspace-cmis\\ANTLR\\FTS.g:150:12: AND ftsNot { - AND10=(Token)match(input,AND,FOLLOW_AND_in_ftsExplictConjunction240); - stream_AND.add(AND10); + AND11=(Token)match(input,AND,FOLLOW_AND_in_ftsExplictConjunction253); + stream_AND.add(AND11); - pushFollow(FOLLOW_ftsNot_in_ftsExplictConjunction242); - ftsNot11=ftsNot(); + pushFollow(FOLLOW_ftsNot_in_ftsExplictConjunction255); + ftsNot12=ftsNot(); state._fsp--; - stream_ftsNot.add(ftsNot11.getTree()); + stream_ftsNot.add(ftsNot12.getTree()); } break; @@ -552,9 +594,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 103:3: -> ^( CONJUNCTION ftsNot ) + // 151:3: -> ^( CONJUNCTION ftsNot ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:103:6: ^( CONJUNCTION ftsNot ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:151:6: ^( CONJUNCTION ftsNot ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); @@ -575,11 +617,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -593,31 +634,31 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsNot - // W:\\workspace-cmis\\ANTLR\\FTS.g:107:1: ftsNot : ( MINUS ftsTest -> ^( NEGATION ftsTest ) | ftsTest -> ftsTest ); + // W:\\workspace-cmis\\ANTLR\\FTS.g:155:1: ftsNot : ( MINUS ftsTest -> ^( NEGATION ftsTest ) | ftsTest -> ftsTest ); public final FTSParser.ftsNot_return ftsNot() throws RecognitionException { FTSParser.ftsNot_return retval = new FTSParser.ftsNot_return(); retval.start = input.LT(1); Object root_0 = null; - Token MINUS12=null; - FTSParser.ftsTest_return ftsTest13 = null; - + Token MINUS13=null; FTSParser.ftsTest_return ftsTest14 = null; + FTSParser.ftsTest_return ftsTest15 = null; - Object MINUS12_tree=null; + + Object MINUS13_tree=null; RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS"); RewriteRuleSubtreeStream stream_ftsTest=new RewriteRuleSubtreeStream(adaptor,"rule ftsTest"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:107:9: ( MINUS ftsTest -> ^( NEGATION ftsTest ) | ftsTest -> ftsTest ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:156:5: ( MINUS ftsTest -> ^( NEGATION ftsTest ) | ftsTest -> ftsTest ) int alt6=2; int LA6_0 = input.LA(1); if ( (LA6_0==MINUS) ) { alt6=1; } - else if ( (LA6_0==LPAREN||(LA6_0>=FTSWORD && LA6_0<=TILDA)||LA6_0==ID) ) { + else if ( (LA6_0==LPAREN||(LA6_0>=PLUS && LA6_0<=TILDA)||(LA6_0>=ID && LA6_0<=FTSWORD)) ) { alt6=2; } else { @@ -628,50 +669,12 @@ public class FTSParser extends Parser { } switch (alt6) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:107:11: MINUS ftsTest + // W:\\workspace-cmis\\ANTLR\\FTS.g:156:7: MINUS ftsTest { - MINUS12=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsNot268); - stream_MINUS.add(MINUS12); + MINUS13=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsNot286); + stream_MINUS.add(MINUS13); - pushFollow(FOLLOW_ftsTest_in_ftsNot270); - ftsTest13=ftsTest(); - - state._fsp--; - - stream_ftsTest.add(ftsTest13.getTree()); - - - // AST REWRITE - // elements: ftsTest - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 108:3: -> ^( NEGATION ftsTest ) - { - // W:\\workspace-cmis\\ANTLR\\FTS.g:108:6: ^( NEGATION ftsTest ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NEGATION, "NEGATION"), root_1); - - adaptor.addChild(root_1, stream_ftsTest.nextTree()); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;retval.tree = root_0; - } - break; - case 2 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:109:4: ftsTest - { - pushFollow(FOLLOW_ftsTest_in_ftsNot285); + pushFollow(FOLLOW_ftsTest_in_ftsNot288); ftsTest14=ftsTest(); state._fsp--; @@ -689,7 +692,45 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 110:3: -> ftsTest + // 157:3: -> ^( NEGATION ftsTest ) + { + // W:\\workspace-cmis\\ANTLR\\FTS.g:157:6: ^( NEGATION ftsTest ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NEGATION, "NEGATION"), root_1); + + adaptor.addChild(root_1, stream_ftsTest.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;retval.tree = root_0; + } + break; + case 2 : + // W:\\workspace-cmis\\ANTLR\\FTS.g:158:4: ftsTest + { + pushFollow(FOLLOW_ftsTest_in_ftsNot303); + ftsTest15=ftsTest(); + + state._fsp--; + + stream_ftsTest.add(ftsTest15.getTree()); + + + // AST REWRITE + // elements: ftsTest + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 159:3: -> ftsTest { adaptor.addChild(root_0, stream_ftsTest.nextTree()); @@ -706,11 +747,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -724,34 +764,34 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsTest - // W:\\workspace-cmis\\ANTLR\\FTS.g:113:1: ftsTest : ( ftsTerm -> ^( TERM ftsTerm ) | ftsExactTerm -> ^( EXACT_TERM ftsExactTerm ) | ftsPhrase -> ^( PHRASE ftsPhrase ) | ftsSynonym -> ^( SYNONYM ftsSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction ); + // W:\\workspace-cmis\\ANTLR\\FTS.g:162:1: ftsTest : ( ftsTerm -> ^( TERM ftsTerm ) | ftsExactTerm -> ^( EXACT_TERM ftsExactTerm ) | ftsPhrase -> ^( PHRASE ftsPhrase ) | ftsSynonym -> ^( SYNONYM ftsSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction ); public final FTSParser.ftsTest_return ftsTest() throws RecognitionException { FTSParser.ftsTest_return retval = new FTSParser.ftsTest_return(); retval.start = input.LT(1); Object root_0 = null; - Token LPAREN22=null; - Token RPAREN24=null; - FTSParser.ftsTerm_return ftsTerm15 = null; + Token LPAREN23=null; + Token RPAREN25=null; + FTSParser.ftsTerm_return ftsTerm16 = null; - FTSParser.ftsExactTerm_return ftsExactTerm16 = null; + FTSParser.ftsExactTerm_return ftsExactTerm17 = null; - FTSParser.ftsPhrase_return ftsPhrase17 = null; + FTSParser.ftsPhrase_return ftsPhrase18 = null; - FTSParser.ftsSynonym_return ftsSynonym18 = null; + FTSParser.ftsSynonym_return ftsSynonym19 = null; - FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity19 = null; + FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity20 = null; - FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange20 = null; + FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange21 = null; - FTSParser.ftsFieldGroup_return ftsFieldGroup21 = null; + FTSParser.ftsFieldGroup_return ftsFieldGroup22 = null; - FTSParser.ftsImplicitConjunctionOrDisjunction_return ftsImplicitConjunctionOrDisjunction23 = null; + FTSParser.ftsImplicitConjunctionOrDisjunction_return ftsImplicitConjunctionOrDisjunction24 = null; - Object LPAREN22_tree=null; - Object RPAREN24_tree=null; + Object LPAREN23_tree=null; + Object RPAREN25_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_ftsFieldGroupRange=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupRange"); @@ -762,19 +802,19 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_ftsSynonym=new RewriteRuleSubtreeStream(adaptor,"rule ftsSynonym"); RewriteRuleSubtreeStream stream_ftsFieldGroupProximity=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupProximity"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:113:9: ( ftsTerm -> ^( TERM ftsTerm ) | ftsExactTerm -> ^( EXACT_TERM ftsExactTerm ) | ftsPhrase -> ^( PHRASE ftsPhrase ) | ftsSynonym -> ^( SYNONYM ftsSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:163:5: ( ftsTerm -> ^( TERM ftsTerm ) | ftsExactTerm -> ^( EXACT_TERM ftsExactTerm ) | ftsPhrase -> ^( PHRASE ftsPhrase ) | ftsSynonym -> ^( SYNONYM ftsSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction ) int alt7=8; alt7 = dfa7.predict(input); switch (alt7) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:113:11: ftsTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:163:7: ftsTerm { - pushFollow(FOLLOW_ftsTerm_in_ftsTest301); - ftsTerm15=ftsTerm(); + pushFollow(FOLLOW_ftsTerm_in_ftsTest324); + ftsTerm16=ftsTerm(); state._fsp--; - stream_ftsTerm.add(ftsTerm15.getTree()); + stream_ftsTerm.add(ftsTerm16.getTree()); // AST REWRITE @@ -787,9 +827,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 114:3: -> ^( TERM ftsTerm ) + // 164:3: -> ^( TERM ftsTerm ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:114:6: ^( TERM ftsTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:164:6: ^( TERM ftsTerm ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TERM, "TERM"), root_1); @@ -805,14 +845,14 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:115:4: ftsExactTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:165:4: ftsExactTerm { - pushFollow(FOLLOW_ftsExactTerm_in_ftsTest316); - ftsExactTerm16=ftsExactTerm(); + pushFollow(FOLLOW_ftsExactTerm_in_ftsTest339); + ftsExactTerm17=ftsExactTerm(); state._fsp--; - stream_ftsExactTerm.add(ftsExactTerm16.getTree()); + stream_ftsExactTerm.add(ftsExactTerm17.getTree()); // AST REWRITE @@ -825,9 +865,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 116:3: -> ^( EXACT_TERM ftsExactTerm ) + // 166:3: -> ^( EXACT_TERM ftsExactTerm ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:116:6: ^( EXACT_TERM ftsExactTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:166:6: ^( EXACT_TERM ftsExactTerm ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXACT_TERM, "EXACT_TERM"), root_1); @@ -843,14 +883,14 @@ public class FTSParser extends Parser { } break; case 3 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:117:17: ftsPhrase + // W:\\workspace-cmis\\ANTLR\\FTS.g:167:9: ftsPhrase { - pushFollow(FOLLOW_ftsPhrase_in_ftsTest344); - ftsPhrase17=ftsPhrase(); + pushFollow(FOLLOW_ftsPhrase_in_ftsTest359); + ftsPhrase18=ftsPhrase(); state._fsp--; - stream_ftsPhrase.add(ftsPhrase17.getTree()); + stream_ftsPhrase.add(ftsPhrase18.getTree()); // AST REWRITE @@ -863,9 +903,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 118:10: -> ^( PHRASE ftsPhrase ) + // 168:9: -> ^( PHRASE ftsPhrase ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:118:13: ^( PHRASE ftsPhrase ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:168:12: ^( PHRASE ftsPhrase ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PHRASE, "PHRASE"), root_1); @@ -881,14 +921,14 @@ public class FTSParser extends Parser { } break; case 4 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:119:17: ftsSynonym + // W:\\workspace-cmis\\ANTLR\\FTS.g:169:9: ftsSynonym { - pushFollow(FOLLOW_ftsSynonym_in_ftsTest379); - ftsSynonym18=ftsSynonym(); + pushFollow(FOLLOW_ftsSynonym_in_ftsTest385); + ftsSynonym19=ftsSynonym(); state._fsp--; - stream_ftsSynonym.add(ftsSynonym18.getTree()); + stream_ftsSynonym.add(ftsSynonym19.getTree()); // AST REWRITE @@ -901,9 +941,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 120:10: -> ^( SYNONYM ftsSynonym ) + // 170:9: -> ^( SYNONYM ftsSynonym ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:120:13: ^( SYNONYM ftsSynonym ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:170:12: ^( SYNONYM ftsSynonym ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SYNONYM, "SYNONYM"), root_1); @@ -919,14 +959,14 @@ public class FTSParser extends Parser { } break; case 5 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:121:11: ftsFieldGroupProximity + // W:\\workspace-cmis\\ANTLR\\FTS.g:171:7: ftsFieldGroupProximity { - pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsTest408); - ftsFieldGroupProximity19=ftsFieldGroupProximity(); + pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsTest409); + ftsFieldGroupProximity20=ftsFieldGroupProximity(); state._fsp--; - stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity19.getTree()); + stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity20.getTree()); // AST REWRITE @@ -939,9 +979,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 122:10: -> ^( FG_PROXIMITY ftsFieldGroupProximity ) + // 172:9: -> ^( FG_PROXIMITY ftsFieldGroupProximity ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:122:13: ^( FG_PROXIMITY ftsFieldGroupProximity ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:172:12: ^( FG_PROXIMITY ftsFieldGroupProximity ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_PROXIMITY, "FG_PROXIMITY"), root_1); @@ -957,14 +997,14 @@ public class FTSParser extends Parser { } break; case 6 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:123:12: ftsFieldGroupRange + // W:\\workspace-cmis\\ANTLR\\FTS.g:173:8: ftsFieldGroupRange { - pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsTest440); - ftsFieldGroupRange20=ftsFieldGroupRange(); + pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsTest436); + ftsFieldGroupRange21=ftsFieldGroupRange(); state._fsp--; - stream_ftsFieldGroupRange.add(ftsFieldGroupRange20.getTree()); + stream_ftsFieldGroupRange.add(ftsFieldGroupRange21.getTree()); // AST REWRITE @@ -977,9 +1017,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 124:10: -> ^( FG_RANGE ftsFieldGroupRange ) + // 174:9: -> ^( FG_RANGE ftsFieldGroupRange ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:124:13: ^( FG_RANGE ftsFieldGroupRange ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:174:12: ^( FG_RANGE ftsFieldGroupRange ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_RANGE, "FG_RANGE"), root_1); @@ -995,33 +1035,33 @@ public class FTSParser extends Parser { } break; case 7 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:125:11: ftsFieldGroup + // W:\\workspace-cmis\\ANTLR\\FTS.g:175:7: ftsFieldGroup { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_ftsFieldGroup_in_ftsTest469); - ftsFieldGroup21=ftsFieldGroup(); + pushFollow(FOLLOW_ftsFieldGroup_in_ftsTest460); + ftsFieldGroup22=ftsFieldGroup(); state._fsp--; - adaptor.addChild(root_0, ftsFieldGroup21.getTree()); + adaptor.addChild(root_0, ftsFieldGroup22.getTree()); } break; case 8 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:126:4: LPAREN ftsImplicitConjunctionOrDisjunction RPAREN + // W:\\workspace-cmis\\ANTLR\\FTS.g:176:4: LPAREN ftsImplicitConjunctionOrDisjunction RPAREN { - LPAREN22=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsTest478); - stream_LPAREN.add(LPAREN22); + LPAREN23=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsTest469); + stream_LPAREN.add(LPAREN23); - pushFollow(FOLLOW_ftsImplicitConjunctionOrDisjunction_in_ftsTest480); - ftsImplicitConjunctionOrDisjunction23=ftsImplicitConjunctionOrDisjunction(); + pushFollow(FOLLOW_ftsImplicitConjunctionOrDisjunction_in_ftsTest471); + ftsImplicitConjunctionOrDisjunction24=ftsImplicitConjunctionOrDisjunction(); state._fsp--; - stream_ftsImplicitConjunctionOrDisjunction.add(ftsImplicitConjunctionOrDisjunction23.getTree()); - RPAREN24=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsTest482); - stream_RPAREN.add(RPAREN24); + stream_ftsImplicitConjunctionOrDisjunction.add(ftsImplicitConjunctionOrDisjunction24.getTree()); + RPAREN25=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsTest473); + stream_RPAREN.add(RPAREN25); @@ -1035,7 +1075,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 127:3: -> ftsImplicitConjunctionOrDisjunction + // 177:3: -> ftsImplicitConjunctionOrDisjunction { adaptor.addChild(root_0, stream_ftsImplicitConjunctionOrDisjunction.nextTree()); @@ -1052,11 +1092,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1070,46 +1109,50 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsTerm - // W:\\workspace-cmis\\ANTLR\\FTS.g:130:1: ftsTerm : ( columnReference COLON )? FTSWORD -> FTSWORD ( columnReference )? ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:180:1: ftsTerm : ( columnReference COLON )? ftsWord -> ftsWord ( columnReference )? ; public final FTSParser.ftsTerm_return ftsTerm() throws RecognitionException { FTSParser.ftsTerm_return retval = new FTSParser.ftsTerm_return(); retval.start = input.LT(1); Object root_0 = null; - Token COLON26=null; - Token FTSWORD27=null; - FTSParser.columnReference_return columnReference25 = null; + Token COLON27=null; + FTSParser.columnReference_return columnReference26 = null; + + FTSParser.ftsWord_return ftsWord28 = null; - Object COLON26_tree=null; - Object FTSWORD27_tree=null; + Object COLON27_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); - RewriteRuleTokenStream stream_FTSWORD=new RewriteRuleTokenStream(adaptor,"token FTSWORD"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); + RewriteRuleSubtreeStream stream_ftsWord=new RewriteRuleSubtreeStream(adaptor,"rule ftsWord"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:131:2: ( ( columnReference COLON )? FTSWORD -> FTSWORD ( columnReference )? ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:131:4: ( columnReference COLON )? FTSWORD + // W:\\workspace-cmis\\ANTLR\\FTS.g:181:2: ( ( columnReference COLON )? ftsWord -> ftsWord ( columnReference )? ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:181:4: ( columnReference COLON )? ftsWord { - // W:\\workspace-cmis\\ANTLR\\FTS.g:131:4: ( columnReference COLON )? + // W:\\workspace-cmis\\ANTLR\\FTS.g:181:4: ( columnReference COLON )? int alt8=2; int LA8_0 = input.LA(1); if ( (LA8_0==ID) ) { - alt8=1; + int LA8_1 = input.LA(2); + + if ( (LA8_1==COLON||LA8_1==DOT) ) { + alt8=1; + } } switch (alt8) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:131:5: columnReference COLON + // W:\\workspace-cmis\\ANTLR\\FTS.g:181:5: columnReference COLON { - pushFollow(FOLLOW_columnReference_in_ftsTerm500); - columnReference25=columnReference(); + pushFollow(FOLLOW_columnReference_in_ftsTerm491); + columnReference26=columnReference(); state._fsp--; - stream_columnReference.add(columnReference25.getTree()); - COLON26=(Token)match(input,COLON,FOLLOW_COLON_in_ftsTerm502); - stream_COLON.add(COLON26); + stream_columnReference.add(columnReference26.getTree()); + COLON27=(Token)match(input,COLON,FOLLOW_COLON_in_ftsTerm493); + stream_COLON.add(COLON27); } @@ -1117,13 +1160,16 @@ public class FTSParser extends Parser { } - FTSWORD27=(Token)match(input,FTSWORD,FOLLOW_FTSWORD_in_ftsTerm506); - stream_FTSWORD.add(FTSWORD27); + pushFollow(FOLLOW_ftsWord_in_ftsTerm497); + ftsWord28=ftsWord(); + state._fsp--; + + stream_ftsWord.add(ftsWord28.getTree()); // AST REWRITE - // elements: FTSWORD, columnReference + // elements: columnReference, ftsWord // token labels: // rule labels: retval // token list labels: @@ -1132,10 +1178,10 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 132:3: -> FTSWORD ( columnReference )? + // 182:3: -> ftsWord ( columnReference )? { - adaptor.addChild(root_0, stream_FTSWORD.nextNode()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:132:14: ( columnReference )? + adaptor.addChild(root_0, stream_ftsWord.nextTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:182:14: ( columnReference )? if ( stream_columnReference.hasNext() ) { adaptor.addChild(root_0, stream_columnReference.nextTree()); @@ -1153,11 +1199,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1171,33 +1216,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsExactTerm - // W:\\workspace-cmis\\ANTLR\\FTS.g:135:1: ftsExactTerm : PLUS ftsTerm -> ftsTerm ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:185:1: ftsExactTerm : PLUS ftsTerm -> ftsTerm ; public final FTSParser.ftsExactTerm_return ftsExactTerm() throws RecognitionException { FTSParser.ftsExactTerm_return retval = new FTSParser.ftsExactTerm_return(); retval.start = input.LT(1); Object root_0 = null; - Token PLUS28=null; - FTSParser.ftsTerm_return ftsTerm29 = null; + Token PLUS29=null; + FTSParser.ftsTerm_return ftsTerm30 = null; - Object PLUS28_tree=null; + Object PLUS29_tree=null; RewriteRuleTokenStream stream_PLUS=new RewriteRuleTokenStream(adaptor,"token PLUS"); RewriteRuleSubtreeStream stream_ftsTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsTerm"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:136:2: ( PLUS ftsTerm -> ftsTerm ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:136:4: PLUS ftsTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:186:2: ( PLUS ftsTerm -> ftsTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:186:4: PLUS ftsTerm { - PLUS28=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsExactTerm527); - stream_PLUS.add(PLUS28); + PLUS29=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsExactTerm518); + stream_PLUS.add(PLUS29); - pushFollow(FOLLOW_ftsTerm_in_ftsExactTerm529); - ftsTerm29=ftsTerm(); + pushFollow(FOLLOW_ftsTerm_in_ftsExactTerm520); + ftsTerm30=ftsTerm(); state._fsp--; - stream_ftsTerm.add(ftsTerm29.getTree()); + stream_ftsTerm.add(ftsTerm30.getTree()); // AST REWRITE @@ -1210,7 +1255,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 137:3: -> ftsTerm + // 187:3: -> ftsTerm { adaptor.addChild(root_0, stream_ftsTerm.nextTree()); @@ -1225,11 +1270,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1243,28 +1287,28 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsPhrase - // W:\\workspace-cmis\\ANTLR\\FTS.g:140:1: ftsPhrase : ( columnReference COLON )? FTSPHRASE -> FTSPHRASE ( columnReference )? ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:190:1: ftsPhrase : ( columnReference COLON )? FTSPHRASE -> FTSPHRASE ( columnReference )? ; public final FTSParser.ftsPhrase_return ftsPhrase() throws RecognitionException { FTSParser.ftsPhrase_return retval = new FTSParser.ftsPhrase_return(); retval.start = input.LT(1); Object root_0 = null; - Token COLON31=null; - Token FTSPHRASE32=null; - FTSParser.columnReference_return columnReference30 = null; + Token COLON32=null; + Token FTSPHRASE33=null; + FTSParser.columnReference_return columnReference31 = null; - Object COLON31_tree=null; - Object FTSPHRASE32_tree=null; + Object COLON32_tree=null; + Object FTSPHRASE33_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleTokenStream stream_FTSPHRASE=new RewriteRuleTokenStream(adaptor,"token FTSPHRASE"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:141:2: ( ( columnReference COLON )? FTSPHRASE -> FTSPHRASE ( columnReference )? ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:141:6: ( columnReference COLON )? FTSPHRASE + // W:\\workspace-cmis\\ANTLR\\FTS.g:191:2: ( ( columnReference COLON )? FTSPHRASE -> FTSPHRASE ( columnReference )? ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:191:6: ( columnReference COLON )? FTSPHRASE { - // W:\\workspace-cmis\\ANTLR\\FTS.g:141:6: ( columnReference COLON )? + // W:\\workspace-cmis\\ANTLR\\FTS.g:191:6: ( columnReference COLON )? int alt9=2; int LA9_0 = input.LA(1); @@ -1273,16 +1317,16 @@ public class FTSParser extends Parser { } switch (alt9) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:141:7: columnReference COLON + // W:\\workspace-cmis\\ANTLR\\FTS.g:191:7: columnReference COLON { - pushFollow(FOLLOW_columnReference_in_ftsPhrase550); - columnReference30=columnReference(); + pushFollow(FOLLOW_columnReference_in_ftsPhrase541); + columnReference31=columnReference(); state._fsp--; - stream_columnReference.add(columnReference30.getTree()); - COLON31=(Token)match(input,COLON,FOLLOW_COLON_in_ftsPhrase552); - stream_COLON.add(COLON31); + stream_columnReference.add(columnReference31.getTree()); + COLON32=(Token)match(input,COLON,FOLLOW_COLON_in_ftsPhrase543); + stream_COLON.add(COLON32); } @@ -1290,8 +1334,8 @@ public class FTSParser extends Parser { } - FTSPHRASE32=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsPhrase556); - stream_FTSPHRASE.add(FTSPHRASE32); + FTSPHRASE33=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsPhrase547); + stream_FTSPHRASE.add(FTSPHRASE33); @@ -1305,10 +1349,10 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 142:3: -> FTSPHRASE ( columnReference )? + // 192:3: -> FTSPHRASE ( columnReference )? { adaptor.addChild(root_0, stream_FTSPHRASE.nextNode()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:142:16: ( columnReference )? + // W:\\workspace-cmis\\ANTLR\\FTS.g:192:16: ( columnReference )? if ( stream_columnReference.hasNext() ) { adaptor.addChild(root_0, stream_columnReference.nextTree()); @@ -1326,11 +1370,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1344,33 +1387,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsSynonym - // W:\\workspace-cmis\\ANTLR\\FTS.g:145:1: ftsSynonym : TILDA ftsTerm -> ftsTerm ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:195:1: ftsSynonym : TILDA ftsTerm -> ftsTerm ; public final FTSParser.ftsSynonym_return ftsSynonym() throws RecognitionException { FTSParser.ftsSynonym_return retval = new FTSParser.ftsSynonym_return(); retval.start = input.LT(1); Object root_0 = null; - Token TILDA33=null; - FTSParser.ftsTerm_return ftsTerm34 = null; + Token TILDA34=null; + FTSParser.ftsTerm_return ftsTerm35 = null; - Object TILDA33_tree=null; + Object TILDA34_tree=null; RewriteRuleTokenStream stream_TILDA=new RewriteRuleTokenStream(adaptor,"token TILDA"); RewriteRuleSubtreeStream stream_ftsTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsTerm"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:146:2: ( TILDA ftsTerm -> ftsTerm ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:146:4: TILDA ftsTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:196:2: ( TILDA ftsTerm -> ftsTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:196:4: TILDA ftsTerm { - TILDA33=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsSynonym577); - stream_TILDA.add(TILDA33); + TILDA34=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsSynonym568); + stream_TILDA.add(TILDA34); - pushFollow(FOLLOW_ftsTerm_in_ftsSynonym579); - ftsTerm34=ftsTerm(); + pushFollow(FOLLOW_ftsTerm_in_ftsSynonym570); + ftsTerm35=ftsTerm(); state._fsp--; - stream_ftsTerm.add(ftsTerm34.getTree()); + stream_ftsTerm.add(ftsTerm35.getTree()); // AST REWRITE @@ -1383,7 +1426,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 147:3: -> ftsTerm + // 197:3: -> ftsTerm { adaptor.addChild(root_0, stream_ftsTerm.nextTree()); @@ -1398,11 +1441,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1416,58 +1458,58 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroup - // W:\\workspace-cmis\\ANTLR\\FTS.g:151:1: ftsFieldGroup : columnReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:201:1: ftsFieldGroup : columnReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) ; public final FTSParser.ftsFieldGroup_return ftsFieldGroup() throws RecognitionException { FTSParser.ftsFieldGroup_return retval = new FTSParser.ftsFieldGroup_return(); retval.start = input.LT(1); Object root_0 = null; - Token COLON36=null; - Token LPAREN37=null; - Token RPAREN39=null; - FTSParser.columnReference_return columnReference35 = null; + Token COLON37=null; + Token LPAREN38=null; + Token RPAREN40=null; + FTSParser.columnReference_return columnReference36 = null; - FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return ftsFieldGroupImplicitConjunctionOrDisjunction38 = null; + FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return ftsFieldGroupImplicitConjunctionOrDisjunction39 = null; - Object COLON36_tree=null; - Object LPAREN37_tree=null; - Object RPAREN39_tree=null; + Object COLON37_tree=null; + Object LPAREN38_tree=null; + Object RPAREN40_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_ftsFieldGroupImplicitConjunctionOrDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupImplicitConjunctionOrDisjunction"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:152:2: ( columnReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:152:4: columnReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN + // W:\\workspace-cmis\\ANTLR\\FTS.g:202:2: ( columnReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:202:4: columnReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN { - pushFollow(FOLLOW_columnReference_in_ftsFieldGroup598); - columnReference35=columnReference(); + pushFollow(FOLLOW_columnReference_in_ftsFieldGroup589); + columnReference36=columnReference(); state._fsp--; - stream_columnReference.add(columnReference35.getTree()); - COLON36=(Token)match(input,COLON,FOLLOW_COLON_in_ftsFieldGroup600); - stream_COLON.add(COLON36); + stream_columnReference.add(columnReference36.getTree()); + COLON37=(Token)match(input,COLON,FOLLOW_COLON_in_ftsFieldGroup591); + stream_COLON.add(COLON37); - LPAREN37=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroup602); - stream_LPAREN.add(LPAREN37); + LPAREN38=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroup593); + stream_LPAREN.add(LPAREN38); - pushFollow(FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroup604); - ftsFieldGroupImplicitConjunctionOrDisjunction38=ftsFieldGroupImplicitConjunctionOrDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroup595); + ftsFieldGroupImplicitConjunctionOrDisjunction39=ftsFieldGroupImplicitConjunctionOrDisjunction(); state._fsp--; - stream_ftsFieldGroupImplicitConjunctionOrDisjunction.add(ftsFieldGroupImplicitConjunctionOrDisjunction38.getTree()); - RPAREN39=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroup606); - stream_RPAREN.add(RPAREN39); + stream_ftsFieldGroupImplicitConjunctionOrDisjunction.add(ftsFieldGroupImplicitConjunctionOrDisjunction39.getTree()); + RPAREN40=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroup597); + stream_RPAREN.add(RPAREN40); // AST REWRITE - // elements: columnReference, ftsFieldGroupImplicitConjunctionOrDisjunction + // elements: ftsFieldGroupImplicitConjunctionOrDisjunction, columnReference // token labels: // rule labels: retval // token list labels: @@ -1476,9 +1518,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 153:3: -> ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) + // 203:3: -> ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:153:6: ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:203:6: ^( FIELD_GROUP columnReference ftsFieldGroupImplicitConjunctionOrDisjunction ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_GROUP, "FIELD_GROUP"), root_1); @@ -1500,11 +1542,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1518,25 +1559,25 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupImplicitConjunctionOrDisjunction - // W:\\workspace-cmis\\ANTLR\\FTS.g:156:1: ftsFieldGroupImplicitConjunctionOrDisjunction : ({...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) | ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) ); + // W:\\workspace-cmis\\ANTLR\\FTS.g:206:1: ftsFieldGroupImplicitConjunctionOrDisjunction : ({...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) | ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) ); public final FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return ftsFieldGroupImplicitConjunctionOrDisjunction() throws RecognitionException { FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return retval = new FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction40 = null; - FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction41 = null; FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction42 = null; FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction43 = null; + FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction44 = null; + RewriteRuleSubtreeStream stream_ftsFieldGroupExplicitDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupExplicitDisjunction"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:157:2: ({...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) | ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:207:2: ({...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) | ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) ) int alt12=2; switch ( input.LA(1) ) { case MINUS: @@ -1557,6 +1598,7 @@ public class FTSParser extends Parser { } } break; + case ID: case FTSWORD: { int LA12_2 = input.LA(2); @@ -1656,38 +1698,38 @@ public class FTSParser extends Parser { switch (alt12) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:157:4: {...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:207:4: {...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* { if ( !(defaultFieldConjunction()) ) { throw new FailedPredicateException(input, "ftsFieldGroupImplicitConjunctionOrDisjunction", "defaultFieldConjunction()"); } - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction632); - ftsFieldGroupExplicitDisjunction40=ftsFieldGroupExplicitDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction623); + ftsFieldGroupExplicitDisjunction41=ftsFieldGroupExplicitDisjunction(); state._fsp--; - stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction40.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:157:66: ( ftsFieldGroupExplicitDisjunction )* + stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction41.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:207:66: ( ftsFieldGroupExplicitDisjunction )* loop10: do { int alt10=2; int LA10_0 = input.LA(1); - if ( ((LA10_0>=MINUS && LA10_0<=LPAREN)||(LA10_0>=FTSWORD && LA10_0<=TILDA)) ) { + if ( ((LA10_0>=MINUS && LA10_0<=LPAREN)||(LA10_0>=PLUS && LA10_0<=TILDA)||(LA10_0>=ID && LA10_0<=FTSWORD)) ) { alt10=1; } switch (alt10) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:157:67: ftsFieldGroupExplicitDisjunction + // W:\\workspace-cmis\\ANTLR\\FTS.g:207:67: ftsFieldGroupExplicitDisjunction { - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction635); - ftsFieldGroupExplicitDisjunction41=ftsFieldGroupExplicitDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction626); + ftsFieldGroupExplicitDisjunction42=ftsFieldGroupExplicitDisjunction(); state._fsp--; - stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction41.getTree()); + stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction42.getTree()); } break; @@ -1709,9 +1751,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 158:3: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) + // 208:3: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:158:6: ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:208:6: ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_CONJUNCTION, "FIELD_CONJUNCTION"), root_1); @@ -1734,35 +1776,35 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:159:4: ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:209:4: ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* { - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction653); - ftsFieldGroupExplicitDisjunction42=ftsFieldGroupExplicitDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction644); + ftsFieldGroupExplicitDisjunction43=ftsFieldGroupExplicitDisjunction(); state._fsp--; - stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction42.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:159:37: ( ftsFieldGroupExplicitDisjunction )* + stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction43.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:209:37: ( ftsFieldGroupExplicitDisjunction )* loop11: do { int alt11=2; int LA11_0 = input.LA(1); - if ( ((LA11_0>=MINUS && LA11_0<=LPAREN)||(LA11_0>=FTSWORD && LA11_0<=TILDA)) ) { + if ( ((LA11_0>=MINUS && LA11_0<=LPAREN)||(LA11_0>=PLUS && LA11_0<=TILDA)||(LA11_0>=ID && LA11_0<=FTSWORD)) ) { alt11=1; } switch (alt11) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:159:38: ftsFieldGroupExplicitDisjunction + // W:\\workspace-cmis\\ANTLR\\FTS.g:209:38: ftsFieldGroupExplicitDisjunction { - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction656); - ftsFieldGroupExplicitDisjunction43=ftsFieldGroupExplicitDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction647); + ftsFieldGroupExplicitDisjunction44=ftsFieldGroupExplicitDisjunction(); state._fsp--; - stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction43.getTree()); + stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction44.getTree()); } break; @@ -1784,9 +1826,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 160:3: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) + // 210:3: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:160:6: ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:210:6: ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_DISJUNCTION, "FIELD_DISJUNCTION"), root_1); @@ -1816,11 +1858,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1834,33 +1875,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupExplicitDisjunction - // W:\\workspace-cmis\\ANTLR\\FTS.g:163:1: ftsFieldGroupExplicitDisjunction : ftsFieldGroupExplictConjunction ( OR ftsFieldGroupExplictConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:213:1: ftsFieldGroupExplicitDisjunction : ftsFieldGroupExplictConjunction ( OR ftsFieldGroupExplictConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) ; public final FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction() throws RecognitionException { FTSParser.ftsFieldGroupExplicitDisjunction_return retval = new FTSParser.ftsFieldGroupExplicitDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - Token OR45=null; - FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction44 = null; + Token OR46=null; + FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction45 = null; - FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction46 = null; + FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction47 = null; - Object OR45_tree=null; + Object OR46_tree=null; RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR"); RewriteRuleSubtreeStream stream_ftsFieldGroupExplictConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupExplictConjunction"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:164:2: ( ftsFieldGroupExplictConjunction ( OR ftsFieldGroupExplictConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:164:4: ftsFieldGroupExplictConjunction ( OR ftsFieldGroupExplictConjunction )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:214:2: ( ftsFieldGroupExplictConjunction ( OR ftsFieldGroupExplictConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:214:4: ftsFieldGroupExplictConjunction ( OR ftsFieldGroupExplictConjunction )* { - pushFollow(FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction681); - ftsFieldGroupExplictConjunction44=ftsFieldGroupExplictConjunction(); + pushFollow(FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction672); + ftsFieldGroupExplictConjunction45=ftsFieldGroupExplictConjunction(); state._fsp--; - stream_ftsFieldGroupExplictConjunction.add(ftsFieldGroupExplictConjunction44.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:164:36: ( OR ftsFieldGroupExplictConjunction )* + stream_ftsFieldGroupExplictConjunction.add(ftsFieldGroupExplictConjunction45.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:214:36: ( OR ftsFieldGroupExplictConjunction )* loop13: do { int alt13=2; @@ -1873,17 +1914,17 @@ public class FTSParser extends Parser { switch (alt13) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:164:37: OR ftsFieldGroupExplictConjunction + // W:\\workspace-cmis\\ANTLR\\FTS.g:214:37: OR ftsFieldGroupExplictConjunction { - OR45=(Token)match(input,OR,FOLLOW_OR_in_ftsFieldGroupExplicitDisjunction684); - stream_OR.add(OR45); + OR46=(Token)match(input,OR,FOLLOW_OR_in_ftsFieldGroupExplicitDisjunction675); + stream_OR.add(OR46); - pushFollow(FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction686); - ftsFieldGroupExplictConjunction46=ftsFieldGroupExplictConjunction(); + pushFollow(FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction677); + ftsFieldGroupExplictConjunction47=ftsFieldGroupExplictConjunction(); state._fsp--; - stream_ftsFieldGroupExplictConjunction.add(ftsFieldGroupExplictConjunction46.getTree()); + stream_ftsFieldGroupExplictConjunction.add(ftsFieldGroupExplictConjunction47.getTree()); } break; @@ -1905,9 +1946,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 165:3: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) + // 215:3: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:165:6: ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:215:6: ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_DISJUNCTION, "FIELD_DISJUNCTION"), root_1); @@ -1935,11 +1976,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -1953,33 +1993,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupExplictConjunction - // W:\\workspace-cmis\\ANTLR\\FTS.g:168:1: ftsFieldGroupExplictConjunction : ftsFieldGroupNot ( AND ftsFieldGroupNot )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:218:1: ftsFieldGroupExplictConjunction : ftsFieldGroupNot ( AND ftsFieldGroupNot )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) ; public final FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction() throws RecognitionException { FTSParser.ftsFieldGroupExplictConjunction_return retval = new FTSParser.ftsFieldGroupExplictConjunction_return(); retval.start = input.LT(1); Object root_0 = null; - Token AND48=null; - FTSParser.ftsFieldGroupNot_return ftsFieldGroupNot47 = null; + Token AND49=null; + FTSParser.ftsFieldGroupNot_return ftsFieldGroupNot48 = null; - FTSParser.ftsFieldGroupNot_return ftsFieldGroupNot49 = null; + FTSParser.ftsFieldGroupNot_return ftsFieldGroupNot50 = null; - Object AND48_tree=null; + Object AND49_tree=null; RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND"); RewriteRuleSubtreeStream stream_ftsFieldGroupNot=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupNot"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:169:2: ( ftsFieldGroupNot ( AND ftsFieldGroupNot )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:169:4: ftsFieldGroupNot ( AND ftsFieldGroupNot )* + // W:\\workspace-cmis\\ANTLR\\FTS.g:219:2: ( ftsFieldGroupNot ( AND ftsFieldGroupNot )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:219:4: ftsFieldGroupNot ( AND ftsFieldGroupNot )* { - pushFollow(FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction711); - ftsFieldGroupNot47=ftsFieldGroupNot(); + pushFollow(FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction702); + ftsFieldGroupNot48=ftsFieldGroupNot(); state._fsp--; - stream_ftsFieldGroupNot.add(ftsFieldGroupNot47.getTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:169:21: ( AND ftsFieldGroupNot )* + stream_ftsFieldGroupNot.add(ftsFieldGroupNot48.getTree()); + // W:\\workspace-cmis\\ANTLR\\FTS.g:219:21: ( AND ftsFieldGroupNot )* loop14: do { int alt14=2; @@ -1992,17 +2032,17 @@ public class FTSParser extends Parser { switch (alt14) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:169:22: AND ftsFieldGroupNot + // W:\\workspace-cmis\\ANTLR\\FTS.g:219:22: AND ftsFieldGroupNot { - AND48=(Token)match(input,AND,FOLLOW_AND_in_ftsFieldGroupExplictConjunction714); - stream_AND.add(AND48); + AND49=(Token)match(input,AND,FOLLOW_AND_in_ftsFieldGroupExplictConjunction705); + stream_AND.add(AND49); - pushFollow(FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction716); - ftsFieldGroupNot49=ftsFieldGroupNot(); + pushFollow(FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction707); + ftsFieldGroupNot50=ftsFieldGroupNot(); state._fsp--; - stream_ftsFieldGroupNot.add(ftsFieldGroupNot49.getTree()); + stream_ftsFieldGroupNot.add(ftsFieldGroupNot50.getTree()); } break; @@ -2024,9 +2064,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 170:3: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) + // 220:3: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:170:6: ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:220:6: ^( FIELD_CONJUNCTION ( ftsFieldGroupNot )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_CONJUNCTION, "FIELD_CONJUNCTION"), root_1); @@ -2054,11 +2094,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2072,31 +2111,31 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupNot - // W:\\workspace-cmis\\ANTLR\\FTS.g:174:1: ftsFieldGroupNot : ( MINUS ftsFieldGroupTest -> FIELD_NEGATION ftsFieldGroupTest | ftsFieldGroupTest -> ftsFieldGroupTest ); + // W:\\workspace-cmis\\ANTLR\\FTS.g:224:1: ftsFieldGroupNot : ( MINUS ftsFieldGroupTest -> FIELD_NEGATION ftsFieldGroupTest | ftsFieldGroupTest -> ftsFieldGroupTest ); public final FTSParser.ftsFieldGroupNot_return ftsFieldGroupNot() throws RecognitionException { FTSParser.ftsFieldGroupNot_return retval = new FTSParser.ftsFieldGroupNot_return(); retval.start = input.LT(1); Object root_0 = null; - Token MINUS50=null; - FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest51 = null; - + Token MINUS51=null; FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest52 = null; + FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest53 = null; - Object MINUS50_tree=null; + + Object MINUS51_tree=null; RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS"); RewriteRuleSubtreeStream stream_ftsFieldGroupTest=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTest"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:174:19: ( MINUS ftsFieldGroupTest -> FIELD_NEGATION ftsFieldGroupTest | ftsFieldGroupTest -> ftsFieldGroupTest ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:224:19: ( MINUS ftsFieldGroupTest -> FIELD_NEGATION ftsFieldGroupTest | ftsFieldGroupTest -> ftsFieldGroupTest ) int alt15=2; int LA15_0 = input.LA(1); if ( (LA15_0==MINUS) ) { alt15=1; } - else if ( (LA15_0==LPAREN||(LA15_0>=FTSWORD && LA15_0<=TILDA)) ) { + else if ( (LA15_0==LPAREN||(LA15_0>=PLUS && LA15_0<=TILDA)||(LA15_0>=ID && LA15_0<=FTSWORD)) ) { alt15=2; } else { @@ -2107,43 +2146,12 @@ public class FTSParser extends Parser { } switch (alt15) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:174:21: MINUS ftsFieldGroupTest + // W:\\workspace-cmis\\ANTLR\\FTS.g:224:21: MINUS ftsFieldGroupTest { - MINUS50=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsFieldGroupNot743); - stream_MINUS.add(MINUS50); + MINUS51=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsFieldGroupNot734); + stream_MINUS.add(MINUS51); - pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot745); - ftsFieldGroupTest51=ftsFieldGroupTest(); - - state._fsp--; - - stream_ftsFieldGroupTest.add(ftsFieldGroupTest51.getTree()); - - - // AST REWRITE - // elements: ftsFieldGroupTest - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 175:4: -> FIELD_NEGATION ftsFieldGroupTest - { - adaptor.addChild(root_0, (Object)adaptor.create(FIELD_NEGATION, "FIELD_NEGATION")); - adaptor.addChild(root_0, stream_ftsFieldGroupTest.nextTree()); - - } - - retval.tree = root_0;retval.tree = root_0; - } - break; - case 2 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:176:5: ftsFieldGroupTest - { - pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot760); + pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot736); ftsFieldGroupTest52=ftsFieldGroupTest(); state._fsp--; @@ -2161,7 +2169,38 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 177:4: -> ftsFieldGroupTest + // 225:4: -> FIELD_NEGATION ftsFieldGroupTest + { + adaptor.addChild(root_0, (Object)adaptor.create(FIELD_NEGATION, "FIELD_NEGATION")); + adaptor.addChild(root_0, stream_ftsFieldGroupTest.nextTree()); + + } + + retval.tree = root_0;retval.tree = root_0; + } + break; + case 2 : + // W:\\workspace-cmis\\ANTLR\\FTS.g:226:5: ftsFieldGroupTest + { + pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot751); + ftsFieldGroupTest53=ftsFieldGroupTest(); + + state._fsp--; + + stream_ftsFieldGroupTest.add(ftsFieldGroupTest53.getTree()); + + + // AST REWRITE + // elements: ftsFieldGroupTest + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 227:4: -> ftsFieldGroupTest { adaptor.addChild(root_0, stream_ftsFieldGroupTest.nextTree()); @@ -2178,11 +2217,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2196,32 +2234,32 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupTest - // W:\\workspace-cmis\\ANTLR\\FTS.g:181:1: ftsFieldGroupTest : ( ftsFieldGroupTerm -> ^( FG_TERM ftsFieldGroupTerm ) | ftsFieldGroupExactTerm -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) | ftsFieldGroupPhrase -> ^( FG_PHRASE ftsFieldGroupPhrase ) | ftsFieldGroupSynonym -> ^( FG_SYNONYM ftsFieldGroupSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction ); + // W:\\workspace-cmis\\ANTLR\\FTS.g:231:1: ftsFieldGroupTest : ( ftsFieldGroupTerm -> ^( FG_TERM ftsFieldGroupTerm ) | ftsFieldGroupExactTerm -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) | ftsFieldGroupPhrase -> ^( FG_PHRASE ftsFieldGroupPhrase ) | ftsFieldGroupSynonym -> ^( FG_SYNONYM ftsFieldGroupSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction ); public final FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest() throws RecognitionException { FTSParser.ftsFieldGroupTest_return retval = new FTSParser.ftsFieldGroupTest_return(); retval.start = input.LT(1); Object root_0 = null; - Token LPAREN59=null; - Token RPAREN61=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm53 = null; + Token LPAREN60=null; + Token RPAREN62=null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm54 = null; - FTSParser.ftsFieldGroupExactTerm_return ftsFieldGroupExactTerm54 = null; + FTSParser.ftsFieldGroupExactTerm_return ftsFieldGroupExactTerm55 = null; - FTSParser.ftsFieldGroupPhrase_return ftsFieldGroupPhrase55 = null; + FTSParser.ftsFieldGroupPhrase_return ftsFieldGroupPhrase56 = null; - FTSParser.ftsFieldGroupSynonym_return ftsFieldGroupSynonym56 = null; + FTSParser.ftsFieldGroupSynonym_return ftsFieldGroupSynonym57 = null; - FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity57 = null; + FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity58 = null; - FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange58 = null; + FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange59 = null; - FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return ftsFieldGroupImplicitConjunctionOrDisjunction60 = null; + FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return ftsFieldGroupImplicitConjunctionOrDisjunction61 = null; - Object LPAREN59_tree=null; - Object RPAREN61_tree=null; + Object LPAREN60_tree=null; + Object RPAREN62_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_ftsFieldGroupRange=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupRange"); @@ -2232,12 +2270,18 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_ftsFieldGroupExactTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupExactTerm"); RewriteRuleSubtreeStream stream_ftsFieldGroupProximity=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupProximity"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:182:2: ( ftsFieldGroupTerm -> ^( FG_TERM ftsFieldGroupTerm ) | ftsFieldGroupExactTerm -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) | ftsFieldGroupPhrase -> ^( FG_PHRASE ftsFieldGroupPhrase ) | ftsFieldGroupSynonym -> ^( FG_SYNONYM ftsFieldGroupSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:232:2: ( ftsFieldGroupTerm -> ^( FG_TERM ftsFieldGroupTerm ) | ftsFieldGroupExactTerm -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) | ftsFieldGroupPhrase -> ^( FG_PHRASE ftsFieldGroupPhrase ) | ftsFieldGroupSynonym -> ^( FG_SYNONYM ftsFieldGroupSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction ) int alt16=7; switch ( input.LA(1) ) { + case ID: case FTSWORD: { switch ( input.LA(2) ) { + case DOTDOT: + { + alt16=6; + } + break; case STAR: { alt16=5; @@ -2248,19 +2292,15 @@ public class FTSParser extends Parser { case MINUS: case LPAREN: case RPAREN: - case FTSWORD: case PLUS: case FTSPHRASE: case TILDA: + case ID: + case FTSWORD: { alt16=1; } break; - case DOTDOT: - { - alt16=6; - } - break; default: NoViableAltException nvae = new NoViableAltException("", 16, 1, input); @@ -2299,14 +2339,14 @@ public class FTSParser extends Parser { switch (alt16) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:182:4: ftsFieldGroupTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:232:4: ftsFieldGroupTerm { - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupTest779); - ftsFieldGroupTerm53=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupTest770); + ftsFieldGroupTerm54=ftsFieldGroupTerm(); state._fsp--; - stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm53.getTree()); + stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm54.getTree()); // AST REWRITE @@ -2319,9 +2359,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 183:3: -> ^( FG_TERM ftsFieldGroupTerm ) + // 233:3: -> ^( FG_TERM ftsFieldGroupTerm ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:183:6: ^( FG_TERM ftsFieldGroupTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:233:6: ^( FG_TERM ftsFieldGroupTerm ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_TERM, "FG_TERM"), root_1); @@ -2337,14 +2377,14 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:184:4: ftsFieldGroupExactTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:234:4: ftsFieldGroupExactTerm { - pushFollow(FOLLOW_ftsFieldGroupExactTerm_in_ftsFieldGroupTest794); - ftsFieldGroupExactTerm54=ftsFieldGroupExactTerm(); + pushFollow(FOLLOW_ftsFieldGroupExactTerm_in_ftsFieldGroupTest785); + ftsFieldGroupExactTerm55=ftsFieldGroupExactTerm(); state._fsp--; - stream_ftsFieldGroupExactTerm.add(ftsFieldGroupExactTerm54.getTree()); + stream_ftsFieldGroupExactTerm.add(ftsFieldGroupExactTerm55.getTree()); // AST REWRITE @@ -2357,9 +2397,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 185:3: -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) + // 235:3: -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:185:6: ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:235:6: ^( FG_EXACT_TERM ftsFieldGroupExactTerm ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_EXACT_TERM, "FG_EXACT_TERM"), root_1); @@ -2375,14 +2415,14 @@ public class FTSParser extends Parser { } break; case 3 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:186:4: ftsFieldGroupPhrase + // W:\\workspace-cmis\\ANTLR\\FTS.g:236:4: ftsFieldGroupPhrase { - pushFollow(FOLLOW_ftsFieldGroupPhrase_in_ftsFieldGroupTest810); - ftsFieldGroupPhrase55=ftsFieldGroupPhrase(); + pushFollow(FOLLOW_ftsFieldGroupPhrase_in_ftsFieldGroupTest801); + ftsFieldGroupPhrase56=ftsFieldGroupPhrase(); state._fsp--; - stream_ftsFieldGroupPhrase.add(ftsFieldGroupPhrase55.getTree()); + stream_ftsFieldGroupPhrase.add(ftsFieldGroupPhrase56.getTree()); // AST REWRITE @@ -2395,9 +2435,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 187:3: -> ^( FG_PHRASE ftsFieldGroupPhrase ) + // 237:3: -> ^( FG_PHRASE ftsFieldGroupPhrase ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:187:6: ^( FG_PHRASE ftsFieldGroupPhrase ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:237:6: ^( FG_PHRASE ftsFieldGroupPhrase ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_PHRASE, "FG_PHRASE"), root_1); @@ -2413,14 +2453,14 @@ public class FTSParser extends Parser { } break; case 4 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:188:4: ftsFieldGroupSynonym + // W:\\workspace-cmis\\ANTLR\\FTS.g:238:4: ftsFieldGroupSynonym { - pushFollow(FOLLOW_ftsFieldGroupSynonym_in_ftsFieldGroupTest825); - ftsFieldGroupSynonym56=ftsFieldGroupSynonym(); + pushFollow(FOLLOW_ftsFieldGroupSynonym_in_ftsFieldGroupTest816); + ftsFieldGroupSynonym57=ftsFieldGroupSynonym(); state._fsp--; - stream_ftsFieldGroupSynonym.add(ftsFieldGroupSynonym56.getTree()); + stream_ftsFieldGroupSynonym.add(ftsFieldGroupSynonym57.getTree()); // AST REWRITE @@ -2433,9 +2473,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 189:3: -> ^( FG_SYNONYM ftsFieldGroupSynonym ) + // 239:3: -> ^( FG_SYNONYM ftsFieldGroupSynonym ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:189:6: ^( FG_SYNONYM ftsFieldGroupSynonym ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:239:6: ^( FG_SYNONYM ftsFieldGroupSynonym ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_SYNONYM, "FG_SYNONYM"), root_1); @@ -2451,14 +2491,14 @@ public class FTSParser extends Parser { } break; case 5 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:190:10: ftsFieldGroupProximity + // W:\\workspace-cmis\\ANTLR\\FTS.g:240:6: ftsFieldGroupProximity { - pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsFieldGroupTest846); - ftsFieldGroupProximity57=ftsFieldGroupProximity(); + pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsFieldGroupTest833); + ftsFieldGroupProximity58=ftsFieldGroupProximity(); state._fsp--; - stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity57.getTree()); + stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity58.getTree()); // AST REWRITE @@ -2471,9 +2511,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 191:3: -> ^( FG_PROXIMITY ftsFieldGroupProximity ) + // 241:3: -> ^( FG_PROXIMITY ftsFieldGroupProximity ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:191:6: ^( FG_PROXIMITY ftsFieldGroupProximity ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:241:6: ^( FG_PROXIMITY ftsFieldGroupProximity ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_PROXIMITY, "FG_PROXIMITY"), root_1); @@ -2489,14 +2529,14 @@ public class FTSParser extends Parser { } break; case 6 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:192:12: ftsFieldGroupRange + // W:\\workspace-cmis\\ANTLR\\FTS.g:242:8: ftsFieldGroupRange { - pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsFieldGroupTest871); - ftsFieldGroupRange58=ftsFieldGroupRange(); + pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsFieldGroupTest854); + ftsFieldGroupRange59=ftsFieldGroupRange(); state._fsp--; - stream_ftsFieldGroupRange.add(ftsFieldGroupRange58.getTree()); + stream_ftsFieldGroupRange.add(ftsFieldGroupRange59.getTree()); // AST REWRITE @@ -2509,9 +2549,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 193:10: -> ^( FG_RANGE ftsFieldGroupRange ) + // 243:9: -> ^( FG_RANGE ftsFieldGroupRange ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:193:13: ^( FG_RANGE ftsFieldGroupRange ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:243:12: ^( FG_RANGE ftsFieldGroupRange ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_RANGE, "FG_RANGE"), root_1); @@ -2527,19 +2567,19 @@ public class FTSParser extends Parser { } break; case 7 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:194:4: LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN + // W:\\workspace-cmis\\ANTLR\\FTS.g:244:4: LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN { - LPAREN59=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroupTest893); - stream_LPAREN.add(LPAREN59); + LPAREN60=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroupTest875); + stream_LPAREN.add(LPAREN60); - pushFollow(FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroupTest895); - ftsFieldGroupImplicitConjunctionOrDisjunction60=ftsFieldGroupImplicitConjunctionOrDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroupTest877); + ftsFieldGroupImplicitConjunctionOrDisjunction61=ftsFieldGroupImplicitConjunctionOrDisjunction(); state._fsp--; - stream_ftsFieldGroupImplicitConjunctionOrDisjunction.add(ftsFieldGroupImplicitConjunctionOrDisjunction60.getTree()); - RPAREN61=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroupTest897); - stream_RPAREN.add(RPAREN61); + stream_ftsFieldGroupImplicitConjunctionOrDisjunction.add(ftsFieldGroupImplicitConjunctionOrDisjunction61.getTree()); + RPAREN62=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroupTest879); + stream_RPAREN.add(RPAREN62); @@ -2553,7 +2593,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 195:3: -> ftsFieldGroupImplicitConjunctionOrDisjunction + // 245:3: -> ftsFieldGroupImplicitConjunctionOrDisjunction { adaptor.addChild(root_0, stream_ftsFieldGroupImplicitConjunctionOrDisjunction.nextTree()); @@ -2570,11 +2610,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2588,27 +2627,29 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupTerm - // W:\\workspace-cmis\\ANTLR\\FTS.g:198:1: ftsFieldGroupTerm : FTSWORD ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:248:1: ftsFieldGroupTerm : ftsWord ; public final FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm() throws RecognitionException { FTSParser.ftsFieldGroupTerm_return retval = new FTSParser.ftsFieldGroupTerm_return(); retval.start = input.LT(1); Object root_0 = null; - Token FTSWORD62=null; + FTSParser.ftsWord_return ftsWord63 = null; + - Object FTSWORD62_tree=null; try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:199:2: ( FTSWORD ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:199:4: FTSWORD + // W:\\workspace-cmis\\ANTLR\\FTS.g:249:2: ( ftsWord ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:249:4: ftsWord { root_0 = (Object)adaptor.nil(); - FTSWORD62=(Token)match(input,FTSWORD,FOLLOW_FTSWORD_in_ftsFieldGroupTerm915); - FTSWORD62_tree = (Object)adaptor.create(FTSWORD62); - adaptor.addChild(root_0, FTSWORD62_tree); + pushFollow(FOLLOW_ftsWord_in_ftsFieldGroupTerm897); + ftsWord63=ftsWord(); + state._fsp--; + + adaptor.addChild(root_0, ftsWord63.getTree()); } @@ -2618,11 +2659,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2636,33 +2676,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupExactTerm - // W:\\workspace-cmis\\ANTLR\\FTS.g:202:1: ftsFieldGroupExactTerm : PLUS ftsFieldGroupTerm -> ftsFieldGroupTerm ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:252:1: ftsFieldGroupExactTerm : PLUS ftsFieldGroupTerm -> ftsFieldGroupTerm ; public final FTSParser.ftsFieldGroupExactTerm_return ftsFieldGroupExactTerm() throws RecognitionException { FTSParser.ftsFieldGroupExactTerm_return retval = new FTSParser.ftsFieldGroupExactTerm_return(); retval.start = input.LT(1); Object root_0 = null; - Token PLUS63=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm64 = null; + Token PLUS64=null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm65 = null; - Object PLUS63_tree=null; + Object PLUS64_tree=null; RewriteRuleTokenStream stream_PLUS=new RewriteRuleTokenStream(adaptor,"token PLUS"); RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:203:2: ( PLUS ftsFieldGroupTerm -> ftsFieldGroupTerm ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:203:4: PLUS ftsFieldGroupTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:253:2: ( PLUS ftsFieldGroupTerm -> ftsFieldGroupTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:253:4: PLUS ftsFieldGroupTerm { - PLUS63=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsFieldGroupExactTerm927); - stream_PLUS.add(PLUS63); + PLUS64=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsFieldGroupExactTerm909); + stream_PLUS.add(PLUS64); - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupExactTerm929); - ftsFieldGroupTerm64=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupExactTerm911); + ftsFieldGroupTerm65=ftsFieldGroupTerm(); state._fsp--; - stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm64.getTree()); + stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm65.getTree()); // AST REWRITE @@ -2675,7 +2715,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 204:3: -> ftsFieldGroupTerm + // 254:3: -> ftsFieldGroupTerm { adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); @@ -2690,11 +2730,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2708,26 +2747,26 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupPhrase - // W:\\workspace-cmis\\ANTLR\\FTS.g:207:1: ftsFieldGroupPhrase : FTSPHRASE ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:257:1: ftsFieldGroupPhrase : FTSPHRASE ; public final FTSParser.ftsFieldGroupPhrase_return ftsFieldGroupPhrase() throws RecognitionException { FTSParser.ftsFieldGroupPhrase_return retval = new FTSParser.ftsFieldGroupPhrase_return(); retval.start = input.LT(1); Object root_0 = null; - Token FTSPHRASE65=null; + Token FTSPHRASE66=null; - Object FTSPHRASE65_tree=null; + Object FTSPHRASE66_tree=null; try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:208:2: ( FTSPHRASE ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:208:6: FTSPHRASE + // W:\\workspace-cmis\\ANTLR\\FTS.g:258:2: ( FTSPHRASE ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:258:6: FTSPHRASE { root_0 = (Object)adaptor.nil(); - FTSPHRASE65=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsFieldGroupPhrase949); - FTSPHRASE65_tree = (Object)adaptor.create(FTSPHRASE65); - adaptor.addChild(root_0, FTSPHRASE65_tree); + FTSPHRASE66=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsFieldGroupPhrase931); + FTSPHRASE66_tree = (Object)adaptor.create(FTSPHRASE66); + adaptor.addChild(root_0, FTSPHRASE66_tree); } @@ -2738,11 +2777,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2756,33 +2794,33 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupSynonym - // W:\\workspace-cmis\\ANTLR\\FTS.g:211:1: ftsFieldGroupSynonym : TILDA ftsFieldGroupTerm -> ftsFieldGroupTerm ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:261:1: ftsFieldGroupSynonym : TILDA ftsFieldGroupTerm -> ftsFieldGroupTerm ; public final FTSParser.ftsFieldGroupSynonym_return ftsFieldGroupSynonym() throws RecognitionException { FTSParser.ftsFieldGroupSynonym_return retval = new FTSParser.ftsFieldGroupSynonym_return(); retval.start = input.LT(1); Object root_0 = null; - Token TILDA66=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm67 = null; + Token TILDA67=null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm68 = null; - Object TILDA66_tree=null; + Object TILDA67_tree=null; RewriteRuleTokenStream stream_TILDA=new RewriteRuleTokenStream(adaptor,"token TILDA"); RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:212:2: ( TILDA ftsFieldGroupTerm -> ftsFieldGroupTerm ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:212:4: TILDA ftsFieldGroupTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:262:2: ( TILDA ftsFieldGroupTerm -> ftsFieldGroupTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:262:4: TILDA ftsFieldGroupTerm { - TILDA66=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsFieldGroupSynonym961); - stream_TILDA.add(TILDA66); + TILDA67=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsFieldGroupSynonym943); + stream_TILDA.add(TILDA67); - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupSynonym963); - ftsFieldGroupTerm67=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupSynonym945); + ftsFieldGroupTerm68=ftsFieldGroupTerm(); state._fsp--; - stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm67.getTree()); + stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm68.getTree()); // AST REWRITE @@ -2795,7 +2833,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 213:3: -> ftsFieldGroupTerm + // 263:3: -> ftsFieldGroupTerm { adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); @@ -2810,11 +2848,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2828,41 +2865,41 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupProximity - // W:\\workspace-cmis\\ANTLR\\FTS.g:216:1: ftsFieldGroupProximity : ftsFieldGroupTerm STAR ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:266:1: ftsFieldGroupProximity : ftsFieldGroupTerm STAR ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ; public final FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity() throws RecognitionException { FTSParser.ftsFieldGroupProximity_return retval = new FTSParser.ftsFieldGroupProximity_return(); retval.start = input.LT(1); Object root_0 = null; - Token STAR69=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm68 = null; + Token STAR70=null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm69 = null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm70 = null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm71 = null; - Object STAR69_tree=null; + Object STAR70_tree=null; RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR"); RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:217:2: ( ftsFieldGroupTerm STAR ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:217:4: ftsFieldGroupTerm STAR ftsFieldGroupTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:267:2: ( ftsFieldGroupTerm STAR ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:267:4: ftsFieldGroupTerm STAR ftsFieldGroupTerm { - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity981); - ftsFieldGroupTerm68=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity963); + ftsFieldGroupTerm69=ftsFieldGroupTerm(); state._fsp--; - stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm68.getTree()); - STAR69=(Token)match(input,STAR,FOLLOW_STAR_in_ftsFieldGroupProximity983); - stream_STAR.add(STAR69); + stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm69.getTree()); + STAR70=(Token)match(input,STAR,FOLLOW_STAR_in_ftsFieldGroupProximity965); + stream_STAR.add(STAR70); - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity985); - ftsFieldGroupTerm70=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity967); + ftsFieldGroupTerm71=ftsFieldGroupTerm(); state._fsp--; - stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm70.getTree()); + stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm71.getTree()); // AST REWRITE @@ -2875,7 +2912,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 218:3: -> ftsFieldGroupTerm ftsFieldGroupTerm + // 268:3: -> ftsFieldGroupTerm ftsFieldGroupTerm { adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); @@ -2891,11 +2928,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2909,41 +2945,41 @@ public class FTSParser extends Parser { }; // $ANTLR start ftsFieldGroupRange - // W:\\workspace-cmis\\ANTLR\\FTS.g:221:1: ftsFieldGroupRange : ftsFieldGroupTerm DOTDOT ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:271:1: ftsFieldGroupRange : ftsFieldGroupTerm DOTDOT ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ; public final FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange() throws RecognitionException { FTSParser.ftsFieldGroupRange_return retval = new FTSParser.ftsFieldGroupRange_return(); retval.start = input.LT(1); Object root_0 = null; - Token DOTDOT72=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm71 = null; + Token DOTDOT73=null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm72 = null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm73 = null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm74 = null; - Object DOTDOT72_tree=null; + Object DOTDOT73_tree=null; RewriteRuleTokenStream stream_DOTDOT=new RewriteRuleTokenStream(adaptor,"token DOTDOT"); RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:221:19: ( ftsFieldGroupTerm DOTDOT ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:221:21: ftsFieldGroupTerm DOTDOT ftsFieldGroupTerm + // W:\\workspace-cmis\\ANTLR\\FTS.g:271:19: ( ftsFieldGroupTerm DOTDOT ftsFieldGroupTerm -> ftsFieldGroupTerm ftsFieldGroupTerm ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:271:21: ftsFieldGroupTerm DOTDOT ftsFieldGroupTerm { - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange1003); - ftsFieldGroupTerm71=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange985); + ftsFieldGroupTerm72=ftsFieldGroupTerm(); state._fsp--; - stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm71.getTree()); - DOTDOT72=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_ftsFieldGroupRange1005); - stream_DOTDOT.add(DOTDOT72); + stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm72.getTree()); + DOTDOT73=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_ftsFieldGroupRange987); + stream_DOTDOT.add(DOTDOT73); - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange1007); - ftsFieldGroupTerm73=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange989); + ftsFieldGroupTerm74=ftsFieldGroupTerm(); state._fsp--; - stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm73.getTree()); + stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm74.getTree()); // AST REWRITE @@ -2956,7 +2992,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 222:3: -> ftsFieldGroupTerm ftsFieldGroupTerm + // 272:3: -> ftsFieldGroupTerm ftsFieldGroupTerm { adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); @@ -2972,11 +3008,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -2990,27 +3025,27 @@ public class FTSParser extends Parser { }; // $ANTLR start columnReference - // W:\\workspace-cmis\\ANTLR\\FTS.g:225:1: columnReference : (qualifier= identifier DOT )? name= identifier -> ^( COLUMN_REF $name ( $qualifier)? ) ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:275:1: columnReference : (qualifier= identifier DOT )? name= identifier -> ^( COLUMN_REF $name ( $qualifier)? ) ; public final FTSParser.columnReference_return columnReference() throws RecognitionException { FTSParser.columnReference_return retval = new FTSParser.columnReference_return(); retval.start = input.LT(1); Object root_0 = null; - Token DOT74=null; + Token DOT75=null; FTSParser.identifier_return qualifier = null; FTSParser.identifier_return name = null; - Object DOT74_tree=null; + Object DOT75_tree=null; RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:226:2: ( (qualifier= identifier DOT )? name= identifier -> ^( COLUMN_REF $name ( $qualifier)? ) ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:226:4: (qualifier= identifier DOT )? name= identifier + // W:\\workspace-cmis\\ANTLR\\FTS.g:276:2: ( (qualifier= identifier DOT )? name= identifier -> ^( COLUMN_REF $name ( $qualifier)? ) ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:276:4: (qualifier= identifier DOT )? name= identifier { - // W:\\workspace-cmis\\ANTLR\\FTS.g:226:4: (qualifier= identifier DOT )? + // W:\\workspace-cmis\\ANTLR\\FTS.g:276:4: (qualifier= identifier DOT )? int alt17=2; int LA17_0 = input.LA(1); @@ -3023,16 +3058,16 @@ public class FTSParser extends Parser { } switch (alt17) { case 1 : - // W:\\workspace-cmis\\ANTLR\\FTS.g:226:6: qualifier= identifier DOT + // W:\\workspace-cmis\\ANTLR\\FTS.g:276:6: qualifier= identifier DOT { - pushFollow(FOLLOW_identifier_in_columnReference1031); + pushFollow(FOLLOW_identifier_in_columnReference1013); qualifier=identifier(); state._fsp--; stream_identifier.add(qualifier.getTree()); - DOT74=(Token)match(input,DOT,FOLLOW_DOT_in_columnReference1033); - stream_DOT.add(DOT74); + DOT75=(Token)match(input,DOT,FOLLOW_DOT_in_columnReference1015); + stream_DOT.add(DOT75); } @@ -3040,7 +3075,7 @@ public class FTSParser extends Parser { } - pushFollow(FOLLOW_identifier_in_columnReference1040); + pushFollow(FOLLOW_identifier_in_columnReference1022); name=identifier(); state._fsp--; @@ -3060,15 +3095,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"token qualifier",qualifier!=null?qualifier.tree:null); root_0 = (Object)adaptor.nil(); - // 227:3: -> ^( COLUMN_REF $name ( $qualifier)? ) + // 277:3: -> ^( COLUMN_REF $name ( $qualifier)? ) { - // W:\\workspace-cmis\\ANTLR\\FTS.g:227:6: ^( COLUMN_REF $name ( $qualifier)? ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:277:6: ^( COLUMN_REF $name ( $qualifier)? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN_REF, "COLUMN_REF"), root_1); adaptor.addChild(root_1, stream_name.nextTree()); - // W:\\workspace-cmis\\ANTLR\\FTS.g:227:25: ( $qualifier)? + // W:\\workspace-cmis\\ANTLR\\FTS.g:277:25: ( $qualifier)? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -3089,11 +3124,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -3107,26 +3141,26 @@ public class FTSParser extends Parser { }; // $ANTLR start identifier - // W:\\workspace-cmis\\ANTLR\\FTS.g:230:1: identifier : ID ; + // W:\\workspace-cmis\\ANTLR\\FTS.g:280:1: identifier : ID ; public final FTSParser.identifier_return identifier() throws RecognitionException { FTSParser.identifier_return retval = new FTSParser.identifier_return(); retval.start = input.LT(1); Object root_0 = null; - Token ID75=null; + Token ID76=null; - Object ID75_tree=null; + Object ID76_tree=null; try { - // W:\\workspace-cmis\\ANTLR\\FTS.g:231:2: ( ID ) - // W:\\workspace-cmis\\ANTLR\\FTS.g:231:4: ID + // W:\\workspace-cmis\\ANTLR\\FTS.g:281:2: ( ID ) + // W:\\workspace-cmis\\ANTLR\\FTS.g:281:4: ID { root_0 = (Object)adaptor.nil(); - ID75=(Token)match(input,ID,FOLLOW_ID_in_identifier1067); - ID75_tree = (Object)adaptor.create(ID75); - adaptor.addChild(root_0, ID75_tree); + ID76=(Token)match(input,ID,FOLLOW_ID_in_identifier1050); + ID76_tree = (Object)adaptor.create(ID76); + adaptor.addChild(root_0, ID76_tree); } @@ -3137,11 +3171,10 @@ public class FTSParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } - catch (RecognitionException re) { - reportError(re); - recover(input,re); - retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re); + catch(RecognitionException e) + { + throw e; } finally { } @@ -3149,6 +3182,60 @@ public class FTSParser extends Parser { } // $ANTLR end identifier + public static class ftsWord_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start ftsWord + // W:\\workspace-cmis\\ANTLR\\FTS.g:284:1: ftsWord : ( ID | FTSWORD ); + public final FTSParser.ftsWord_return ftsWord() throws RecognitionException { + FTSParser.ftsWord_return retval = new FTSParser.ftsWord_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + Token set77=null; + + Object set77_tree=null; + + try { + // W:\\workspace-cmis\\ANTLR\\FTS.g:285:5: ( ID | FTSWORD ) + // W:\\workspace-cmis\\ANTLR\\FTS.g: + { + root_0 = (Object)adaptor.nil(); + + set77=(Token)input.LT(1); + if ( (input.LA(1)>=ID && input.LA(1)<=FTSWORD) ) { + input.consume(); + adaptor.addChild(root_0, (Object)adaptor.create(set77)); + state.errorRecovery=false; + } + else { + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + retval.tree = (Object)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + + } + + catch(RecognitionException e) + { + throw e; + } + finally { + } + return retval; + } + // $ANTLR end ftsWord + // Delegated rules @@ -3167,7 +3254,7 @@ public class FTSParser extends Parser { static final String DFA3_specialS = "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\2\uffff}>"; static final String[] DFA3_transitionS = { - "\1\1\1\7\2\uffff\1\3\1\4\1\5\1\6\3\uffff\1\2", + "\1\1\1\7\2\uffff\1\4\1\5\1\6\3\uffff\1\2\1\3", "\1\uffff", "\1\uffff", "\1\uffff", @@ -3209,7 +3296,7 @@ public class FTSParser extends Parser { this.transition = DFA3_transition; } public String getDescription() { - return "89:1: ftsImplicitConjunctionOrDisjunction : ({...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) );"; + return "137:1: ftsImplicitConjunctionOrDisjunction : ({...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; @@ -3330,30 +3417,30 @@ public class FTSParser extends Parser { static final String DFA7_eotS = "\16\uffff"; static final String DFA7_eofS = - "\2\uffff\1\11\13\uffff"; + "\1\uffff\2\13\13\uffff"; static final String DFA7_minS = - "\1\32\1\34\1\27\4\uffff\1\44\1\32\3\uffff\1\34\1\uffff"; + "\1\32\2\27\6\uffff\1\32\1\43\2\uffff\1\34"; static final String DFA7_maxS = - "\1\44\1\43\1\44\4\uffff\1\44\1\37\3\uffff\1\34\1\uffff"; + "\3\44\6\uffff\1\44\1\43\2\uffff\1\34"; static final String DFA7_acceptS = - "\3\uffff\1\2\1\3\1\4\1\10\2\uffff\1\1\1\5\1\6\1\uffff\1\7"; + "\3\uffff\1\2\1\3\1\4\1\10\1\6\1\5\2\uffff\1\1\1\7\1\uffff"; static final String DFA7_specialS = "\16\uffff}>"; static final String[] DFA7_transitionS = { - "\1\6\2\uffff\1\2\1\3\1\4\1\5\3\uffff\1\1", - "\1\10\6\uffff\1\7", - "\5\11\1\uffff\4\11\1\12\1\13\1\uffff\1\11", + "\1\6\2\uffff\1\3\1\4\1\5\3\uffff\1\1\1\2", + "\5\13\1\11\3\13\1\10\1\7\1\12\2\13", + "\5\13\1\uffff\3\13\1\10\1\7\1\uffff\2\13", "", "", "", "", - "\1\14", - "\1\15\2\uffff\1\11\1\uffff\1\4", "", "", + "\1\14\3\uffff\1\4\4\uffff\2\13", + "\1\15", "", - "\1\10", - "" + "", + "\1\11" }; static final short[] DFA7_eot = DFA.unpackEncodedString(DFA7_eotS); @@ -3386,87 +3473,89 @@ public class FTSParser extends Parser { this.transition = DFA7_transition; } public String getDescription() { - return "113:1: ftsTest : ( ftsTerm -> ^( TERM ftsTerm ) | ftsExactTerm -> ^( EXACT_TERM ftsExactTerm ) | ftsPhrase -> ^( PHRASE ftsPhrase ) | ftsSynonym -> ^( SYNONYM ftsSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction );"; + return "162:1: ftsTest : ( ftsTerm -> ^( TERM ftsTerm ) | ftsExactTerm -> ^( EXACT_TERM ftsExactTerm ) | ftsPhrase -> ^( PHRASE ftsPhrase ) | ftsSynonym -> ^( SYNONYM ftsSynonym ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction );"; } } - public static final BitSet FOLLOW_ftsImplicitConjunctionOrDisjunction_in_fts135 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction157 = new BitSet(new long[]{0x00000011E6000000L}); - public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction160 = new BitSet(new long[]{0x00000011E6000002L}); - public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction179 = new BitSet(new long[]{0x00000011E6000000L}); - public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction182 = new BitSet(new long[]{0x00000011E6000002L}); - public static final BitSet FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction207 = new BitSet(new long[]{0x0000000000800002L}); - public static final BitSet FOLLOW_OR_in_ftsExplicitDisjunction210 = new BitSet(new long[]{0x00000011E6800000L}); - public static final BitSet FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction212 = new BitSet(new long[]{0x0000000000800002L}); - public static final BitSet FOLLOW_ftsNot_in_ftsExplictConjunction237 = new BitSet(new long[]{0x0000000001000002L}); - public static final BitSet FOLLOW_AND_in_ftsExplictConjunction240 = new BitSet(new long[]{0x00000011E7000000L}); - public static final BitSet FOLLOW_ftsNot_in_ftsExplictConjunction242 = new BitSet(new long[]{0x0000000001000002L}); - public static final BitSet FOLLOW_MINUS_in_ftsNot268 = new BitSet(new long[]{0x00000011E6000000L}); - public static final BitSet FOLLOW_ftsTest_in_ftsNot270 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsTest_in_ftsNot285 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsTerm_in_ftsTest301 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsExactTerm_in_ftsTest316 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsPhrase_in_ftsTest344 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsSynonym_in_ftsTest379 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupProximity_in_ftsTest408 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupRange_in_ftsTest440 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroup_in_ftsTest469 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_ftsTest478 = new BitSet(new long[]{0x00000011E6000000L}); - public static final BitSet FOLLOW_ftsImplicitConjunctionOrDisjunction_in_ftsTest480 = new BitSet(new long[]{0x0000000008000000L}); - public static final BitSet FOLLOW_RPAREN_in_ftsTest482 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_ftsTerm500 = new BitSet(new long[]{0x0000000010000000L}); - public static final BitSet FOLLOW_COLON_in_ftsTerm502 = new BitSet(new long[]{0x0000000020000000L}); - public static final BitSet FOLLOW_FTSWORD_in_ftsTerm506 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PLUS_in_ftsExactTerm527 = new BitSet(new long[]{0x0000001020000000L}); - public static final BitSet FOLLOW_ftsTerm_in_ftsExactTerm529 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_ftsPhrase550 = new BitSet(new long[]{0x0000000010000000L}); - public static final BitSet FOLLOW_COLON_in_ftsPhrase552 = new BitSet(new long[]{0x0000000080000000L}); - public static final BitSet FOLLOW_FTSPHRASE_in_ftsPhrase556 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TILDA_in_ftsSynonym577 = new BitSet(new long[]{0x0000001020000000L}); - public static final BitSet FOLLOW_ftsTerm_in_ftsSynonym579 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_ftsFieldGroup598 = new BitSet(new long[]{0x0000000010000000L}); - public static final BitSet FOLLOW_COLON_in_ftsFieldGroup600 = new BitSet(new long[]{0x0000000004000000L}); - public static final BitSet FOLLOW_LPAREN_in_ftsFieldGroup602 = new BitSet(new long[]{0x00000001EE000000L}); - public static final BitSet FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroup604 = new BitSet(new long[]{0x0000000008000000L}); - public static final BitSet FOLLOW_RPAREN_in_ftsFieldGroup606 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction632 = new BitSet(new long[]{0x00000001E6000000L}); - public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction635 = new BitSet(new long[]{0x00000001E6000002L}); - public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction653 = new BitSet(new long[]{0x00000001E6000000L}); - public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction656 = new BitSet(new long[]{0x00000001E6000002L}); - public static final BitSet FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction681 = new BitSet(new long[]{0x0000000000800002L}); - public static final BitSet FOLLOW_OR_in_ftsFieldGroupExplicitDisjunction684 = new BitSet(new long[]{0x00000001E6800000L}); - public static final BitSet FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction686 = new BitSet(new long[]{0x0000000000800002L}); - public static final BitSet FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction711 = new BitSet(new long[]{0x0000000001000002L}); - public static final BitSet FOLLOW_AND_in_ftsFieldGroupExplictConjunction714 = new BitSet(new long[]{0x00000001E7000000L}); - public static final BitSet FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction716 = new BitSet(new long[]{0x0000000001000002L}); - public static final BitSet FOLLOW_MINUS_in_ftsFieldGroupNot743 = new BitSet(new long[]{0x00000001E6000000L}); - public static final BitSet FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot745 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot760 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupTest779 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupExactTerm_in_ftsFieldGroupTest794 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupPhrase_in_ftsFieldGroupTest810 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupSynonym_in_ftsFieldGroupTest825 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupProximity_in_ftsFieldGroupTest846 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupRange_in_ftsFieldGroupTest871 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_ftsFieldGroupTest893 = new BitSet(new long[]{0x00000001EE000000L}); - public static final BitSet FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroupTest895 = new BitSet(new long[]{0x0000000008000000L}); - public static final BitSet FOLLOW_RPAREN_in_ftsFieldGroupTest897 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FTSWORD_in_ftsFieldGroupTerm915 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_PLUS_in_ftsFieldGroupExactTerm927 = new BitSet(new long[]{0x0000000020000000L}); - public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupExactTerm929 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FTSPHRASE_in_ftsFieldGroupPhrase949 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TILDA_in_ftsFieldGroupSynonym961 = new BitSet(new long[]{0x0000000020000000L}); - public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupSynonym963 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity981 = new BitSet(new long[]{0x0000000200000000L}); - public static final BitSet FOLLOW_STAR_in_ftsFieldGroupProximity983 = new BitSet(new long[]{0x0000000020000000L}); - public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity985 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange1003 = new BitSet(new long[]{0x0000000400000000L}); - public static final BitSet FOLLOW_DOTDOT_in_ftsFieldGroupRange1005 = new BitSet(new long[]{0x0000000020000000L}); - public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange1007 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_columnReference1031 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_DOT_in_columnReference1033 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_identifier_in_columnReference1040 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_identifier1067 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsImplicitConjunctionOrDisjunction_in_fts146 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_EOF_in_fts148 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction170 = new BitSet(new long[]{0x00000018E6000002L}); + public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction173 = new BitSet(new long[]{0x00000018E6000002L}); + public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction192 = new BitSet(new long[]{0x00000018E6000000L}); + public static final BitSet FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction195 = new BitSet(new long[]{0x00000018E6000002L}); + public static final BitSet FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction220 = new BitSet(new long[]{0x0000000000800002L}); + public static final BitSet FOLLOW_OR_in_ftsExplicitDisjunction223 = new BitSet(new long[]{0x00000018E6800000L}); + public static final BitSet FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction225 = new BitSet(new long[]{0x0000000000800002L}); + public static final BitSet FOLLOW_ftsNot_in_ftsExplictConjunction250 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_AND_in_ftsExplictConjunction253 = new BitSet(new long[]{0x00000018E7000000L}); + public static final BitSet FOLLOW_ftsNot_in_ftsExplictConjunction255 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_MINUS_in_ftsNot286 = new BitSet(new long[]{0x00000018E6000000L}); + public static final BitSet FOLLOW_ftsTest_in_ftsNot288 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsTest_in_ftsNot303 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsTerm_in_ftsTest324 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsExactTerm_in_ftsTest339 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsPhrase_in_ftsTest359 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsSynonym_in_ftsTest385 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupProximity_in_ftsTest409 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupRange_in_ftsTest436 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroup_in_ftsTest460 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_ftsTest469 = new BitSet(new long[]{0x00000018E6000000L}); + public static final BitSet FOLLOW_ftsImplicitConjunctionOrDisjunction_in_ftsTest471 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_RPAREN_in_ftsTest473 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_ftsTerm491 = new BitSet(new long[]{0x0000000010000000L}); + public static final BitSet FOLLOW_COLON_in_ftsTerm493 = new BitSet(new long[]{0x0000001800000000L}); + public static final BitSet FOLLOW_ftsWord_in_ftsTerm497 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PLUS_in_ftsExactTerm518 = new BitSet(new long[]{0x0000001800000000L}); + public static final BitSet FOLLOW_ftsTerm_in_ftsExactTerm520 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_ftsPhrase541 = new BitSet(new long[]{0x0000000010000000L}); + public static final BitSet FOLLOW_COLON_in_ftsPhrase543 = new BitSet(new long[]{0x0000000040000000L}); + public static final BitSet FOLLOW_FTSPHRASE_in_ftsPhrase547 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TILDA_in_ftsSynonym568 = new BitSet(new long[]{0x0000001800000000L}); + public static final BitSet FOLLOW_ftsTerm_in_ftsSynonym570 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_ftsFieldGroup589 = new BitSet(new long[]{0x0000000010000000L}); + public static final BitSet FOLLOW_COLON_in_ftsFieldGroup591 = new BitSet(new long[]{0x0000000004000000L}); + public static final BitSet FOLLOW_LPAREN_in_ftsFieldGroup593 = new BitSet(new long[]{0x00000018E6000000L}); + public static final BitSet FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroup595 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_RPAREN_in_ftsFieldGroup597 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction623 = new BitSet(new long[]{0x00000018E6000002L}); + public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction626 = new BitSet(new long[]{0x00000018E6000002L}); + public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction644 = new BitSet(new long[]{0x00000018E6000000L}); + public static final BitSet FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction647 = new BitSet(new long[]{0x00000018E6000002L}); + public static final BitSet FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction672 = new BitSet(new long[]{0x0000000000800002L}); + public static final BitSet FOLLOW_OR_in_ftsFieldGroupExplicitDisjunction675 = new BitSet(new long[]{0x00000018E6800000L}); + public static final BitSet FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction677 = new BitSet(new long[]{0x0000000000800002L}); + public static final BitSet FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction702 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_AND_in_ftsFieldGroupExplictConjunction705 = new BitSet(new long[]{0x00000018E7000000L}); + public static final BitSet FOLLOW_ftsFieldGroupNot_in_ftsFieldGroupExplictConjunction707 = new BitSet(new long[]{0x0000000001000002L}); + public static final BitSet FOLLOW_MINUS_in_ftsFieldGroupNot734 = new BitSet(new long[]{0x00000018E6000000L}); + public static final BitSet FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot736 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupNot751 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupTest770 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupExactTerm_in_ftsFieldGroupTest785 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupPhrase_in_ftsFieldGroupTest801 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupSynonym_in_ftsFieldGroupTest816 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupProximity_in_ftsFieldGroupTest833 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupRange_in_ftsFieldGroupTest854 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_ftsFieldGroupTest875 = new BitSet(new long[]{0x00000018EE000000L}); + public static final BitSet FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroupTest877 = new BitSet(new long[]{0x0000000008000000L}); + public static final BitSet FOLLOW_RPAREN_in_ftsFieldGroupTest879 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsWord_in_ftsFieldGroupTerm897 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_PLUS_in_ftsFieldGroupExactTerm909 = new BitSet(new long[]{0x0000001800000000L}); + public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupExactTerm911 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FTSPHRASE_in_ftsFieldGroupPhrase931 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TILDA_in_ftsFieldGroupSynonym943 = new BitSet(new long[]{0x0000001800000000L}); + public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupSynonym945 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity963 = new BitSet(new long[]{0x0000000100000000L}); + public static final BitSet FOLLOW_STAR_in_ftsFieldGroupProximity965 = new BitSet(new long[]{0x0000001800000000L}); + public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity967 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange985 = new BitSet(new long[]{0x0000000200000000L}); + public static final BitSet FOLLOW_DOTDOT_in_ftsFieldGroupRange987 = new BitSet(new long[]{0x0000001800000000L}); + public static final BitSet FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupRange989 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_columnReference1013 = new BitSet(new long[]{0x0000000400000000L}); + public static final BitSet FOLLOW_DOT_in_columnReference1015 = new BitSet(new long[]{0x0000000800000000L}); + public static final BitSet FOLLOW_identifier_in_columnReference1022 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_identifier1050 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_set_in_ftsWord0 = new BitSet(new long[]{0x0000000000000002L}); } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/Function.java b/source/java/org/alfresco/repo/search/impl/querymodel/Function.java index 1aade95cda..42e0bb2f0d 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/Function.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/Function.java @@ -62,5 +62,12 @@ public interface Function * @return */ public LinkedHashSet getArgumentDefinitions(); + + + /** + * Get the argument Definition + * @return + */ + public ArgumentDefinition getArgumentDefinition(String name); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/ListArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/ListArgument.java new file mode 100644 index 0000000000..038579a989 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/ListArgument.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel; + +import java.util.List; + +/** + * @author andyh + * + */ +public interface ListArgument extends StaticArgument +{ + public List getArguments(); +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/Ordering.java b/source/java/org/alfresco/repo/search/impl/querymodel/Ordering.java index 2cfd9726c6..f89a0d9286 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/Ordering.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/Ordering.java @@ -30,7 +30,7 @@ package org.alfresco.repo.search.impl.querymodel; */ public interface Ordering { - public DynamicArgument getArgument(); + public Column getColumn(); public Order getOrder(); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java b/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java index 7d478307db..c7256f87a1 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/QueryModelFactory.java @@ -25,6 +25,7 @@ package org.alfresco.repo.search.impl.querymodel; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import org.alfresco.service.namespace.QName; @@ -52,7 +53,7 @@ public interface QueryModelFactory public LiteralArgument createLiteralArgument(String name, QName type, Serializable value); - public Ordering createOrdering(DynamicArgument argument, Order order); + public Ordering createOrdering(Column column, Order order); public ParameterArgument createParameterArgument(String name, String parameterName); @@ -61,4 +62,6 @@ public interface QueryModelFactory public SelectorArgument createSelectorArgument(String name, String selectorAlias); public Function getFunction(String functionName); + + public ListArgument createListArgument(String name, ArrayList arguments); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseComparison.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseComparison.java new file mode 100644 index 0000000000..27b5683fa6 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseComparison.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import java.util.LinkedHashSet; + +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; +import org.alfresco.service.namespace.QName; + +/** + * @author andyh + */ +public abstract class BaseComparison extends BaseFunction +{ + public final static String ARG_LHS = "LHS"; + + public final static String ARG_RHS = "RHS"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_LHS, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_RHS, DataTypeDefinition.ANY, true)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public BaseComparison(String name, QName returnType, LinkedHashSet argumentDefinitions) + { + super(name, returnType, argumentDefinitions); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseConjunction.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseConjunction.java new file mode 100644 index 0000000000..d516a20dc0 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseConjunction.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Conjunction; +import org.alfresco.repo.search.impl.querymodel.Constraint; + +/** + * @author andyh + * + */ +public class BaseConjunction implements Conjunction +{ + + private List constraints; + + public BaseConjunction(List constraints) + { + this.constraints = constraints; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Conjunction#getConstraints() + */ + public List getConstraints() + { + return constraints; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Constraint#evaluate() + */ + public boolean evaluate() + { + throw new UnsupportedOperationException(); + } + + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("BaseConjunction["); + builder.append("constraints=").append(getConstraints()); + builder.append("]"); + return builder.toString(); + } +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseDisjunction.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseDisjunction.java new file mode 100644 index 0000000000..3ed66039c8 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseDisjunction.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.Disjunction; + +/** + * @author andyh + * + */ +public class BaseDisjunction implements Disjunction +{ + private List constraints; + + public BaseDisjunction(List constraints) + { + this.constraints = constraints; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Disjunction#getConstraints() + */ + public List getConstraints() + { + return constraints; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Constraint#evaluate() + */ + public boolean evaluate() + { + throw new UnsupportedOperationException(); + } + + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("BaseDisjunction["); + builder.append("constraints=").append(getConstraints()); + builder.append("]"); + return builder.toString(); + } +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunction.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunction.java index 4d102cfa24..43d11a4a8c 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunction.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseFunction.java @@ -78,15 +78,26 @@ public abstract class BaseFunction implements Function { return returnType; } - - + + public ArgumentDefinition getArgumentDefinition(String name) + { + for (ArgumentDefinition def : getArgumentDefinitions()) + { + if (def.getName().equals(name)) + { + return def; + } + } + throw new IllegalArgumentException(name); + } + public String toString() { StringBuilder builder = new StringBuilder(); builder.append("BaseFunction["); - builder.append("Name="+getName()).append(", "); - builder.append("Return type="+getReturnType()).append(", "); - builder.append("ArgumentDefinitions="+getArgumentDefinitions()); + builder.append("Name=" + getName()).append(", "); + builder.append("Return type=" + getReturnType()).append(", "); + builder.append("ArgumentDefinitions=" + getArgumentDefinitions()); builder.append("]"); return builder.toString(); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseListArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseListArgument.java new file mode 100644 index 0000000000..bcbea8f1d3 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseListArgument.java @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import java.io.Serializable; +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ListArgument; + +/** + * @author andyh + * + */ +public class BaseListArgument extends BaseStaticArgument implements ListArgument +{ + private List arguments; + + /** + * @param name + */ + public BaseListArgument(String name, List arguments) + { + super(name); + this.arguments = arguments; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.ListArgument#getArguments() + */ + public List getArguments() + { + return arguments; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Argument#getValue() + */ + public Serializable getValue() + { + throw new UnsupportedOperationException(); + } + + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("BaseListArgument["); + builder.append("name=").append(getName()).append(", "); + builder.append("values=").append(getArguments()); + builder.append("]"); + return builder.toString(); + } +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseNegation.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseNegation.java new file mode 100644 index 0000000000..cec78b67eb --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseNegation.java @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.Negation; + +/** + * @author andyh + * + */ +public class BaseNegation implements Negation +{ + private Constraint constraint; + + public BaseNegation(Constraint constraint) + { + this.constraint = constraint; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Negation#getConstraint() + */ + public Constraint getConstraint() + { + return constraint; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Constraint#evaluate() + */ + public boolean evaluate() + { + // TODO Auto-generated method stub + return false; + } + + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("BaseNegation["); + builder.append("constraint=").append(getConstraint()); + builder.append("]"); + return builder.toString(); + } +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseOrdering.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseOrdering.java new file mode 100644 index 0000000000..22554aa829 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseOrdering.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import org.alfresco.repo.search.impl.querymodel.Column; +import org.alfresco.repo.search.impl.querymodel.Order; +import org.alfresco.repo.search.impl.querymodel.Ordering; + +/** + * @author andyh + * + */ +public class BaseOrdering implements Ordering +{ + private Column column; + + private Order order; + + public BaseOrdering(Column column, Order order) + { + this.column = column; + this.order = order; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Ordering#getColumn() + */ + public Column getColumn() + { + return column; + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Ordering#getOrder() + */ + public Order getOrder() + { + return order; + } + + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("BaseOrdering["); + builder.append("Column=" + getColumn()).append(", "); + builder.append("Order=" + getOrder()); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseQuery.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseQuery.java new file mode 100644 index 0000000000..7ac6a949a5 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseQuery.java @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Column; +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.Ordering; +import org.alfresco.repo.search.impl.querymodel.Query; +import org.alfresco.repo.search.impl.querymodel.Source; + +/** + * @author andyh + */ +public class BaseQuery implements Query +{ + private Source source; + + private List columns; + + private Constraint constraint; + + private List orderings; + + public BaseQuery(List columns, Source source, Constraint constraint, List orderings) + { + this.columns = columns; + this.source = source; + this.constraint = constraint; + this.orderings = orderings; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Query#getColumns() + */ + public List getColumns() + { + return columns; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Query#getConstraint() + */ + public Constraint getConstraint() + { + return constraint; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Query#getOrderings() + */ + public List getOrderings() + { + return orderings; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Query#getSource() + */ + public Source getSource() + { + return source; + } + + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("BaseQuery[\n"); + builder.append("\tcolumns=").append(getColumns()).append("\n"); + builder.append("\tsource=").append(getSource()).append("\n"); + builder.append("\tconstraint=").append(getConstraint()).append("\n"); + builder.append("\torderings=").append(getOrderings()).append("\n"); + builder.append("]"); + return builder.toString(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Child.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Child.java new file mode 100644 index 0000000000..5d061d52d2 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Child.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + */ +public class Child extends BaseFunction +{ + public final static String NAME = "Child"; + + public final static String ARG_PARENT = "Parent"; + + public final static String ARG_SELECTOR = "Selector"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_PARENT, DataTypeDefinition.TEXT, true)); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_SELECTOR, DataTypeDefinition.TEXT, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public Child() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Descendant.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Descendant.java new file mode 100644 index 0000000000..9b47c28323 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Descendant.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + */ +public class Descendant extends BaseFunction +{ + public final static String NAME = "Descendant"; + + public final static String ARG_ANCESTOR = "Ancestor"; + + public final static String ARG_SELECTOR = "Selector"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_ANCESTOR, DataTypeDefinition.TEXT, true)); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_SELECTOR, DataTypeDefinition.TEXT, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public Descendant() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Equals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Equals.java index ac2a73f276..65a201317a 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Equals.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Equals.java @@ -25,37 +25,20 @@ package org.alfresco.repo.search.impl.querymodel.impl.functions; import java.io.Serializable; -import java.util.LinkedHashSet; import java.util.Set; import org.alfresco.repo.search.impl.querymodel.Argument; -import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; -import org.alfresco.repo.search.impl.querymodel.Multiplicity; -import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; -import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; /** * @author andyh * */ -public class Equals extends BaseFunction +public class Equals extends BaseComparison { public final static String NAME = "Equals"; - public final static String ARG_LHS = "LHS"; - - public final static String ARG_RHS = "RHS"; - - public static LinkedHashSet args; - - static - { - args = new LinkedHashSet(); - args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_LHS, DataTypeDefinition.ANY, true)); - args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_RHS, DataTypeDefinition.ANY, true)); - } - /** * @param name * @param returnType diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Exists.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Exists.java new file mode 100644 index 0000000000..1fb3059ed5 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Exists.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + */ +public class Exists extends BaseFunction +{ + public final static String NAME = "Exists"; + + public final static String ARG_PROPERTY = "Property"; + + public final static String ARG_NOT = "Not"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_PROPERTY, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_NOT, DataTypeDefinition.BOOLEAN, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public Exists() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSExactTerm.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSExactTerm.java new file mode 100644 index 0000000000..43de269f9d --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSExactTerm.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class FTSExactTerm extends BaseFunction +{ + public final static String NAME = "FTSExactTerm"; + + public final static String ARG_TERM = "Term"; + + public final static String ARG_PROPERTY = "Property"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_TERM, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_PROPERTY, DataTypeDefinition.ANY, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public FTSExactTerm() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSPhrase.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSPhrase.java new file mode 100644 index 0000000000..9437bff248 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSPhrase.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + */ +public class FTSPhrase extends BaseFunction +{ + public final static String NAME = "FTSPhrase"; + + public final static String ARG_PHRASE = "Phrase"; + + public final static String ARG_PROPERTY = "Property"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_PHRASE, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_PROPERTY, DataTypeDefinition.ANY, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public FTSPhrase() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSTerm.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSTerm.java new file mode 100644 index 0000000000..469af95a14 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/FTSTerm.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class FTSTerm extends BaseFunction +{ + public final static String NAME = "FTSTerm"; + + public final static String ARG_TERM = "Term"; + + public final static String ARG_PROPERTY = "Property"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_TERM, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_PROPERTY, DataTypeDefinition.ANY, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public FTSTerm() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/GreaterThan.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/GreaterThan.java new file mode 100644 index 0000000000..f3c56317d1 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/GreaterThan.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class GreaterThan extends BaseComparison +{ + public final static String NAME = "GreaterThan"; + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public GreaterThan() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/GreaterThanOrEquals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/GreaterThanOrEquals.java new file mode 100644 index 0000000000..97d3bca1ef --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/GreaterThanOrEquals.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class GreaterThanOrEquals extends BaseComparison +{ + public final static String NAME = "GreaterThanOrEquals"; + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public GreaterThanOrEquals() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/In.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/In.java new file mode 100644 index 0000000000..18adcd10bf --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/In.java @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class In extends BaseFunction +{ + public final static String NAME = "In"; + + public final static String ARG_PROPERTY = "Property"; + + public final static String ARG_COLLECTION = "Collection"; + + public final static String ARG_NOT = "Not"; + + public final static String ARG_MODE = "Mode"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_MODE, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_PROPERTY, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_COLLECTION, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_NOT, DataTypeDefinition.ANY, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public In() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/LessThan.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/LessThan.java new file mode 100644 index 0000000000..280e664078 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/LessThan.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class LessThan extends BaseComparison +{ + public final static String NAME = "LessThan"; + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public LessThan() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/LessThanOrEquals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/LessThanOrEquals.java new file mode 100644 index 0000000000..2c4ed5aaa4 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/LessThanOrEquals.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class LessThanOrEquals extends BaseComparison +{ + public final static String NAME = "LessThanOrEquals"; + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public LessThanOrEquals() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Like.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Like.java new file mode 100644 index 0000000000..fc7c669b25 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Like.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.Multiplicity; +import org.alfresco.repo.search.impl.querymodel.impl.BaseArgumentDefinition; +import org.alfresco.repo.search.impl.querymodel.impl.BaseFunction; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class Like extends BaseFunction +{ + public final static String NAME = "Like"; + + public final static String ARG_PROPERTY = "Property"; + + public final static String ARG_EXP = "Exp"; + + public final static String ARG_NOT = "Not"; + + public static LinkedHashSet args; + + static + { + args = new LinkedHashSet(); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_PROPERTY, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_EXP, DataTypeDefinition.TEXT, true)); + args.add(new BaseArgumentDefinition(Multiplicity.ANY, ARG_NOT, DataTypeDefinition.BOOLEAN, false)); + } + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public Like() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/NotEquals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/NotEquals.java new file mode 100644 index 0000000000..1658b45309 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/NotEquals.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.functions; + +import java.io.Serializable; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.impl.BaseComparison; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; + +/** + * @author andyh + * + */ +public class NotEquals extends BaseComparison +{ + public final static String NAME = "NotEquals"; + + /** + * @param name + * @param returnType + * @param argumentDefinitions + */ + public NotEquals() + { + super(NAME, DataTypeDefinition.BOOLEAN, args); + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.Function#getValue(java.util.Set) + */ + public Serializable getValue(Set args) + { + throw new UnsupportedOperationException(); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java index cf62303a75..5d26d2cac5 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/PropertyAccessor.java @@ -40,9 +40,9 @@ import org.alfresco.service.cmr.dictionary.DataTypeDefinition; */ public class PropertyAccessor extends BaseFunction { - public final static String NAME = "Upper"; + public final static String NAME = "PropertyAccessor"; - public final static String ARG_PROPERTY = "Arg"; + public final static String ARG_PROPERTY = "Property"; public static LinkedHashSet args; diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java index 2d0e9896f9..119d0d6394 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Score.java @@ -42,14 +42,14 @@ public class Score extends BaseFunction { public final static String NAME = "Score"; - public final static String ARG_PROPERTY = "Qualifier"; + public final static String ARG_QUALIFIER = "Qualifier"; public static LinkedHashSet args; static { args = new LinkedHashSet(); - args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_PROPERTY, DataTypeDefinition.ANY, true)); + args.add(new BaseArgumentDefinition(Multiplicity.SINGLE_VALUED, ARG_QUALIFIER, DataTypeDefinition.ANY, true)); } /** diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java index 0347ca3465..fc86042c22 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/functions/Upper.java @@ -42,7 +42,7 @@ public class Upper extends BaseFunction { public final static String NAME = "Upper"; - public final static String ARG_PROPERTY = "Arg"; + public final static String ARG_PROPERTY = "Property"; public static LinkedHashSet args; diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneConjunction.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneConjunction.java new file mode 100644 index 0000000000..ea2c03fc63 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneConjunction.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.impl.BaseConjunction; + +/** + * @author andyh + * + */ +public class LuceneConjunction extends BaseConjunction +{ + + /** + * @param constraints + */ + public LuceneConjunction(List constraints) + { + super(constraints); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneDisjunction.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneDisjunction.java new file mode 100644 index 0000000000..f3856e5b46 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneDisjunction.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.impl.BaseDisjunction; + +/** + * @author andyh + * + */ +public class LuceneDisjunction extends BaseDisjunction +{ + + /** + * @param constraints + */ + public LuceneDisjunction(List constraints) + { + super(constraints); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneListArgument.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneListArgument.java new file mode 100644 index 0000000000..b16ef026a5 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneListArgument.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.impl.BaseListArgument; + +/** + * @author andyh + * + */ +public class LuceneListArgument extends BaseListArgument +{ + + /** + * @param name + * @param arguments + */ + public LuceneListArgument(String name, List arguments) + { + super(name, arguments); + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneNegation.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneNegation.java new file mode 100644 index 0000000000..e337dafef3 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneNegation.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene; + +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.impl.BaseNegation; + +/** + * @author andyh + * + */ +public class LuceneNegation extends BaseNegation +{ + + /** + * @param constraint + */ + public LuceneNegation(Constraint constraint) + { + super(constraint); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneOrdering.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneOrdering.java new file mode 100644 index 0000000000..97aa09b92d --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneOrdering.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene; + +import org.alfresco.repo.search.impl.querymodel.Column; +import org.alfresco.repo.search.impl.querymodel.Order; +import org.alfresco.repo.search.impl.querymodel.impl.BaseOrdering; + +/** + * @author andyh + * + */ +public class LuceneOrdering extends BaseOrdering +{ + + /** + * @param column + * @param order + */ + public LuceneOrdering(Column column, Order order) + { + super(column, order); + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java new file mode 100644 index 0000000000..12adefdd02 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQuery.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene; + +import java.util.List; + +import org.alfresco.repo.search.impl.querymodel.Column; +import org.alfresco.repo.search.impl.querymodel.Constraint; +import org.alfresco.repo.search.impl.querymodel.Ordering; +import org.alfresco.repo.search.impl.querymodel.Source; +import org.alfresco.repo.search.impl.querymodel.impl.BaseQuery; + +/** + * @author andyh + */ +public class LuceneQuery extends BaseQuery +{ + + /** + * @param columns + * @param source + * @param constraint + * @param orderings + */ + public LuceneQuery(List columns, Source source, Constraint constraint, List orderings) + { + super(columns, source, constraint, orderings); + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java index 4e50ee61de..b5089a2646 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryModelFactory.java @@ -25,16 +25,17 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene; import java.io.Serializable; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Column; import org.alfresco.repo.search.impl.querymodel.Constraint; -import org.alfresco.repo.search.impl.querymodel.DynamicArgument; import org.alfresco.repo.search.impl.querymodel.Function; import org.alfresco.repo.search.impl.querymodel.Join; import org.alfresco.repo.search.impl.querymodel.JoinType; +import org.alfresco.repo.search.impl.querymodel.ListArgument; import org.alfresco.repo.search.impl.querymodel.LiteralArgument; import org.alfresco.repo.search.impl.querymodel.Order; import org.alfresco.repo.search.impl.querymodel.Ordering; @@ -45,13 +46,39 @@ import org.alfresco.repo.search.impl.querymodel.QueryModelFactory; import org.alfresco.repo.search.impl.querymodel.Selector; import org.alfresco.repo.search.impl.querymodel.SelectorArgument; import org.alfresco.repo.search.impl.querymodel.Source; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Child; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Descendant; import org.alfresco.repo.search.impl.querymodel.impl.functions.Equals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Exists; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSExactTerm; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSPhrase; +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSTerm; +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThan; +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.In; +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThan; +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.functions.Like; import org.alfresco.repo.search.impl.querymodel.impl.functions.Lower; +import org.alfresco.repo.search.impl.querymodel.impl.functions.NotEquals; import org.alfresco.repo.search.impl.querymodel.impl.functions.PropertyAccessor; import org.alfresco.repo.search.impl.querymodel.impl.functions.Score; import org.alfresco.repo.search.impl.querymodel.impl.functions.Upper; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneChild; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneDescendant; import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneEquals; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneExists; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneFTSExactTerm; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneFTSPhrase; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneFTSTerm; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneGreaterThan; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneGreaterThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneIn; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneLessThan; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneLessThanOrEquals; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneLike; import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneLower; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneNotEquals; import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LucenePropertyAccessor; import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneScore; import org.alfresco.repo.search.impl.querymodel.impl.lucene.functions.LuceneUpper; @@ -59,12 +86,11 @@ import org.alfresco.service.namespace.QName; /** * @author andyh - * */ public class LuceneQueryModelFactory implements QueryModelFactory { - public static HashMap functions = new HashMap (); - + public static HashMap functions = new HashMap(); + static { functions.put(Equals.NAME, new LuceneEquals()); @@ -72,126 +98,193 @@ public class LuceneQueryModelFactory implements QueryModelFactory functions.put(Score.NAME, new LuceneScore()); functions.put(Upper.NAME, new LuceneUpper()); functions.put(Lower.NAME, new LuceneLower()); + + functions.put(NotEquals.NAME, new LuceneNotEquals()); + functions.put(LessThan.NAME, new LuceneLessThan()); + functions.put(LessThanOrEquals.NAME, new LuceneLessThanOrEquals()); + functions.put(GreaterThan.NAME, new LuceneGreaterThan()); + functions.put(GreaterThanOrEquals.NAME, new LuceneGreaterThanOrEquals()); + + functions.put(In.NAME, new LuceneIn()); + functions.put(Like.NAME, new LuceneLike()); + functions.put(Exists.NAME, new LuceneExists()); + + functions.put(Child.NAME, new LuceneChild()); + functions.put(Descendant.NAME, new LuceneDescendant()); + + functions.put(FTSTerm.NAME, new LuceneFTSTerm()); + functions.put(FTSExactTerm.NAME, new LuceneFTSExactTerm()); + functions.put(FTSPhrase.NAME, new LuceneFTSPhrase()); + + } - - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createColumn(org.alfresco.repo.search.impl.querymodel.Function, java.util.List, java.lang.String) + + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createColumn(org.alfresco.repo.search.impl.querymodel.Function, + * java.util.List, java.lang.String) */ public Column createColumn(Function function, List functionArguments, String alias) { return new LuceneColumn(function, functionArguments, alias); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createConjunction(java.util.List) */ public Constraint createConjunction(List constraints) { - throw new UnsupportedOperationException(); + return new LuceneConjunction(constraints); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createDisjunction(java.util.List) */ public Constraint createDisjunction(List constraints) { - throw new UnsupportedOperationException(); + return new LuceneDisjunction(constraints); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createFunctionalConstraint(org.alfresco.repo.search.impl.querymodel.Function, java.util.List) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createFunctionalConstraint(org.alfresco.repo.search.impl.querymodel.Function, + * java.util.List) */ public Constraint createFunctionalConstraint(Function function, List functionArguments) { return new LuceneFunctionalConstraint(function, functionArguments); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createJoin(org.alfresco.repo.search.impl.querymodel.Source, org.alfresco.repo.search.impl.querymodel.Source, org.alfresco.repo.search.impl.querymodel.JoinType, org.alfresco.repo.search.impl.querymodel.Constraint) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createJoin(org.alfresco.repo.search.impl.querymodel.Source, + * org.alfresco.repo.search.impl.querymodel.Source, org.alfresco.repo.search.impl.querymodel.JoinType, + * org.alfresco.repo.search.impl.querymodel.Constraint) */ public Join createJoin(Source left, Source right, JoinType joinType, Constraint joinCondition) { return new LuceneJoin(left, right, joinType, joinCondition); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createLiteralArgument(java.lang.String, org.alfresco.service.namespace.QName, java.io.Serializable) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createLiteralArgument(java.lang.String, + * org.alfresco.service.namespace.QName, java.io.Serializable) */ public LiteralArgument createLiteralArgument(String name, QName type, Serializable value) { return new LuceneLiteralArgument(name, type, value); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createNegation(org.alfresco.repo.search.impl.querymodel.Constraint) */ public Constraint createNegation(Constraint constraint) { - throw new UnsupportedOperationException(); + return new LuceneNegation(constraint); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createOrdering(org.alfresco.repo.search.impl.querymodel.DynamicArgument, org.alfresco.repo.search.impl.querymodel.Order) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createOrdering(org.alfresco.repo.search.impl.querymodel.DynamicArgument, + * org.alfresco.repo.search.impl.querymodel.Order) */ - public Ordering createOrdering(DynamicArgument argument, Order order) + public Ordering createOrdering(Column column, Order order) { - throw new UnsupportedOperationException(); + return new LuceneOrdering(column, order); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createParameterArgument(java.lang.String, java.lang.String) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createParameterArgument(java.lang.String, + * java.lang.String) */ public ParameterArgument createParameterArgument(String name, String parameterName) { return new LuceneParameterArgument(name, parameterName); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createPropertyArgument(java.lang.String, org.alfresco.service.namespace.QName) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createPropertyArgument(java.lang.String, + * org.alfresco.service.namespace.QName) */ public PropertyArgument createPropertyArgument(String name, String selector, QName propertyName) { return new LucenePropertyArgument(name, selector, propertyName); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createQuery(java.util.List, org.alfresco.repo.search.impl.querymodel.Source, org.alfresco.repo.search.impl.querymodel.Constraint, java.util.List) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createQuery(java.util.List, + * org.alfresco.repo.search.impl.querymodel.Source, org.alfresco.repo.search.impl.querymodel.Constraint, + * java.util.List) */ public Query createQuery(List columns, Source source, Constraint constraint, List orderings) { - throw new UnsupportedOperationException(); + return new LuceneQuery(columns, source, constraint, orderings); } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createSelector(org.alfresco.service.namespace.QName, java.lang.String) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createSelector(org.alfresco.service.namespace.QName, + * java.lang.String) */ public Selector createSelector(QName classQName, String alias) { return new LuceneSelector(classQName, alias); } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#getFunction(java.lang.String) */ public Function getFunction(String functionName) { Function function = functions.get(functionName); - if(function != null) + if (function != null) { return function; } else { - throw new UnsupportedOperationException("Missing function "+functionName); + throw new UnsupportedOperationException("Missing function " + functionName); } } - /* (non-Javadoc) - * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createSelectorArgument(java.lang.String, java.lang.String) + /* + * (non-Javadoc) + * + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createSelectorArgument(java.lang.String, + * java.lang.String) */ public SelectorArgument createSelectorArgument(String name, String selectorAlias) { return new LuceneSelectorArgument(name, selectorAlias); } + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.QueryModelFactory#createListArgument(java.lang.String, java.util.ArrayList) + */ + public ListArgument createListArgument(String name, ArrayList arguments) + { + return new LuceneListArgument(name, arguments); + } + } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneChild.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneChild.java new file mode 100644 index 0000000000..632e1850a6 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneChild.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.Child; + +/** + * @author andyh + * + */ +public class LuceneChild extends Child +{ + + /** + * + */ + public LuceneChild() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneDescendant.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneDescendant.java new file mode 100644 index 0000000000..76ed7513de --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneDescendant.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.Descendant; + +/** + * @author andyh + * + */ +public class LuceneDescendant extends Descendant +{ + + /** + * + */ + public LuceneDescendant() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneExists.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneExists.java new file mode 100644 index 0000000000..bf6af4e735 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneExists.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.Exists; + +/** + * @author andyh + * + */ +public class LuceneExists extends Exists +{ + + /** + * + */ + public LuceneExists() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSExactTerm.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSExactTerm.java new file mode 100644 index 0000000000..f421931c21 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSExactTerm.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSExactTerm; + +/** + * @author andyh + * + */ +public class LuceneFTSExactTerm extends FTSExactTerm +{ + + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSPhrase.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSPhrase.java new file mode 100644 index 0000000000..120db76a6c --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSPhrase.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSPhrase; + +/** + * @author andyh + * + */ +public class LuceneFTSPhrase extends FTSPhrase +{ + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSTerm.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSTerm.java new file mode 100644 index 0000000000..c6de5ad5d7 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneFTSTerm.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.FTSTerm; + +/** + * @author andyh + * + */ +public class LuceneFTSTerm extends FTSTerm +{ + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneGreaterThan.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneGreaterThan.java new file mode 100644 index 0000000000..0e40526377 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneGreaterThan.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThan; + +/** + * @author andyh + * + */ +public class LuceneGreaterThan extends GreaterThan +{ + + /** + * + */ + public LuceneGreaterThan() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneGreaterThanOrEquals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneGreaterThanOrEquals.java new file mode 100644 index 0000000000..173be7d364 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneGreaterThanOrEquals.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.GreaterThanOrEquals; + +/** + * @author andyh + * + */ +public class LuceneGreaterThanOrEquals extends GreaterThanOrEquals +{ + + /** + * + */ + public LuceneGreaterThanOrEquals() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneIn.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneIn.java new file mode 100644 index 0000000000..919946c09c --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneIn.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.In; + +/** + * @author andyh + * + */ +public class LuceneIn extends In +{ + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLessThan.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLessThan.java new file mode 100644 index 0000000000..a725eb6796 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLessThan.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThan; + +/** + * @author andyh + * + */ +public class LuceneLessThan extends LessThan +{ + + /** + * + */ + public LuceneLessThan() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLessThanOrEquals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLessThanOrEquals.java new file mode 100644 index 0000000000..251c1e1f64 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLessThanOrEquals.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.LessThanOrEquals; + +/** + * @author andyh + * + */ +public class LuceneLessThanOrEquals extends LessThanOrEquals +{ + + /** + * + */ + public LuceneLessThanOrEquals() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLike.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLike.java new file mode 100644 index 0000000000..45d731d4d8 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLike.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.Like; + +/** + * @author andyh + * + */ +public class LuceneLike extends Like +{ + + /** + * + */ + public LuceneLike() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneNotEquals.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneNotEquals.java new file mode 100644 index 0000000000..8eaf5350df --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneNotEquals.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2005-2007 Alfresco Software Limited. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + * As a special exception to the terms and conditions of version 2.0 of + * the GPL, you may redistribute this Program in connection with Free/Libre + * and Open Source Software ("FLOSS") applications as described in Alfresco's + * FLOSS exception. You should have recieved a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; + +import org.alfresco.repo.search.impl.querymodel.impl.functions.NotEquals; + +/** + * @author andyh + * + */ +public class LuceneNotEquals extends NotEquals +{ + + /** + * + */ + public LuceneNotEquals() + { + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/service/cmr/search/SearchParameters.java b/source/java/org/alfresco/service/cmr/search/SearchParameters.java index ddc496082e..2782830fd9 100644 --- a/source/java/org/alfresco/service/cmr/search/SearchParameters.java +++ b/source/java/org/alfresco/service/cmr/search/SearchParameters.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Locale; import java.util.Set; +import org.alfresco.repo.domain.hibernate.BulkLoader; import org.alfresco.repo.search.MLAnalysisMode; import org.alfresco.service.cmr.repository.Path; import org.alfresco.service.cmr.repository.StoreRef; @@ -48,6 +49,8 @@ public class SearchParameters extends SearchStatement * The default limit if someone asks for a limited result set but does not say how to limit.... */ private static int DEFAULT_LIMIT = 500; + + private static int DEFAULT_BULK_FETCH_SIZE = 10; /* * Standard sort definitions for sorting in document and score order. @@ -109,6 +112,10 @@ public class SearchParameters extends SearchStatement private HashSet textAttributes = new HashSet(); + private boolean bulkFetch = true; + + private int bulkFetchSize = DEFAULT_BULK_FETCH_SIZE; + /** * Default constructor */ @@ -411,7 +418,45 @@ public class SearchParameters extends SearchStatement return Collections.unmodifiableSet(allAttributes); } + /** + * Bulk fetch results in the cache + * @param bulkFetch + * @return + */ + public void setBulkFetch(boolean bulkFetch) + { + this.bulkFetch = bulkFetch; + } + + /** + * Do we bulk fect + * @return + */ + public boolean getBulkFetch() + { + return bulkFetch; + } + /** + * Set the bulk fect size + * @param bulkFecthSize + */ + public void setBulkFetchSize(int bulkFetchSize) + { + this.bulkFetchSize = bulkFetchSize; + } + + + /** + * Get the bulk fetch size. + * @return + */ + public int getBulkFecthSize() + { + return bulkFetchSize; + } + + /** * A helper class for sort definition. Encapsulated using the lucene sortType, field name and a flag for * ascending/descending.