diff --git a/.classpath b/.classpath index bf7cfd6245..9dc0d94b11 100644 --- a/.classpath +++ b/.classpath @@ -1,8 +1,8 @@ - - + + diff --git a/config/alfresco/audit-services-context.xml b/config/alfresco/audit-services-context.xml index 44ec53987f..9400ad4157 100644 --- a/config/alfresco/audit-services-context.xml +++ b/config/alfresco/audit-services-context.xml @@ -116,20 +116,17 @@ - - - - - - - - - - - - classpath:alfresco/audit/alfresco-audit-repository.xml + + + + + + + + + org.alfresco.repo.audit.model.AuditModelRegistry + - - + \ No newline at end of file diff --git a/config/alfresco/audit/alfresco-audit-cmis.xml b/config/alfresco/audit/alfresco-audit-cmis.xml new file mode 100755 index 0000000000..305c07023d --- /dev/null +++ b/config/alfresco/audit/alfresco-audit-cmis.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/alfresco/bootstrap-context.xml b/config/alfresco/bootstrap-context.xml index dd1d40a33a..4840cef93a 100644 --- a/config/alfresco/bootstrap-context.xml +++ b/config/alfresco/bootstrap-context.xml @@ -552,9 +552,10 @@ - - - + + + true + diff --git a/config/alfresco/cmis-api-context.xml b/config/alfresco/cmis-api-context.xml index 1fdfac84e3..13714efe63 100644 --- a/config/alfresco/cmis-api-context.xml +++ b/config/alfresco/cmis-api-context.xml @@ -14,11 +14,12 @@ 1.0 - Version 1.0 Committee Draft 04 + Version 1.0 Committee Draft 07 workspace://SpacesStore /Company Home + @@ -67,11 +68,79 @@ - + + + + + + doclib + + + webpreviewimgpreview + + + + + + + alf:icon16 + image/gif + ICON16 + 16 + 16 + + + alf:icon32 + image/gif + ICON32 + 32 + 32 + + + + + + + + + + + + + + + + FOLDER + DOCUMENT + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/config/alfresco/model/cmisModel.xml b/config/alfresco/model/cmisModel.xml index 3b2f07d34a..9c179561df 100644 --- a/config/alfresco/model/cmisModel.xml +++ b/config/alfresco/model/cmisModel.xml @@ -9,7 +9,7 @@ - + @@ -78,9 +78,7 @@ true true false - - false - + Created by @@ -215,9 +213,7 @@ true true false - - false - + Is Version Series Checked Out @@ -258,7 +254,7 @@ Content Stream Length The length of the content stream - d:int + d:long true false false @@ -295,9 +291,7 @@ true false false - - false - + @@ -325,9 +319,7 @@ true true false - - false - + Allowed Child Object Types Ids diff --git a/config/alfresco/model/contentModel.xml b/config/alfresco/model/contentModel.xml index de9a2c17b0..b023d279a4 100644 --- a/config/alfresco/model/contentModel.xml +++ b/config/alfresco/model/contentModel.xml @@ -1,4 +1,8 @@ - + + + Alfresco Content Domain Model Alfresco @@ -419,6 +423,7 @@ Thumbnail cm:content true + false Thumbnail Name @@ -431,7 +436,7 @@ true - + diff --git a/config/alfresco/model/modelSchema.xsd b/config/alfresco/model/modelSchema.xsd index 2b54082ad7..47381f9c9d 100644 --- a/config/alfresco/model/modelSchema.xsd +++ b/config/alfresco/model/modelSchema.xsd @@ -104,6 +104,8 @@ maxOccurs="1" minOccurs="0" /> + @@ -257,7 +259,8 @@ - + - + - - - - - - - - ${system.cascadeDeleteInTransaction} + + + + + + + + + diff --git a/config/alfresco/public-services-context.xml b/config/alfresco/public-services-context.xml index ff7cfa0c13..900d492fe5 100644 --- a/config/alfresco/public-services-context.xml +++ b/config/alfresco/public-services-context.xml @@ -40,9 +40,6 @@ - - ${audit.enabled} - ${audit.useNewConfig} diff --git a/config/alfresco/repository.properties b/config/alfresco/repository.properties index 04f13b336d..4007d58e3d 100644 --- a/config/alfresco/repository.properties +++ b/config/alfresco/repository.properties @@ -250,7 +250,9 @@ db.pool.abandoned.time=300 # Audit configuration audit.enabled=false -audit.useNewConfig=false +audit.repository.enabled=true +audit.cmis.enabled=true +audit.useNewConfig=true # Email configuration mail.host= diff --git a/config/alfresco/subsystems/Audit/default/audit-registry-context.xml b/config/alfresco/subsystems/Audit/default/audit-registry-context.xml new file mode 100644 index 0000000000..3f3d254eba --- /dev/null +++ b/config/alfresco/subsystems/Audit/default/audit-registry-context.xml @@ -0,0 +1,43 @@ + + + + + + + + + ${audit.enabled} + + + + + + + + + + + + + + + + ${audit.repository.enabled} + + + classpath:alfresco/audit/alfresco-audit-repository.xml + + + + + + + ${audit.cmis.enabled} + + + classpath:alfresco/audit/alfresco-audit-cmis.xml + + + + + \ No newline at end of file diff --git a/config/alfresco/subsystems/Audit/default/audit-registry.properties b/config/alfresco/subsystems/Audit/default/audit-registry.properties new file mode 100644 index 0000000000..61b7ac898a --- /dev/null +++ b/config/alfresco/subsystems/Audit/default/audit-registry.properties @@ -0,0 +1,3 @@ +audit.enabled=false +audit.repository.enabled=true +audit.cmis.enabled=true \ No newline at end of file diff --git a/source/java/org/alfresco/cmis/CMISAccessControlEntriesGroupedByPrincipalId.java b/source/java/org/alfresco/cmis/CMISAccessControlEntriesGroupedByPrincipalId.java new file mode 100644 index 0000000000..ae632eceee --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAccessControlEntriesGroupedByPrincipalId.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.List; + +/** + * @author andyh + * + */ +public interface CMISAccessControlEntriesGroupedByPrincipalId +{ + /** + * Get the principal id. + * @return principal id + */ + public String getPrincipalId(); + + /** + * Get the direct permissions + * @return the direct permissions + */ + public List getDirectPermissions(); + + /** + * Get the indirect permissions + * @return the indirect permissions + */ + public List getIndirectPermissions(); + + +} diff --git a/source/java/org/alfresco/cmis/CMISAccessControlEntry.java b/source/java/org/alfresco/cmis/CMISAccessControlEntry.java new file mode 100644 index 0000000000..74180b2fb7 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAccessControlEntry.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * An Access control entry + * + * Note: we report one permission at a time rather than group them + * + * @author andyh + * + */ +public interface CMISAccessControlEntry +{ + /** + * Get the principal id. + * @return principal id + */ + public String getPrincipalId(); + + /** + * Get the unique permission id + * @return the unique permission id + */ + public String getPermission(); + + /** + * Is the assignment direct on the object + * @return true if directly assigned, false otherwise. + */ + public boolean getDirect(); +} diff --git a/source/java/org/alfresco/cmis/CMISAccessControlFormatEnum.java b/source/java/org/alfresco/cmis/CMISAccessControlFormatEnum.java new file mode 100644 index 0000000000..ac7d5eb93d --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAccessControlFormatEnum.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * @author andyh + * + */ +public enum CMISAccessControlFormatEnum implements EnumLabel +{ + /** + * Report only CMIS basic permissions + */ + CMIS_BASIC_PERMISSIONS("onlyBasicPermissions"), + + /** + * May report CMIS basic permission, repository specific permissions or a mixture of both. + */ + REPOSITORY_SPECIFIC_PERMISSIONS("repositorySpecificPermissions"); + + private String label; + + /** + * Construct + * + * @param label + */ + CMISAccessControlFormatEnum(String label) + { + this.label = label; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.EnumLabel#label() + */ + public String getLabel() + { + return label; + } + + /** + * Factory for CMISAclPropagationEnum + */ + public static EnumFactory FACTORY = new EnumFactory(CMISAccessControlFormatEnum.class, CMIS_BASIC_PERMISSIONS, true); + +} diff --git a/source/java/org/alfresco/cmis/CMISAccessControlReport.java b/source/java/org/alfresco/cmis/CMISAccessControlReport.java new file mode 100644 index 0000000000..07d631bbd3 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAccessControlReport.java @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.List; + +/** + * An Access control report. + * This is an ACL. + * + * @author andyh + * + */ +public interface CMISAccessControlReport +{ + /** + * Get the list of ACEs. + * @return the list of ACEs. + */ + public List getAccessControlEntries(); + + /** + * Is this report incomplete? + * If so there are other other security constraints that apply + * + * @return false means the report fully describes security access, true means other + * security constraints apply but are not reported. + */ + public boolean isExtract(); + + /** + * Get ACEs grouped by principal id + * @return + */ + public List getAccessControlEntriesGroupedByPrincipalId(); + + +} diff --git a/source/java/org/alfresco/cmis/CMISAccessControlService.java b/source/java/org/alfresco/cmis/CMISAccessControlService.java new file mode 100644 index 0000000000..cdb7cc6919 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAccessControlService.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.List; + +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * Service for CMIS access control support. + * + * @author andyh + */ +public interface CMISAccessControlService +{ + /** + * CMIS Read (properties and content) + */ + public static final String CMIS_READ_PERMISSION = "cmis:read"; + + /** + * CMIS Write (properties and content) + */ + public static final String CMIS_WRITE_PERMISSION = "cmis:write"; + + /** + * CMIS ALL permissions (includes all permissions defined within the repository) + */ + public static final String CMIS_ALL_PERMISSION = "cmis:all"; + + /** + * Get the ACL capability enum. + * @return the ACL capability enum. + */ + public CMISAclCapabilityEnum getAclCapability(); + + /** + * Gets the supported permission types + * @return the supported permission types + */ + public CMISAclSupportedPermissionEnum getSupportedPermissions(); + + /** + * Get the ACL propagation enum. + * @return the ACL propagation enum. + */ + public CMISAclPropagationEnum getAclPropagation(); + + /** + * Get all the permissions defined by the repository. + * @return a list of permissions + */ + public List getRepositoryPermissions(); + + /** + * Get the list of permission mappings. + * @return get the permission mapping as defined by the CMIS specification. + */ + public List getPermissionMappings(); + + /** + * Gets the name of the principal who is used for anonymous access. This principal can then be passed to the ACL + * services to specify what permissions anonymous users should have. + * + * @return name of the principal who is used for anonymous access + */ + public String getPrincipalAnonymous(); + + /** + * Gets the name of the principal who is used to indicate any authenticated user. This principal can then be passed + * to the ACL services to specify what permissions any authenticated user should have. + * + * @return name of the principal who is used to indicate any authenticated user + */ + public String getPrincipalAnyone(); + + /** + * Get the ACLs set on a node. + * @param nodeRef + * @param format + * @return an access control report + */ + public CMISAccessControlReport getAcl(NodeRef nodeRef, CMISAccessControlFormatEnum format); + + /** + * Update the ACEs on a node. + * Those already existing, are preserved, those new are added and those missing are removed. + * + * @param nodeRef + * @param acesToApply + * @return an access control report of the final state + */ + public CMISAccessControlReport applyAcl(NodeRef nodeRef, List acesToApply); + + /** + * Update the ACEs on a node. + * The deletions are applied before the additions. + * Existing ACEs not deleted or added remain unchanged. + * + * @param nodeRef + * @param acesToRemove + * @param acesToAdd + * @param propagation + * @param format + * @return an access control report of the final state + * @exception UnsupportedCMISAclPropagationMode will be thrown for unsupported propagation modes. + */ + public CMISAccessControlReport applyAcl(NodeRef nodeRef, List acesToRemove, List acesToAdd, CMISAclPropagationEnum propagation, CMISAccessControlFormatEnum format); +} diff --git a/source/java/org/alfresco/cmis/CMISAclCapabilityEnum.java b/source/java/org/alfresco/cmis/CMISAclCapabilityEnum.java new file mode 100644 index 0000000000..f95e0e6352 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAclCapabilityEnum.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * CMIS ACL capability + * + * @author andyh + */ +public enum CMISAclCapabilityEnum implements EnumLabel +{ + /** + * ACLs are not supported + */ + NONE("none"), + /** + * ACLs can be read but not set + */ + DISCOVER("discover"), + /** + * ACLs can be read and set + */ + MANAGE("manage"); + + private String label; + + /** + * Construct + * + * @param label + */ + CMISAclCapabilityEnum(String label) + { + this.label = label; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.EnumLabel#label() + */ + public String getLabel() + { + return label; + } + + /** + * Factory for CMISAclCapabilityEnum + */ + public static EnumFactory FACTORY = new EnumFactory(CMISAclCapabilityEnum.class, MANAGE, true); + +} diff --git a/source/java/org/alfresco/cmis/CMISAclPropagationEnum.java b/source/java/org/alfresco/cmis/CMISAclPropagationEnum.java new file mode 100644 index 0000000000..041508ba7a --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAclPropagationEnum.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * CMIS ACL propagation + * + * Used to request a particular behaviour or report back behaviour. + * + * @author andyh + * + */ +public enum CMISAclPropagationEnum implements EnumLabel +{ + /** + * The ACL only applies to the object + * (not yet supported in Alfresco) + */ + OBJECT_ONLY("objectonly"), + /** + * ACLs are applied to all inheriting objects + * (the default in Alfresco) + */ + PROPAGATE("propagate"), + /** + * Some other mechanism by which ACL changes influence other ACL's non-direct ACEs. + */ + REPOSITORY_DETERMINED("repositorydetermined"); + + private String label; + + /** + * Construct + * + * @param label + */ + CMISAclPropagationEnum(String label) + { + this.label = label; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.EnumLabel#label() + */ + public String getLabel() + { + return label; + } + + /** + * Factory for CMISAclPropagationEnum + */ + public static EnumFactory FACTORY = new EnumFactory(CMISAclPropagationEnum.class, PROPAGATE, true); + +} diff --git a/source/java/org/alfresco/cmis/CMISAclSupportedPermissionEnum.java b/source/java/org/alfresco/cmis/CMISAclSupportedPermissionEnum.java new file mode 100644 index 0000000000..c404fb4099 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISAclSupportedPermissionEnum.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2005-2010 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 received a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis; + +/** + * Specifies which types of permissions are supported.. + * + * @author dward + */ +public enum CMISAclSupportedPermissionEnum +{ + /** + * CMIS Basic permissions are supported. + */ + BASIC("basic"), + /** + * Repository specific permissions are supported. + */ + REPOSITORY("repository"), + /** + * both CMIS basic permissions and repository specific permissions are supported. (the default in Alfresco) + */ + BOTH("both"); + + private String label; + + /** + * Construct + * + * @param label + */ + CMISAclSupportedPermissionEnum(String label) + { + this.label = label; + } + + /* + * (non-Javadoc) + * @see org.alfresco.cmis.EnumLabel#label() + */ + public String getLabel() + { + return label; + } + + /** + * Factory for CMISAclSupportedPermissionEnum + */ + public static EnumFactory FACTORY = new EnumFactory( + CMISAclSupportedPermissionEnum.class, BOTH, true); + +} diff --git a/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java b/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java index b785ed2e26..b68a225ade 100644 --- a/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java +++ b/source/java/org/alfresco/cmis/CMISAllowedActionEnum.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,12 +18,17 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ package org.alfresco.cmis; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * CMIS Allowed Action Enum * @@ -31,60 +36,76 @@ package org.alfresco.cmis; */ public enum CMISAllowedActionEnum implements EnumLabel { + // navigation services - CAN_GET_DESCENDANTS("canGetDescendants"), - CAN_GET_FOLDER_TREE("canGetFolderTree"), - CAN_GET_CHILDREN("canGetChildren"), - CAN_GET_FOLDER_PARENT("canGetFolderParent"), - CAN_GET_OBJECT_PARENTS("canGetObjectParents"), + CAN_GET_DESCENDANTS("canGetDescendants", "canGetDescendents.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetDescendents.Folder", "{http://www.alfresco.org/model/system/1.0}base.ReadChildren"), + CAN_GET_FOLDER_TREE("canGetFolderTree"/*, "canGetFolderTree.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetFolderTree.Folder", "{http://www.alfresco.org/model/system/1.0}base.ReadChildren"*/), + CAN_GET_CHILDREN("canGetChildren", "canGetChildren.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetChildren.Folder", "{http://www.alfresco.org/model/system/1.0}base.ReadChildren"), + CAN_GET_FOLDER_PARENT("canGetFolderParent", "canGetParents.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetParents.Folder", "{http://www.alfresco.org/model/system/1.0}base.ReadProperties"), + CAN_GET_OBJECT_PARENTS("canGetObjectParents", "canGetFolderParent.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetFolderParent.Object", "{http://www.alfresco.org/model/system/1.0}base.ReadProperties"), // object services - CAN_CREATE_DOCUMENT("canCreateDocument"), - CAN_CREATE_FOLDER("canCreateFolder"), + CAN_CREATE_DOCUMENT("canCreateDocument", "canCreateDocument.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "canCreateDocument.Folder", "{http://www.alfresco.org/model/system/1.0}base.CreateChildren"), + CAN_CREATE_FOLDER("canCreateFolder", "canCreateFolder.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "canCreateFolder.Folder", "{http://www.alfresco.org/model/system/1.0}base.CreateChildren"), CAN_CREATE_RELATIONSHIP("canCreateRelationship"), - CAN_CREATE_POLICY("canCreatePolicy"), - CAN_GET_PROPERTIES("canGetProperties"), - CAN_GET_RENDITIONS("canGetRenditions"), - CAN_GET_CONTENT_STREAM("canGetContentStream"), - CAN_UPDATE_PROPERTIES("canUpdateProperties"), - CAN_MOVE_OBJECT("canMoveObject"), - CAN_DELETE_OBJECT("canDeleteObject"), - CAN_SET_CONTENT_STREAM("canSetContentStream"), - CAN_DELETE_CONTENT_STREAM("canDeleteContentStream"), - + CAN_GET_PROPERTIES("canGetProperties", "canGetProperties.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetProperties.Object", "{http://www.alfresco.org/model/system/1.0}base.ReadProperties"), + CAN_GET_RENDITIONS("canGetRenditions"/*, "canGetRenditions.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetRenditions.Object", "{http://www.alfresco.org/model/system/1.0}base.ReadProperties"*/), + CAN_GET_CONTENT_STREAM("canGetContentStream", "canViewContent.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "canViewContent.Object", "{http://www.alfresco.org/model/system/1.0}base.ReadContent"), + CAN_UPDATE_PROPERTIES("canUpdateProperties", "canUpdateProperties.Object", CMISAccessControlService.CMIS_WRITE_PERMISSION, "canUpdateProperties.Object", "{http://www.alfresco.org/model/system/1.0}base.WriteProperties"), + CAN_MOVE_OBJECT("canMoveObject", "canMove.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "canMove.Target", CMISAccessControlService.CMIS_ALL_PERMISSION, "canMove.Object", "{http://www.alfresco.org/model/system/1.0}base.DeleteNode", "canMove.Target", "{http://www.alfresco.org/model/system/1.0}base.CreateChildren"), + CAN_DELETE_OBJECT("canDeleteObject", "canDelete.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "canDelete.Object", "{http://www.alfresco.org/model/system/1.0}base.DeleteNode"), + CAN_SET_CONTENT_STREAM("canSetContentStream", "canSetContent.Document", CMISAccessControlService.CMIS_WRITE_PERMISSION, "canSetContent.Document", "{http://www.alfresco.org/model/system/1.0}base.WriteContent"), + CAN_DELETE_CONTENT_STREAM("canDeleteContentStream", "canDeleteContent.Document", CMISAccessControlService.CMIS_WRITE_PERMISSION, "canDeleteContent.Document", "{http://www.alfresco.org/model/system/1.0}base.WriteContent"), + CAN_DELETE_TREE("canDeleteTree", "canDeleteTree.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "canDeleteTree.Folder", "{http://www.alfresco.org/model/system/1.0}base.DeleteNode"), + // multi-filing services - CAN_ADD_OBJECT_TO_FOLDER("canAddObjectToFolder"), - CAN_REMOVE_OBJECT_FROM_FOLDER("canRemoveObjectFromFolder"), + CAN_ADD_OBJECT_TO_FOLDER("canAddObjectToFolder", "canAddToFolder.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "canAddToFolder.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "canAddToFolder.Object", "{http://www.alfresco.org/model/system/1.0}base.ReadProperties", "canAddToFolder.Folder", "{http://www.alfresco.org/model/system/1.0}base.CreateChildren"), + CAN_REMOVE_OBJECT_FROM_FOLDER("canRemoveObjectFromFolder", "canRemoveFromFolder.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "canRemoveFromFolder.Object", "{http://www.alfresco.org/model/system/1.0}base.DeleteNode"), // versioning services - CAN_CHECKOUT("canCheckOut"), - CAN_CANCEL_CHECKOUT("canCancelCheckOut"), - CAN_CHECKIN("canCheckIn"), - CAN_GET_ALL_VERSIONS("canGetAllVersions"), + CAN_CHECKOUT("canCheckOut", "canCheckout.Document", CMISAccessControlService.CMIS_ALL_PERMISSION, "canCheckout.Document", "{http://www.alfresco.org/model/content/1.0}lockable.CheckOut"), + CAN_CANCEL_CHECKOUT("canCancelCheckOut", "canCancelCheckout.Document", CMISAccessControlService.CMIS_ALL_PERMISSION, "canCancelCheckout.Document", "{http://www.alfresco.org/model/content/1.0}lockable.CancelCheckOut"), + CAN_CHECKIN("canCheckIn", "canCheckin.Document", CMISAccessControlService.CMIS_ALL_PERMISSION, "canCheckin.Document", "{http://www.alfresco.org/model/content/1.0}lockable.CheckIn"), + CAN_GET_ALL_VERSIONS("canGetAllVersions", "canGetAllVersions.VersionSeries", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetAllVersions.VersionSeries", "{http://www.alfresco.org/model/system/1.0}base.Read"), // relationship services CAN_GET_OBJECT_RELATIONSHIPS("canGetObjectRelationships"), // policy services - CAN_APPLY_POLICY("canApplyPolicy"), - CAN_REMOVE_POLICY("canRemovePolicy"), - CAN_GET_APPLIED_POLICIES("canGetAppliedPolicies"), + CAN_APPLY_POLICY("canApplyPolicy", "canAddPolicy.Object", CMISAccessControlService.CMIS_WRITE_PERMISSION, "canAddPolicy.Policy", CMISAccessControlService.CMIS_READ_PERMISSION, "canAddPolicy.Object", "{http://www.alfresco.org/model/system/1.0}base.Write"), + CAN_REMOVE_POLICY("canRemovePolicy", "canRemovePolicy.Object", CMISAccessControlService.CMIS_WRITE_PERMISSION, "canRemovePolicy.Policy", CMISAccessControlService.CMIS_READ_PERMISSION, "canRemovePolicy.Object", "{http://www.alfresco.org/model/system/1.0}base.Write"), + CAN_GET_APPLIED_POLICIES("canGetAppliedPolicies", "canGetAppliedPolicies.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "canGetAppliedPolicies.Object", "{http://www.alfresco.org/model/system/1.0}base.ReadProperties"), // acl services - CAN_GET_ACL("canGetACL"), - CAN_APPLY_ACL("canApplyACL"); + CAN_GET_ACL("canGetACL", "canGetACL.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "canGetACL.Object", "{http://www.alfresco.org/model/system/1.0}base.ReadPermissions"), + CAN_APPLY_ACL("canApplyACL", "canApplyACL.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "canApplyACL.Object", "{http://www.alfresco.org/model/system/1.0}base.ChangePermissions"); private String label; + private Map> mapping = new HashMap>(); + /** * Construct * * @param label */ - CMISAllowedActionEnum(String label) + CMISAllowedActionEnum(String label, String ... keysAndPermissions) { this.label = label; + assert(keysAndPermissions.length % 2 == 0); + for(int i = 0; i < keysAndPermissions.length; i++) + { + String key = keysAndPermissions[i]; + String permission = keysAndPermissions[++i]; + List permissions = mapping.get(key); + if(permissions == null) + { + permissions = new ArrayList(1); + mapping.put(key, permissions); + } + permissions.add(permission); + } } /* (non-Javadoc) @@ -94,6 +115,11 @@ public enum CMISAllowedActionEnum implements EnumLabel { return label; } + + public Map> getPermissionMapping() + { + return mapping; + } public static EnumFactory FACTORY = new EnumFactory(CMISAllowedActionEnum.class); } diff --git a/source/java/org/alfresco/cmis/CMISBaseObjectTypeIds.java b/source/java/org/alfresco/cmis/CMISBaseObjectTypeIds.java new file mode 100755 index 0000000000..ff824a8f82 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISBaseObjectTypeIds.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * Enumeration of base Alfresco Object type Ids. Possible values:
+ * DOCUMENT,
+ * FOLDER,
+ * RELATIONSHIP,
+ * POLICY + * + * @author Dmitry Velichkevich + */ +public enum CMISBaseObjectTypeIds implements EnumLabel +{ + DOCUMENT("cmis:document"), FOLDER("cmis:folder"), RELATIONSHIP("cmis:relationship"), POLICY("cmis:policy"); + + private String label; + + CMISBaseObjectTypeIds(String label) + { + this.label = label; + } + + public String getLabel() + { + return label; + } + + public static final EnumFactory FACTORY = new EnumFactory(CMISBaseObjectTypeIds.class); +} diff --git a/source/java/org/alfresco/cmis/CMISCapabilityChanges.java b/source/java/org/alfresco/cmis/CMISCapabilityChanges.java new file mode 100755 index 0000000000..2044fe9292 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISCapabilityChanges.java @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * Enumeration of the CMIS Changes Capability + * + * @author Dmitry Velichkevich + */ +public enum CMISCapabilityChanges implements EnumLabel +{ + NONE("none"), OBJECTIDSONLY("objectidsonly"); + + private String label; + + CMISCapabilityChanges(String label) + { + this.label = label; + } + + public String getLabel() + { + return label; + } + + public static final EnumFactory FACTORY = new EnumFactory(CMISCapabilityChanges.class); +} diff --git a/source/java/org/alfresco/cmis/CMISChangeEvent.java b/source/java/org/alfresco/cmis/CMISChangeEvent.java new file mode 100755 index 0000000000..9fb84ee154 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISChangeEvent.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.Date; + +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * This class describes entry record for some Change Log descriptor + * + * @author Dmitry Velichkevich + */ +public interface CMISChangeEvent +{ + /** + * @return {@link NodeRef} instance that represents Id of one of the Change Event objects for some Change Log Token + */ + public NodeRef getNode(); + + /** + * @return {@link CMISChangeType} enum value that determines the type of current Change Event + */ + public CMISChangeType getChangeType(); + + /** + * @return {@link Date} value that represents time of current Change Event + */ + public Date getChangeTime(); +} diff --git a/source/java/org/alfresco/cmis/CMISChangeLog.java b/source/java/org/alfresco/cmis/CMISChangeLog.java new file mode 100755 index 0000000000..77f26f0a3d --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISChangeLog.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.List; + +/** + * This class represents descriptor for some Change Log Token + * + * @author Dmitry Velichkevich + */ +public interface CMISChangeLog +{ + /** + * @return {@link List}<{@link CMISChangeEvent}> collection that contains all available for some Change Log Token Change Events descriptors + */ + public List getChangeEvents(); + + /** + * @return {@link Boolean} value that determines whether repository contains any more Change Events after some {@link CMISChangeLogService}.{@link #getChangeEvents()} + * invocation + */ + public boolean hasMoreItems(); + + /** + * Note: this is optional operation and actual Change Events amount in collection may not be equal to result of this method invocation + * + * @return {@link Integer} value that determines amount of Change Events those were returned + */ + public Integer getEventCount(); + + /** + * @return {@link String} value that represents the next generated Change Log Token + */ + public String getNextChangeToken(); +} diff --git a/source/java/org/alfresco/cmis/CMISChangeLogService.java b/source/java/org/alfresco/cmis/CMISChangeLogService.java new file mode 100755 index 0000000000..2b475e7ac8 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISChangeLogService.java @@ -0,0 +1,85 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.List; + +/** + * Service for manipulating with Change Log Events by Change Log Tokens. Also this service exposes some methods for describing Auditing features + * + * @author Dmitry Velichkevich + */ +public interface CMISChangeLogService +{ + /** + * @param changeLogToken - {@link String} value that represents some Change Log Token + * @param maxItems - {@link Integer} value that determines required amount of entries + * @return {@link CMISChangeLog} instance that describes entry mapped to specified Change Log Token + */ + public CMISChangeLog getChangeLogEvents(String changeLogToken, Integer maxItems); + + /** + * @return {@link String} value that represents Change Log Token which is currently actual + */ + public String getLastChangeLogToken(); + + /** + * Gets the change log token maxItems entries before the given one + * + * @param currentPageToken + * a change log token + * @param maxItems + * the number of entries to skip backwards + * @return the change log token maxItems entries before currentPageToken + */ + public String getPreviousPageChangeLogToken(String currentPageToken, Integer maxItems); + + /** + * Assuming that currentPageToken begins a page of maxItems entries, gets the token at the start of the final page. + * + * @param currentPageToken + * a change log token + * @param maxItems + * the number of entries per page + * @return the change log token at the start of the final page + */ + public String getLastPageChangeLogToken(String currentPageToken, Integer maxItems); + + /** + * @return {@link CMISCapabilityChanges} enum value that specifies currently configured Auditing feature mode + */ + public CMISCapabilityChanges getCapability(); + + /** + * @return {@link List}<{@link CMISBaseObjectTypeIds}> collection instance that contains configured value for Changes On Type capability + * @see CMISBaseObjectTypeIds + */ + public List getChangesOnTypeCapability(); + + /** + * @return always true + */ + public boolean getChangesIncomplete(); +} diff --git a/source/java/org/alfresco/cmis/CMISChangeType.java b/source/java/org/alfresco/cmis/CMISChangeType.java new file mode 100755 index 0000000000..dda1980057 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISChangeType.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * Enumeration of the CMIS Change Type. Possible values:
+ * CREATED
+ * UPDATED
+ * DELETED
+ * SECURITY + * + * @author Dmitry Velichkevich + */ +public enum CMISChangeType implements EnumLabel +{ + CREATED("created"), UPDATED("updated"), DELETED("deleted"), SECURITY("security"); + + private String label; + + CMISChangeType(String label) + { + this.label = label; + } + + public String getLabel() + { + return label; + } + + public static final EnumFactory FACTORY = new EnumFactory(CMISChangeType.class); +} diff --git a/source/java/org/alfresco/cmis/CMISConstraintException.java b/source/java/org/alfresco/cmis/CMISConstraintException.java new file mode 100644 index 0000000000..8e68c3d1dd --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISConstraintException.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * @author andyh + * + */ +public class CMISConstraintException extends CMISRuntimeException +{ + + /** + * + */ + private static final long serialVersionUID = 575343231113393902L; + + /** + * @param msgId + */ + public CMISConstraintException(String msgId) + { + super(msgId); + // TODO Auto-generated constructor stub + } + + /** + * @param msgId + * @param msgParams + */ + public CMISConstraintException(String msgId, Object[] msgParams) + { + super(msgId, msgParams); + // TODO Auto-generated constructor stub + } + + /** + * @param msgId + * @param cause + */ + public CMISConstraintException(String msgId, Throwable cause) + { + super(msgId, cause); + // TODO Auto-generated constructor stub + } + + /** + * @param msgId + * @param msgParams + * @param cause + */ + public CMISConstraintException(String msgId, Object[] msgParams, Throwable cause) + { + super(msgId, msgParams, cause); + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/cmis/CMISPermissionDefinition.java b/source/java/org/alfresco/cmis/CMISPermissionDefinition.java new file mode 100644 index 0000000000..ff60a151f5 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISPermissionDefinition.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +/** + * A permission definition + * + * @author andyh + * + */ +public interface CMISPermissionDefinition +{ + /** + * The unique permission string (used for assignment) + * @return the permission. + */ + public String getPermission(); + + /** + * An optional permission description. + * If not set, this defaults to the permission. + * + * @return the optional description. + */ + public String getDescription(); +} diff --git a/source/java/org/alfresco/cmis/CMISPermissionMapping.java b/source/java/org/alfresco/cmis/CMISPermissionMapping.java new file mode 100644 index 0000000000..5c80d72cab --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISPermissionMapping.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.List; + +/** + * A CMIS permission mapping. + * + * @author andyh + * + */ +public interface CMISPermissionMapping +{ + /** + * Get the allowed action key. + * @return the key. + */ + public String getKey(); + + /** + * Get the required permissions. + * If the list is of zero length the action is unprotected and allowed. + * (Disallowed actions never appear at all) + * For one or more entries a match against any permission allws. + * + * @return the list of required permissions. + */ + public List getPermissions(); +} diff --git a/source/java/org/alfresco/cmis/CMISPropertyLuceneBuilder.java b/source/java/org/alfresco/cmis/CMISPropertyLuceneBuilder.java index c2d4249a07..22b1e8159d 100644 --- a/source/java/org/alfresco/cmis/CMISPropertyLuceneBuilder.java +++ b/source/java/org/alfresco/cmis/CMISPropertyLuceneBuilder.java @@ -128,9 +128,10 @@ public interface CMISPropertyLuceneBuilder public Query buildLuceneLike(LuceneQueryParser lqp, Serializable value, Boolean not) throws ParseException; /** + * @param lqp TODO * @return the sort field */ - public String getLuceneSortField(); + public String getLuceneSortField(LuceneQueryParser lqp); /** * @return the field name diff --git a/source/java/org/alfresco/cmis/CMISQueryException.java b/source/java/org/alfresco/cmis/CMISQueryException.java index c90821c3bc..d7c9f6ca8b 100644 --- a/source/java/org/alfresco/cmis/CMISQueryException.java +++ b/source/java/org/alfresco/cmis/CMISQueryException.java @@ -24,13 +24,12 @@ */ package org.alfresco.cmis; -import org.alfresco.error.AlfrescoRuntimeException; /** * @author andyh * */ -public class CMISQueryException extends AlfrescoRuntimeException +public class CMISQueryException extends CMISRuntimeException { /** diff --git a/source/java/org/alfresco/cmis/CMISRendition.java b/source/java/org/alfresco/cmis/CMISRendition.java new file mode 100755 index 0000000000..661ff9e834 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISRendition.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * CMIS Document Rendition + * + * @author Stas Sokolovsky + */ +public interface CMISRendition +{ + /** + * Gets the thumbnail node reference + */ + public NodeRef getNodeRef(); + + /** + * Get the rendition stream id + * @return + */ + public String getStreamId(); + + /** + * Get the MIME type of the rendition stream. + * @return + */ + public String getMimeType(); + + /** + * Get rendition kind. + * @return + */ + public CMISRenditionKind getKind(); + + /** + * Get the height of image. Typically used for ‘image’ renditions (expressed as pixels). + * @return + */ + public Integer getHeight(); + + /** + * Get the width of image. Typically used for ‘image’ renditions (expressed as pixels). + * @return + */ + public Integer getWidth(); + + /** + * Get a human readable information about the rendition. + * @return + */ + public String getTitle(); + + /** + * Get the length of the rendition stream in bytes. + * @return + */ + public Integer getLength(); + + /** + * Get the rendition document id. If specified, then the rendition can also be accessed + * as a document object in the CMIS services. + * @return + */ + public String getRenditionDocumentId(); + +} diff --git a/source/java/org/alfresco/cmis/CMISRenditionKind.java b/source/java/org/alfresco/cmis/CMISRenditionKind.java new file mode 100755 index 0000000000..f288821a9a --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISRenditionKind.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + + +/** + * Enumeration of the CMIS Rendition Kinds + * + * @author Stas Sokolovsky + */ +public enum CMISRenditionKind implements EnumLabel +{ + THUMBNAIL("cmis:thumbnail"), + WEB_PREVIEW("alf:webpreview"), + ICON16("alf:icon16"), + ICON32("alf:icon32"); + + private String label; + + /** + * Construct + * + * @param label + */ + CMISRenditionKind(String label) + { + this.label = label; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.EnumLabel#label() + */ + public String getLabel() + { + return label; + } + + public static EnumFactory FACTORY = new EnumFactory(CMISRenditionKind.class); + +} diff --git a/source/java/org/alfresco/cmis/CMISRenditionService.java b/source/java/org/alfresco/cmis/CMISRenditionService.java new file mode 100755 index 0000000000..c5e94d8a32 --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISRenditionService.java @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import java.util.List; + +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * Service to retrieving renditions of document + * + * @author Stas Sokolovsky + */ +public interface CMISRenditionService +{ + /** + * Get renditions for a document. + * + * @param node node reference of document + * @param renditionFilter renditions filter + * @return list of renditions + */ + public List getRenditions(NodeRef node, String renditionFilter); + +} diff --git a/source/java/org/alfresco/cmis/CMISRuntimeException.java b/source/java/org/alfresco/cmis/CMISRuntimeException.java new file mode 100644 index 0000000000..7fbbb25ecb --- /dev/null +++ b/source/java/org/alfresco/cmis/CMISRuntimeException.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import org.alfresco.error.AlfrescoRuntimeException; + +/** + * @author andyh + * + */ +public class CMISRuntimeException extends AlfrescoRuntimeException +{ + + /** + * + */ + private static final long serialVersionUID = 121670154804835474L; + + /** + * @param msgId + */ + public CMISRuntimeException(String msgId) + { + super(msgId); + // TODO Auto-generated constructor stub + } + + /** + * @param msgId + * @param msgParams + */ + public CMISRuntimeException(String msgId, Object[] msgParams) + { + super(msgId, msgParams); + // TODO Auto-generated constructor stub + } + + /** + * @param msgId + * @param cause + */ + public CMISRuntimeException(String msgId, Throwable cause) + { + super(msgId, cause); + // TODO Auto-generated constructor stub + } + + /** + * @param msgId + * @param msgParams + * @param cause + */ + public CMISRuntimeException(String msgId, Object[] msgParams, Throwable cause) + { + super(msgId, msgParams, cause); + // TODO Auto-generated constructor stub + } + +} diff --git a/source/java/org/alfresco/cmis/CMISServices.java b/source/java/org/alfresco/cmis/CMISServices.java index 8fbc146954..e0cfafaa1d 100644 --- a/source/java/org/alfresco/cmis/CMISServices.java +++ b/source/java/org/alfresco/cmis/CMISServices.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,7 +18,7 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ @@ -83,6 +83,17 @@ public interface CMISServices */ public NodeRef getNode(String referenceType, String[] reference); + /** + * Gets a map of node attributes relating to renditions. + * + * @param nodeRef + * the node ref + * @param renditionFilter + * the rendition filter + * @return the attribute map + */ + public Map getRenditions(NodeRef nodeRef, String renditionFilter); + /** * Query for node children * diff --git a/source/java/org/alfresco/cmis/CMISTypeDefinition.java b/source/java/org/alfresco/cmis/CMISTypeDefinition.java index 2853f41daf..1ec084e74b 100644 --- a/source/java/org/alfresco/cmis/CMISTypeDefinition.java +++ b/source/java/org/alfresco/cmis/CMISTypeDefinition.java @@ -139,7 +139,7 @@ public interface CMISTypeDefinition * * @return */ - public boolean isIncludeInSuperTypeQuery(); + public boolean isIncludedInSuperTypeQuery(); /** * Is this type versionable? If true this implies all instances of the type are versionable. diff --git a/source/java/org/alfresco/cmis/EnumFactory.java b/source/java/org/alfresco/cmis/EnumFactory.java index 1c3e2de94c..0791f8715d 100644 --- a/source/java/org/alfresco/cmis/EnumFactory.java +++ b/source/java/org/alfresco/cmis/EnumFactory.java @@ -40,8 +40,8 @@ import java.util.TreeMap; */ public class EnumFactory> { - private Enum defaultEnum; - private Map> labelMap = new HashMap>(10); + private E defaultEnum; + private Map labelMap = new HashMap(10); /** * @param enumClass @@ -55,7 +55,7 @@ public class EnumFactory> * @param enumClass * @param defaultEnum */ - public EnumFactory(Class enumClass, Enum defaultEnum) + public EnumFactory(Class enumClass, E defaultEnum) { this(enumClass, defaultEnum, false); } @@ -65,17 +65,17 @@ public class EnumFactory> * @param defaultEnum * @param caseSensitive case-sensitive lookup for Enum label */ - public EnumFactory(Class enumClass, Enum defaultEnum, boolean caseSensitive) + public EnumFactory(Class enumClass, E defaultEnum, boolean caseSensitive) { this.defaultEnum = defaultEnum; // setup label map - labelMap = caseSensitive ? new HashMap>(10) : new TreeMap>(String.CASE_INSENSITIVE_ORDER); + labelMap = caseSensitive ? new HashMap(10) : new TreeMap(String.CASE_INSENSITIVE_ORDER); EnumSet enumSet = EnumSet.allOf(enumClass); Iterator iter = enumSet.iterator(); while(iter.hasNext()) { - Enum e = iter.next(); + E e = iter.next(); if (e instanceof EnumLabel) { labelMap.put(((EnumLabel)e).getLabel(), e); @@ -109,7 +109,7 @@ public class EnumFactory> * @param e enum * @return label (or null, if no label specified) */ - public String label(Enum e) + public String label(E e) { if (e instanceof EnumLabel) { @@ -135,7 +135,7 @@ public class EnumFactory> * @param label * @return enum (or null, if no enum has specified label) */ - public Enum fromLabel(String label) + public E fromLabel(String label) { return labelMap.get(label); } @@ -148,9 +148,9 @@ public class EnumFactory> * @param label * @return enum (or default enum, if label is invalid) */ - public Enum toEnum(String label) + public E toEnum(String label) { - Enum e = (label == null) ? null : fromLabel(label); + E e = (label == null) ? null : fromLabel(label); if (e == null) { e = defaultEnum; diff --git a/source/java/org/alfresco/cmis/UnsupportedCMISAclPropagationMode.java b/source/java/org/alfresco/cmis/UnsupportedCMISAclPropagationMode.java new file mode 100644 index 0000000000..f8cf415957 --- /dev/null +++ b/source/java/org/alfresco/cmis/UnsupportedCMISAclPropagationMode.java @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2005-2009 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.cmis; + +import org.alfresco.error.AlfrescoRuntimeException; + +/** + * Thrown when an unsupported CMISAclPropagationModeEnum is specified. + * @author andyh + * + */ +public class UnsupportedCMISAclPropagationMode extends AlfrescoRuntimeException +{ + + /** + * + */ + private static final long serialVersionUID = 3844368557738616296L; + + /** + * @param msgId + * @param msgParams + * @param cause + */ + public UnsupportedCMISAclPropagationMode(String msgId, Object[] msgParams, Throwable cause) + { + super(msgId, msgParams, cause); + } + + /** + * @param msgId + * @param msgParams + */ + public UnsupportedCMISAclPropagationMode(String msgId, Object[] msgParams) + { + super(msgId, msgParams); + } + + /** + * @param msgId + * @param cause + */ + public UnsupportedCMISAclPropagationMode(String msgId, Throwable cause) + { + super(msgId, cause); + } + + /** + * @param msgId + */ + public UnsupportedCMISAclPropagationMode(String msgId) + { + super(msgId); + } + + + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISAccessControlEntriesGroupedByPrincipalIdImpl.java b/source/java/org/alfresco/cmis/acl/CMISAccessControlEntriesGroupedByPrincipalIdImpl.java new file mode 100644 index 0000000000..a34b525ef0 --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISAccessControlEntriesGroupedByPrincipalIdImpl.java @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import java.util.ArrayList; +import java.util.List; + +import org.alfresco.cmis.CMISAccessControlEntriesGroupedByPrincipalId; +import org.alfresco.cmis.CMISAccessControlEntry; +import org.alfresco.cmis.CMISConstraintException; + +/** + * @author andyh + * + */ +public class CMISAccessControlEntriesGroupedByPrincipalIdImpl implements CMISAccessControlEntriesGroupedByPrincipalId +{ + private String principalId; + + private List directPermissions = new ArrayList(); + + private List indirectPermissions = new ArrayList(); + + /*package */ CMISAccessControlEntriesGroupedByPrincipalIdImpl(String principalId) + { + this.principalId = principalId; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlEntriesGroupedByPrincipalId#getDirectPermissions() + */ + public List getDirectPermissions() + { + return directPermissions; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlEntriesGroupedByPrincipalId#getInirectPermissions() + */ + public List getIndirectPermissions() + { + return indirectPermissions; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlEntriesGroupedByPrincipalId#getPrincipalId() + */ + public String getPrincipalId() + { + return principalId; + } + + /* package */ void addEntry(CMISAccessControlEntry entry) + { + if(!principalId.equals(entry.getPrincipalId())) + { + throw new CMISConstraintException("Grouping error in principal id"); + } + if(entry.getDirect()) + { + directPermissions.add(entry.getPermission()); + } + else + { + indirectPermissions.add(entry.getPermission()); + } + } + + + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISAccessControlEntryImpl.java b/source/java/org/alfresco/cmis/acl/CMISAccessControlEntryImpl.java new file mode 100644 index 0000000000..51da3e089e --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISAccessControlEntryImpl.java @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import org.alfresco.cmis.CMISAccessControlEntry; + +/** + * @author andyh + * + */ +public class CMISAccessControlEntryImpl implements CMISAccessControlEntry +{ + private String principalId; + + private String permission; + + private int position; + + /*package*/ CMISAccessControlEntryImpl(String principalId, String permission, int position) + { + this.principalId = principalId; + this.permission = permission; + this.position = position; + } + + /** + * Can be used for external calls to add or delete aces. + * (All must be at position 0 === directly set on the object) + * + * @param principalId + * @param permission + */ + public CMISAccessControlEntryImpl(String principalId, String permission) + { + this(principalId, permission, 0); + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlEntry#getDirect() + */ + public boolean getDirect() + { + return position == 0; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlEntry#getPermission() + */ + public String getPermission() + { + return permission; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlEntry#getPrincipalId() + */ + public String getPrincipalId() + { + return principalId; + } + + /** + * @return the position + */ + public int getPosition() + { + return position; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((permission == null) ? 0 : permission.hashCode()); + result = prime * result + position; + result = prime * result + ((principalId == null) ? 0 : principalId.hashCode()); + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final CMISAccessControlEntryImpl other = (CMISAccessControlEntryImpl) obj; + if (permission == null) + { + if (other.permission != null) + return false; + } + else if (!permission.equals(other.permission)) + return false; + if (position != other.position) + return false; + if (principalId == null) + { + if (other.principalId != null) + return false; + } + else if (!principalId.equals(other.principalId)) + return false; + return true; + } + + /* (non-Javadoc) + * @see java.lang.Object#toString() + */ + @Override + public String toString() + { + StringBuilder builder = new StringBuilder(); + builder.append("["); + builder.append(getPrincipalId()).append(", "); + builder.append(getPermission()).append(", "); + builder.append(getPosition()).append(", "); + builder.append(getDirect()).append("]"); + return builder.toString(); + } + + + + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISAccessControlReportImpl.java b/source/java/org/alfresco/cmis/acl/CMISAccessControlReportImpl.java new file mode 100644 index 0000000000..14c0c40702 --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISAccessControlReportImpl.java @@ -0,0 +1,113 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +import org.alfresco.cmis.CMISAccessControlEntriesGroupedByPrincipalId; +import org.alfresco.cmis.CMISAccessControlEntry; +import org.alfresco.cmis.CMISAccessControlReport; + +/** + * A simple CMIS access control report + * + * @author andyh + * + */ +public class CMISAccessControlReportImpl implements CMISAccessControlReport +{ + private ArrayList entries = new ArrayList(); + + private boolean extract = false; + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlReport#getAccessControlEntries() + */ + public List getAccessControlEntries() + { + return entries; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlReport#isExtract() + */ + public boolean isExtract() + { + return extract; + } + + /** + * Set extract. + * @param extract + */ + public void setExtract(boolean extract) + { + this.extract = extract; + } + + /*package*/ void addEntry(CMISAccessControlEntry entry) + { + removeEntry(entry); + entries.add(entry); + } + + /*package*/ void removeEntry(CMISAccessControlEntry entry) + { + for(int i = 0; i < entries.size(); i++) + { + CMISAccessControlEntry current = entries.get(i); + if(current.getPrincipalId().equals(entry.getPrincipalId()) && current.getPermission().equals(entry.getPermission())) + { + entries.remove(i); + i--; + } + } + + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlReport#getAccessControlEntriesGroupedByPrincipalId() + */ + public List getAccessControlEntriesGroupedByPrincipalId() + { + HashMap grouped = new HashMap(); + for(CMISAccessControlEntry entry : getAccessControlEntries()) + { + CMISAccessControlEntriesGroupedByPrincipalIdImpl value = grouped.get(entry.getPrincipalId()); + if(value == null) + { + value = new CMISAccessControlEntriesGroupedByPrincipalIdImpl(entry.getPrincipalId()); + grouped.put(entry.getPrincipalId(), value); + } + value.addEntry(entry); + } + ArrayList answer = new ArrayList(grouped.values()); + return answer; + } + + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISAccessControlServiceImpl.java b/source/java/org/alfresco/cmis/acl/CMISAccessControlServiceImpl.java new file mode 100644 index 0000000000..9b324f0aa8 --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISAccessControlServiceImpl.java @@ -0,0 +1,492 @@ +/* + * Copyright (C) 2005-2010 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 received a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.acl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.alfresco.cmis.CMISAccessControlEntry; +import org.alfresco.cmis.CMISAccessControlFormatEnum; +import org.alfresco.cmis.CMISAccessControlReport; +import org.alfresco.cmis.CMISAccessControlService; +import org.alfresco.cmis.CMISAclCapabilityEnum; +import org.alfresco.cmis.CMISAclPropagationEnum; +import org.alfresco.cmis.CMISAclSupportedPermissionEnum; +import org.alfresco.cmis.CMISAllowedActionEnum; +import org.alfresco.cmis.CMISConstraintException; +import org.alfresco.cmis.CMISDictionaryService; +import org.alfresco.cmis.CMISPermissionDefinition; +import org.alfresco.cmis.CMISPermissionMapping; +import org.alfresco.cmis.CMISTypeDefinition; +import org.alfresco.cmis.mapping.CMISMapping; +import org.alfresco.repo.security.authentication.AuthenticationUtil; +import org.alfresco.repo.security.permissions.PermissionReference; +import org.alfresco.repo.security.permissions.impl.AccessPermissionImpl; +import org.alfresco.repo.security.permissions.impl.ModelDAO; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.security.AccessPermission; +import org.alfresco.service.cmr.security.AccessStatus; +import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.namespace.QName; + +/** + * @author andyh + */ +public class CMISAccessControlServiceImpl implements CMISAccessControlService +{ + private CMISAclCapabilityEnum aclCapabilityEnum; + + private CMISAclSupportedPermissionEnum aclSupportedPermissionEnum; + + private CMISAclPropagationEnum aclPropagationEnum; + + private ModelDAO permissionModelDao; + + private PermissionService permissionService; + + private CMISMapping cmisMapping; + + private NodeService nodeService; + + private CMISDictionaryService cmisDictionaryService; + + /** + * @param aclCapabilityEnum + * the aclCapabilityEnum to set + */ + public void setAclCapabilityEnum(CMISAclCapabilityEnum aclCapabilityEnum) + { + this.aclCapabilityEnum = aclCapabilityEnum; + } + + /** + * Sets the acl supported permission enum. + * + * @param aclSupportedPermissionEnum + * the aclSupportedPermissionEnum to set + */ + public void setAclSupportedPermissionEnum(CMISAclSupportedPermissionEnum aclSupportedPermissionEnum) + { + this.aclSupportedPermissionEnum = aclSupportedPermissionEnum; + } + + /** + * @param aclPropagationEnum + * the aclPropagationEnum to set + */ + public void setAclPropagationEnum(CMISAclPropagationEnum aclPropagationEnum) + { + this.aclPropagationEnum = aclPropagationEnum; + } + + /** + * @param permissionModelDao + * the permissionModelDao to set + */ + public void setPermissionModelDao(ModelDAO permissionModelDao) + { + this.permissionModelDao = permissionModelDao; + } + + /** + * @param permissionService + * the permissionService to set + */ + public void setPermissionService(PermissionService permissionService) + { + this.permissionService = permissionService; + } + + /** + * Sets the cmis mapping. + * + * @param cmisMapping + * the cmis mapping + */ + public void setCMISMapping(CMISMapping cmisMapping) + { + this.cmisMapping = cmisMapping; + } + + /** + * @param nodeService + * the nodeService to set + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * @param cmisDictionaryService + * the cmisDictionaryService to set + */ + public void setCMISDictionaryService(CMISDictionaryService cmisDictionaryService) + { + this.cmisDictionaryService = cmisDictionaryService; + } + + /* + * (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlService#applyAcl(org.alfresco.service.cmr.repository.NodeRef, + * java.util.List) + */ + public CMISAccessControlReport applyAcl(NodeRef nodeRef, List acesToApply) + { + Set acesToAdd = new LinkedHashSet(acesToApply); + List acesExisting = getAcl(nodeRef, + CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS).getAccessControlEntries(); + List acesToRemove = new ArrayList(acesExisting.size()); + for (CMISAccessControlEntry accessControlEntry : acesExisting) + { + // Only pay attention to existing direct entries + if (accessControlEntry.getDirect() && !acesToAdd.remove(accessControlEntry)) + { + acesToRemove.add(accessControlEntry); + } + } + return applyAcl(nodeRef, acesToRemove, new ArrayList(acesToAdd), + CMISAclPropagationEnum.PROPAGATE, + CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.CMISAccessControlService#applyAcl(org.alfresco.service.cmr.repository.NodeRef, + * java.util.List, java.util.List, org.alfresco.cmis.CMISAclPropagationEnum) + */ + public CMISAccessControlReport applyAcl(NodeRef nodeRef, List acesToRemove, List acesToAdd, CMISAclPropagationEnum propagation, + CMISAccessControlFormatEnum format) + { + if (propagation != CMISAclPropagationEnum.PROPAGATE) + { + throw new CMISConstraintException("Unsupported ACL propagation mode: " + propagation); + } + // Check controllable ACL + QName type = nodeService.getType(nodeRef); + CMISTypeDefinition cmisType = cmisDictionaryService.findTypeForClass(type); + if (false == cmisType.isControllableACL()) + { + throw new CMISConstraintException("ACLs are not supported for type: " + cmisType.getDisplayName()); + } + // TODO: Check valid permissions. We do not check this internally. Ignore for now ... + + if (acesToRemove != null) + { + Set permissions = permissionService.getAllSetPermissions(nodeRef); + for (CMISAccessControlEntry entry : acesToRemove) + { + String alfrescoPermission = cmisMapping.getSetPermission(compressPermission(entry.getPermission())); + AccessPermission toCheck = new AccessPermissionImpl(alfrescoPermission, AccessStatus.ALLOWED, entry.getPrincipalId(), 0); + if (false == permissions.contains(toCheck)) + { + throw new CMISConstraintException("No matching ACE found to delete"); + } + permissionService.deletePermission(nodeRef, entry.getPrincipalId(), alfrescoPermission); + } + } + if (acesToAdd != null) + { + for (CMISAccessControlEntry entry : acesToAdd) + { + String alfrescoPermission = cmisMapping.getSetPermission(compressPermission(entry.getPermission())); + permissionService.setPermission(nodeRef, entry.getPrincipalId(), alfrescoPermission, true); + } + } + return getAcl(nodeRef, format); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.CMISAccessControlService#getAcl(org.alfresco.service.cmr.repository.NodeRef, + * org.alfresco.cmis.CMISAccessControlFormatEnum) + */ + public CMISAccessControlReport getAcl(NodeRef nodeRef, CMISAccessControlFormatEnum format) + { + CMISAccessControlReportImpl answer = new CMISAccessControlReportImpl(); + // Need to compact deny to mask correctly + Set permissions = permissionService.getAllSetPermissions(nodeRef); + ArrayList ordered = new ArrayList(); + AccessPermissionComparator comparator = new AccessPermissionComparator(); + for (AccessPermission current : permissions) + { + int index = Collections.binarySearch(ordered, current, comparator); + if (index < 0) + { + ordered.add(-index - 1, current); + } + } + + for (AccessPermission entry : ordered) + { + if (entry.getAccessStatus() == AccessStatus.ALLOWED) + { + answer.addEntry(new CMISAccessControlEntryImpl(entry.getAuthority(), expandPermission(cmisMapping.getReportedPermission(getPermission(entry.getPermission()), + format)), entry.getPosition())); + } + else if (entry.getAccessStatus() == AccessStatus.DENIED) + { + answer.removeEntry(new CMISAccessControlEntryImpl(entry.getAuthority(), expandPermission(cmisMapping.getReportedPermission(getPermission(entry.getPermission()), + format)), entry.getPosition())); + } + } + return answer; + } + + private String getPermission(String string) + { + PermissionReference permissionReference = permissionModelDao.getPermissionReference(null, string); + if (permissionModelDao.isUnique(permissionReference)) + { + return permissionReference.getName(); + } + else + { + return permissionReference.toString(); + } + } + + private String expandPermission(String permission) + { + if (permission.equals(CMIS_ALL_PERMISSION)) + { + return permission; + } + else if (permission.equals(CMIS_READ_PERMISSION)) + { + return permission; + } + else if (permission.equals(CMIS_WRITE_PERMISSION)) + { + return permission; + + } + else if (permission.startsWith("{")) + { + return permission; + } + else + { + PermissionReference permissionReference = permissionModelDao.getPermissionReference(null, permission); + return permissionReference.toString(); + } + } + + private String compressPermission(String permission) { + int sepIndex; + if (permission.equals(CMIS_ALL_PERMISSION) || permission.equals(CMIS_READ_PERMISSION) + || permission.equals(CMIS_WRITE_PERMISSION) || !permission.startsWith("{") + || (sepIndex = permission.lastIndexOf('.')) == -1) { + return permission; + } + return permission.substring(sepIndex + 1); + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.CMISAccessControlService#getAclCapability() + */ + public CMISAclCapabilityEnum getAclCapability() + { + return aclCapabilityEnum; + } + + /** + * Set the acl capability enum. + * + * @param aclCapabilityEnum + */ + public void setAclCapability(CMISAclCapabilityEnum aclCapabilityEnum) + { + this.aclCapabilityEnum = aclCapabilityEnum; + } + + /* + * (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlService#getSupportedPermissions() + */ + public CMISAclSupportedPermissionEnum getSupportedPermissions() + { + return this.aclSupportedPermissionEnum; + } + + /** + * Sets the supported permissions. + * + * @param aclSupportedPermissionEnum + * the supported permissions + */ + public void setSupportedPermissions(CMISAclSupportedPermissionEnum aclSupportedPermissionEnum) + { + this.aclSupportedPermissionEnum = aclSupportedPermissionEnum; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.CMISAccessControlService#getAclPropagation() + */ + public CMISAclPropagationEnum getAclPropagation() + { + return aclPropagationEnum; + } + + /** + * Set the acl propagation enum. + * + * @param aclPropagationEnum + */ + public void setAclPropagation(CMISAclPropagationEnum aclPropagationEnum) + { + this.aclPropagationEnum = aclPropagationEnum; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.CMISAccessControlService#getPermissionMappings() + */ + public List getPermissionMappings() + { + ArrayList mappings = new ArrayList(); + for(CMISAllowedActionEnum e : EnumSet.allOf(CMISAllowedActionEnum.class)) + { + Map> enumMappings = e.getPermissionMapping(); + for(String key : enumMappings.keySet()) + { + List list = enumMappings.get(key); + CMISPermissionMappingImpl mapping = new CMISPermissionMappingImpl(key, list); + mappings.add(mapping); + } + } + return mappings; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.CMISAccessControlService#getRepositoryPermissions() + */ + public List getRepositoryPermissions() + { + ArrayList answer = new ArrayList(); + PermissionReference allPermission = permissionModelDao.getPermissionReference(null, PermissionService.ALL_PERMISSIONS); + Set all = permissionModelDao.getAllExposedPermissions(); + for (PermissionReference pr : all) + { + addPermissionDefinition(answer, pr); + } + // Add All + addPermissionDefinition(answer, allPermission); + // Add CMIS permissions + answer.add(new CMISPermissionDefinitionImpl(CMIS_ALL_PERMISSION)); + answer.add(new CMISPermissionDefinitionImpl(CMIS_READ_PERMISSION)); + answer.add(new CMISPermissionDefinitionImpl(CMIS_WRITE_PERMISSION)); + return answer; + } + + /* + * (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlService#getPrincipalAnonymous() + */ + public String getPrincipalAnonymous() + { + return AuthenticationUtil.getGuestUserName(); + } + + /* + * (non-Javadoc) + * @see org.alfresco.cmis.CMISAccessControlService#getPrincipalAnyone() + */ + public String getPrincipalAnyone() + { + return PermissionService.ALL_AUTHORITIES; + } + + private void addPermissionDefinition(ArrayList list, PermissionReference pr) + { + CMISPermissionDefinitionImpl def = new CMISPermissionDefinitionImpl(getPermissionString(pr)); + list.add(def); + } + + private String getPermissionString(PermissionReference pr) + { + StringBuilder builder = new StringBuilder(); + builder.append(pr.getQName().toString()); + builder.append("."); + builder.append(pr.getName()); + return builder.toString(); + } + + public static class AccessPermissionComparator implements Comparator + { + + /* + * (non-Javadoc) + * + * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object) + */ + public int compare(AccessPermission left, AccessPermission right) + { + if (left.getPosition() != right.getPosition()) + { + return right.getPosition() - left.getPosition(); + } + else + { + if (left.getAccessStatus() != right.getAccessStatus()) + { + return (left.getAccessStatus() == AccessStatus.DENIED) ? -1 : 1; + } + else + { + int compare = left.getAuthority().compareTo(right.getAuthority()); + if (compare != 0) + { + return compare; + } + else + { + return (left.getPermission().compareTo(right.getPermission())); + } + + } + + } + } + + } + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISAccessControlServiceTest.java b/source/java/org/alfresco/cmis/acl/CMISAccessControlServiceTest.java new file mode 100644 index 0000000000..2e61b076e1 --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISAccessControlServiceTest.java @@ -0,0 +1,581 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.alfresco.cmis.CMISAccessControlEntriesGroupedByPrincipalId; +import org.alfresco.cmis.CMISAccessControlEntry; +import org.alfresco.cmis.CMISAccessControlFormatEnum; +import org.alfresco.cmis.CMISAccessControlReport; +import org.alfresco.cmis.CMISAccessControlService; +import org.alfresco.cmis.CMISAclCapabilityEnum; +import org.alfresco.cmis.CMISAclPropagationEnum; +import org.alfresco.cmis.CMISConstraintException; +import org.alfresco.cmis.CMISPermissionDefinition; +import org.alfresco.cmis.CMISPermissionMapping; +import org.alfresco.cmis.acl.CMISAccessControlServiceImpl.AccessPermissionComparator; +import org.alfresco.cmis.mapping.BaseCMISTest; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.security.permissions.PermissionReference; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.security.AccessPermission; +import org.alfresco.service.cmr.security.AccessStatus; +import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.namespace.QName; + +/** + * @author andyh + */ +public class CMISAccessControlServiceTest extends BaseCMISTest +{ + private NodeRef parent; + + private NodeRef child; + + private NodeRef grandParent; + + public void testAclPropagationMode() + { + assertEquals(CMISAclPropagationEnum.PROPAGATE, cmisAccessControlService.getAclPropagation()); + } + + public void testAclCapability() + { + assertEquals(CMISAclCapabilityEnum.MANAGE, cmisAccessControlService.getAclCapability()); + } + + public void testPermissions() + { + List allPermissions = cmisAccessControlService.getRepositoryPermissions(); + assertEquals(69, allPermissions.size()); + HashSet permissionSet = new HashSet(); + permissionSet.addAll(allPermissions); + assertEquals(69, permissionSet.size()); + + } + + public void testAclReportingCmisPermissionsOnly() + { + createTestAcls(); + + CMISAccessControlReport grandParentReport = cmisAccessControlService.getAcl(grandParent, CMISAccessControlFormatEnum.CMIS_BASIC_PERMISSIONS); + assertFalse(grandParentReport.isExtract()); + assertEquals(7, grandParentReport.getAccessControlEntries().size()); + assertTrue(checkCounts(grandParentReport, PermissionService.ADMINISTRATOR_AUTHORITY, 1, 0)); + assertTrue(checkCounts(grandParentReport, PermissionService.ALL_AUTHORITIES, 1, 0)); + assertTrue(checkCounts(grandParentReport, "ToMask", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Full", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Reader", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Writer", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Multi", 1, 0)); + + CMISAccessControlReport parentReport = cmisAccessControlService.getAcl(parent, CMISAccessControlFormatEnum.CMIS_BASIC_PERMISSIONS); + assertFalse(parentReport.isExtract()); + assertEquals(9, parentReport.getAccessControlEntries().size()); + assertTrue(checkCounts(parentReport, PermissionService.ADMINISTRATOR_AUTHORITY, 0, 1)); + assertTrue(checkCounts(parentReport, PermissionService.ALL_AUTHORITIES, 0, 1)); + assertTrue(checkAbsent(parentReport, "ToMask")); + assertTrue(checkCounts(parentReport, "Full", 0, 1)); + assertTrue(checkCounts(parentReport, "Reader", 0, 1)); + assertTrue(checkCounts(parentReport, "Writer", 0, 1)); + assertTrue(checkCounts(parentReport, "SplitRead", 1, 0)); + assertTrue(checkCounts(parentReport, "SplitWrite", 1, 0)); + assertTrue(checkCounts(parentReport, "DuplicateRead", 1, 0)); + assertTrue(checkCounts(parentReport, "Multi", 1, 0)); + + CMISAccessControlReport childReport = cmisAccessControlService.getAcl(child, CMISAccessControlFormatEnum.CMIS_BASIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(12, childReport.getAccessControlEntries().size()); + assertTrue(checkCounts(childReport, PermissionService.ADMINISTRATOR_AUTHORITY, 0, 1)); + assertTrue(checkCounts(childReport, PermissionService.ALL_AUTHORITIES, 0, 1)); + assertTrue(checkAbsent(childReport, "ToMask")); + assertTrue(checkCounts(childReport, "Full", 0, 1)); + assertTrue(checkCounts(childReport, "Reader", 0, 1)); + assertTrue(checkCounts(childReport, "Writer", 0, 1)); + assertTrue(checkCounts(childReport, "SplitRead", 1, 0)); + assertTrue(checkCounts(childReport, "SplitWrite", 1, 0)); + assertTrue(checkCounts(childReport, "DuplicateRead", 1, 0)); + assertTrue(checkCounts(childReport, "Writer2", 1, 0)); + assertTrue(checkCounts(childReport, "Multi", 3, 0)); + } + + private Set getAllPermissions() + { + HashSet answer = new HashSet(); + PermissionReference allPermission = permissionModelDao.getPermissionReference(null, PermissionService.ALL_PERMISSIONS); + Set all = permissionModelDao.getAllPermissions(); + for (PermissionReference pr : all) + { + answer.add(pr.toString()); + } + // Add All + answer.add(allPermission.toString()); + // Add CMIS permissions + answer.add(CMISAccessControlService.CMIS_ALL_PERMISSION); + answer.add(CMISAccessControlService.CMIS_READ_PERMISSION); + answer.add(CMISAccessControlService.CMIS_WRITE_PERMISSION); + return answer; + } + + private boolean checkCounts(CMISAccessControlReport report, String key, int direct, int indirect) + { + // check all permissions are valid + + Set permissionNames = getAllPermissions(); + + for (CMISAccessControlEntry entry : report.getAccessControlEntries()) + { + if (!permissionNames.contains(entry.getPermission())) + { + return false; + } + } + + // check counts + + for (CMISAccessControlEntriesGroupedByPrincipalId group : report.getAccessControlEntriesGroupedByPrincipalId()) + { + if (group.getPrincipalId().equals(key)) + { + if (group.getDirectPermissions().size() != direct) + { + return false; + } + if (group.getIndirectPermissions().size() != indirect) + { + return false; + } + return true; + } + } + return false; + } + + private boolean checkAbsent(CMISAccessControlReport report, String key) + { + for (CMISAccessControlEntriesGroupedByPrincipalId group : report.getAccessControlEntriesGroupedByPrincipalId()) + { + if (group.getPrincipalId().equals(key)) + { + return false; + } + } + return true; + } + + public void testAclReportingAllPermissions() + { + createTestAcls(); + + CMISAccessControlReport grandParentReport = cmisAccessControlService.getAcl(grandParent, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(grandParentReport.isExtract()); + assertEquals(7, grandParentReport.getAccessControlEntries().size()); + assertTrue(checkCounts(grandParentReport, PermissionService.ADMINISTRATOR_AUTHORITY, 1, 0)); + assertTrue(checkCounts(grandParentReport, PermissionService.ALL_AUTHORITIES, 1, 0)); + assertTrue(checkCounts(grandParentReport, "ToMask", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Full", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Reader", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Writer", 1, 0)); + assertTrue(checkCounts(grandParentReport, "Multi", 1, 0)); + + CMISAccessControlReport parentReport = cmisAccessControlService.getAcl(parent, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(parentReport.isExtract()); + assertEquals(10, parentReport.getAccessControlEntries().size()); + assertTrue(checkCounts(parentReport, PermissionService.ADMINISTRATOR_AUTHORITY, 0, 1)); + assertTrue(checkCounts(parentReport, PermissionService.ALL_AUTHORITIES, 0, 1)); + assertTrue(checkAbsent(parentReport, "ToMask")); + assertTrue(checkCounts(parentReport, "Full", 0, 1)); + assertTrue(checkCounts(parentReport, "Reader", 0, 1)); + assertTrue(checkCounts(parentReport, "Writer", 0, 1)); + assertTrue(checkCounts(parentReport, "SplitRead", 1, 0)); + assertTrue(checkCounts(parentReport, "SplitWrite", 1, 0)); + assertTrue(checkCounts(parentReport, "DuplicateRead", 1, 0)); + assertTrue(checkCounts(parentReport, "Multi", 1, 1)); + + CMISAccessControlReport childReport = cmisAccessControlService.getAcl(child, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(16, childReport.getAccessControlEntries().size()); + assertTrue(checkCounts(childReport, PermissionService.ADMINISTRATOR_AUTHORITY, 0, 1)); + assertTrue(checkCounts(childReport, PermissionService.ALL_AUTHORITIES, 0, 1)); + assertTrue(checkAbsent(childReport, "ToMask")); + assertTrue(checkCounts(childReport, "Full", 0, 1)); + assertTrue(checkCounts(childReport, "Reader", 0, 1)); + assertTrue(checkCounts(childReport, "Writer", 0, 1)); + assertTrue(checkCounts(childReport, "SplitRead", 1, 1)); + assertTrue(checkCounts(childReport, "SplitWrite", 1, 1)); + assertTrue(checkCounts(childReport, "DuplicateRead", 1, 0)); + assertTrue(checkCounts(childReport, "Multi", 3, 2)); + assertTrue(checkCounts(childReport, "Writer2", 1, 0)); + } + + private void createTestAcls() + { + grandParent = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Parent", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + nodeService.setProperty(grandParent, ContentModel.PROP_NAME, "GrandParent"); + parent = nodeService.createNode(grandParent, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Child", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + nodeService.setProperty(parent, ContentModel.PROP_NAME, "Parent"); + child = nodeService.createNode(parent, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Child", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + nodeService.setProperty(child, ContentModel.PROP_NAME, "Child"); + permissionService.setPermission(grandParent, PermissionService.ADMINISTRATOR_AUTHORITY, PermissionService.ALL_PERMISSIONS, true); + permissionService.setPermission(grandParent, PermissionService.ALL_AUTHORITIES, PermissionService.READ, true); + permissionService.setPermission(grandParent, "ToMask", PermissionService.READ, true); + permissionService.setPermission(grandParent, "Full", PermissionService.FULL_CONTROL, true); + permissionService.setPermission(grandParent, "Writer", PermissionService.WRITE, true); + permissionService.setPermission(grandParent, "Reader", PermissionService.READ, true); + permissionService.setPermission(grandParent, "Multi", PermissionService.DELETE, true); + + permissionService.setPermission(parent, "ToMask", PermissionService.READ, false); + permissionService.setPermission(parent, "SplitRead", PermissionService.READ_PROPERTIES, true); + permissionService.setPermission(parent, "SplitWrite", PermissionService.WRITE_CONTENT, true); + permissionService.setPermission(parent, "DuplicateRead", PermissionService.READ, true); + permissionService.setPermission(parent, "Multi", PermissionService.CREATE_CHILDREN, true); + + permissionService.setPermission(child, "SplitRead", PermissionService.READ_CONTENT, true); + permissionService.setPermission(child, "Writer2", PermissionService.WRITE, true); + permissionService.setPermission(child, "SplitWrite", PermissionService.WRITE_PROPERTIES, true); + permissionService.setPermission(child, "DuplicateRead", PermissionService.READ, true); + permissionService.setPermission(child, "Multi", PermissionService.READ, true); + permissionService.setPermission(child, "Multi", PermissionService.WRITE, true); + permissionService.setPermission(child, "Multi", PermissionService.SET_OWNER, true); + + } + + public void testAccessEntryOrdering() + { + createTestAcls(); + + Set permDefs = new HashSet(); + permDefs.addAll(cmisAccessControlService.getRepositoryPermissions()); + + Set permissions = permissionService.getAllSetPermissions(child); + ArrayList ordered = new ArrayList(); + AccessPermissionComparator comparator = new AccessPermissionComparator(); + for (AccessPermission current : permissions) + { + int index = Collections.binarySearch(ordered, current, comparator); + if (index < 0) + { + ordered.add(-index - 1, current); + } + } + int i = 0; + assertEquals(4, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Full", ordered.get(i).getAuthority()); + + i++; + assertEquals(4, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals(PermissionService.ALL_AUTHORITIES, ordered.get(i).getAuthority()); + + i++; + assertEquals(4, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Multi", ordered.get(i).getAuthority()); + + i++; + assertEquals(4, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals(PermissionService.ADMINISTRATOR_AUTHORITY, ordered.get(i).getAuthority()); + + i++; + assertEquals(4, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Reader", ordered.get(i).getAuthority()); + + i++; + assertEquals(4, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("ToMask", ordered.get(i).getAuthority()); + + i++; + assertEquals(4, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Writer", ordered.get(i).getAuthority()); + + i++; + assertEquals(2, ordered.get(i).getPosition()); + assertEquals(AccessStatus.DENIED, ordered.get(i).getAccessStatus()); + assertEquals("ToMask", ordered.get(i).getAuthority()); + + i++; + assertEquals(2, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("DuplicateRead", ordered.get(i).getAuthority()); + + i++; + assertEquals(2, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Multi", ordered.get(i).getAuthority()); + + i++; + assertEquals(2, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("SplitRead", ordered.get(i).getAuthority()); + + i++; + assertEquals(2, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("SplitWrite", ordered.get(i).getAuthority()); + + i++; + assertEquals(0, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("DuplicateRead", ordered.get(i).getAuthority()); + + i++; + assertEquals(0, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Multi", ordered.get(i).getAuthority()); + + i++; + assertEquals(0, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Multi", ordered.get(i).getAuthority()); + + i++; + assertEquals(0, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Multi", ordered.get(i).getAuthority()); + + i++; + assertEquals(0, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("SplitRead", ordered.get(i).getAuthority()); + + i++; + assertEquals(0, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("SplitWrite", ordered.get(i).getAuthority()); + + i++; + assertEquals(0, ordered.get(i).getPosition()); + assertEquals(AccessStatus.ALLOWED, ordered.get(i).getAccessStatus()); + assertEquals("Writer2", ordered.get(i).getAuthority()); + } + + public void testApplyAcl() + { + grandParent = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Parent", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + nodeService.setProperty(grandParent, ContentModel.PROP_NAME, "GrandParent"); + parent = nodeService.createNode(grandParent, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Child", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + nodeService.setProperty(parent, ContentModel.PROP_NAME, "Parent"); + child = nodeService.createNode(parent, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Child", namespaceService), ContentModel.TYPE_CONTENT).getChildRef(); + nodeService.setProperty(child, ContentModel.PROP_NAME, "Child"); + + List acesToAdd = new ArrayList(); + acesToAdd.add(new CMISAccessControlEntryImpl(PermissionService.ADMINISTRATOR_AUTHORITY, PermissionService.ALL_PERMISSIONS)); + acesToAdd.add(new CMISAccessControlEntryImpl(PermissionService.ALL_AUTHORITIES, PermissionService.READ)); + acesToAdd.add(new CMISAccessControlEntryImpl("ToMask", PermissionService.READ)); + acesToAdd.add(new CMISAccessControlEntryImpl("Full", PermissionService.FULL_CONTROL)); + acesToAdd.add(new CMISAccessControlEntryImpl("Writer", PermissionService.WRITE)); + acesToAdd.add(new CMISAccessControlEntryImpl("Reader", PermissionService.READ)); + + CMISAccessControlReport grandParentReport = cmisAccessControlService.applyAcl(grandParent, null, acesToAdd, CMISAclPropagationEnum.PROPAGATE, + CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(grandParentReport.isExtract()); + assertEquals(6, grandParentReport.getAccessControlEntries().size()); + + List acesToRemove = new ArrayList(); + acesToRemove.add(new CMISAccessControlEntryImpl("ToMask", PermissionService.READ)); + + grandParentReport = cmisAccessControlService.applyAcl(grandParent, acesToRemove, null, CMISAclPropagationEnum.PROPAGATE, + CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(grandParentReport.isExtract()); + assertEquals(5, grandParentReport.getAccessControlEntries().size()); + + try + { + grandParentReport = cmisAccessControlService.applyAcl(grandParent, acesToRemove, null, CMISAclPropagationEnum.PROPAGATE, + CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + fail("A non existent ACE should not be removable"); + } + catch (CMISConstraintException e) + { + + } + acesToAdd = new ArrayList(); + acesToAdd.add(new CMISAccessControlEntryImpl("SplitRead", permissionModelDao.getPermissionReference(null, PermissionService.READ_PROPERTIES).toString())); + acesToAdd.add(new CMISAccessControlEntryImpl("SplitWrite", permissionModelDao.getPermissionReference(null, PermissionService.WRITE_CONTENT).toString())); + acesToAdd.add(new CMISAccessControlEntryImpl("DuplicateRead", permissionModelDao.getPermissionReference(null, PermissionService.READ).toString())); + + CMISAccessControlReport parentReport = cmisAccessControlService.applyAcl(parent, null, acesToAdd, CMISAclPropagationEnum.PROPAGATE, + CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(parentReport.isExtract()); + assertEquals(8, parentReport.getAccessControlEntries().size()); + + acesToAdd = new ArrayList(); + acesToAdd.add(new CMISAccessControlEntryImpl("SplitRead", PermissionService.READ_CONTENT)); + acesToAdd.add(new CMISAccessControlEntryImpl("Writer2", PermissionService.WRITE)); + acesToAdd.add(new CMISAccessControlEntryImpl("SplitWrite", PermissionService.WRITE_PROPERTIES)); + acesToAdd.add(new CMISAccessControlEntryImpl("DuplicateRead", PermissionService.READ)); + + CMISAccessControlReport childReport = cmisAccessControlService.applyAcl(child, null, acesToAdd, CMISAclPropagationEnum.PROPAGATE, + CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(11, childReport.getAccessControlEntries().size()); + + grandParentReport = cmisAccessControlService.getAcl(grandParent, CMISAccessControlFormatEnum.CMIS_BASIC_PERMISSIONS); + assertFalse(grandParentReport.isExtract()); + assertEquals(5, grandParentReport.getAccessControlEntries().size()); + + parentReport = cmisAccessControlService.getAcl(parent, CMISAccessControlFormatEnum.CMIS_BASIC_PERMISSIONS); + assertFalse(parentReport.isExtract()); + assertEquals(8, parentReport.getAccessControlEntries().size()); + + childReport = cmisAccessControlService.getAcl(child, CMISAccessControlFormatEnum.CMIS_BASIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(9, childReport.getAccessControlEntries().size()); + + grandParentReport = cmisAccessControlService.getAcl(grandParent, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(grandParentReport.isExtract()); + assertEquals(5, grandParentReport.getAccessControlEntries().size()); + + parentReport = cmisAccessControlService.getAcl(parent, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(parentReport.isExtract()); + assertEquals(8, parentReport.getAccessControlEntries().size()); + + childReport = cmisAccessControlService.getAcl(child, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(11, childReport.getAccessControlEntries().size()); + + acesToAdd = new ArrayList(); + acesToAdd.add(new CMISAccessControlEntryImpl("CMISReader", CMISAccessControlService.CMIS_READ_PERMISSION)); + acesToAdd.add(new CMISAccessControlEntryImpl("CMISWriter", CMISAccessControlService.CMIS_WRITE_PERMISSION)); + acesToAdd.add(new CMISAccessControlEntryImpl("CMISAll", CMISAccessControlService.CMIS_ALL_PERMISSION)); + + childReport = cmisAccessControlService.applyAcl(child, null, acesToAdd, CMISAclPropagationEnum.PROPAGATE, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(14, childReport.getAccessControlEntries().size()); + + childReport = cmisAccessControlService.applyAcl(child, acesToAdd, acesToAdd, CMISAclPropagationEnum.PROPAGATE, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(14, childReport.getAccessControlEntries().size()); + + childReport = cmisAccessControlService.applyAcl(child, acesToAdd, null, CMISAclPropagationEnum.PROPAGATE, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + assertFalse(childReport.isExtract()); + assertEquals(11, childReport.getAccessControlEntries().size()); + + try + { + childReport = cmisAccessControlService.applyAcl(child, acesToAdd, null, CMISAclPropagationEnum.PROPAGATE, CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS); + fail("A non existent ACE should not be removable"); + } + catch (CMISConstraintException e) + { + + } + } + + public void testAllowableActionsAndPermissionMapping() + { + List mappings = cmisAccessControlService.getPermissionMappings(); + assertEquals(29, mappings.size()); + assertTrue(contains(mappings, "canGetDescendants.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadChildren")); + assertTrue(contains(mappings, "canGetFolderTree.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadChildren")); + assertTrue(contains(mappings, "canGetChildren.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadChildren")); + assertTrue(contains(mappings, "canGetFolderParent.Folder", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadProperties")); + assertTrue(contains(mappings, "canGetObjectParents.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadProperties")); + assertTrue(contains(mappings, "canCreateDocument.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.CreateChildren")); + assertTrue(contains(mappings, "canCreateFolder.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.CreateChildren")); + // "canCreateRelationship.Source" + // "canCreateRelationship.Target" + assertTrue(contains(mappings, "canGetProperties.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadProperties")); + assertTrue(contains(mappings, "canGetRenditions.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadProperties")); + assertTrue(contains(mappings, "canGetContentStream.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadContent")); + assertTrue(contains(mappings, "canUpdateProperties.Object", CMISAccessControlService.CMIS_WRITE_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.WriteProperties")); + assertTrue(contains(mappings, "canMoveObject.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.DeleteNode")); + assertTrue(contains(mappings, "canMoveObject.Target", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.CreateChildren")); + // "canMoveObject.Source" + assertTrue(contains(mappings, "canDelete.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.DeleteNode")); + // "canDelete.Folder" + // === SPEC BUG - should really be those below ... + // "canDeleteObject.Object" + // "canDeleteObject.Folder" + assertTrue(contains(mappings, "canSetContentStream.Document", CMISAccessControlService.CMIS_WRITE_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.WriteContent")); + assertTrue(contains(mappings, "canDeleteContentStream.Document", CMISAccessControlService.CMIS_WRITE_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.WriteContent")); + assertTrue(contains(mappings, "canDeleteTree.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.DeleteNode")); + assertTrue(contains(mappings, "canAddObjectToFolder.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadProperties")); + assertTrue(contains(mappings, "canAddObjectToFolder.Folder", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.CreateChildren")); + assertTrue(contains(mappings, "canRemoveObjectFromFolder.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.DeleteNode")); + // "canRemoveObjectFromFolder.Folder" + assertTrue(contains(mappings, "canCheckOut.Document", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/content/1.0}lockable.CheckOut")); + assertTrue(contains(mappings, "canCancelCheckOut.Document", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/content/1.0}lockable.CancelCheckOut")); + assertTrue(contains(mappings, "canCheckIn.Document", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/content/1.0}lockable.CheckIn")); + assertTrue(contains(mappings, "canGetAllVersions.Document", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.Read")); + // "canGetObjectRelationships.Object" + assertTrue(contains(mappings, "canApplyPolicy.Object", CMISAccessControlService.CMIS_WRITE_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.Write")); + assertTrue(contains(mappings, "canApplyPolicy.Policy", CMISAccessControlService.CMIS_READ_PERMISSION)); + assertTrue(contains(mappings, "canRemovePolicy.Object", CMISAccessControlService.CMIS_WRITE_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.Write")); + assertTrue(contains(mappings, "canRemovePolicy.Policy", CMISAccessControlService.CMIS_READ_PERMISSION)); + assertTrue(contains(mappings, "canGetAppliedPolicies.Object", CMISAccessControlService.CMIS_READ_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadProperties")); + assertTrue(contains(mappings, "canGetACL.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ReadPermissions")); + assertTrue(contains(mappings, "canApplyACL.Object", CMISAccessControlService.CMIS_ALL_PERMISSION, "{http://www.alfresco.org/model/system/1.0}base.ChangePermissions")); + } + + private boolean contains(List mappings, String key, String... entries) + { + for (CMISPermissionMapping mapping : mappings) + { + if (mapping.getKey().equals(key)) + { + // check entries are all valid + Set permissionNames = getAllPermissions(); + + for (String permission : mapping.getPermissions()) + { + if (!permissionNames.contains(permission)) + { + return false; + } + } + if (entries.length > 0) + { + if (mapping.getPermissions().size() == entries.length) + { + for (String entry : entries) + { + if (!mapping.getPermissions().contains(entry)) + { + return false; + } + } + return true; + } + } + else + { + return true; + } + } + } + return false; + } +} diff --git a/source/java/org/alfresco/cmis/acl/CMISAllowedActionKeyTypeEnum.java b/source/java/org/alfresco/cmis/acl/CMISAllowedActionKeyTypeEnum.java new file mode 100644 index 0000000000..6cf2cd4cf2 --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISAllowedActionKeyTypeEnum.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import org.alfresco.cmis.EnumFactory; +import org.alfresco.cmis.EnumLabel; + +/** + * Part two of the allowable action key for the permission mappings + * @author andyh + * + */ +public enum CMISAllowedActionKeyTypeEnum implements EnumLabel +{ + /** + * Folder + */ + FOLDER("Folder"), + /** + * Object + */ + OBJECT("Object"), + /** + * Source + */ + SOURCE("Source"), + /** + * Target + */ + TARGET("Target"), + /** + * Document + */ + DOCUMENT("Document"), + /** + * Policy + */ + POLICY("Policy"); + + private String label; + + /** + * Construct + * + * @param label + */ + CMISAllowedActionKeyTypeEnum(String label) + { + this.label = label; + } + + /* + * (non-Javadoc) + * + * @see org.alfresco.cmis.EnumLabel#label() + */ + public String getLabel() + { + return label; + } + + /** + * Factory for CMISAclCapabilityEnum + */ + public static EnumFactory FACTORY = new EnumFactory(CMISAllowedActionKeyTypeEnum.class, null, true); + + + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISPermissionDefinitionImpl.java b/source/java/org/alfresco/cmis/acl/CMISPermissionDefinitionImpl.java new file mode 100644 index 0000000000..fd0bb8ab11 --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISPermissionDefinitionImpl.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import org.alfresco.cmis.CMISPermissionDefinition; + +/** + * Implementation class for a simple CMIS permission definition. + * + * @author andyh + * + */ +public class CMISPermissionDefinitionImpl implements CMISPermissionDefinition +{ + private String permission; + + private String description; + + /*package*/ CMISPermissionDefinitionImpl(String permission) + { + this.permission = permission; + } + + /*package*/ CMISPermissionDefinitionImpl(String permission, String description) + { + this(permission); + this.description = description; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISPermissionDefinition#getDescription() + */ + public String getDescription() + { + if(description != null) + { + return description; + } + else + { + return permission; + } + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISPermissionDefinition#getPermission() + */ + public String getPermission() + { + return permission; + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + final int prime = 31; + int result = 1; + result = prime * result + ((permission == null) ? 0 : permission.hashCode()); + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final CMISPermissionDefinitionImpl other = (CMISPermissionDefinitionImpl) obj; + if (permission == null) + { + if (other.permission != null) + return false; + } + else if (!permission.equals(other.permission)) + return false; + return true; + } + + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISPermissionMappingImpl.java b/source/java/org/alfresco/cmis/acl/CMISPermissionMappingImpl.java new file mode 100644 index 0000000000..ae4d7ed49e --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISPermissionMappingImpl.java @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import java.util.List; + +import org.alfresco.cmis.CMISPermissionMapping; + +/** + * @author andyh + * + */ +public class CMISPermissionMappingImpl implements CMISPermissionMapping +{ + String key; + + List permissions; + + CMISPermissionMappingImpl(String key, List permissions) + { + this.key = key; + this.permissions = permissions; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISPermissionMapping#getKey() + */ + public String getKey() + { + return key; + } + + /* (non-Javadoc) + * @see org.alfresco.cmis.CMISPermissionMapping#getPermissions() + */ + public List getPermissions() + { + return permissions; + } + +} diff --git a/source/java/org/alfresco/cmis/acl/CMISPermissionMappingKey.java b/source/java/org/alfresco/cmis/acl/CMISPermissionMappingKey.java new file mode 100644 index 0000000000..15004cb70b --- /dev/null +++ b/source/java/org/alfresco/cmis/acl/CMISPermissionMappingKey.java @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2005-2009 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.cmis.acl; + +import org.alfresco.cmis.CMISAllowedActionEnum; + +/** + * @author andyh + * + */ +public interface CMISPermissionMappingKey +{ + /** + * Get the allowed action enum. + * @return the allowed action enum. + */ + public CMISAllowedActionEnum getAllowedActionEnum(); + + /** + * Get the allowed action key type enum. + * @return the allowed action key type enum. + */ + public CMISAllowedActionKeyTypeEnum getAllowedActionKeyTypeEnum(); +} diff --git a/source/java/org/alfresco/cmis/changelog/CMISChangeEventImpl.java b/source/java/org/alfresco/cmis/changelog/CMISChangeEventImpl.java new file mode 100755 index 0000000000..3ea8b61356 --- /dev/null +++ b/source/java/org/alfresco/cmis/changelog/CMISChangeEventImpl.java @@ -0,0 +1,111 @@ +/* + * Copyright (C) 2005-2009 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.cmis.changelog; + +import java.util.Date; + +import org.alfresco.cmis.CMISChangeEvent; +import org.alfresco.cmis.CMISChangeType; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * CMISChangeEvent Implementation + * + * @author Dmitry Velichkevich + */ +public class CMISChangeEventImpl implements CMISChangeEvent +{ + private NodeRef node; + private CMISChangeType changeType; + private Date changeTime; + + /** + * Construct a CMISChangeEvent using fields + * + * @param changeType change type + * @param node node reference + * @param changeTime change time + */ + public CMISChangeEventImpl(CMISChangeType changeType, NodeRef node, Date changeTime) + { + this.changeType = changeType; + this.node = node; + this.changeTime = changeTime; + } + + /** + * @see org.alfresco.cmis.CMISChangeEvent#getChangeType() + */ + public CMISChangeType getChangeType() + { + return changeType; + } + + /** + * @see org.alfresco.cmis.CMISChangeEvent#getNode() + */ + public NodeRef getNode() + { + return node; + } + + /** + * @see org.alfresco.cmis.CMISChangeEvent#getChangeTime() + */ + public Date getChangeTime() + { + return changeTime; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (!(obj instanceof CMISChangeEvent)) + { + return false; + } + CMISChangeEvent converted = (CMISChangeEvent) obj; + return same(node, converted.getNode()) && same(changeType, converted.getChangeType()) && same(changeTime, converted.getChangeTime()); + } + + private boolean same(Object left, Object right) + { + return (null == left) ? (null == right) : (left.equals(right)); + } + + /** + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + int result = (null != node) ? (node.hashCode()) : (31); + return result * 37 + (null != changeType ? changeType.hashCode() : 31) + (null != changeTime ? changeTime.hashCode() : 31); + } + +} diff --git a/source/java/org/alfresco/cmis/changelog/CMISChangeLogDataExtractor.java b/source/java/org/alfresco/cmis/changelog/CMISChangeLogDataExtractor.java new file mode 100755 index 0000000000..02beb9d5a8 --- /dev/null +++ b/source/java/org/alfresco/cmis/changelog/CMISChangeLogDataExtractor.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2005-2009 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.cmis.changelog; + +import java.io.Serializable; + +import org.alfresco.cmis.CMISServices; +import org.alfresco.repo.audit.extractor.AbstractDataExtractor; +import org.alfresco.service.cmr.model.FileFolderService; +import org.alfresco.service.cmr.model.FileInfo; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * An extractor that allows to filter data using the following rule: + * Audit records should only be created for items in the CMIS domain model. + * + * @author Stas Sokolovsky + */ +public class CMISChangeLogDataExtractor extends AbstractDataExtractor +{ + private CMISServices cmisService; + private FileFolderService fileFolderService; + + /** + * Extracts the NodeRef from auditing data + * + * @see org.alfresco.repo.audit.extractor.DataExtractor.extractData(java.io.Serializable) + */ + public Serializable extractData(Serializable value) throws Throwable + { + return getNodeRef(value); + } + + /** + * @return Returns true if items in the CMIS domain model + * @see org.alfresco.repo.audit.extractor.DataExtractor.isSupported(java.io.Serializable) + */ + public boolean isSupported(Serializable data) + { + boolean result = false; + if (data != null) + { + NodeRef nodeRef = getNodeRef(data); + if (nodeRef != null) + { + if (!fileFolderService.exists(nodeRef)) + { + result = true; + } + // Does the node represent a file or folder + else if (fileFolderService.getFileInfo(nodeRef) != null) + { + // Is the node located within CMIS defaultRootStore + if (cmisService.getDefaultRootStoreRef().equals(nodeRef.getStoreRef())) + { + result = true; + } + } + } + } + return result; + } + + /** + * Gets the NodeRef from auditing data + * + * @param data audit data + * @return Node Reference + */ + private NodeRef getNodeRef(Serializable data) + { + NodeRef nodeRef = null; + if (data instanceof FileInfo) + { + nodeRef = ((FileInfo) data).getNodeRef(); + } + else if (data instanceof NodeRef) + { + nodeRef = (NodeRef) data; + } + return nodeRef; + } + + /** + * Set the CMIS service + * + * @param cmisService CMIS service + */ + public void setCmisService(CMISServices cmisService) + { + this.cmisService = cmisService; + } + + /** + * Set the FileFolder service + * + * @param fileFolderService FileFolder service + */ + public void setFileFolderService(FileFolderService fileFolderService) + { + this.fileFolderService = fileFolderService; + } + +} diff --git a/source/java/org/alfresco/cmis/changelog/CMISChangeLogImpl.java b/source/java/org/alfresco/cmis/changelog/CMISChangeLogImpl.java new file mode 100755 index 0000000000..e4811e732f --- /dev/null +++ b/source/java/org/alfresco/cmis/changelog/CMISChangeLogImpl.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2005-2009 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.cmis.changelog; + +import java.util.LinkedList; +import java.util.List; + +import org.alfresco.cmis.CMISChangeEvent; +import org.alfresco.cmis.CMISChangeLog; + +/** + * CMISChangeLog Implementation + * + * @author Dmitry Velichkevich + */ +public class CMISChangeLogImpl implements CMISChangeLog +{ + private boolean hasMoreItems; + private List changeEvents = new LinkedList(); + private String nextChangeToken; + + /** + * @see org.alfresco.cmis.CMISChangeLog#getChangeEvents() + */ + public List getChangeEvents() + { + return changeEvents; + } + + /** + * Set the change events + * + * @param changeEvents list of change events + */ + protected void setChangeEvents(List changeEvents) + { + this.changeEvents = changeEvents; + } + + /** + * @see org.alfresco.cmis.CMISChangeLog#getEventCount() + */ + public Integer getEventCount() + { + return changeEvents.size(); + } + + /** + * @see org.alfresco.cmis.CMISChangeLog#getNextChangeToken() + */ + public String getNextChangeToken() + { + return nextChangeToken; + } + + /** + * Set the next ChangeToken + * + * @param nextChangeToken the next ChangeToken + */ + public void setNextChangeToken(String nextChangeToken) + { + this.nextChangeToken = nextChangeToken; + } + + /** + * @see org.alfresco.cmis.CMISChangeLog#hasMoreItems() + */ + public boolean hasMoreItems() + { + return hasMoreItems; + } + + /** + * Set the hasMoreItems value + * + * @param hasMoreItems hasMoreItems value + */ + protected void setHasMoreItems(boolean hasMoreItems) + { + this.hasMoreItems = hasMoreItems; + } + +} diff --git a/source/java/org/alfresco/cmis/changelog/CMISChangeLogServiceImpl.java b/source/java/org/alfresco/cmis/changelog/CMISChangeLogServiceImpl.java new file mode 100755 index 0000000000..b158b53242 --- /dev/null +++ b/source/java/org/alfresco/cmis/changelog/CMISChangeLogServiceImpl.java @@ -0,0 +1,338 @@ +/* + * Copyright (C) 2005-2010 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 received a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.changelog; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.alfresco.cmis.CMISBaseObjectTypeIds; +import org.alfresco.cmis.CMISCapabilityChanges; +import org.alfresco.cmis.CMISChangeEvent; +import org.alfresco.cmis.CMISChangeLog; +import org.alfresco.cmis.CMISChangeLogService; +import org.alfresco.cmis.CMISChangeType; +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.service.cmr.audit.AuditQueryParameters; +import org.alfresco.service.cmr.audit.AuditService; +import org.alfresco.service.cmr.audit.AuditService.AuditQueryCallback; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * ChangeLog Service Implementation + * + * @author Dmitry Velichkevich + */ +public class CMISChangeLogServiceImpl implements CMISChangeLogService +{ + private AuditService auditService; + private String cmisAuditApplicationName; + private List changesOnTypeCapability; + + private static final String PATH_DELIMITER = "/"; + private static final int DEFAULT_RETURN_SIZE = 100; + + /** + * @see org.alfresco.cmis.CMISChangeLogService#getCapability() + */ + public CMISCapabilityChanges getCapability() + { + return (auditService.isAuditEnabled(cmisAuditApplicationName, PATH_DELIMITER + cmisAuditApplicationName)) ? (CMISCapabilityChanges.OBJECTIDSONLY) + : (CMISCapabilityChanges.NONE); + } + + /** + * @see org.alfresco.cmis.CMISChangeLogService#getChangeLogEvents(java.lang.String, java.lang.Integer) + */ + public CMISChangeLog getChangeLogEvents(String changeLogToken, Integer maxItems) + { + if (!auditService.isAuditEnabled(cmisAuditApplicationName, ("/" + cmisAuditApplicationName))) + { + throw new AlfrescoRuntimeException("Auditing for " + cmisAuditApplicationName + " is disabled!"); + } + CMISChangeLogImpl result = new CMISChangeLogImpl(); + final List changeEvents = result.getChangeEvents(); + EntryIdCallback changeLogCollectingCallback = new EntryIdCallback(true) + { + @Override + public boolean handleAuditEntry(Long entryId, String user, long time, Map values) + { + List changeLogEvents = convertValuesMapToChangeLogEvents(values, time); + changeEvents.addAll(changeLogEvents); + return super.handleAuditEntry(entryId, user, time, values); + } + }; + Long from = changeLogToken != null ? Long.parseLong(changeLogToken) : null; + AuditQueryParameters params = new AuditQueryParameters(); + params.setApplicationName(cmisAuditApplicationName); + params.setForward(true); + params.setFromId(from); + + // Query one past the last item, so that we know what the next ID is + int maxAmount = ((null == maxItems) || (0 == maxItems)) ? (0) : (maxItems + 1); + auditService.auditQuery(changeLogCollectingCallback, params, maxAmount); + + if ((0 != maxAmount) && (changeEvents.size() > maxItems)) + { + changeEvents.remove(changeEvents.size() - 1); + result.setNextChangeToken(changeLogCollectingCallback.getEntryId().toString()); + result.setHasMoreItems(true); + } + return result; + } + + /** + * @see org.alfresco.cmis.CMISChangeLogService#getChangesIncomplete() + */ + public boolean getChangesIncomplete() + { + return true; + } + + /** + * @see org.alfresco.cmis.CMISChangeLogService#getLastChangeLogToken() + */ + public String getLastChangeLogToken() + { + EntryIdCallback auditQueryCallback = new EntryIdCallback(false); + AuditQueryParameters params = new AuditQueryParameters(); + params.setApplicationName(cmisAuditApplicationName); + params.setForward(false); + auditService.auditQuery(auditQueryCallback, params, 1); + return auditQueryCallback.getEntryId(); + } + + /** + * @see org.alfresco.cmis.CMISChangeLogService#getPreviousPageChangeLogToken(java.lang.String, java.lang.Integer) + */ + public String getPreviousPageChangeLogToken(String currentPageToken, Integer maxItems) + { + if (currentPageToken == null) + { + return null; + } + maxItems = maxItems == null ? DEFAULT_RETURN_SIZE : maxItems; + EntryIdCallback auditQueryCallback = new EntryIdCallback(false); + AuditQueryParameters params = new AuditQueryParameters(); + params.setApplicationName(cmisAuditApplicationName); + params.setForward(false); + params.setToId(Long.parseLong(currentPageToken)); + auditService.auditQuery(auditQueryCallback, params, maxItems); + return auditQueryCallback.getEntryId(); + } + + /** + * @see org.alfresco.cmis.CMISChangeLogService#getLastPageChangeLogToken(java.lang.String, java.lang.Integer) + */ + public String getLastPageChangeLogToken(String currentPageToken, Integer maxItems) + { + maxItems = maxItems == null ? DEFAULT_RETURN_SIZE : maxItems; + EntryIdCallback auditQueryCallback = new PageStartEntryIdCallback(maxItems); + AuditQueryParameters params = new AuditQueryParameters(); + params.setApplicationName(cmisAuditApplicationName); + if (currentPageToken != null) + { + params.setFromId(Long.parseLong(currentPageToken)); + } + auditService.auditQuery(auditQueryCallback, params, -1); + return auditQueryCallback.getEntryId(); + } + + /** + * @see org.alfresco.cmis.CMISChangeLogService#getChangesOnTypeCapability() + */ + public List getChangesOnTypeCapability() + { + if (null == changesOnTypeCapability) + { + changesOnTypeCapability = new LinkedList(); + } + return changesOnTypeCapability; + } + + /** + * Set the AuditService. + * + * @param auditService AuditService + */ + public void setAuditService(AuditService auditService) + { + this.auditService = auditService; + } + + /** + * Set the Audit Application Name. + * + * @param cmisAuditApplicationName Audit Application Name + */ + public void setCmisAuditApplicationName(String cmisAuditApplicationName) + { + this.cmisAuditApplicationName = cmisAuditApplicationName; + } + + /** + * Set the ChangesOnTypeCapability. + * + * @param changesOnTypeCapability list of CMISBaseObjectTypeIds + */ + public void setChangesOnTypeCapability(List changesOnTypeCapability) + { + this.changesOnTypeCapability = changesOnTypeCapability; + } + + /** + * Converts audit values map to list of CMISChangeEvents. + * + * @param values audit values map + * @param time audit event time + * @return list of CMISChangeEvent + */ + private List convertValuesMapToChangeLogEvents(Map values, long time) + { + List result = new ArrayList(); + if (values != null && values.size() > 0) + { + for (Entry entry : values.entrySet()) + { + if (entry.getKey() != null && entry.getValue() != null) + { + String path = entry.getKey(); + CMISChangeType changeType = getCMISChangeType(path); + NodeRef nodeRef = entry.getValue() instanceof NodeRef ? (NodeRef) entry.getValue() : null; + if (changeType != null && nodeRef != null) + { + result.add(new CMISChangeEventImpl(changeType, nodeRef, new Date(time))); + } + } + } + } + return result; + } + + /** + * Gets CMISChangeType by audit path. + * + * @param auditPath audit path + * @return CMISChangeType + */ + private CMISChangeType getCMISChangeType(String auditPath) + { + CMISChangeType result = null; + if (auditPath != null) + { + if (auditPath.startsWith(PATH_DELIMITER)) + { + auditPath = auditPath.substring(PATH_DELIMITER.length()); + } + if (auditPath.startsWith(cmisAuditApplicationName)) + { + auditPath = auditPath.substring(cmisAuditApplicationName.length()); + } + if (auditPath.startsWith(PATH_DELIMITER)) + { + auditPath = auditPath.substring(PATH_DELIMITER.length()); + } + auditPath = auditPath.toLowerCase(); + for (CMISChangeType changeType : CMISChangeType.values()) + { + if (auditPath.startsWith(changeType.getLabel())) + { + result = changeType; + break; + } + } + } + return result; + } + + private class EntryIdCallback implements AuditQueryCallback + { + private final boolean valuesRequired; + private Long entryId; + + public EntryIdCallback(boolean valuesRequired) + { + this.valuesRequired = valuesRequired; + } + + public String getEntryId() + { + return entryId == null ? null : entryId.toString(); + } + + public boolean valuesRequired() + { + return this.valuesRequired; + } + + public final boolean handleAuditEntry(Long entryId, String applicationName, String user, long time, Map values) + { + if (applicationName.equals(CMISChangeLogServiceImpl.this.cmisAuditApplicationName)) + { + return handleAuditEntry(entryId, user, time, values); + } + return true; + } + + public boolean handleAuditEntry(Long entryId, String user, long time, Map values) + { + this.entryId = entryId; + return true; + } + + public boolean handleAuditEntryError(Long entryId, String errorMsg, Throwable error) + { + throw new AlfrescoRuntimeException(errorMsg, error); + } + }; + + private class PageStartEntryIdCallback extends EntryIdCallback + { + private final int pageSize; + private int indexWithinPage; + + public PageStartEntryIdCallback(int pageSize) + { + super(false); + this.pageSize = pageSize; + this.indexWithinPage = -1; + } + + @Override + public boolean handleAuditEntry(Long entryId, String user, long time, Map values) + { + if (++this.indexWithinPage == this.pageSize) + { + this.indexWithinPage = 0; + return super.handleAuditEntry(entryId, user, time, values); + } + return true; + } + } +} diff --git a/source/java/org/alfresco/cmis/changelog/CMISChangeLogServiceTest.java b/source/java/org/alfresco/cmis/changelog/CMISChangeLogServiceTest.java new file mode 100755 index 0000000000..9c8ae223db --- /dev/null +++ b/source/java/org/alfresco/cmis/changelog/CMISChangeLogServiceTest.java @@ -0,0 +1,419 @@ +/* + * Copyright (C) 2005-2009 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.cmis.changelog; + +import java.io.Serializable; +import java.security.SecureRandom; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; + +import org.alfresco.cmis.CMISCapabilityChanges; +import org.alfresco.cmis.CMISChangeEvent; +import org.alfresco.cmis.CMISChangeLog; +import org.alfresco.cmis.CMISChangeLogService; +import org.alfresco.cmis.CMISChangeType; +import org.alfresco.cmis.mapping.BaseCMISTest; +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.management.subsystems.ApplicationContextFactory; +import org.alfresco.service.cmr.model.FileFolderService; +import org.alfresco.service.cmr.model.FileInfo; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.StoreRef; +import org.alfresco.service.cmr.security.AccessStatus; +import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.namespace.QName; +import org.alfresco.util.ApplicationContextHelper; +import org.springframework.context.ApplicationContext; +import org.springframework.extensions.surf.util.Pair; + +/** + * Base tests for {@link CMISChangeLogServiceImpl} + * + * @author Dmitry Velichkevich + */ +public class CMISChangeLogServiceTest extends BaseCMISTest +{ + private static final String CMIS_AUTHORITY = "cmis"; + private static final String CHANGE_PREFIX = "Changed"; + private static final String INVALID_CHANGE_TOKEN = ""; + private static final String[] NAME_PARTS = new String[] { "TestDocument (", ").txt", "TestFolder (", ")" }; + + private static int TOTAL_AMOUNT = 31; + private static int CREATED_AMOUNT = 18; + private static final int THE_HALFT_OF_CREATED_AMOUNT = CREATED_AMOUNT / 2; + private static final Map EXPECTED_AMOUNTS = new HashMap(); + static + { + EXPECTED_AMOUNTS.put(CMISChangeType.CREATED, 5); + EXPECTED_AMOUNTS.put(CMISChangeType.DELETED, 3); + EXPECTED_AMOUNTS.put(CMISChangeType.SECURITY, 4); + EXPECTED_AMOUNTS.put(CMISChangeType.UPDATED, 6); + } + + private ApplicationContextFactory auditSubsystem; + private CMISChangeLogService changeLogService; + + private int actualCount = 0; + private Map actualAmounts = new HashMap(); + private List created = null; + private List deleted = null; + + private void disableAudit() + { + auditSubsystem.stop(); + auditSubsystem.setProperty("audit.enabled", "true"); + auditSubsystem.setProperty("audit.cmis.enabled", "false"); + } + + private void enableAudit() + { + auditSubsystem.stop(); + auditSubsystem.setProperty("audit.enabled", "true"); + auditSubsystem.setProperty("audit.cmis.enabled", "true"); + } + + /** + * Tests {@link CMISChangeLogServiceImpl} with disabled Auditing feature + * + * @throws Exception + */ + public void testServiceWithDisabledAuditing() throws Exception + { + disableAudit(); + String lastChangeLogToken = changeLogService.getLastChangeLogToken(); + createTestData(EXPECTED_AMOUNTS, false); + assertEquals(CMISCapabilityChanges.NONE, changeLogService.getCapability()); + try + { + changeLogService.getChangeLogEvents(lastChangeLogToken, null); + fail("Changes Logging was not enabled but no one Change Log Service method thrown exception"); + } + catch (Exception e) + { + assertTrue("Invalid exception type from Change Log Service method call with desabled Changes Logging", e instanceof AlfrescoRuntimeException); + } + } + + /** + * Tests {@link CMISChangeLogServiceImpl} with enabled Auditing feature + * + * @throws Exception + */ + public void testEnabledAuditing() throws Exception + { + enableAudit(); + String logToken = changeLogService.getLastChangeLogToken(); + createTestData(EXPECTED_AMOUNTS, false); + assertEquals(CMISCapabilityChanges.OBJECTIDSONLY, changeLogService.getCapability()); + CMISChangeLog changeLog = changeLogService.getChangeLogEvents(logToken, null); + assertChangeLog(logToken, changeLog); + assertChangeEvents(logToken, changeLog, null, FoldersAppearing.NOT_EXPECTED); + } + + /** + * Validates Change Log descriptor that was returned for some Change Log Token + * + * @param logToken {@link String} value that represents last Change Log Token + * @param changeLog {@link CMISChangeLog} instance that represents Change Log descriptor + */ + private void assertChangeLog(String logToken, CMISChangeLog changeLog) + { + assertNotNull(("'" + logToken + "' Change Log Token has no descriptor"), changeLog); + assertNotNull(("Event Etries for '" + logToken + "' Change Log Token are undefined"), changeLog.getChangeEvents()); + assertFalse(("Descriptor for '" + logToken + "' Change Log Token has no any Event Entry"), changeLog.getChangeEvents().isEmpty()); + } + + /** + * Creates test data which will represent Change Events of all possible types + * + * @param requiredAmounts {@link Map}<{@link CMISChangeType}, {@link Integer}> container instance that determines amount of Change Event for each Change Type + * @return pair containing list of created node refs, and list of deleted node refs + * @see CMISChangeType + */ + private Pair, List> createTestData(Map requiredAmounts, boolean withFolders) + { + changeLogService.getLastChangeLogToken(); + created = new LinkedList(); + deleted = new LinkedList(); + Pair, List> result = new Pair, List>(created, deleted); + NodeRef parentNodeRef = nodeService.getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE); + SecureRandom randomizer = new SecureRandom(); + for (CMISChangeType key : requiredAmounts.keySet()) + { + Integer amount = requiredAmounts.get(key); + for (int i = 0; i < amount; i++) + { + boolean folder = withFolders && (0 == ((Math.abs(randomizer.nextInt()) % amount) % 2)); + QName objectType = (folder) ? (ContentModel.TYPE_FOLDER) : (ContentModel.TYPE_CONTENT); + FileInfo object = fileFolderService.create(parentNodeRef, generateName(randomizer, folder), objectType); + created.add(object.getNodeRef()); + addOneToAmount(actualAmounts, CMISChangeType.CREATED); + switch (key) + { + case DELETED: + { + nodeService.deleteNode(object.getNodeRef()); + deleted.add(object.getNodeRef()); + addOneToAmount(actualAmounts, CMISChangeType.DELETED); + break; + } + case SECURITY: + { + permissionService.setPermission(object.getNodeRef(), CMIS_AUTHORITY, PermissionService.EXECUTE_CONTENT, true); + addOneToAmount(actualAmounts, CMISChangeType.SECURITY); + break; + } + case UPDATED: + { + StringBuilder nameBuilder = new StringBuilder(CHANGE_PREFIX); + nameBuilder.append(nodeService.getProperty(object.getNodeRef(), ContentModel.PROP_NAME)); + nodeService.setProperty(object.getNodeRef(), ContentModel.PROP_NAME, nameBuilder.toString()); + addOneToAmount(actualAmounts, CMISChangeType.UPDATED); + } + } + actualCount++; + } + } + return result; + } + + /** + * Deletes each element of created test data if element exist and current user has appropriate rights + * + * @param testData {@link Map}<{@link NodeRef}, {@link Map}<{@link QName}, {@link Serializable}>> container instance that contains test data + */ + private void deleteTestData() + { + if (created != null) + { + for (NodeRef object : created) + { + if (nodeService.exists(object) && (AccessStatus.ALLOWED == permissionService.hasPermission(object, PermissionService.DELETE))) + { + nodeService.deleteNode(object); + } + } + } + } + + /** + * @param folder {@link Boolean} value that determines which name should be generated (for Folder or Document Object) + * @return {@link String} value that represents generated uniquely name for Document Object + */ + private String generateName(SecureRandom randomizer, boolean folder) + { + StringBuilder nameBuilder = new StringBuilder(); + int i = (folder) ? (2) : (0); + nameBuilder.append(NAME_PARTS[i++]).append(Math.abs(randomizer.nextInt())).append(NAME_PARTS[i++]); + return nameBuilder.toString(); + } + + /** + * This method validates Change Event entries according to created earlier Objects. According to assertProperties parameter this method may and may not check properties + * of Change Event entry according to appropriate expected Object against Change Type + * + * @param expectedObjects {@link Map}<{@link NodeRef}, {@link Map}<{@link QName}, {@link Serializable}>> container instance that contains Ids and properties of + * expected Objects + * @param logToken {@link String} value that represents last Change Log Token + * @param changeLog {@link CMISChangeLog} instance that represents Change Log descriptor for last Change Log Token + * @param maxItems {@link Integer} value that determines high bound of Change Events amount + * @see CMISChangeType + */ + private void assertChangeEvents(String logToken, CMISChangeLog changeLog, Integer maxItems, FoldersAppearing foldersAppearing) + { + Map logAmounts = new HashMap(); + boolean folderWasFound = false; + for (CMISChangeEvent event : changeLog.getChangeEvents()) + { + assertNotNull(("One of the Change Log Event Enries is undefined for '" + logToken + "' Change Log Token"), event); + assertNotNull(("Change Event Entry Id of one of the Change Entries is undefined for '" + logToken + "' Change Log Token"), event.getNode()); + assertNotNull(("Change Event Change Type of one of the Change Entries is undefined for '" + logToken + "' Change Log Token"), event.getChangeType()); + assertTrue("Unexpected Object Id='" + event.getNode().toString() + "' from Change Log Token Entries list for '" + logToken + "' Change Log Token", created + .contains(event.getNode())); + if (!deleted.contains(event.getNode())) + { + folderWasFound = folderWasFound || fileFolderService.getFileInfo(event.getNode()).isFolder(); + assertTrue( + ("Object from Change Event Entries list is marked as '" + event.getChangeType().toString() + "' but does not exist for '" + logToken + "' Change Log Token"), + nodeService.exists(event.getNode())); + } + else + { + assertTrue("Object has been deleted", deleted.contains(event.getNode())); + assertFalse(("Object from Change Event Entries list is marked as 'DELETED' but it still exist for '" + logToken + "' Change Log Token"), nodeService.exists(event + .getNode())); + } + addOneToAmount(logAmounts, event.getChangeType()); + } + if (FoldersAppearing.MUST_APPEAR == foldersAppearing) + { + assertTrue("No one Folder Object was returned", folderWasFound); + } + else + { + if (FoldersAppearing.NOT_EXPECTED == foldersAppearing) + { + assertFalse("Some Folder Object was found", folderWasFound); + } + } + if ((null == maxItems) || (maxItems >= TOTAL_AMOUNT)) + { + for (CMISChangeType key : actualAmounts.keySet()) + { + Integer actualAmount = actualAmounts.get(key); + Integer logAmount = logAmounts.get(key); + assertTrue(("Invalid Entries amount for '" + key.toString() + "' Change Type. Actual amount: " + actualAmount + ", but log amount: " + logAmount), actualAmount + .equals(logAmount)); + } + } + } + + private enum FoldersAppearing + { + NOT_EXPECTED, MAY_APPEAR, MUST_APPEAR + } + + /** + * Determines which kind of Change was handled and increments appropriate amount to 1 + * + * @param mappedAmounts {@link Map}>{@link CMISChangeType}, {@link Integer}< container instance that contains all accumulated amounts for each kind of Change + * @param changeType {@link CMISChangeType} enum value that determines kind of Change + */ + private void addOneToAmount(Map mappedAmounts, CMISChangeType changeType) + { + Integer amount = mappedAmounts.get(changeType); + amount = (null == amount) ? (Integer.valueOf(1)) : (Integer.valueOf(amount.intValue() + 1)); + mappedAmounts.put(changeType, amount); + } + + /** + * Test {@link CMISChangeLogServiceImpl} with enabled Auditing feature for Max Items parameter + * + * @throws Exception + */ + public void testEnabledAuditingForMaxItems() throws Exception + { + enableAudit(); + String logToken = changeLogService.getLastChangeLogToken(); + createTestData(EXPECTED_AMOUNTS, false); + assertEquals(CMISCapabilityChanges.OBJECTIDSONLY, changeLogService.getCapability()); + CMISChangeLog changeLog = changeLogService.getChangeLogEvents(logToken, THE_HALFT_OF_CREATED_AMOUNT); + assertChangeLog(logToken, changeLog); + assertChangeEvents(logToken, changeLog, THE_HALFT_OF_CREATED_AMOUNT, FoldersAppearing.NOT_EXPECTED); + assertEquals(THE_HALFT_OF_CREATED_AMOUNT, changeLog.getChangeEvents().size()); + assertTrue("Not all Change Log Entries were requested but result set is indicating that no one more Entry is avilable", changeLog.hasMoreItems()); + changeLog = changeLogService.getChangeLogEvents(logToken, TOTAL_AMOUNT); + assertChangeEvents(logToken, changeLog, TOTAL_AMOUNT, FoldersAppearing.NOT_EXPECTED); + assertFalse("All Change Log Entries were requested but result set is indicating that some more Entry(s) are available", changeLog.hasMoreItems()); + } + + /** + * This method tests {@link CMISChangeLogServiceImpl} on receiving Change Event Entries for Invalid Change Log Token with enable and disabled Changes Logging + * + * @throws Exception + */ + public void testReceivingChangeEventsForInvalidChangeToken() throws Exception + { + enableAudit(); + try + { + changeLogService.getChangeLogEvents(INVALID_CHANGE_TOKEN, null); + fail("Change Events were received normally for Invalid Change Log Token"); + } + catch (Exception e) + { + assertTrue("Invalid exception type from Change Log Service method call with enabled Changes Logging", e instanceof java.lang.NumberFormatException); + } + disableAudit(); + try + { + changeLogService.getChangeLogEvents(INVALID_CHANGE_TOKEN, null); + fail("Changes Logging was not enabled but not one Change Log Service method thrown exception"); + } + catch (Exception e) + { + assertTrue("Invalid exception type from Change Log Service method call with desabled Changes Logging", e instanceof AlfrescoRuntimeException); + } + } + + /** + * This method tests {@link CMISChangeLogServiceImpl} on working with Change Event entries which could contain Folder Objects + * + * @throws Exception + */ + public void testReceivingOfChangeEventsExpectingFolders() throws Exception + { + enableAudit(); + String changeToken = changeLogService.getLastChangeLogToken(); + createTestData(EXPECTED_AMOUNTS, true); + CMISChangeLog changeLogEvents = changeLogService.getChangeLogEvents(changeToken, null); + assertChangeLog(changeToken, changeLogEvents); + assertChangeEvents(changeToken, changeLogEvents, null, FoldersAppearing.MUST_APPEAR); + } + + /** + * This method tests {@link CMISChangeLogServiceImpl} on working with Change Event entries which could contain Folder Objects. Also this method tests behavior of Max Items + * parameter for Folder Objects + * + * @throws Exception + */ + public void testReceivingOfChangeEventsExpectingFoldersAndBoundedByMaxItems() throws Exception + { + enableAudit(); + String changeToken = changeLogService.getLastChangeLogToken(); + createTestData(EXPECTED_AMOUNTS, true); + CMISChangeLog changeLogEvents = changeLogService.getChangeLogEvents(changeToken, 15); + assertTrue("Not all Change Event Entries were requested but result set indicates that no more Entry(s) available", changeLogEvents.hasMoreItems()); + assertChangeLog(changeToken, changeLogEvents); + assertChangeEvents(changeToken, changeLogEvents, 15, FoldersAppearing.MAY_APPEAR); + changeLogEvents = changeLogService.getChangeLogEvents(changeToken, TOTAL_AMOUNT); + assertChangeLog(changeToken, changeLogEvents); + assertChangeEvents(changeToken, changeLogEvents, TOTAL_AMOUNT, FoldersAppearing.MUST_APPEAR); + assertFalse("All Change Event Entries were requested but results indicating that some more Entry(s) available", changeLogEvents.hasMoreItems()); + } + + @Override + public void setUp() throws Exception + { + super.setUp(); + ApplicationContext applicationContext = ApplicationContextHelper.getApplicationContext(); + changeLogService = (CMISChangeLogService) applicationContext.getBean("CMISChangeLogService"); + nodeService = (NodeService) applicationContext.getBean("NodeService"); + permissionService = (PermissionService) applicationContext.getBean("PermissionService"); + fileFolderService = (FileFolderService) applicationContext.getBean("FileFolderService"); + auditSubsystem = (ApplicationContextFactory) applicationContext.getBean("Audit"); + } + + @Override + protected void tearDown() throws Exception + { + deleteTestData(); + super.tearDown(); + } +} diff --git a/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java index 26df50eb16..b6efd55840 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISAbstractTypeDefinition.java @@ -78,7 +78,7 @@ public abstract class CMISAbstractTypeDefinition implements CMISTypeDefinition, protected Boolean fullTextIndexed = null; protected Boolean controllablePolicy = null; protected Boolean controllableACL = null; - protected Boolean includeInSuperTypeQuery = null; + protected Boolean includedInSuperTypeQuery = null; protected Collection subTypeIds = null; protected Collection subTypes = null; protected Map properties = null; @@ -103,7 +103,7 @@ public abstract class CMISAbstractTypeDefinition implements CMISTypeDefinition, if (fullTextIndexed == null) throw new IllegalStateException("fullTextIndexed not specified; objectTypeId=" + objectTypeId); if (controllablePolicy == null) throw new IllegalStateException("controllablePolicy not specified; objectTypeId=" + objectTypeId); if (controllableACL == null) throw new IllegalStateException("controllablePolicy not specified; objectTypeId=" + objectTypeId); - if (includeInSuperTypeQuery == null) throw new IllegalStateException("includeInSuperTypeQuery not specified; objectTypeId=" + objectTypeId); + if (includedInSuperTypeQuery == null) throw new IllegalStateException("includedInSuperTypeQuery not specified; objectTypeId=" + objectTypeId); if (subTypeIds == null) throw new IllegalStateException("subTypeIds not specified; objectTypeId=" + objectTypeId); if (subTypes == null) throw new IllegalStateException("subTypes not specified; objectTypeId=" + objectTypeId); if (properties == null) throw new IllegalStateException("properties not specified; objectTypeId=" + objectTypeId); @@ -413,11 +413,11 @@ public abstract class CMISAbstractTypeDefinition implements CMISTypeDefinition, /* * (non-Javadoc) - * @see org.alfresco.cmis.dictionary.CMISTypeDefinition#isIncludeInSuperTypeQuery() + * @see org.alfresco.cmis.dictionary.CMISTypeDefinition#isIncludedInSuperTypeQuery() */ - public boolean isIncludeInSuperTypeQuery() + public boolean isIncludedInSuperTypeQuery() { - return includeInSuperTypeQuery; + return includedInSuperTypeQuery; } /* diff --git a/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java index e2dd3bc548..1bb316b981 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISBasePropertyDefinition.java @@ -42,6 +42,7 @@ import org.alfresco.cmis.mapping.CMISMapping; import org.alfresco.repo.dictionary.IndexTokenisationMode; import org.alfresco.repo.dictionary.constraint.ListOfValuesConstraint; import org.alfresco.repo.dictionary.constraint.StringLengthConstraint; +import org.alfresco.repo.search.impl.lucene.analysis.DateAnalyser; import org.alfresco.repo.search.impl.lucene.analysis.DateTimeAnalyser; import org.alfresco.repo.search.impl.lucene.analysis.DoubleAnalyser; import org.alfresco.repo.search.impl.lucene.analysis.FloatAnalyser; @@ -51,6 +52,7 @@ import org.alfresco.repo.search.impl.lucene.analysis.PathAnalyser; import org.alfresco.repo.search.impl.lucene.analysis.VerbatimAnalyser; import org.alfresco.service.cmr.dictionary.Constraint; import org.alfresco.service.cmr.dictionary.ConstraintDefinition; +import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.PropertyDefinition; /** @@ -64,23 +66,37 @@ public class CMISBasePropertyDefinition implements CMISPropertyDefinition, Seria // Properties of Property private CMISTypeDefinition typeDef; + private CMISPropertyId propertyId; + private String queryName; + private String displayName; + private String description; + private CMISDataTypeEnum propertyType; + private CMISCardinalityEnum cardinality; + private int maximumLength = -1; + private Collection choices = new HashSet(); + private boolean isOpenChoice = false; + private boolean required; + private String defaultValue; + private CMISUpdatabilityEnum updatability; + private boolean queryable; + private boolean orderable; + private AbstractProperty propertyAccessor; - /** * Construct * @@ -103,7 +119,7 @@ public class CMISBasePropertyDefinition implements CMISPropertyDefinition, Seria Constraint constraint = constraintDef.getConstraint(); if (constraint instanceof ListOfValuesConstraint) { - int position = 1; // CMIS is 1 based (according to XSDs) + int position = 1; // CMIS is 1 based (according to XSDs) ListOfValuesConstraint lovc = (ListOfValuesConstraint) constraint; for (String allowed : lovc.getAllowedValues()) { @@ -123,31 +139,43 @@ public class CMISBasePropertyDefinition implements CMISPropertyDefinition, Seria queryable = propDef.isIndexed(); if (queryable) { - IndexTokenisationMode indexTokenisationMode = IndexTokenisationMode.TRUE; - if (propDef.getIndexTokenisationMode() != null) + if (cardinality == CMISCardinalityEnum.SINGLE_VALUED) { - indexTokenisationMode = propDef.getIndexTokenisationMode(); - } - switch (indexTokenisationMode) - { - case BOTH: - case FALSE: - orderable = true; - break; - case TRUE: - default: - String analyserClassName = propDef.getDataType().getAnalyserClassName(); - if (analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName()) - || analyserClassName.equals(DoubleAnalyser.class.getCanonicalName()) || analyserClassName.equals(FloatAnalyser.class.getCanonicalName()) - || analyserClassName.equals(IntegerAnalyser.class.getCanonicalName()) || analyserClassName.equals(LongAnalyser.class.getCanonicalName()) - || analyserClassName.equals(PathAnalyser.class.getCanonicalName()) || analyserClassName.equals(VerbatimAnalyser.class.getCanonicalName())) + IndexTokenisationMode indexTokenisationMode = IndexTokenisationMode.TRUE; + if (propDef.getIndexTokenisationMode() != null) { + indexTokenisationMode = propDef.getIndexTokenisationMode(); + } + switch (indexTokenisationMode) + { + case BOTH: + case FALSE: orderable = true; + break; + case TRUE: + default: + String analyserClassName = propDef.getDataType().getAnalyserClassName(); + if(propDef.getDataType().getName().equals(DataTypeDefinition.BOOLEAN)) + { + orderable = true; + } + else if (analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName()) + || analyserClassName.equals(DateAnalyser.class.getCanonicalName()) + || analyserClassName.equals(DoubleAnalyser.class.getCanonicalName()) || analyserClassName.equals(FloatAnalyser.class.getCanonicalName()) + || analyserClassName.equals(IntegerAnalyser.class.getCanonicalName()) || analyserClassName.equals(LongAnalyser.class.getCanonicalName()) + || analyserClassName.equals(PathAnalyser.class.getCanonicalName()) || analyserClassName.equals(VerbatimAnalyser.class.getCanonicalName())) + { + orderable = true; + } + else + { + orderable = false; + } } - else - { - orderable = false; - } + } + else + { + orderable = false; } } else @@ -186,7 +214,7 @@ public class CMISBasePropertyDefinition implements CMISPropertyDefinition, Seria { return queryName; } - + /** * Get the display name * @@ -316,7 +344,7 @@ public class CMISBasePropertyDefinition implements CMISPropertyDefinition, Seria { return propertyAccessor; } - + /** * Gets the property Lucene builder * @@ -326,8 +354,7 @@ public class CMISBasePropertyDefinition implements CMISPropertyDefinition, Seria { return propertyAccessor; } - - + /* * (non-Javadoc) * @see java.lang.Object#toString() diff --git a/source/java/org/alfresco/cmis/dictionary/CMISDocumentTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISDocumentTypeDefinition.java index 0b0f27b22d..11ee364a2c 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISDocumentTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISDocumentTypeDefinition.java @@ -91,8 +91,8 @@ public class CMISDocumentTypeDefinition extends CMISAbstractTypeDefinition queryable = true; fullTextIndexed = true; controllablePolicy = false; - controllableACL = false; - includeInSuperTypeQuery = true; + controllableACL = true; + includedInSuperTypeQuery = cmisClassDef.getIncludedInSuperTypeQuery(); actionEvaluators = cmisMapping.getActionEvaluators(objectTypeId.getScope()); @@ -160,7 +160,7 @@ public class CMISDocumentTypeDefinition extends CMISAbstractTypeDefinition builder.append("Creatable=").append(isCreatable()).append(", "); builder.append("Queryable=").append(isQueryable()).append(", "); builder.append("FullTextIndexed=").append(isFullTextIndexed()).append(", "); - builder.append("IncludeInSuperTypeQuery=").append(isIncludeInSuperTypeQuery()).append(", "); + builder.append("IncludedInSuperTypeQuery=").append(isIncludedInSuperTypeQuery()).append(", "); builder.append("ControllablePolicy=").append(isControllablePolicy()).append(", "); builder.append("ControllableACL=").append(isControllableACL()).append(", "); builder.append("Fileable=").append(isFileable()).append(", "); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISFolderTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISFolderTypeDefinition.java index b6012c20c1..84b2804ab2 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISFolderTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISFolderTypeDefinition.java @@ -81,8 +81,8 @@ public class CMISFolderTypeDefinition extends CMISAbstractTypeDefinition queryable = true; fullTextIndexed = true; controllablePolicy = false; - controllableACL = false; - includeInSuperTypeQuery = true; + controllableACL = true; + includedInSuperTypeQuery = cmisClassDef.getIncludedInSuperTypeQuery(); } /* @@ -104,7 +104,7 @@ public class CMISFolderTypeDefinition extends CMISAbstractTypeDefinition builder.append("Creatable=").append(isCreatable()).append(", "); builder.append("Queryable=").append(isQueryable()).append(", "); builder.append("FullTextIndexed=").append(isFullTextIndexed()).append(", "); - builder.append("IncludeInSuperTypeQuery=").append(isIncludeInSuperTypeQuery()).append(", "); + builder.append("IncludedInSuperTypeQuery=").append(isIncludedInSuperTypeQuery()).append(", "); builder.append("ControllablePolicy=").append(isControllablePolicy()).append(", "); builder.append("ControllableACL=").append(isControllableACL()).append(", "); builder.append("SubTypes=").append(getSubTypes(false).size()).append(", "); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISObjectTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISObjectTypeDefinition.java index e4efa2f052..a07ce7da33 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISObjectTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISObjectTypeDefinition.java @@ -77,7 +77,7 @@ public class CMISObjectTypeDefinition extends CMISAbstractTypeDefinition creatable = false; queryable = false; fullTextIndexed = false; - includeInSuperTypeQuery = false; + includedInSuperTypeQuery = cmisClassDef.getIncludedInSuperTypeQuery(); controllablePolicy = false; controllableACL = false; } @@ -120,7 +120,7 @@ public class CMISObjectTypeDefinition extends CMISAbstractTypeDefinition builder.append("Creatable=").append(isCreatable()).append(", "); builder.append("Queryable=").append(isQueryable()).append(", "); builder.append("Controllable=").append(isControllablePolicy()).append(", "); - builder.append("IncludeInSuperTypeQuery=").append(isIncludeInSuperTypeQuery()).append(", "); + builder.append("IncludedInSuperTypeQuery=").append(isIncludedInSuperTypeQuery()).append(", "); builder.append("SubTypes=").append(getSubTypes(false).size()).append(", "); builder.append("Properties=").append(getPropertyDefinitions().size()); builder.append("]"); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISPolicyTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISPolicyTypeDefinition.java index a62cc08984..7e94d06191 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISPolicyTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISPolicyTypeDefinition.java @@ -83,7 +83,7 @@ public class CMISPolicyTypeDefinition extends CMISAbstractTypeDefinition creatable = false; queryable = true; - includeInSuperTypeQuery = true; + includedInSuperTypeQuery = cmisClassDef.getIncludedInSuperTypeQuery(); fullTextIndexed = true; controllablePolicy = false; controllableACL = false; @@ -147,7 +147,7 @@ public class CMISPolicyTypeDefinition extends CMISAbstractTypeDefinition builder.append("Creatable=").append(isCreatable()).append(", "); builder.append("Queryable=").append(isQueryable()).append(", "); builder.append("Controllable=").append(isControllablePolicy()).append(", "); - builder.append("IncludeInSuperTypeQuery=").append(isIncludeInSuperTypeQuery()).append(", "); + builder.append("IncludedInSuperTypeQuery=").append(isIncludedInSuperTypeQuery()).append(", "); builder.append("SubTypes=").append(getSubTypes(false).size()).append(", "); builder.append("Properties=").append(getPropertyDefinitions().size()); builder.append("]"); diff --git a/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java b/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java index 6750492025..734b4c8fa4 100644 --- a/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java +++ b/source/java/org/alfresco/cmis/dictionary/CMISRelationshipTypeDefinition.java @@ -80,7 +80,7 @@ public class CMISRelationshipTypeDefinition extends CMISAbstractTypeDefinition queryable = false; fullTextIndexed = false; - includeInSuperTypeQuery = true; + includedInSuperTypeQuery = true; controllablePolicy = false; controllableACL = false; @@ -247,7 +247,7 @@ public class CMISRelationshipTypeDefinition extends CMISAbstractTypeDefinition builder.append("Creatable=").append(isCreatable()).append(", "); builder.append("Queryable=").append(isQueryable()).append(", "); builder.append("Controllable=").append(isControllablePolicy()).append(", "); - builder.append("IncludeInSuperTypeQuery=").append(isIncludeInSuperTypeQuery()).append(", "); + builder.append("IncludedInSuperTypeQuery=").append(isIncludedInSuperTypeQuery()).append(", "); builder.append("AllowedSourceTypes=["); for (CMISTypeDefinition type : getAllowedSourceTypes()) { diff --git a/source/java/org/alfresco/cmis/mapping/AbstractProperty.java b/source/java/org/alfresco/cmis/mapping/AbstractProperty.java index 44b0de12c9..298acad4e6 100644 --- a/source/java/org/alfresco/cmis/mapping/AbstractProperty.java +++ b/source/java/org/alfresco/cmis/mapping/AbstractProperty.java @@ -139,7 +139,7 @@ public abstract class AbstractProperty implements CMISPropertyAccessor, CMISProp throw new UnsupportedOperationException(); } - public String getLuceneSortField() + public String getLuceneSortField(LuceneQueryParser lqp) { throw new UnsupportedOperationException(); } diff --git a/source/java/org/alfresco/cmis/mapping/AbstractSimpleProperty.java b/source/java/org/alfresco/cmis/mapping/AbstractSimpleProperty.java index 630e42603d..81e8805396 100644 --- a/source/java/org/alfresco/cmis/mapping/AbstractSimpleProperty.java +++ b/source/java/org/alfresco/cmis/mapping/AbstractSimpleProperty.java @@ -239,7 +239,7 @@ public abstract class AbstractSimpleProperty extends AbstractProperty * (non-Javadoc) * @see org.alfresco.cmis.property.PropertyLuceneBuilder#getLuceneSortField() */ - public String getLuceneSortField() + public String getLuceneSortField(LuceneQueryParser lqp) { return getLuceneFieldName(); } diff --git a/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java b/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java index ff6a435763..f72175fb57 100644 --- a/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java +++ b/source/java/org/alfresco/cmis/mapping/BaseCMISTest.java @@ -31,12 +31,17 @@ import javax.transaction.UserTransaction; import junit.framework.TestCase; +import org.alfresco.cmis.CMISAccessControlService; import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISQueryService; +import org.alfresco.cmis.CMISRenditionService; import org.alfresco.cmis.CMISServices; +import org.alfresco.repo.dictionary.DictionaryDAO; +import org.alfresco.repo.dictionary.NamespaceDAOImpl; import org.alfresco.repo.security.authentication.AuthenticationComponent; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.MutableAuthenticationDao; +import org.alfresco.repo.security.permissions.impl.ModelDAO; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.model.FileFolderService; @@ -47,6 +52,7 @@ import org.alfresco.service.cmr.repository.StoreRef; import org.alfresco.service.cmr.search.SearchService; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PermissionService; +import org.alfresco.service.cmr.thumbnail.ThumbnailService; import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.ApplicationContextHelper; @@ -69,6 +75,10 @@ public abstract class BaseCMISTest extends TestCase protected CMISDictionaryService cmisDictionaryService; + protected CMISRenditionService cmisRenditionService; + + protected CMISAccessControlService cmisAccessControlService; + protected DictionaryService dictionaryService; protected TransactionService transactionService; @@ -98,6 +108,14 @@ public abstract class BaseCMISTest extends TestCase protected ContentService contentService; protected PermissionService permissionService; + + protected ThumbnailService thumbnailService; + + protected ModelDAO permissionModelDao; + + protected DictionaryDAO dictionaryDAO; + + protected NamespaceDAOImpl namespaceDao; public void setUp() throws Exception { @@ -107,6 +125,8 @@ public abstract class BaseCMISTest extends TestCase cmisMapping = (CMISMapping) ctx.getBean("CMISMapping"); cmisQueryService = (CMISQueryService) ctx.getBean("CMISQueryService"); cmisService = (CMISServices) ctx.getBean("CMISService"); + cmisRenditionService = (CMISRenditionService) ctx.getBean("CMISRenditionService"); + cmisAccessControlService = (CMISAccessControlService) ctx.getBean("CMISAccessControlService"); dictionaryService = (DictionaryService) ctx.getBean("dictionaryService"); nodeService = (NodeService) ctx.getBean("nodeService"); fileFolderService = (FileFolderService) ctx.getBean("fileFolderService"); @@ -124,6 +144,13 @@ public abstract class BaseCMISTest extends TestCase authenticationService = (MutableAuthenticationService) ctx.getBean("authenticationService"); authenticationDAO = (MutableAuthenticationDao) ctx.getBean("authenticationDao"); + thumbnailService = (ThumbnailService) ctx.getBean("thumbnailService"); + + permissionModelDao = (ModelDAO) ctx.getBean("permissionsModelDAO"); + + dictionaryDAO = (DictionaryDAO) ctx.getBean("dictionaryDAO"); + namespaceDao = (NamespaceDAOImpl) ctx.getBean("namespaceDAO"); + testTX = transactionService.getUserTransaction(); testTX.begin(); this.authenticationComponent.setSystemUserAsCurrentUser(); @@ -136,7 +163,7 @@ public abstract class BaseCMISTest extends TestCase { authenticationService.deleteAuthentication("cmis"); } - authenticationService.createAuthentication("cmis", "cmis".toCharArray()); + authenticationService.createAuthentication("cmis", "cmis".toCharArray()); } private String getStoreName() diff --git a/source/java/org/alfresco/cmis/mapping/CMISMapping.java b/source/java/org/alfresco/cmis/mapping/CMISMapping.java index 61957d536f..a1e8a672d5 100644 --- a/source/java/org/alfresco/cmis/mapping/CMISMapping.java +++ b/source/java/org/alfresco/cmis/mapping/CMISMapping.java @@ -26,9 +26,13 @@ package org.alfresco.cmis.mapping; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; +import java.util.Set; +import org.alfresco.cmis.CMISAccessControlFormatEnum; +import org.alfresco.cmis.CMISAccessControlService; import org.alfresco.cmis.CMISActionEvaluator; import org.alfresco.cmis.CMISAllowedActionEnum; import org.alfresco.cmis.CMISDataTypeEnum; @@ -65,7 +69,7 @@ public class CMISMapping implements InitializingBean * The Alfresco CMIS Namespace */ public static String CMIS_MODEL_NS = "cmis"; - public static String CMIS_MODEL_URI = "http://www.alfresco.org/model/cmis/1.0/cd04"; + public static String CMIS_MODEL_URI = "http://www.alfresco.org/model/cmis/1.0/cd07"; /** * The Alfresco CMIS Model name. @@ -108,6 +112,10 @@ public class CMISMapping implements InitializingBean private Map> actionEvaluators = new HashMap>(); + private Set cmisRead = new HashSet(); + private Set cmisWrite = new HashSet(); + + /* * (non-Javadoc) * @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet() @@ -197,6 +205,9 @@ public class CMISMapping implements InitializingBean // Action Evaluator Mappings // + // NOTE: The order of evaluators is important - they must be in the order as specified in CMIS-Core.xsd + // so that schema validation passes + registerEvaluator(CMISScope.DOCUMENT, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_DELETE_OBJECT, PermissionService.DELETE_NODE)); registerEvaluator(CMISScope.DOCUMENT, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_UPDATE_PROPERTIES, PermissionService.WRITE_PROPERTIES)); registerEvaluator(CMISScope.DOCUMENT, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_PROPERTIES, PermissionService.READ_PROPERTIES)); @@ -219,8 +230,8 @@ public class CMISMapping implements InitializingBean registerEvaluator(CMISScope.DOCUMENT, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_REMOVE_POLICY, false)); registerEvaluator(CMISScope.DOCUMENT, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_RELATIONSHIP, true)); registerEvaluator(CMISScope.DOCUMENT, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_RENDITIONS, true)); - registerEvaluator(CMISScope.DOCUMENT, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_ACL, false)); - registerEvaluator(CMISScope.DOCUMENT, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_APPLY_ACL, false)); + registerEvaluator(CMISScope.DOCUMENT, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_ACL, PermissionService.READ_PERMISSIONS)); + registerEvaluator(CMISScope.DOCUMENT, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_APPLY_ACL, PermissionService.CHANGE_PERMISSIONS)); registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_DELETE_OBJECT, PermissionService.DELETE_NODE)); registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_UPDATE_PROPERTIES, PermissionService.WRITE_PROPERTIES)); @@ -239,9 +250,9 @@ public class CMISMapping implements InitializingBean registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_DOCUMENT, PermissionService.CREATE_CHILDREN)); registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_FOLDER, PermissionService.CREATE_CHILDREN)); registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_RELATIONSHIP, PermissionService.CREATE_ASSOCIATIONS)); - registerEvaluator(CMISScope.FOLDER, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_CREATE_POLICY, false)); - registerEvaluator(CMISScope.FOLDER, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_ACL, false)); - registerEvaluator(CMISScope.FOLDER, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_APPLY_ACL, false)); + registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_DELETE_TREE, PermissionService.DELETE_NODE)); + registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_ACL, PermissionService.READ_PERMISSIONS)); + registerEvaluator(CMISScope.FOLDER, new PermissionActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_APPLY_ACL, PermissionService.CHANGE_PERMISSIONS)); registerEvaluator(CMISScope.RELATIONSHIP, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_DELETE_OBJECT, true)); registerEvaluator(CMISScope.RELATIONSHIP, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_UPDATE_PROPERTIES, false)); @@ -259,6 +270,15 @@ public class CMISMapping implements InitializingBean registerEvaluator(CMISScope.POLICY, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_OBJECT_RELATIONSHIPS, false)); registerEvaluator(CMISScope.POLICY, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_GET_ACL, false)); registerEvaluator(CMISScope.POLICY, new FixedValueActionEvaluator(serviceRegistry, CMISAllowedActionEnum.CAN_APPLY_ACL, false)); + + cmisRead.add(PermissionService.READ_PROPERTIES); + cmisRead.add(PermissionService.READ_CONTENT); + cmisRead.add(PermissionService.READ); + + cmisWrite.add(PermissionService.WRITE_PROPERTIES); + cmisWrite.add(PermissionService.WRITE_CONTENT); + cmisWrite.add(PermissionService.WRITE); + } @@ -770,4 +790,54 @@ public class CMISMapping implements InitializingBean logger.debug("Registered Action Evaluator: scope=" + scope + ", evaluator=" + evaluator); } + + /** + * @param permission + * @param format + * @return + */ + public String getReportedPermission(String permission, CMISAccessControlFormatEnum format) + { + if(format == CMISAccessControlFormatEnum.REPOSITORY_SPECIFIC_PERMISSIONS) + { + return permission; + } + else + { + if(cmisRead.contains(permission)) + { + return CMISAccessControlService.CMIS_READ_PERMISSION; + } + else if(cmisWrite.contains(permission)) + { + return CMISAccessControlService.CMIS_WRITE_PERMISSION; + } + else + { + return CMISAccessControlService.CMIS_ALL_PERMISSION; + } + } + } + + public String getSetPermission(String permission) + { + if(permission.equals(CMISAccessControlService.CMIS_READ_PERMISSION)) + { + return PermissionService.READ; + } + else if(permission.equals(CMISAccessControlService.CMIS_WRITE_PERMISSION)) + { + return PermissionService.WRITE; + } + else if(permission.equals(CMISAccessControlService.CMIS_ALL_PERMISSION)) + { + return PermissionService.ALL_PERMISSIONS; + } + else + { + return permission; + } + + } + } diff --git a/source/java/org/alfresco/cmis/mapping/CMISPropertyServiceTest.java b/source/java/org/alfresco/cmis/mapping/CMISPropertyServiceTest.java index 938112ae02..3294ac5e78 100644 --- a/source/java/org/alfresco/cmis/mapping/CMISPropertyServiceTest.java +++ b/source/java/org/alfresco/cmis/mapping/CMISPropertyServiceTest.java @@ -105,7 +105,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); } @@ -139,7 +138,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -191,7 +189,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -237,7 +234,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -272,7 +268,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -317,7 +312,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -349,7 +343,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -394,7 +387,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -426,7 +418,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -461,7 +452,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -493,7 +483,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -538,7 +527,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -570,7 +558,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -615,7 +602,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -650,7 +636,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -695,7 +680,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent (Working Copy)"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); @@ -730,7 +714,6 @@ public class CMISPropertyServiceTest extends BaseCMISTest assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_LENGTH), 0L); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_MIME_TYPE), "application/octet-stream"); assertEquals(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_FILENAME), "BaseContent"); - assertNotNull(properties.get(CMISDictionaryModel.PROP_CONTENT_STREAM_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_PARENT_ID)); assertNull(properties.get(CMISDictionaryModel.PROP_ALLOWED_CHILD_OBJECT_TYPE_IDS)); diff --git a/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java b/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java index 576881cb0c..5fa66d5cc0 100644 --- a/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java +++ b/source/java/org/alfresco/cmis/mapping/CMISServicesImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2008 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,7 +18,7 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ @@ -27,14 +27,18 @@ package org.alfresco.cmis.mapping; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.TreeMap; import org.alfresco.cmis.CMISDictionaryModel; import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISPropertyDefinition; import org.alfresco.cmis.CMISRelationshipDirectionEnum; +import org.alfresco.cmis.CMISRendition; +import org.alfresco.cmis.CMISRenditionService; import org.alfresco.cmis.CMISScope; import org.alfresco.cmis.CMISServices; import org.alfresco.cmis.CMISTypeDefinition; @@ -111,6 +115,7 @@ public class CMISServicesImpl implements CMISServices, ApplicationContextAware, private NodeService nodeService; private TenantAdminService tenantAdminService; private ProcessorLifecycle lifecycle = new ProcessorLifecycle(); + private CMISRenditionService cmisRenditionService; // CMIS supported version private String cmisVersion = "[undefined]"; @@ -220,8 +225,19 @@ public class CMISServicesImpl implements CMISServices, ApplicationContextAware, public void setRepository(Repository repository) { this.repository = repository; - } + } + /** + * Sets the cmis rendition service. + * + * @param cmisRenditionService + * the cmis rendition service + */ + public void setCMISRenditionService(CMISRenditionService cmisRenditionService) + { + this.cmisRenditionService = cmisRenditionService; + } + /* (non-Javadoc) * @see org.springframework.context.ApplicationContextAware#setApplicationContext(org.springframework.context.ApplicationContext) */ @@ -377,6 +393,30 @@ public class CMISServicesImpl implements CMISServices, ApplicationContextAware, return nodeRef; } + /* + * (non-Javadoc) + * @see org.alfresco.cmis.CMISServices#getRenditions(org.alfresco.service.cmr.repository.NodeRef, java.lang.String) + */ + public Map getRenditions(NodeRef nodeRef, String renditionFilter) + { + Map result = new TreeMap(); + List renditions = cmisRenditionService.getRenditions(nodeRef, renditionFilter); + if (renditions == null) + { + renditions = Collections.emptyList(); + } + result.put("node", nodeRef); + result.put("renditionFilter", renditionFilter); // Record rendition filter to aid recursion on node maps + result.put("renditions", renditions); + List renditionNodes = new ArrayList(renditions.size()); + for (CMISRendition rendition : renditions) + { + renditionNodes.add(rendition.getNodeRef()); + } + result.put("renditionNodes", renditionNodes); + return result; + } + /* * (non-Javadoc) * @see org.alfresco.cmis.CMISServices#getChildren(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.cmis.CMISTypesFilterEnum) diff --git a/source/java/org/alfresco/cmis/mapping/ContentStreamIdProperty.java b/source/java/org/alfresco/cmis/mapping/ContentStreamIdProperty.java index 27ed40b1c7..91837c6898 100644 --- a/source/java/org/alfresco/cmis/mapping/ContentStreamIdProperty.java +++ b/source/java/org/alfresco/cmis/mapping/ContentStreamIdProperty.java @@ -27,11 +27,14 @@ package org.alfresco.cmis.mapping; import java.io.Serializable; import org.alfresco.cmis.CMISDictionaryModel; +import org.alfresco.model.ContentModel; import org.alfresco.service.ServiceRegistry; +import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; /** - * Accessor for CMIS content stream length property + * Accessor for CMIS content stream property id * * @author andyh */ @@ -53,7 +56,13 @@ public class ContentStreamIdProperty extends AbstractProperty */ public Serializable getValue(NodeRef nodeRef) { - return "cm:content"; + Serializable sValue = getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_CONTENT); + if (sValue != null) + { + ContentData contentData = DefaultTypeConverter.INSTANCE.convert(ContentData.class, sValue); + return contentData.getContentUrl(); + } + return null; } } diff --git a/source/java/org/alfresco/cmis/mapping/DirectProperty.java b/source/java/org/alfresco/cmis/mapping/DirectProperty.java index 4538a1bd65..fd9fb5efcf 100644 --- a/source/java/org/alfresco/cmis/mapping/DirectProperty.java +++ b/source/java/org/alfresco/cmis/mapping/DirectProperty.java @@ -25,7 +25,15 @@ package org.alfresco.cmis.mapping; import java.io.Serializable; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import org.alfresco.repo.search.MLAnalysisMode; +import org.alfresco.repo.search.SearcherException; +import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; +import org.alfresco.repo.search.impl.lucene.analysis.DateTimeAnalyser; import org.alfresco.service.ServiceRegistry; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.PropertyDefinition; @@ -33,6 +41,8 @@ import org.alfresco.service.cmr.repository.AssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.namespace.QName; +import org.apache.lucene.index.IndexReader.FieldOption; +import org.springframework.extensions.surf.util.I18NUtil; /** * A simple 1-1 property mapping from a CMIS property name to an alfresco property @@ -41,6 +51,96 @@ import org.alfresco.service.namespace.QName; */ public class DirectProperty extends AbstractSimpleProperty { + /* + * (non-Javadoc) + * @see org.alfresco.cmis.mapping.AbstractSimpleProperty#getLuceneSortField() + */ + @Override + public String getLuceneSortField(LuceneQueryParser lqp) + { + + String field = getLuceneFieldName(); + // need to find the real field to use + Locale sortLocale = null; + + PropertyDefinition propertyDef = getServiceRegistry().getDictionaryService().getProperty(QName.createQName(field.substring(1))); + + if (propertyDef.getDataType().getName().equals(DataTypeDefinition.CONTENT)) + { + throw new SearcherException("Order on content properties is not curently supported"); + } + else if ((propertyDef.getDataType().getName().equals(DataTypeDefinition.MLTEXT)) || (propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT))) + { + List locales = lqp.getSearchParameters().getLocales(); + if (((locales == null) || (locales.size() == 0))) + { + locales = Collections.singletonList(I18NUtil.getLocale()); + } + + if (locales.size() > 1) + { + throw new SearcherException("Order on text/mltext properties with more than one locale is not curently supported"); + } + + sortLocale = locales.get(0); + // find best field match + + HashSet allowableLocales = new HashSet(); + MLAnalysisMode analysisMode = lqp.getConfig().getDefaultMLSearchAnalysisMode(); + for (Locale l : MLAnalysisMode.getLocales(analysisMode, sortLocale, false)) + { + allowableLocales.add(l.toString()); + } + + String sortField = field; + + for (Object current : lqp.getIndexReader().getFieldNames(FieldOption.INDEXED)) + { + String currentString = (String) current; + if (currentString.startsWith(field) && currentString.endsWith(".sort")) + { + String fieldLocale = currentString.substring(field.length() + 1, currentString.length() - 5); + if (allowableLocales.contains(fieldLocale)) + { + if (fieldLocale.equals(sortLocale.toString())) + { + sortField = currentString; + break; + } + else if (sortLocale.toString().startsWith(fieldLocale)) + { + if (sortField.equals(field) || (currentString.length() < sortField.length())) + { + sortField = currentString; + } + } + else if (fieldLocale.startsWith(sortLocale.toString())) + { + if (sortField.equals(field) || (currentString.length() < sortField.length())) + { + sortField = currentString; + } + } + } + } + } + + field = sortField; + + } + else if (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME)) + { + DataTypeDefinition dataType = propertyDef.getDataType(); + String analyserClassName = dataType.getAnalyserClassName(); + if (analyserClassName.equals(DateTimeAnalyser.class.getCanonicalName())) + { + field = field + ".sort"; + } + } + + return field; + } + private QName alfrescoName; /** @@ -58,7 +158,6 @@ public class DirectProperty extends AbstractSimpleProperty /* * (non-Javadoc) - * * @see org.alfresco.cmis.property.AbstractPropertyAccessor#getMappedProperty() */ public QName getMappedProperty() @@ -68,7 +167,6 @@ public class DirectProperty extends AbstractSimpleProperty /* * (non-Javadoc) - * * @see org.alfresco.cmis.property.PropertyAccessor#getValue(org.alfresco.service.cmr.repository.NodeRef) */ public Serializable getValue(NodeRef nodeRef) @@ -84,7 +182,7 @@ public class DirectProperty extends AbstractSimpleProperty { return null; } - + public String getLuceneFieldName() { StringBuilder field = new StringBuilder(64); @@ -112,6 +210,4 @@ public class DirectProperty extends AbstractSimpleProperty return pd.getDataType(); } - - } diff --git a/source/java/org/alfresco/cmis/mapping/FixedValueProperty.java b/source/java/org/alfresco/cmis/mapping/FixedValueProperty.java index 45e73ba7c2..f26500b6cc 100644 --- a/source/java/org/alfresco/cmis/mapping/FixedValueProperty.java +++ b/source/java/org/alfresco/cmis/mapping/FixedValueProperty.java @@ -313,7 +313,7 @@ public class FixedValueProperty extends AbstractProperty * (non-Javadoc) * @see org.alfresco.cmis.property.PropertyLuceneBuilder#getLuceneSortField() */ - public String getLuceneSortField() + public String getLuceneSortField(LuceneQueryParser lqp) { throw new UnsupportedOperationException(); } diff --git a/source/java/org/alfresco/cmis/mapping/ObjectIdProperty.java b/source/java/org/alfresco/cmis/mapping/ObjectIdProperty.java index 629c373808..0c7c1b2b2c 100644 --- a/source/java/org/alfresco/cmis/mapping/ObjectIdProperty.java +++ b/source/java/org/alfresco/cmis/mapping/ObjectIdProperty.java @@ -70,17 +70,20 @@ public class ObjectIdProperty extends AbstractProperty */ public Serializable getValue(NodeRef nodeRef) { - if (getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE)) + if (!getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_WORKING_COPY)) { - Serializable value = getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_VERSION_LABEL); - if (value != null) + if (getServiceRegistry().getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE)) { - String versionLabel = DefaultTypeConverter.INSTANCE.convert(String.class, value); - StringBuilder builder = new StringBuilder(128); - builder.append(nodeRef.toString()); - builder.append(";"); - builder.append(versionLabel); - return builder.toString(); + Serializable value = getServiceRegistry().getNodeService().getProperty(nodeRef, ContentModel.PROP_VERSION_LABEL); + if (value != null) + { + String versionLabel = DefaultTypeConverter.INSTANCE.convert(String.class, value); + StringBuilder builder = new StringBuilder(128); + builder.append(nodeRef.toString()); + builder.append(";"); + builder.append(versionLabel); + return builder.toString(); + } } } @@ -270,7 +273,7 @@ public class ObjectIdProperty extends AbstractProperty /* (non-Javadoc) * @see org.alfresco.cmis.property.NamedPropertyAccessor#getLuceneSortField(java.lang.String) */ - public String getLuceneSortField() + public String getLuceneSortField(LuceneQueryParser lqp) { return getLuceneFieldName(); } diff --git a/source/java/org/alfresco/cmis/mapping/ObjectTypeIdProperty.java b/source/java/org/alfresco/cmis/mapping/ObjectTypeIdProperty.java index 04e63fd8ce..689f413fb9 100644 --- a/source/java/org/alfresco/cmis/mapping/ObjectTypeIdProperty.java +++ b/source/java/org/alfresco/cmis/mapping/ObjectTypeIdProperty.java @@ -266,7 +266,7 @@ public class ObjectTypeIdProperty extends AbstractProperty * (non-Javadoc) * @see org.alfresco.cmis.property.PropertyLuceneBuilder#getLuceneSortField() */ - public String getLuceneSortField() + public String getLuceneSortField(LuceneQueryParser lqp) { return getLuceneFieldName(); } diff --git a/source/java/org/alfresco/cmis/mapping/ParentProperty.java b/source/java/org/alfresco/cmis/mapping/ParentProperty.java index 6a1a376440..821365cbca 100644 --- a/source/java/org/alfresco/cmis/mapping/ParentProperty.java +++ b/source/java/org/alfresco/cmis/mapping/ParentProperty.java @@ -222,7 +222,7 @@ public class ParentProperty extends AbstractProperty * (non-Javadoc) * @see org.alfresco.cmis.property.PropertyLuceneBuilder#getLuceneSortField() */ - public String getLuceneSortField() + public String getLuceneSortField(LuceneQueryParser lqp) { return getLuceneFieldName(); } diff --git a/source/java/org/alfresco/cmis/renditions/CMISRenditionImpl.java b/source/java/org/alfresco/cmis/renditions/CMISRenditionImpl.java new file mode 100755 index 0000000000..8555e62d79 --- /dev/null +++ b/source/java/org/alfresco/cmis/renditions/CMISRenditionImpl.java @@ -0,0 +1,273 @@ +/* + * Copyright (C) 2005-2010 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 received a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.cmis.renditions; + +import org.alfresco.cmis.CMISRendition; +import org.alfresco.cmis.CMISRenditionKind; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * CMIS Rendition Implementation + * + * @author Stas Sokolovsky + */ +public class CMISRenditionImpl implements CMISRendition +{ + private NodeRef nodeRef; + private String streamId; + private String mimeType; + private CMISRenditionKind kind; + private Integer height; + private Integer width; + private String title; + private Integer length; + private String renditionDocumentId; + + /** + * Construct a CmisRendition using fields + * + * @param nodeRef the rendition node reference + * @param streamId rendition stream id + * @param mimeType the MIME type of the rendition stream + * @param kind a categorization String associated with the rendition + * @param height the height of image + * @param width the width of image + * @param title rendition title + * @param length the length of the rendition stream in bytes + * @param renditionDocumentId the rendition document id + */ + public CMISRenditionImpl(NodeRef nodeRef, String streamId, String mimeType, CMISRenditionKind kind, Integer height, Integer width, String title, Integer length, String renditionDocumentId) + { + super(); + this.nodeRef = nodeRef; + this.streamId = streamId; + this.mimeType = mimeType; + this.kind = kind; + this.height = height; + this.width = width; + this.title = title; + this.length = length; + this.renditionDocumentId = renditionDocumentId; + } + + /** + * Default constructor + */ + public CMISRenditionImpl() + { + super(); + } + + /** + * @see org.alfresco.cmis.CMISRendition#getStreamId() + */ + public String getStreamId() + { + return streamId; + } + + /** + * Set the rendition stream id + * + * @param streamId rendition stream id + */ + public void setStreamId(String streamId) + { + this.streamId = streamId; + } + + /** + * @see org.alfresco.cmis.CMISRendition#getMimeType() + */ + public String getMimeType() + { + return mimeType; + } + + /** + * Set the MIME type of the rendition stream + * + * @param mimeType the MIME type of the rendition stream + */ + public void setMimeType(String mimeType) + { + this.mimeType = mimeType; + } + + /** + * @see org.alfresco.cmis.CMISRendition#getKind() + */ + public CMISRenditionKind getKind() + { + return kind; + } + + /** + * Set rendition kind + * + * @param kind rendition kind + */ + public void setKind(CMISRenditionKind kind) + { + this.kind = kind; + } + + /** + * @see org.alfresco.cmis.CMISRendition#getHeight() + */ + public Integer getHeight() + { + return height; + } + + /** + * Set the height of image + * + * @param height the height of image + */ + public void setHeight(Integer height) + { + this.height = height; + } + + /** + * @see org.alfresco.cmis.CMISRendition#getWidth() + */ + public Integer getWidth() + { + return width; + } + + /** + * Set the width of image + * + * @param width the width of image + */ + public void setWidth(Integer width) + { + this.width = width; + } + + /** + * @see org.alfresco.cmis.CMISRendition#getTitle() + */ + public String getTitle() + { + return title; + } + + /** + * Set the title of rendition + * + * @param title the title + */ + public void setTitle(String title) + { + this.title = title; + } + + /** + * @see org.alfresco.cmis.CMISRendition#getLength() + */ + public Integer getLength() + { + return length; + } + + /** + * Set the length of the rendition stream in bytes + * + * @param length length of the rendition stream in bytes + */ + public void setLength(Integer length) + { + this.length = length; + } + + /** + * @see org.alfresco.cmis.CMISRendition#getRenditionDocumentId() + */ + public String getRenditionDocumentId() + { + return renditionDocumentId; + } + + /** + * Set the rendition document id + * + * @param renditionDocumentId the rendition document id + */ + public void setRenditionDocumentId(String renditionDocumentId) + { + this.renditionDocumentId = renditionDocumentId; + } + + /* + * (non-Javadoc) + * @see org.alfresco.cmis.CMISRendition#getNodeRef() + */ + public NodeRef getNodeRef() + { + return this.nodeRef; + } + + /** + * @param nodeRef + * the nodeRef to set + */ + public void setNodeRef(NodeRef nodeRef) + { + this.nodeRef = nodeRef; + } + + /** + * @see java.lang.Object#equals(java.lang.Object) + */ + public boolean equals(Object obj) + { + if (this == obj) + { + return true; + } + if (obj instanceof CMISRendition) + { + CMISRendition that = (CMISRendition) obj; + return (this.getStreamId() != null && that.getStreamId() != null && this.getStreamId().equals(that.getStreamId())); + } + else + { + return false; + } + } + + /** + * @see java.lang.Object#hashCode() + */ + public int hashCode() + { + return this.getStreamId() != null ? this.getStreamId().hashCode() : 0x01; + } + +} diff --git a/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceImpl.java b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceImpl.java new file mode 100755 index 0000000000..089a6322e2 --- /dev/null +++ b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceImpl.java @@ -0,0 +1,517 @@ +/* + * Copyright (C) 2005-2008 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.cmis.renditions; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +import org.alfresco.cmis.CMISRendition; +import org.alfresco.cmis.CMISRenditionKind; +import org.alfresco.cmis.CMISRenditionService; +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.content.transform.magick.ImageResizeOptions; +import org.alfresco.repo.content.transform.magick.ImageTransformationOptions; +import org.alfresco.repo.thumbnail.ThumbnailDefinition; +import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.thumbnail.ThumbnailService; + +/** + * Rendition Service Implementation + * + * @author Stas Sokolovsky + */ +public class CMISRenditionServiceImpl implements CMISRenditionService +{ + + /** Rendition filter constants */ + private static final String FILTER_WILDCARD = "*"; + private static final String FILTER_NONE = "cmis:none"; + private static final String FILTER_DELIMITER = ","; + private static final String SUBTYPES_POSTFIX = "/*"; + private static final String SUBTYPES_DELIMITER = "/"; + + /** Service dependencies */ + private ThumbnailService thumbnailService; + private NodeService nodeService; + + /** Kind to thumbnail mapping */ + private Map> kindToThumbnailNames = new HashMap>(); + private Map thumbnailNamesToKind = new HashMap(); + + /** Custom renditions */ + private CustomRenditionsCache customRenditionsCache; + + /** + * @see org.alfresco.cmis.CMISRenditionService#getRenditions(org.alfresco.service.cmr.repository.NodeRef, java.lang.String) + */ + public List getRenditions(NodeRef node, String renditionFilter) + { + Collection result = null; + ThumbnailFilter thumbnailFilter = getThumbnailFilter(renditionFilter); + if (thumbnailFilter != null) + { + result = getRenditions(node, thumbnailFilter); + } + return result != null ? new ArrayList(result) : null; + } + + /** + * Get renditions for a document. + * + * @param node node reference of document + * @param thumbnailFilter thumbnail filter + * @return set of renditions + */ + private Set getRenditions(NodeRef node, ThumbnailFilter thumbnailFilter) + { + Set result = new HashSet(); + if (thumbnailFilter.isAny()) + { + result.addAll(getAllRenditions(node)); + } + else + { + for (String thumbnailName : thumbnailFilter.getThumbnailNames()) + { + CMISRendition rendition = getRenditionByThumbnailName(node, thumbnailName); + if (rendition != null) + { + result.add(rendition); + } + } + for (String mimetype : thumbnailFilter.getMimetypes()) + { + result.addAll(getRenditionByMimetype(node, mimetype)); + } + } + result.addAll(getCustomRenditions(thumbnailFilter)); + return result; + } + + /** + * Get rendition by thumbnail name. + * + * @param node node reference of document + * @param thumbnailName thumbnail name + * @return rendition + */ + private CMISRendition getRenditionByThumbnailName(NodeRef node, String thumbnailName) + { + CMISRendition result = null; + + NodeRef thumbnailNode = thumbnailService.getThumbnailByName(node, ContentModel.PROP_CONTENT, thumbnailName); + + if (thumbnailNode != null) + { + result = getRendition(thumbnailNode, node); + } + return result; + } + + /** + * Get rendition by mimetype. + * + * @param node node reference of document + * @param mimetype rendition mimetype + * @return list of renditions + */ + private List getRenditionByMimetype(NodeRef node, String mimetype) + { + List result = new ArrayList(); + + List thumbnails = thumbnailService.getThumbnails(node, ContentModel.PROP_CONTENT, mimetype, null); + + if (thumbnails != null) + { + for (NodeRef thumbnailNode : thumbnails) + { + CMISRendition rendition = getRendition(thumbnailNode, node); + if (rendition != null) + { + result.add(rendition); + } + } + } + return result; + } + + /** + * Convert the rendition filter to thumbnail filter. + * + * @param renditionFilter rendition filter + * @return thumbnail filter + */ + private ThumbnailFilter getThumbnailFilter(String renditionFilter) + { + ThumbnailFilter result = null; + if (renditionFilter != null && !renditionFilter.equals(FILTER_NONE)) + { + result = new ThumbnailFilter(); + if (renditionFilter.equals(FILTER_WILDCARD)) + { + result.setAny(true); + } + else + { + String[] filterElements = renditionFilter.split(FILTER_DELIMITER); + if (filterElements == null || filterElements.length < 1) + { + throw new AlfrescoRuntimeException("Invalid rendition filter"); + } + for (String filterElement : filterElements) + { + filterElement = filterElement.trim(); + if (isRenditionKind(filterElement)) + { + CMISRenditionKind kind = null; + for (CMISRenditionKind renditionKind : CMISRenditionKind.values()) + { + if (renditionKind.getLabel().equals(filterElement)) + { + kind = renditionKind; + } + } + result.getKinds().add(kind); + List thumbnails = kindToThumbnailNames.get(filterElement); + if (thumbnails != null) + { + result.getThumbnailNames().addAll(thumbnails); + } + } + else + { + result.getMimetypes().add(filterElement); + } + } + } + } + return result; + } + + /** + * Get the thumbnail definition. + * + * @param thumbnailName thumbnail name + * @return thumbnail definition + */ + private ThumbnailDefinition getThumbnailDefinition(String thumbnailName) + { + return thumbnailService.getThumbnailRegistry().getThumbnailDefinition(thumbnailName); + } + + /** + * Get the image attributes of thumbnail. + * + * @param thumbnailName thumbnail name + * @return image attributes + */ + private ImageResizeOptions getImageAttributes(String thumbnailName) + { + ThumbnailDefinition thumbnailDefinition = getThumbnailDefinition(thumbnailName); + if (thumbnailDefinition != null && thumbnailDefinition.getTransformationOptions() != null + && thumbnailDefinition.getTransformationOptions() instanceof ImageTransformationOptions) + { + return ((ImageTransformationOptions) thumbnailDefinition.getTransformationOptions()).getResizeOptions(); + } + return null; + } + + /** + * @param filterElement filter element + * @return true if filter element is rendition kind + */ + private boolean isRenditionKind(String filterElement) + { + boolean result = false; + for (CMISRenditionKind renditionKind : CMISRenditionKind.values()) + { + if (renditionKind.getLabel().equals(filterElement)) + { + result = true; + } + } + return result; + } + + /** + * Create CMISRendition by thumbnailNode and documentNode. + * + * @param thumbnailNode thumbnail node reference + * @param documentNode document node reference + * @return CMISRendition + */ + private CMISRendition getRendition(NodeRef thumbnailNode, NodeRef documentNode) + { + CMISRenditionImpl rendition = null; + + String thumbnailName = (String) nodeService.getProperty(thumbnailNode, ContentModel.PROP_THUMBNAIL_NAME); + CMISRenditionKind kind = thumbnailNamesToKind.get(thumbnailName); + if (thumbnailName != null && kind != null) + { + rendition = new CMISRenditionImpl(); + ContentData contentData = (ContentData) nodeService.getProperty(thumbnailNode, ContentModel.PROP_CONTENT); + rendition.setNodeRef(thumbnailNode); + rendition.setStreamId(thumbnailNode.toString()); + rendition.setRenditionDocumentId(documentNode.toString()); + rendition.setTitle(thumbnailName); + rendition.setKind(kind); + rendition.setMimeType(contentData.getMimetype()); + rendition.setLength((int) contentData.getSize()); + + ImageResizeOptions imageAttributes = getImageAttributes(thumbnailName); + if (imageAttributes != null) + { + rendition.setWidth(imageAttributes.getWidth()); + rendition.setHeight(imageAttributes.getHeight()); + } + } + return rendition; + } + + /** + * Get custom renditions. + * + * @param thumbnailFilter thumbnail filter + * @return list of renditions + */ + private List getCustomRenditions(ThumbnailFilter filter) + { + List result = new ArrayList(); + if (customRenditionsCache != null) + { + if (filter.isAny()) + { + result.addAll(customRenditionsCache.getAllRenditions()); + } + else + { + for (CMISRenditionKind kind : filter.getKinds()) + { + List renditions = customRenditionsCache.getRenditionsByKind(kind); + if (renditions != null) + { + result.addAll(renditions); + } + } + for (String mimetype : filter.getMimetypes()) + { + List renditions = customRenditionsCache.getRenditionsByMimeType(mimetype); + if (renditions != null) + { + result.addAll(renditions); + } + } + } + } + return result; + } + + /** + * Get all renditions for a document. + * + * @param node document node ref + * @return list of renditions + */ + private List getAllRenditions(NodeRef node) + { + return getRenditionByMimetype(node, null); + } + + /** + * Set rendition kind mapping. + * + * @param RenditionKind to Thumbnail Definition mapping + */ + public void setRenditionKindMapping(Map> renditionKinds) + { + this.kindToThumbnailNames = renditionKinds; + for (Entry> entry : renditionKinds.entrySet()) + { + CMISRenditionKind kind = null; + for (CMISRenditionKind renditionKind : CMISRenditionKind.values()) + { + if (renditionKind.getLabel().equals(entry.getKey())) + { + kind = renditionKind; + } + } + for (String thumbnailName : entry.getValue()) + { + thumbnailNamesToKind.put(thumbnailName, kind); + } + } + } + + /** + * Set custom renditions. + * + * @param renditions list of renditions + */ + public void setCustomRenditions(List renditions) + { + this.customRenditionsCache = new CustomRenditionsCache(renditions); + } + + /** + * Set the NodeService. + * + * @param nodeService NodeService + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * Set the ThumbnailService. + * + * @param thumbnailService thumbnailService + */ + public void setThumbnailService(ThumbnailService thumbnailService) + { + this.thumbnailService = thumbnailService; + } + + /** + * Cache that aggregates renditions informaition to allow fast searching by kind and mimetype + */ + private class CustomRenditionsCache + { + private Map> renditionsByKind; + private Map> renditionsByMimeType; + private Map> renditionsByBaseMimeType; + private List allRenditions; + + public CustomRenditionsCache(List renditions) + { + allRenditions = renditions; + renditionsByKind = new HashMap>(renditions.size()); + renditionsByMimeType = new HashMap>(renditions.size()); + renditionsByBaseMimeType = new HashMap>(renditions.size()); + for (CMISRendition rendition : renditions) + { + String baseType = getBaseType(rendition.getMimeType()); + if (!renditionsByKind.containsKey(rendition.getKind())) + { + renditionsByKind.put(rendition.getKind(), new ArrayList(1)); + } + if (!renditionsByMimeType.containsKey(rendition.getMimeType())) + { + renditionsByMimeType.put(rendition.getMimeType(), new ArrayList(1)); + } + if (!renditionsByBaseMimeType.containsKey(baseType)) + { + renditionsByBaseMimeType.put(baseType, new ArrayList(1)); + } + renditionsByKind.get(rendition.getKind()).add(rendition); + renditionsByMimeType.get(rendition.getMimeType()).add(rendition); + renditionsByBaseMimeType.get(baseType).add(rendition); + } + } + + public List getRenditionsByKind(CMISRenditionKind kind) + { + return renditionsByKind.get(kind); + } + + public List getRenditionsByMimeType(String mimetype) + { + if (mimetype.endsWith(SUBTYPES_POSTFIX)) + { + String baseMimetype = mimetype.substring(0, mimetype.length() - SUBTYPES_POSTFIX.length()); + return renditionsByBaseMimeType.get(baseMimetype); + } + else + { + return renditionsByMimeType.get(mimetype); + } + } + + public Collection getAllRenditions() + { + return allRenditions; + } + + private String getBaseType(String mimetype) + { + String baseMymetype = mimetype; + int subTypeIndex = mimetype.indexOf(SUBTYPES_DELIMITER); + if (subTypeIndex > 0 || subTypeIndex < mimetype.length()) + { + baseMymetype = mimetype.substring(0, subTypeIndex); + } + return baseMymetype; + } + } + + /** + * Parsed RenditionFilter + */ + private class ThumbnailFilter + { + private List kinds = new ArrayList(); + + private List thumbnailNames = new ArrayList(); + + private List mimetypes = new ArrayList(); + + private boolean any = false; + + public List getThumbnailNames() + { + return thumbnailNames; + } + + public List getMimetypes() + { + return mimetypes; + } + + public List getKinds() + { + return kinds; + } + + public boolean isAny() + { + return any; + } + + public void setAny(boolean any) + { + this.any = any; + } + + } +} diff --git a/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceTest.java b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceTest.java new file mode 100755 index 0000000000..5475713c97 --- /dev/null +++ b/source/java/org/alfresco/cmis/renditions/CMISRenditionServiceTest.java @@ -0,0 +1,370 @@ +/* + * Copyright (C) 2005-2008 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.cmis.renditions; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; + +import org.alfresco.cmis.CMISRendition; +import org.alfresco.cmis.CMISRenditionKind; +import org.alfresco.cmis.mapping.BaseCMISTest; +import org.alfresco.model.ContentModel; +import org.alfresco.repo.content.MimetypeMap; +import org.alfresco.repo.content.transform.magick.ImageTransformationOptions; +import org.alfresco.repo.thumbnail.ThumbnailDefinition; +import org.alfresco.service.cmr.repository.ContentReader; +import org.alfresco.service.cmr.repository.ContentWriter; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * @author Stas Sokolovsky + */ +public class CMISRenditionServiceTest extends BaseCMISTest +{ + private static final String[] THUMBNAIL_NAMES = new String[] { "doclib", "webpreview", "imgpreview" }; + private static final CMISRenditionKind[] THUMBNAIL_KINDS = new CMISRenditionKind[] { CMISRenditionKind.THUMBNAIL, CMISRenditionKind.WEB_PREVIEW, CMISRenditionKind.WEB_PREVIEW }; + + private NodeRef document; + private List documentRenditions = new ArrayList(); + private CMISRendition icon16Rendition = new CMISRenditionImpl(null, "alf:icon16", "image/gif", CMISRenditionKind.ICON16, 16, 16, null, null, null); + private CMISRendition icon32Rendition = new CMISRenditionImpl(null, "alf:icon32", "image/gif", CMISRenditionKind.ICON32, 32, 32, null, null, null); + + public void setUp() throws Exception + { + super.setUp(); + + String documentName = "TestDocument" + System.currentTimeMillis(); + document = createDocument(documentName, "Test Content", MimetypeMap.MIMETYPE_PDF); + + documentRenditions = new ArrayList(); + for (int i = 0; i < THUMBNAIL_NAMES.length; ++i) + { + documentRenditions.add(createRendition(document, THUMBNAIL_NAMES[i], THUMBNAIL_KINDS[i])); + } + } + + public void testGetAllRenditions() + { + List receivedRenditions = cmisRenditionService.getRenditions(document, "*"); + + List expectedRenditions = new ArrayList(); + expectedRenditions.addAll(documentRenditions); + expectedRenditions.add(icon16Rendition); + expectedRenditions.add(icon32Rendition); + + assertRendiions(receivedRenditions, expectedRenditions); + } + + public void testGetRenditionsByKind() + { + testGetRenditionsByKind(CMISRenditionKind.THUMBNAIL); + testGetRenditionsByKind(CMISRenditionKind.WEB_PREVIEW); + testGetRenditionsByKind(CMISRenditionKind.ICON16); + testGetRenditionsByKind(CMISRenditionKind.ICON32); + + testGetRenditionsByKind(CMISRenditionKind.WEB_PREVIEW, CMISRenditionKind.ICON32); + testGetRenditionsByKind(CMISRenditionKind.THUMBNAIL, CMISRenditionKind.WEB_PREVIEW, CMISRenditionKind.ICON16, CMISRenditionKind.ICON32); + } + + public void testGetRenditionsByMimetype() + { + for (CMISRendition rendition : documentRenditions) + { + testGetRenditionsByMimetype(rendition.getMimeType()); + } + testGetRenditionsByMimetype(icon16Rendition.getMimeType()); + testGetRenditionsByMimetype(icon32Rendition.getMimeType()); + + String[] mimetypes = getDifferentMimetypes(); + testGetRenditionsByMimetype(mimetypes); + } + + public void testEmptyFilter() + { + List receivedRenditions = cmisRenditionService.getRenditions(document, null); + assertTrue(receivedRenditions == null || receivedRenditions.size() == 0); + + receivedRenditions = cmisRenditionService.getRenditions(document, "cmis:none"); + assertTrue(receivedRenditions == null || receivedRenditions.size() == 0); + } + + public void testRenditionsByBaseMimetype() + { + String[] mimetypes = getDifferentMimetypes(); + List baseMimetypeFilters = new ArrayList(); + for (String mimetype : mimetypes) + { + String baseMimetype = getBaseType(mimetype); + String filter = baseMimetype + "/*"; + baseMimetypeFilters.add(filter); + + testGetRenditionsByMimetype(filter); + } + + testGetRenditionsByMimetype(baseMimetypeFilters.toArray(new String[0])); + } + + public void testMixedFilter() + { + String[] mimetypes = getDifferentMimetypes(); + testGetRenditions(THUMBNAIL_KINDS, mimetypes); + } + + private void testGetRenditionsByMimetype(String... mimetypes) + { + testGetRenditions(null, mimetypes); + } + + private void testGetRenditionsByKind(CMISRenditionKind... kinds) + { + testGetRenditions(kinds, null); + } + + private void testGetRenditions(CMISRenditionKind[] kinds, String[] mimetypes) + { + String filter = createFilter(kinds, mimetypes); + List receivedRenditions = cmisRenditionService.getRenditions(document, filter); + + List expectedRenditions = new ArrayList(); + if (kinds != null) + { + for (CMISRenditionKind kind : kinds) + { + expectedRenditions.addAll(getRenditionsByKind(kind)); + } + } + if (mimetypes != null) + { + for (String mimetype : mimetypes) + { + expectedRenditions.addAll(getRenditionsByMimetype(mimetype)); + } + } + + assertRendiions(receivedRenditions, expectedRenditions); + } + + protected void tearDown() throws Exception + { + fileFolderService.delete(document); + super.tearDown(); + } + + private CMISRendition createRendition(NodeRef nodeRef, String thumbnailName, CMISRenditionKind kind) + { + ThumbnailDefinition details = thumbnailService.getThumbnailRegistry().getThumbnailDefinition(thumbnailName); + NodeRef thumbnailNodeRef = thumbnailService.createThumbnail(nodeRef, ContentModel.PROP_CONTENT, details.getMimetype(), details.getTransformationOptions(), details + .getName()); + + CMISRenditionImpl rendition = new CMISRenditionImpl(); + rendition.setStreamId(thumbnailNodeRef.toString()); + rendition.setKind(kind); + rendition.setMimeType(details.getMimetype()); + if (details.getTransformationOptions() instanceof ImageTransformationOptions) + { + ImageTransformationOptions imageOptions = (ImageTransformationOptions) details.getTransformationOptions(); + rendition.setWidth(imageOptions.getResizeOptions().getWidth()); + rendition.setHeight(imageOptions.getResizeOptions().getHeight()); + } + + return rendition; + } + + private NodeRef createDocument(String documentName, String documentContent, String mimetype) + { + NodeRef textDocument = fileFolderService.create(rootNodeRef, "TEXT" + documentName, ContentModel.TYPE_CONTENT).getNodeRef(); + ContentWriter contentWriter = fileFolderService.getWriter(textDocument); + contentWriter.setEncoding("UTF-8"); + contentWriter.setMimetype(MimetypeMap.MIMETYPE_TEXT_PLAIN); + contentWriter.setLocale(Locale.ENGLISH); + contentWriter.putContent(documentContent); + ContentReader contentReader = fileFolderService.getReader(textDocument); + + NodeRef document = fileFolderService.create(rootNodeRef, documentName, ContentModel.TYPE_CONTENT).getNodeRef(); + contentWriter = fileFolderService.getWriter(document); + contentWriter.setEncoding("UTF-8"); + contentWriter.setMimetype(mimetype); + contentWriter.setLocale(Locale.ENGLISH); + + if (contentService.isTransformable(contentReader, contentWriter)) + { + contentService.transform(contentReader, contentWriter); + } + + fileFolderService.delete(textDocument); + + return document; + } + + private void assertRendiions(List receivedRenditions, List expectedRenditions) + { + assertNotNull(receivedRenditions); + expectedRenditions = removeReplication(expectedRenditions); + assertTrue(receivedRenditions.size() == expectedRenditions.size()); + + for (CMISRendition rendition : receivedRenditions) + { + assertNotNull(rendition); + assertNotNull(rendition.getStreamId()); + } + + Collections.sort(receivedRenditions, renditionsComparator); + Collections.sort(expectedRenditions, renditionsComparator); + + for (int i = 0; i < expectedRenditions.size(); ++i) + { + assertRendition(receivedRenditions.get(i), expectedRenditions.get(i)); + } + } + + private void assertRendition(CMISRendition receivedRendition, CMISRendition expectedRendition) + { + assertEquals(expectedRendition.getStreamId(), receivedRendition.getStreamId()); + assertEquals(expectedRendition.getKind(), receivedRendition.getKind()); + assertEquals(expectedRendition.getMimeType(), receivedRendition.getMimeType()); + assertEquals(expectedRendition.getWidth(), receivedRendition.getWidth()); + assertEquals(expectedRendition.getHeight(), receivedRendition.getHeight()); + } + + private List removeReplication(List renditions) + { + return new ArrayList(new HashSet(renditions)); + } + + private Comparator renditionsComparator = new Comparator() + { + public int compare(CMISRendition rendition1, CMISRendition rendition2) + { + return rendition1.getStreamId().compareTo(rendition2.getStreamId()); + } + }; + + private List getRenditionsByKind(CMISRenditionKind kind) + { + return getRenditions(kind, null); + } + + private List getRenditionsByMimetype(String mimetype) + { + return getRenditions(null, mimetype); + } + + private List getRenditions(CMISRenditionKind kind, String mimetype) + { + List result = new ArrayList(); + + List allRenditions = new ArrayList(documentRenditions); + allRenditions.add(icon16Rendition); + allRenditions.add(icon32Rendition); + for (CMISRendition rendition : allRenditions) + { + if (isRenditionSatisfyConditions(rendition, kind, mimetype)) + { + result.add(rendition); + } + } + return result; + } + + private boolean isRenditionSatisfyConditions(CMISRendition rendition, CMISRenditionKind kind, String mimetype) + { + if (kind != null) + { + if (!kind.equals(rendition.getKind())) + { + return false; + } + } + if (mimetype != null) + { + if (mimetype.endsWith("/*")) + { + String baseMimetype = getBaseType(mimetype); + if (!rendition.getMimeType().startsWith(baseMimetype)) + { + return false; + } + } + else if (!mimetype.equals(rendition.getMimeType())) + { + return false; + } + } + return true; + } + + private String[] getDifferentMimetypes() + { + List allRenditions = new ArrayList(documentRenditions); + allRenditions.add(icon16Rendition); + allRenditions.add(icon32Rendition); + Set mimetypes = new HashSet(); + for (CMISRendition rendition : allRenditions) + { + mimetypes.add(rendition.getMimeType()); + } + return mimetypes.toArray(new String[0]); + } + + private String getBaseType(String mimetype) + { + String baseMymetype = mimetype; + int subTypeIndex = mimetype.indexOf("/"); + if (subTypeIndex > 0 || subTypeIndex < mimetype.length()) + { + baseMymetype = mimetype.substring(0, subTypeIndex); + } + return baseMymetype; + } + + private String createFilter(CMISRenditionKind[] kinds, String[] mimetypes) + { + StringBuilder filter = new StringBuilder(); + if (kinds != null) + { + for (CMISRenditionKind kind : kinds) + { + filter.append(kind.getLabel()); + filter.append(","); + } + } + if (mimetypes != null) + { + for (String mimetype : mimetypes) + { + filter.append(mimetype); + filter.append(","); + } + } + filter.delete(filter.length() - 1, filter.length()); + return filter.toString(); + } + +} diff --git a/source/java/org/alfresco/cmis/search/CMIS-query-test-model.xml b/source/java/org/alfresco/cmis/search/CMIS-query-test-model.xml new file mode 100644 index 0000000000..11ed8211d6 --- /dev/null +++ b/source/java/org/alfresco/cmis/search/CMIS-query-test-model.xml @@ -0,0 +1,297 @@ + + + + + Test model the cmis query tests + Alfresco + 2010-01-22 + 0.1 + + + + + + + + + + + + + + Extended Content + cm:content + true + + + + + d:text + false + false + + true + both + + + + d:text + false + false + + true + false + + + + d:text + false + false + + true + true + + + + + d:text + false + true + + true + both + + + + d:text + false + true + + true + false + + + + d:text + false + true + + true + true + + + + + + + d:mltext + false + false + + true + both + + + + d:mltext + false + false + + true + false + + + + d:mltext + false + false + + true + true + + + + + d:mltext + false + true + + true + both + + + + d:mltext + false + true + + true + false + + + + d:mltext + false + true + + true + true + + + + + + + d:float + false + false + + true + true + + + + d:float + false + true + + true + true + + + + + + + d:double + false + false + + true + true + + + + d:double + false + true + + true + true + + + + + + + d:int + false + false + + true + true + + + + d:int + false + true + + true + true + + + + + + + d:long + false + false + + true + true + + + + d:long + false + true + + true + true + + + + + + + d:boolean + false + false + + true + true + + + + d:boolean + false + true + + true + true + + + + + + + d:date + false + false + + true + true + + + + d:date + false + true + + true + true + + + + + + + d:datetime + false + false + + true + true + + + + d:datetime + false + true + + true + true + + + + + + + Extended Folder + cm:folder + + + + \ No newline at end of file diff --git a/source/java/org/alfresco/cmis/search/CMISQueryParser.java b/source/java/org/alfresco/cmis/search/CMISQueryParser.java index 51c49185de..45baab2bc9 100644 --- a/source/java/org/alfresco/cmis/search/CMISQueryParser.java +++ b/source/java/org/alfresco/cmis/search/CMISQueryParser.java @@ -29,13 +29,13 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; -import java.util.HashSet; +import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; -import org.alfresco.cmis.CMISCardinalityEnum; +import org.alfresco.cmis.CMISDataTypeEnum; import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISJoinEnum; import org.alfresco.cmis.CMISPropertyDefinition; @@ -46,6 +46,8 @@ import org.alfresco.cmis.CMISTypeDefinition; import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; import org.alfresco.repo.search.impl.parsers.CMISLexer; import org.alfresco.repo.search.impl.parsers.CMISParser; +import org.alfresco.repo.search.impl.parsers.FTSParser; +import org.alfresco.repo.search.impl.parsers.FTSQueryException; import org.alfresco.repo.search.impl.parsers.FTSQueryParser; import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.ArgumentDefinition; @@ -60,8 +62,10 @@ import org.alfresco.repo.search.impl.querymodel.LiteralArgument; import org.alfresco.repo.search.impl.querymodel.Order; import org.alfresco.repo.search.impl.querymodel.Ordering; import org.alfresco.repo.search.impl.querymodel.ParameterArgument; +import org.alfresco.repo.search.impl.querymodel.PredicateMode; import org.alfresco.repo.search.impl.querymodel.PropertyArgument; import org.alfresco.repo.search.impl.querymodel.Query; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.QueryModelFactory; import org.alfresco.repo.search.impl.querymodel.Selector; import org.alfresco.repo.search.impl.querymodel.SelectorArgument; @@ -97,6 +101,11 @@ import org.antlr.runtime.tree.CommonTree; */ public class CMISQueryParser { + private enum EscapeMode + { + LITERAL, LIKE, CONTAINS; + } + private CMISQueryOptions options; private CMISDictionaryService cmisDictionaryService; @@ -105,20 +114,21 @@ public class CMISQueryParser private CMISScope[] validScopes; - private static CMISScope[] STRICT_SCOPES = new CMISScope[] { CMISScope.DOCUMENT, CMISScope.FOLDER }; + private boolean hasScore = false; - private static CMISScope[] ALFRESCO_SCOPES = new CMISScope[] { CMISScope.DOCUMENT, CMISScope.FOLDER, CMISScope.POLICY }; + private boolean hasContains = false; public CMISQueryParser(CMISQueryOptions options, CMISDictionaryService cmisDictionaryService, CMISJoinEnum joinSupport) { this.options = options; this.cmisDictionaryService = cmisDictionaryService; this.joinSupport = joinSupport; - this.validScopes = (options.getQueryMode() == CMISQueryMode.CMS_STRICT) ? STRICT_SCOPES : ALFRESCO_SCOPES; + this.validScopes = (options.getQueryMode() == CMISQueryMode.CMS_STRICT) ? CmisFunctionEvaluationContext.STRICT_SCOPES : CmisFunctionEvaluationContext.ALFRESCO_SCOPES; } public Query parse(QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext) { + CMISParser parser = null; try { @@ -134,13 +144,17 @@ public class CMISQueryParser Map selectors = source.getSelectors(); ArrayList columns = buildColumns(queryNode, factory, selectors, options.getQuery()); - HashSet columnNames = new HashSet(); + HashMap columnMap = new HashMap(); for (Column column : columns) { - if (!columnNames.add(column.getAlias())) + if (columnMap.containsKey(column.getAlias())) { throw new CMISQueryException("Duplicate column alias for " + column.getAlias()); } + else + { + columnMap.put(column.getAlias(), column); + } } ArrayList orderings = buildOrderings(queryNode, factory, selectors, columns); @@ -149,7 +163,7 @@ public class CMISQueryParser CommonTree orNode = (CommonTree) queryNode.getFirstChildWithType(CMISParser.DISJUNCTION); if (orNode != null) { - constraint = buildDisjunction(orNode, factory, functionEvaluationContext, selectors, columns); + constraint = buildDisjunction(orNode, factory, functionEvaluationContext, selectors, columnMap); } Query query = factory.createQuery(columns, source, constraint, orderings); @@ -157,6 +171,14 @@ public class CMISQueryParser // TODO: validate query and use of ID, function arguments matching // up etc + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) + { + if (hasScore && !hasContains) + { + throw new CMISQueryException("Function SCORE() used without matching CONTAINS() function"); + } + } + return query; } catch (RecognitionException e) @@ -180,13 +202,13 @@ public class CMISQueryParser * @return */ private Constraint buildDisjunction(CommonTree orNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, Map selectors, - ArrayList columns) + HashMap columnMap) { 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, functionEvaluationContext, selectors, columns); + Constraint constraint = buildConjunction(andNode, factory, functionEvaluationContext, selectors, columnMap); constraints.add(constraint); } if (constraints.size() == 1) @@ -207,13 +229,13 @@ public class CMISQueryParser * @return */ private Constraint buildConjunction(CommonTree andNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, Map selectors, - ArrayList columns) + HashMap columnMap) { 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, functionEvaluationContext, selectors, columns); + Constraint constraint = buildNegation(notNode, factory, functionEvaluationContext, selectors, columnMap); constraints.add(constraint); } if (constraints.size() == 1) @@ -234,17 +256,17 @@ public class CMISQueryParser * @return */ private Constraint buildNegation(CommonTree notNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, Map selectors, - ArrayList columns) + HashMap columnMap) { if (notNode.getType() == CMISParser.NEGATION) { - Constraint constraint = buildTest((CommonTree) notNode.getChild(0), factory, functionEvaluationContext, selectors, columns); + Constraint constraint = buildTest((CommonTree) notNode.getChild(0), factory, functionEvaluationContext, selectors, columnMap); constraint.setOccur(Occur.EXCLUDE); return constraint; } else { - return buildTest(notNode, factory, functionEvaluationContext, selectors, columns); + return buildTest(notNode, factory, functionEvaluationContext, selectors, columnMap); } } @@ -256,15 +278,15 @@ public class CMISQueryParser * @return */ private Constraint buildTest(CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, Map selectors, - ArrayList columns) + HashMap columnMap) { if (testNode.getType() == CMISParser.DISJUNCTION) { - return buildDisjunction(testNode, factory, functionEvaluationContext, selectors, columns); + return buildDisjunction(testNode, factory, functionEvaluationContext, selectors, columnMap); } else { - return buildPredicate(testNode, factory, functionEvaluationContext, selectors, columns); + return buildPredicate(testNode, factory, functionEvaluationContext, selectors, columnMap); } } @@ -276,7 +298,7 @@ public class CMISQueryParser * @return */ private Constraint buildPredicate(CommonTree predicateNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, Map selectors, - ArrayList columns) + Map columnMap) { String functionName; Function function; @@ -290,11 +312,12 @@ public class CMISQueryParser function = factory.getFunction(functionName); functionArguments = new LinkedHashMap(); argNode = (CommonTree) predicateNode.getChild(0); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_PARENT), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); if (predicateNode.getChildCount() > 1) { - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Child.ARG_SELECTOR), factory, selectors, columnMap, false); if (!arg.isQueryable()) { throw new CMISQueryException("The property is not queryable: " + argNode.getText()); @@ -303,6 +326,7 @@ public class CMISQueryParser } return factory.createFunctionalConstraint(function, functionArguments); case CMISParser.PRED_COMPARISON: + switch (predicateNode.getChild(2).getType()) { case CMISParser.EQUALS: @@ -333,23 +357,28 @@ public class CMISQueryParser throw new CMISQueryException("Unknown comparison function " + predicateNode.getChild(2).getText()); } functionArguments = new LinkedHashMap(); + argNode = (CommonTree) predicateNode.getChild(0); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_MODE), factory, selectors, columnMap, false); + functionArguments.put(arg.getName(), arg); argNode = (CommonTree) predicateNode.getChild(1); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_LHS), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_LHS), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); argNode = (CommonTree) predicateNode.getChild(3); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_RHS), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(BaseComparison.ARG_RHS), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); + checkPredicateConditionsForComparisons(function, functionArguments, functionEvaluationContext, columnMap); return factory.createFunctionalConstraint(function, functionArguments); case CMISParser.PRED_DESCENDANT: functionName = Descendant.NAME; function = factory.getFunction(functionName); argNode = (CommonTree) predicateNode.getChild(0); functionArguments = new LinkedHashMap(); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Descendant.ARG_ANCESTOR), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Descendant.ARG_ANCESTOR), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); if (predicateNode.getChildCount() > 1) { - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Descendant.ARG_SELECTOR), factory, selectors); + argNode = (CommonTree) predicateNode.getChild(1); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Descendant.ARG_SELECTOR), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); } return factory.createFunctionalConstraint(function, functionArguments); @@ -358,14 +387,23 @@ public class CMISQueryParser function = factory.getFunction(functionName); argNode = (CommonTree) predicateNode.getChild(0); functionArguments = new LinkedHashMap(); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Exists.ARG_PROPERTY), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Exists.ARG_PROPERTY), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); arg = factory.createLiteralArgument(Exists.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 1)); functionArguments.put(arg.getName(), arg); + // Applies to both single valued and multi-valued properties - no checks required return factory.createFunctionalConstraint(function, functionArguments); case CMISParser.PRED_FTS: + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) + { + if (hasContains) + { + throw new CMISQueryException("Only one CONTAINS() function can be included in a single query statement."); + } + } String ftsExpression = predicateNode.getChild(0).getText(); - FTSQueryParser ftsQueryParser = new FTSQueryParser(); + ftsExpression = ftsExpression.substring(1, ftsExpression.length() - 1); + ftsExpression = unescape(ftsExpression, EscapeMode.CONTAINS); Selector selector; if (predicateNode.getChildCount() > 1) { @@ -399,42 +437,253 @@ public class CMISQueryParser defaultConnective = options.getDefaultFTSConnective(); defaultFieldConnective = options.getDefaultFTSFieldConnective(); } - return ftsQueryParser.buildFTS(ftsExpression.substring(1, ftsExpression.length() - 1), factory, functionEvaluationContext, selector, columns, defaultConnective, - defaultFieldConnective, null, options.getDefaultFieldName()); + FTSParser.Mode mode; + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) + { + mode = FTSParser.Mode.CMIS; + } + else + { + if (defaultConnective == Connective.AND) + { + mode = FTSParser.Mode.DEFAULT_CONJUNCTION; + } + else + { + mode = FTSParser.Mode.DEFAULT_DISJUNCTION; + } + } + Constraint ftsConstraint = FTSQueryParser.buildFTS(ftsExpression, factory, functionEvaluationContext, selector, columnMap, mode, defaultFieldConnective, null, options.getDefaultFieldName()); + ftsConstraint.setBoost(1000.0f); + hasContains = true; + return ftsConstraint; case CMISParser.PRED_IN: functionName = In.NAME; function = factory.getFunction(functionName); functionArguments = new LinkedHashMap(); argNode = (CommonTree) predicateNode.getChild(0); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_MODE), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_MODE), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); argNode = (CommonTree) predicateNode.getChild(1); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_PROPERTY), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_PROPERTY), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); argNode = (CommonTree) predicateNode.getChild(2); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_LIST), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(In.ARG_LIST), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); arg = factory.createLiteralArgument(In.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 3)); functionArguments.put(arg.getName(), arg); + checkPredicateConditionsForIn(functionArguments, functionEvaluationContext, columnMap); return factory.createFunctionalConstraint(function, functionArguments); case CMISParser.PRED_LIKE: functionName = Like.NAME; function = factory.getFunction(functionName); functionArguments = new LinkedHashMap(); argNode = (CommonTree) predicateNode.getChild(0); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_PROPERTY), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_PROPERTY), factory, selectors, columnMap, false); functionArguments.put(arg.getName(), arg); argNode = (CommonTree) predicateNode.getChild(1); - arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_EXP), factory, selectors); + arg = getFunctionArgument(argNode, function.getArgumentDefinition(Like.ARG_EXP), factory, selectors, columnMap, true); functionArguments.put(arg.getName(), arg); arg = factory.createLiteralArgument(Like.ARG_NOT, DataTypeDefinition.BOOLEAN, (predicateNode.getChildCount() > 2)); functionArguments.put(arg.getName(), arg); + checkPredicateConditionsForLike(functionArguments, functionEvaluationContext, columnMap); return factory.createFunctionalConstraint(function, functionArguments); default: return null; } } + private void checkPredicateConditionsForIn(Map functionArguments, FunctionEvaluationContext functionEvaluationContext, Map columnMap) + { + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) + { + PropertyArgument propertyArgument = (PropertyArgument) functionArguments.get(In.ARG_PROPERTY); + LiteralArgument modeArgument = (LiteralArgument) functionArguments.get(In.ARG_MODE); + String modeString = DefaultTypeConverter.INSTANCE.convert(String.class, modeArgument.getValue(functionEvaluationContext)); + PredicateMode mode = PredicateMode.valueOf(modeString); + String propertyName = propertyArgument.getPropertyName(); + + Column column = columnMap.get(propertyName); + if (column != null) + { + // check for function type + if (column.getFunction().getName().equals(PropertyAccessor.NAME)) + { + PropertyArgument arg = (PropertyArgument) column.getFunctionArguments().get(PropertyAccessor.ARG_PROPERTY); + propertyName = arg.getPropertyName(); + } + else + { + throw new CMISQueryException("Complex column reference not supoprted in LIKE " + propertyName); + } + } + + boolean isMultiValued = functionEvaluationContext.isMultiValued(propertyName); + + switch (mode) + { + case ANY: + if (isMultiValued) + { + break; + } + else + { + throw new QueryModelException("Predicate mode " + PredicateMode.ANY + " is not supported for IN and single valued properties"); + } + case SINGLE_VALUED_PROPERTY: + if (isMultiValued) + { + throw new QueryModelException("Predicate mode " + PredicateMode.SINGLE_VALUED_PROPERTY + " is not supported for IN and multi-valued properties"); + } + else + { + break; + } + default: + throw new QueryModelException("Unsupported predicate mode " + mode); + } + + CMISPropertyDefinition propDef = cmisDictionaryService.findPropertyByQueryName(propertyName); + if (propDef.getDataType() == CMISDataTypeEnum.BOOLEAN) + { + + throw new QueryModelException("In is not supported for properties of type Boolean"); + + } + } + + } + + private void checkPredicateConditionsForComparisons(Function function, Map functionArguments, FunctionEvaluationContext functionEvaluationContext, + Map columnMap) + { + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) + { + ((BaseComparison) function).setPropertyAndStaticArguments(functionArguments); + String propertyName = ((BaseComparison) function).getPropertyName(); + LiteralArgument modeArgument = (LiteralArgument) functionArguments.get(BaseComparison.ARG_MODE); + String modeString = DefaultTypeConverter.INSTANCE.convert(String.class, modeArgument.getValue(functionEvaluationContext)); + PredicateMode mode = PredicateMode.valueOf(modeString); + + Column column = columnMap.get(propertyName); + if (column != null) + { + // check for function type + if (column.getFunction().getName().equals(PropertyAccessor.NAME)) + { + PropertyArgument arg = (PropertyArgument) column.getFunctionArguments().get(PropertyAccessor.ARG_PROPERTY); + propertyName = arg.getPropertyName(); + } + else + { + throw new CMISQueryException("Complex column reference not supoprted in LIKE " + propertyName); + } + } + + boolean isMultiValued = functionEvaluationContext.isMultiValued(propertyName); + + switch (mode) + { + case ANY: + if (isMultiValued) + { + if (function.getName().equals(Equals.NAME)) + { + break; + } + else + { + throw new QueryModelException("Predicate mode " + PredicateMode.ANY + " is only supported for " + Equals.NAME + " (and multi-valued properties)."); + } + } + else + { + throw new QueryModelException("Predicate mode " + PredicateMode.ANY + " is not supported for " + function.getName() + " and single valued properties"); + } + case SINGLE_VALUED_PROPERTY: + if (isMultiValued) + { + throw new QueryModelException("Predicate mode " + + PredicateMode.SINGLE_VALUED_PROPERTY + " is not supported for " + function.getName() + " and multi-valued properties"); + } + else + { + break; + } + default: + throw new QueryModelException("Unsupported predicate mode " + mode); + } + + // limit support for ID and Boolean + + CMISPropertyDefinition propDef = cmisDictionaryService.findPropertyByQueryName(propertyName); + if (propDef.getDataType() == CMISDataTypeEnum.ID) + { + if (function.getName().equals(Equals.NAME) || function.getName().equals(NotEquals.NAME)) + { + return; + } + else + { + throw new QueryModelException("Comparison " + function.getName() + " is not supported for properties of type ID"); + } + } + else if (propDef.getDataType() == CMISDataTypeEnum.BOOLEAN) + { + if (function.getName().equals(Equals.NAME)) + { + return; + } + else + { + throw new QueryModelException("Comparison " + function.getName() + " is not supported for properties of type Boolean"); + } + } + } + + } + + private void checkPredicateConditionsForLike(Map functionArguments, FunctionEvaluationContext functionEvaluationContext, Map columnMap) + { + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) + { + PropertyArgument propertyArgument = (PropertyArgument) functionArguments.get(Like.ARG_PROPERTY); + + boolean isMultiValued = functionEvaluationContext.isMultiValued(propertyArgument.getPropertyName()); + + if (isMultiValued) + { + throw new QueryModelException("Like is not supported for multi-valued properties"); + } + + String cmisPropertyName = propertyArgument.getPropertyName(); + + Column column = columnMap.get(cmisPropertyName); + if (column != null) + { + // check for function type + if (column.getFunction().getName().equals(PropertyAccessor.NAME)) + { + PropertyArgument arg = (PropertyArgument) column.getFunctionArguments().get(PropertyAccessor.ARG_PROPERTY); + cmisPropertyName = arg.getPropertyName(); + } + else + { + throw new CMISQueryException("Complex column reference not supoprted in LIKE " + cmisPropertyName); + } + } + + CMISPropertyDefinition propDef = cmisDictionaryService.findPropertyByQueryName(cmisPropertyName); + if (propDef.getDataType() != CMISDataTypeEnum.STRING) + { + throw new CMISQueryException("LIKE is only supported against String types" + cmisPropertyName); + } + + } + + } + /** * @param queryNode * @param factory @@ -480,6 +729,16 @@ public class CMISQueryParser match = column; break; } + if (column.getFunction().getName().equals(PropertyAccessor.NAME)) + { + PropertyArgument arg = (PropertyArgument) column.getFunctionArguments().get(PropertyAccessor.ARG_PROPERTY); + String propertyName = arg.getPropertyName(); + if (propertyName.equals(columnName)) + { + match = column; + break; + } + } } // in strict mode the ordered column must be selected if ((options.getQueryMode() == CMISQueryMode.CMS_STRICT) && (match == null)) @@ -513,6 +772,13 @@ public class CMISQueryParser throw new CMISQueryException("Invalid column for " + typeDef.getQueryName() + "." + columnName); } + // Check column/property applies to selector/type + + if (!typeDef.getPropertyDefinitions().containsKey(propDef.getPropertyId().getId())) + { + throw new CMISQueryException("Invalid column for " + typeDef.getQueryName() + "." + columnName); + } + // check there is a matching selector if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) @@ -640,19 +906,16 @@ public class CMISQueryParser Map propDefs = typeDef.getPropertyDefinitions(); for (CMISPropertyDefinition definition : propDefs.values()) { - if (definition.getCardinality() == CMISCardinalityEnum.SINGLE_VALUED) + Function function = factory.getFunction(PropertyAccessor.NAME); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, definition.isQueryable(), definition.isOrderable(), selector.getAlias(), + definition.getPropertyId().getId()); + Map functionArguments = new LinkedHashMap(); + functionArguments.put(arg.getName(), arg); + String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyId().getId() : definition.getPropertyId().getId(); + Column column = factory.createColumn(function, functionArguments, alias); + if (column.isQueryable()) { - Function function = factory.getFunction(PropertyAccessor.NAME); - Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, definition.isQueryable(), definition.isOrderable(), selector.getAlias(), - definition.getPropertyId().getId()); - Map functionArguments = new LinkedHashMap(); - functionArguments.put(arg.getName(), arg); - String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyId().getId() : definition.getPropertyId().getId(); - Column column = factory.createColumn(function, functionArguments, alias); - if (column.isQueryable()) - { - columns.add(column); - } + columns.add(column); } } } @@ -687,19 +950,16 @@ public class CMISQueryParser Map propDefs = typeDef.getPropertyDefinitions(); for (CMISPropertyDefinition definition : propDefs.values()) { - if (definition.getCardinality() == CMISCardinalityEnum.SINGLE_VALUED) + Function function = factory.getFunction(PropertyAccessor.NAME); + Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, definition.isQueryable(), definition.isOrderable(), selector.getAlias(), + definition.getPropertyId().getId()); + Map functionArguments = new LinkedHashMap(); + functionArguments.put(arg.getName(), arg); + String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyId().getId() : definition.getPropertyId().getId(); + Column column = factory.createColumn(function, functionArguments, alias); + if (column.isQueryable()) { - Function function = factory.getFunction(PropertyAccessor.NAME); - Argument arg = factory.createPropertyArgument(PropertyAccessor.ARG_PROPERTY, definition.isQueryable(), definition.isOrderable(), selector.getAlias(), - definition.getPropertyId().getId()); - Map functionArguments = new LinkedHashMap(); - functionArguments.put(arg.getName(), arg); - String alias = (selector.getAlias().length() > 0) ? selector.getAlias() + "." + definition.getPropertyId().getId() : definition.getPropertyId().getId(); - Column column = factory.createColumn(function, functionArguments, alias); - if (column.isQueryable()) - { - columns.add(column); - } + columns.add(column); } } } @@ -735,6 +995,13 @@ public class CMISQueryParser } CMISPropertyDefinition propDef = cmisDictionaryService.findPropertyByQueryName(columnName); if (propDef == null) + { + throw new CMISQueryException("Invalid column for " + typeDef.getQueryName() + " " + columnName); + } + + // Check column/property applies to selector/type + + if (!typeDef.getPropertyDefinitions().containsKey(propDef.getPropertyId().getId())) { throw new CMISQueryException("Invalid column for " + typeDef.getQueryName() + "." + columnName); } @@ -780,7 +1047,7 @@ public class CMISQueryParser if (functionNode.getChildCount() > childIndex + 1) { CommonTree argNode = (CommonTree) functionNode.getChild(childIndex++); - Argument arg = getFunctionArgument(argNode, definition, factory, selectors); + Argument arg = getFunctionArgument(argNode, definition, factory, selectors, null, function.getName().equals(Like.NAME)); functionArguments.put(arg.getName(), arg); } else @@ -806,6 +1073,11 @@ public class CMISQueryParser int start = getStringPosition(query, functionNode.getLine(), functionNode.getCharPositionInLine()); int end = getStringPosition(query, rparenNode.getLine(), rparenNode.getCharPositionInLine()); + if (function.getName().equals(Score.NAME)) + { + hasScore = true; + } + String alias; if (function.getName().equals(Score.NAME)) { @@ -860,11 +1132,12 @@ public class CMISQueryParser return position + charPositionInLine; } - private Argument getFunctionArgument(CommonTree argNode, ArgumentDefinition definition, QueryModelFactory factory, Map selectors) + private Argument getFunctionArgument(CommonTree argNode, ArgumentDefinition definition, QueryModelFactory factory, Map selectors, + Map columnMap, boolean inLike) { if (argNode.getType() == CMISParser.COLUMN_REF) { - PropertyArgument arg = buildColumnReference(definition.getName(), argNode, factory); + PropertyArgument arg = buildColumnReference(definition.getName(), argNode, factory, selectors, columnMap); if (!arg.isQueryable()) { throw new CMISQueryException("Column refers to unqueryable property " + arg.getPropertyName()); @@ -943,6 +1216,7 @@ public class CMISQueryParser { String text = argNode.getChild(0).getText(); text = text.substring(1, text.length() - 1); + text = unescape(text, inLike ? EscapeMode.LIKE : EscapeMode.LITERAL); LiteralArgument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, text); return arg; } @@ -1003,7 +1277,7 @@ public class CMISQueryParser for (int i = 0; i < argNode.getChildCount(); i++) { CommonTree arg = (CommonTree) argNode.getChild(i); - arguments.add(getFunctionArgument(arg, definition, factory, selectors)); + arguments.add(getFunctionArgument(arg, definition, factory, selectors, columnMap, inLike)); } ListArgument arg = factory.createListArgument(definition.getName(), arguments); if (!arg.isQueryable()) @@ -1017,6 +1291,11 @@ public class CMISQueryParser LiteralArgument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); return arg; } + else if (argNode.getType() == CMISParser.SINGLE_VALUED_PROPERTY) + { + LiteralArgument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); + return arg; + } else if (argNode.getType() == CMISParser.NOT) { LiteralArgument arg = factory.createLiteralArgument(definition.getName(), DataTypeDefinition.TEXT, argNode.getText()); @@ -1039,7 +1318,7 @@ public class CMISQueryParser if (argNode.getChildCount() > childIndex + 1) { CommonTree currentArgNode = (CommonTree) argNode.getChild(childIndex++); - Argument arg = getFunctionArgument(currentArgNode, currentDefinition, factory, selectors); + Argument arg = getFunctionArgument(currentArgNode, currentDefinition, factory, selectors, columnMap, inLike); functionArguments.put(arg.getName(), arg); } else @@ -1110,14 +1389,6 @@ public class CMISQueryParser throw new CMISQueryException("Type is not queryable " + tableName + " -> " + typeDef.getTypeId()); } } - // check sub types all include in super type query - for(CMISTypeDefinition subType : typeDef.getSubTypes(true)) - { - if(!subType.isIncludeInSuperTypeQuery()) - { - throw new CMISQueryException("includeInSuperTypeQuery=falss is not support for "+tableName+ " descendant type "+subType.getQueryName()); - } - } return factory.createSelector(typeDef.getTypeId().getQName(), alias); } else @@ -1149,14 +1420,7 @@ public class CMISQueryParser throw new CMISQueryException("Type is not queryable " + tableName + " -> " + typeDef.getTypeId()); } } - // check sub types all include in super type query - for(CMISTypeDefinition subType : typeDef.getSubTypes(true)) - { - if(!subType.isIncludeInSuperTypeQuery()) - { - throw new CMISQueryException("includeInSuperTypeQuery=falss is not support for "+tableName+ " descendant type "+subType.getQueryName()); - } - } + Source lhs = factory.createSelector(typeDef.getTypeId().getQName(), alias); List list = (List) (source.getChildren()); @@ -1183,7 +1447,7 @@ public class CMISQueryParser CommonTree joinConditionNode = (CommonTree) joinNode.getFirstChildWithType(CMISParser.ON); if (joinConditionNode != null) { - PropertyArgument arg1 = buildColumnReference(Equals.ARG_LHS, (CommonTree) joinConditionNode.getChild(0), factory); + PropertyArgument arg1 = buildColumnReference(Equals.ARG_LHS, (CommonTree) joinConditionNode.getChild(0), factory, null, null); if (!lhs.getSelectors().containsKey(arg1.getSelector()) && !rhs.getSelectors().containsKey(arg1.getSelector())) { throw new CMISQueryException("No table with alias " + arg1.getSelector()); @@ -1198,7 +1462,7 @@ public class CMISQueryParser { throw new CMISQueryException("Unknown function: " + functionNameNode.getText()); } - PropertyArgument arg2 = buildColumnReference(Equals.ARG_RHS, (CommonTree) joinConditionNode.getChild(2), factory); + PropertyArgument arg2 = buildColumnReference(Equals.ARG_RHS, (CommonTree) joinConditionNode.getChild(2), factory, null, null); if (!lhs.getSelectors().containsKey(arg2.getSelector()) && !rhs.getSelectors().containsKey(arg2.getSelector())) { throw new CMISQueryException("No table with alias " + arg2.getSelector()); @@ -1219,27 +1483,193 @@ public class CMISQueryParser } } - public PropertyArgument buildColumnReference(String argumentName, CommonTree columnReferenceNode, QueryModelFactory factory) + public PropertyArgument buildColumnReference(String argumentName, CommonTree columnReferenceNode, QueryModelFactory factory, Map selectors, + Map columnMap) { String cmisPropertyName = columnReferenceNode.getChild(0).getText(); - String qualifer = ""; + String qualifier = ""; if (columnReferenceNode.getChildCount() > 1) { - qualifer = columnReferenceNode.getChild(1).getText(); + qualifier = columnReferenceNode.getChild(1).getText(); } + + if ((qualifier == "") && (columnMap != null)) + { + Column column = columnMap.get(cmisPropertyName); + if (column != null) + { + // check for function type + if (column.getFunction().getName().equals(PropertyAccessor.NAME)) + { + PropertyArgument arg = (PropertyArgument) column.getFunctionArguments().get(PropertyAccessor.ARG_PROPERTY); + cmisPropertyName = arg.getPropertyName(); + qualifier = arg.getSelector(); + } + else + { + // TODO: should be able to return non property arguments + // The implementation should throw out what it can not support at build time. + throw new CMISQueryException("Complex column reference unsupported (only direct column references are currently supported) " + cmisPropertyName); + } + } + } + CMISPropertyDefinition propDef = cmisDictionaryService.findPropertyByQueryName(cmisPropertyName); if (propDef == null) { throw new CMISQueryException("Unknown column/property " + cmisPropertyName); } + + if (selectors != null) + { + Selector selector = selectors.get(qualifier); + if (selector == null) + { + if ((qualifier.equals("")) && (selectors.size() == 1)) + { + selector = selectors.get(selectors.keySet().iterator().next()); + } + else + { + throw new CMISQueryException("No selector for " + qualifier); + } + } + + CMISTypeDefinition typeDef = cmisDictionaryService.findTypeForClass(selector.getType(), validScopes); + if (typeDef == null) + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + + // Check column/property applies to selector/type + + if (!typeDef.getPropertyDefinitions().containsKey(propDef.getPropertyId().getId())) + { + throw new CMISQueryException("Invalid column for " + typeDef.getQueryName() + "." + cmisPropertyName); + } + } + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) { if (!propDef.isQueryable()) { - throw new CMISQueryException("Column is not queryable " + qualifer + "." + cmisPropertyName); + throw new CMISQueryException("Column is not queryable " + qualifier + "." + cmisPropertyName); } } - return factory.createPropertyArgument(argumentName, propDef.isQueryable(), propDef.isOrderable(), qualifer, propDef.getPropertyId().getId()); + return factory.createPropertyArgument(argumentName, propDef.isQueryable(), propDef.isOrderable(), qualifier, propDef.getPropertyId().getId()); } + private String unescape(String string, EscapeMode mode) + { + StringBuilder builder = new StringBuilder(string.length()); + + boolean lastWasEscape = false; + + for (int i = 0; i < string.length(); i++) + { + char c = string.charAt(i); + if (lastWasEscape) + { + + // Need to keep escaping for like as we have the same escaping + if (mode == EscapeMode.LIKE) + { + // Like does its own escaping - so pass through \ % and _ + if (c == '\'') + { + builder.append(c); + } + else if (c == '%') + { + builder.append('\\'); + builder.append(c); + } + else if (c == '_') + { + builder.append('\\'); + builder.append(c); + } + else if (c == '\\') + { + builder.append('\\'); + builder.append(c); + } + else + { + throw new UnsupportedOperationException("Unsupported escape pattern in <" + string + "> at position " + i); + } + } + else if (mode == EscapeMode.CONTAINS) + { + if (options.getQueryMode() == CMISQueryMode.CMS_STRICT) + { + if (c == '\'') + { + builder.append(c); + } + else if (c == '\\') + { + builder.append('\\'); + builder.append(c); + } + + else + { + throw new UnsupportedOperationException("Unsupported escape pattern in <" + string + "> at position " + i); + } + } + else + { + if (c == '\'') + { + builder.append(c); + } + else + { + builder.append(c); + } + } + } + else if (mode == EscapeMode.LITERAL) + { + if (c == '\'') + { + builder.append(c); + } + else if (c == '\\') + { + builder.append(c); + } + else + { + throw new UnsupportedOperationException("Unsupported escape pattern in <" + string + "> at position " + i); + + } + } + else + { + throw new UnsupportedOperationException("Unsupported escape pattern in <" + string + "> at position " + i); + + } + lastWasEscape = false; + } + else + { + if (c == '\\') + { + lastWasEscape = true; + } + else + { + builder.append(c); + } + } + } + if (lastWasEscape) + { + throw new FTSQueryException("Escape character at end of string " + string); + } + + return builder.toString(); + } } diff --git a/source/java/org/alfresco/cmis/search/CMISQueryServiceImpl.java b/source/java/org/alfresco/cmis/search/CMISQueryServiceImpl.java index 58a4b17a57..c5dff40653 100644 --- a/source/java/org/alfresco/cmis/search/CMISQueryServiceImpl.java +++ b/source/java/org/alfresco/cmis/search/CMISQueryServiceImpl.java @@ -34,7 +34,9 @@ import org.alfresco.cmis.CMISQueryEnum; import org.alfresco.cmis.CMISQueryOptions; import org.alfresco.cmis.CMISQueryService; import org.alfresco.cmis.CMISResultSet; +import org.alfresco.cmis.CMISScope; import org.alfresco.cmis.CMISServices; +import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; import org.alfresco.repo.search.impl.querymodel.Query; import org.alfresco.repo.search.impl.querymodel.QueryEngine; import org.alfresco.repo.search.impl.querymodel.QueryEngineResults; @@ -117,9 +119,13 @@ public class CMISQueryServiceImpl implements CMISQueryService joinSupport = CMISJoinEnum.INNER_JOIN_SUPPORT; } + // TODO: Refactor to avoid duplication of valid scopes here and in CMISQueryParser + + CMISScope[] validScopes = (options.getQueryMode() == CMISQueryMode.CMS_STRICT) ? CmisFunctionEvaluationContext.STRICT_SCOPES : CmisFunctionEvaluationContext.ALFRESCO_SCOPES; CmisFunctionEvaluationContext functionContext = new CmisFunctionEvaluationContext(); functionContext.setCmisDictionaryService(cmisDictionaryService); functionContext.setNodeService(nodeService); + functionContext.setValidScopes(validScopes); CMISQueryParser parser = new CMISQueryParser(options, cmisDictionaryService, joinSupport); Query query = parser.parse(queryEngine.getQueryModelFactory(), functionContext); diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetColumnImpl.java b/source/java/org/alfresco/cmis/search/CMISResultSetColumnImpl.java index 188464e9f9..ffabdc682c 100644 --- a/source/java/org/alfresco/cmis/search/CMISResultSetColumnImpl.java +++ b/source/java/org/alfresco/cmis/search/CMISResultSetColumnImpl.java @@ -25,7 +25,6 @@ package org.alfresco.cmis.search; import org.alfresco.cmis.CMISDataTypeEnum; -import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISPropertyDefinition; import org.alfresco.cmis.CMISResultSetColumn; import org.alfresco.service.namespace.QName; diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetImpl.java b/source/java/org/alfresco/cmis/search/CMISResultSetImpl.java index 018bae4df2..66431e84d6 100644 --- a/source/java/org/alfresco/cmis/search/CMISResultSetImpl.java +++ b/source/java/org/alfresco/cmis/search/CMISResultSetImpl.java @@ -43,7 +43,6 @@ import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.cmr.search.LimitBy; import org.alfresco.service.cmr.search.ResultSet; import org.alfresco.service.cmr.search.ResultSetRow; @@ -79,7 +78,6 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSet#close() */ public void close() @@ -98,7 +96,6 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSet#getMetaData() */ public CMISResultSetMetaData getMetaData() @@ -108,7 +105,6 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSet#getRow(int) */ public CMISResultSetRow getRow(int i) @@ -118,7 +114,6 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSet#hasMore() */ public boolean hasMore() @@ -135,7 +130,6 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSet#length() */ public int getLength() @@ -149,7 +143,6 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSet#start() */ public int getStart() @@ -159,7 +152,6 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable /* * (non-Javadoc) - * * @see java.lang.Iterable#iterator() */ public Iterator iterator() @@ -212,12 +204,35 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable { return refs.values().iterator().next(); } - else + else if(allNodeRefsEqual(refs)) { + return refs.values().iterator().next(); + } + else { throw new IllegalStateException("Ambiguous selector"); } } + private boolean allNodeRefsEqual(Map selected) + { + NodeRef last = null; + for (NodeRef current : selected.values()) + { + if (last == null) + { + last = current; + } + else + { + if (!last.equals(current)) + { + return false; + } + } + } + return true; + } + public List getNodeRefs() { ArrayList nodeRefs = new ArrayList(length()); @@ -240,11 +255,35 @@ public class CMISResultSetImpl implements CMISResultSet, Serializable { return scores.values().iterator().next(); } + else if(allScoresEqual(scores)) + { + return scores.values().iterator().next(); + } else { throw new IllegalStateException("Ambiguous selector"); } } + + private boolean allScoresEqual(Map scores) + { + Float last = null; + for (Float current : scores.values()) + { + if (last == null) + { + last = current; + } + else + { + if (!last.equals(current)) + { + return false; + } + } + } + return true; + } public int length() { diff --git a/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java b/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java index 517781728d..e22cd942bc 100644 --- a/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java +++ b/source/java/org/alfresco/cmis/search/CMISResultSetRowImpl.java @@ -33,7 +33,9 @@ import org.alfresco.cmis.CMISResultSet; import org.alfresco.cmis.CMISResultSetMetaData; import org.alfresco.cmis.CMISResultSetRow; import org.alfresco.repo.search.impl.querymodel.Column; +import org.alfresco.repo.search.impl.querymodel.PropertyArgument; import org.alfresco.repo.search.impl.querymodel.Query; +import org.alfresco.repo.search.impl.querymodel.impl.functions.PropertyAccessor; import org.alfresco.repo.search.results.ResultSetSPIWrapper; import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.NodeRef; @@ -66,7 +68,8 @@ public class CMISResultSetRowImpl implements CMISResultSetRow private CMISDictionaryService cmisDictionaryService; - public CMISResultSetRowImpl(CMISResultSet resultSet, int index, Map scores, NodeService nodeService, Map nodeRefs, Query query, CMISDictionaryService cmisDictionaryService) + public CMISResultSetRowImpl(CMISResultSet resultSet, int index, Map scores, NodeService nodeService, Map nodeRefs, Query query, + CMISDictionaryService cmisDictionaryService) { this.resultSet = resultSet; this.index = index; @@ -79,7 +82,6 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getIndex() */ public int getIndex() @@ -89,7 +91,6 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getResultSet() */ public ResultSet getResultSet() @@ -99,7 +100,6 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getScore() */ public float getScore() @@ -115,7 +115,6 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getScore(java.lang.String) */ public float getScore(String selectorName) @@ -125,7 +124,6 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getScores() */ public Map getScores() @@ -135,7 +133,6 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getScore(java.lang.String) */ public NodeRef getNodeRef(String selectorName) @@ -145,7 +142,6 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getScores() */ public Map getNodeRefs() @@ -155,30 +151,65 @@ public class CMISResultSetRowImpl implements CMISResultSetRow /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getValue(java.lang.String) */ public Serializable getValue(String columnName) { + CmisFunctionEvaluationContext context = new CmisFunctionEvaluationContext(); + context.setCmisDictionaryService(cmisDictionaryService); + context.setNodeRefs(nodeRefs); + context.setNodeService(nodeService); + context.setScores(scores); + context.setScore(getScore()); for (Column column : query.getColumns()) { if (column.getAlias().equals(columnName)) { - CmisFunctionEvaluationContext context = new CmisFunctionEvaluationContext(); - context.setCmisDictionaryService(cmisDictionaryService); - context.setNodeRefs(nodeRefs); - context.setNodeService(nodeService); - context.setScores(scores); - context.setScore(getScore()); return column.getFunction().getValue(column.getFunctionArguments(), context); } + // Special case for one selector - ignore any table aliases + // also allows look up direct and not by alias + // Perhaps we should add the duplicates instead + // TODO: check SQL 92 for single alias table behaviour for selectors + if (nodeRefs.size() == 1) + { + if (column.getFunction().getName().equals(PropertyAccessor.NAME)) + { + PropertyArgument arg = (PropertyArgument) column.getFunctionArguments().get(PropertyAccessor.ARG_PROPERTY); + String propertyName = arg.getPropertyName(); + if (propertyName.equals(columnName)) + { + return column.getFunction().getValue(column.getFunctionArguments(), context); + } + StringBuilder builder = new StringBuilder(); + builder.append(arg.getSelector()).append(".").append(propertyName); + propertyName = builder.toString(); + if (propertyName.equals(columnName)) + { + return column.getFunction().getValue(column.getFunctionArguments(), context); + } + } + } + else + { + if (column.getFunction().getName().equals(PropertyAccessor.NAME)) + { + PropertyArgument arg = (PropertyArgument) column.getFunctionArguments().get(PropertyAccessor.ARG_PROPERTY); + StringBuilder builder = new StringBuilder(); + builder.append(arg.getSelector()).append(".").append(arg.getPropertyName()); + String propertyName = builder.toString(); + if (propertyName.equals(columnName)) + { + return column.getFunction().getValue(column.getFunctionArguments(), context); + } + } + } } return null; } /* * (non-Javadoc) - * * @see org.alfresco.cmis.search.CMISResultSetRow#getValues() */ public Map getValues() @@ -208,12 +239,36 @@ public class CMISResultSetRowImpl implements CMISResultSetRow { return nodeRefs.values().iterator().next(); } + else if(allNodeRefsEqual(nodeRefs)) + { + return nodeRefs.values().iterator().next(); + } throw new UnsupportedOperationException("Ambiguous selector"); } + private boolean allNodeRefsEqual(Map selected) + { + NodeRef last = null; + for(NodeRef current : selected.values()) + { + if(last == null) + { + last = current; + } + else + { + if(!last.equals(current)) + { + return false; + } + } + } + return true; + } + public QName getQName() { - return getChildAssocRef().getQName(); + return getChildAssocRef().getQName(); } public Serializable getValue(QName qname) diff --git a/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java b/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java index 593bc8f126..bc507d4ea2 100644 --- a/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java +++ b/source/java/org/alfresco/cmis/search/CmisFunctionEvaluationContext.java @@ -28,15 +28,20 @@ import java.io.Serializable; import java.util.Collection; import java.util.Map; +import org.alfresco.cmis.CMISCardinalityEnum; import org.alfresco.cmis.CMISDictionaryModel; import org.alfresco.cmis.CMISDictionaryService; import org.alfresco.cmis.CMISPropertyDefinition; +import org.alfresco.cmis.CMISQueryException; +import org.alfresco.cmis.CMISScope; +import org.alfresco.cmis.CMISTypeDefinition; import org.alfresco.repo.search.impl.lucene.LuceneFunction; import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; import org.alfresco.repo.search.impl.querymodel.FunctionArgument; import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.PredicateMode; import org.alfresco.repo.search.impl.querymodel.QueryModelException; +import org.alfresco.repo.search.impl.querymodel.Selector; import org.alfresco.repo.search.impl.querymodel.impl.functions.Lower; import org.alfresco.repo.search.impl.querymodel.impl.functions.Upper; import org.alfresco.service.cmr.repository.NodeRef; @@ -49,6 +54,10 @@ import org.apache.lucene.search.Query; */ public class CmisFunctionEvaluationContext implements FunctionEvaluationContext { + public static CMISScope[] STRICT_SCOPES = new CMISScope[] { CMISScope.DOCUMENT, CMISScope.FOLDER }; + + public static CMISScope[] ALFRESCO_SCOPES = new CMISScope[] { CMISScope.DOCUMENT, CMISScope.FOLDER, CMISScope.POLICY }; + private Map nodeRefs; private Map scores; @@ -56,6 +65,8 @@ public class CmisFunctionEvaluationContext implements FunctionEvaluationContext private NodeService nodeService; private CMISDictionaryService cmisDictionaryService; + + private CMISScope[] validScopes; private Float score; @@ -94,6 +105,15 @@ public class CmisFunctionEvaluationContext implements FunctionEvaluationContext { this.cmisDictionaryService = cmisDictionaryService; } + + /** + * @param validScopes + * the valid scopes to set + */ + public void setValidScopes(CMISScope[] validScopes) + { + this.validScopes = validScopes; + } /* * (non-Javadoc) @@ -268,7 +288,7 @@ public class CmisFunctionEvaluationContext implements FunctionEvaluationContext public String getLuceneSortField(LuceneQueryParser lqp, String propertyName) { CMISPropertyDefinition propertyDef = cmisDictionaryService.findProperty(propertyName, null); - return propertyDef.getPropertyLuceneBuilder().getLuceneSortField(); + return propertyDef.getPropertyLuceneBuilder().getLuceneSortField(lqp); } @@ -340,6 +360,45 @@ public class CmisFunctionEvaluationContext implements FunctionEvaluationContext } } } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext#checkFieldApplies(org.alfresco.service.namespace.QName, java.lang.String) + */ + public void checkFieldApplies(Selector selector, String propertyName) + { + CMISPropertyDefinition propDef = cmisDictionaryService.findPropertyByQueryName(propertyName); + if (propDef == null) + { + throw new CMISQueryException("Unknown column/property " + propertyName); + } + + CMISTypeDefinition typeDef = cmisDictionaryService.findTypeForClass(selector.getType(), validScopes); + if (typeDef == null) + { + throw new CMISQueryException("Type unsupported in CMIS queries: " + selector.getAlias()); + } + + // Check column/property applies to selector/type + + if (!typeDef.getPropertyDefinitions().containsKey(propDef.getPropertyId().getId())) + { + throw new CMISQueryException("Invalid column for " + typeDef.getQueryName() + "." + propertyName); + } + + } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext#isMultiValued(java.lang.String) + */ + public boolean isMultiValued(String propertyName) + { + CMISPropertyDefinition propDef = cmisDictionaryService.findPropertyByQueryName(propertyName); + if (propDef == null) + { + throw new CMISQueryException("Unknown column/property " + propertyName); + } + return propDef.getCardinality() == CMISCardinalityEnum.MULTI_VALUED; + } } diff --git a/source/java/org/alfresco/cmis/search/QueryTest.java b/source/java/org/alfresco/cmis/search/QueryTest.java index 45df162885..4b03f6cec8 100644 --- a/source/java/org/alfresco/cmis/search/QueryTest.java +++ b/source/java/org/alfresco/cmis/search/QueryTest.java @@ -24,30 +24,50 @@ */ package org.alfresco.cmis.search; +import java.io.InputStream; import java.io.Serializable; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; +import java.util.Collection; +import java.util.Collections; import java.util.Date; +import java.util.GregorianCalendar; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; +import org.alfresco.cmis.CMISCardinalityEnum; +import org.alfresco.cmis.CMISDataTypeEnum; import org.alfresco.cmis.CMISDictionaryModel; import org.alfresco.cmis.CMISPropertyDefinition; import org.alfresco.cmis.CMISQueryException; import org.alfresco.cmis.CMISQueryOptions; import org.alfresco.cmis.CMISResultSet; +import org.alfresco.cmis.CMISResultSetColumn; import org.alfresco.cmis.CMISResultSetMetaData; import org.alfresco.cmis.CMISResultSetRow; import org.alfresco.cmis.CMISTypeDefinition; import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; +import org.alfresco.cmis.dictionary.CMISAbstractDictionaryService; import org.alfresco.cmis.mapping.BaseCMISTest; +import org.alfresco.cmis.mapping.ContentStreamLengthProperty; +import org.alfresco.cmis.mapping.ContentStreamMimetypeProperty; +import org.alfresco.cmis.mapping.DirectProperty; +import org.alfresco.cmis.mapping.ObjectIdProperty; +import org.alfresco.cmis.mapping.ObjectTypeIdProperty; +import org.alfresco.cmis.mapping.ParentProperty; import org.alfresco.model.ContentModel; +import org.alfresco.repo.dictionary.M2Model; +import org.alfresco.repo.node.BaseNodeServiceTest; +import org.alfresco.repo.search.MLAnalysisMode; import org.alfresco.repo.search.impl.parsers.CMISLexer; import org.alfresco.repo.search.impl.parsers.CMISParser; import org.alfresco.repo.search.impl.parsers.FTSQueryException; +import org.alfresco.repo.search.impl.querymodel.Order; import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.QueryOptions.Connective; import org.alfresco.service.cmr.repository.ContentData; @@ -58,74 +78,174 @@ import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; import org.alfresco.service.cmr.repository.datatype.Duration; import org.alfresco.service.cmr.security.PermissionService; import org.alfresco.service.namespace.QName; -import org.springframework.extensions.surf.util.CachingDateFormat; import org.antlr.runtime.ANTLRStringStream; import org.antlr.runtime.CharStream; import org.antlr.runtime.CommonTokenStream; import org.antlr.runtime.RecognitionException; import org.antlr.runtime.tree.CommonTree; +import org.springframework.extensions.surf.util.CachingDateFormat; +import org.springframework.extensions.surf.util.I18NUtil; /** * @author andyh */ public class QueryTest extends BaseCMISTest { + private static final String TEST_NAMESPACE = "http://www.alfresco.org/test/cmis-query-test"; + + QName extendedContent = QName.createQName(TEST_NAMESPACE, "extendedContent"); + + QName singleTextBoth = QName.createQName(TEST_NAMESPACE, "singleTextBoth"); + + QName singleTextUntokenised = QName.createQName(TEST_NAMESPACE, "singleTextUntokenised"); + + QName singleTextTokenised = QName.createQName(TEST_NAMESPACE, "singleTextTokenised"); + + QName multipleTextBoth = QName.createQName(TEST_NAMESPACE, "multipleTextBoth"); + + QName multipleTextUntokenised = QName.createQName(TEST_NAMESPACE, "multipleTextUntokenised"); + + QName multipleTextTokenised = QName.createQName(TEST_NAMESPACE, "multipleTextTokenised"); + + QName singleMLTextBoth = QName.createQName(TEST_NAMESPACE, "singleMLTextBoth"); + + QName singleMLTextUntokenised = QName.createQName(TEST_NAMESPACE, "singleMLTextUntokenised"); + + QName singleMLTextTokenised = QName.createQName(TEST_NAMESPACE, "singleMLTextTokenised"); + + QName multipleMLTextBoth = QName.createQName(TEST_NAMESPACE, "multipleMLTextBoth"); + + QName multipleMLTextUntokenised = QName.createQName(TEST_NAMESPACE, "multipleMLTextUntokenised"); + + QName multipleMLTextTokenised = QName.createQName(TEST_NAMESPACE, "multipleMLTextTokenised"); + + QName singleFloat = QName.createQName(TEST_NAMESPACE, "singleFloat"); + + QName multipleFloat = QName.createQName(TEST_NAMESPACE, "multipleFloat"); + + QName singleDouble = QName.createQName(TEST_NAMESPACE, "singleDouble"); + + QName multipleDouble = QName.createQName(TEST_NAMESPACE, "multipleDouble"); + + QName singleInteger = QName.createQName(TEST_NAMESPACE, "singleInteger"); + + QName multipleInteger = QName.createQName(TEST_NAMESPACE, "multipleInteger"); + + QName singleLong = QName.createQName(TEST_NAMESPACE, "singleLong"); + + QName multipleLong = QName.createQName(TEST_NAMESPACE, "multipleLong"); + + QName singleBoolean = QName.createQName(TEST_NAMESPACE, "singleBoolean"); + + QName multipleBoolean = QName.createQName(TEST_NAMESPACE, "multipleBoolean"); + + QName singleDate = QName.createQName(TEST_NAMESPACE, "singleDate"); + + QName multipleDate = QName.createQName(TEST_NAMESPACE, "multipleDate"); + + QName singleDatetime = QName.createQName(TEST_NAMESPACE, "singleDatetime"); + + QName multipleDatetime = QName.createQName(TEST_NAMESPACE, "multipleDatetime"); + private int file_count = 0; private int folder_count = 0; private NodeRef f0; + private NodeRef f1; + + private NodeRef f2; + + private NodeRef f3; + + private NodeRef f4; + + private NodeRef f5; + + private NodeRef f6; + + private NodeRef f7; + + private NodeRef f8; + + private NodeRef f9; + + private NodeRef c0; + + private NodeRef c1; + + private NodeRef c2; + + private NodeRef c3; + + private NodeRef c4; + + private NodeRef c5; + + private NodeRef c6; + + private NodeRef c7; + + private NodeRef c8; + + private NodeRef c9; + + private Date date1; + + private Date date2; + + private Date date0; + + private long contentLength0; + + private String contentUrl0; + @Override public void setUp() throws Exception { super.setUp(); - - + f0 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 0", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f0, ContentModel.PROP_NAME, "Folder 0"); folder_count++; - + permissionService.setPermission(f0, "cmis", PermissionService.READ, true); - - NodeRef f1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 1", namespaceService), ContentModel.TYPE_FOLDER) - .getChildRef(); + f1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 1", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f1, ContentModel.PROP_NAME, "Folder 1"); folder_count++; - NodeRef f2 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 2", namespaceService), ContentModel.TYPE_FOLDER) - .getChildRef(); + f2 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 2", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f2, ContentModel.PROP_NAME, "Folder 2"); folder_count++; - NodeRef f3 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 3", namespaceService), ContentModel.TYPE_FOLDER) - .getChildRef(); + f3 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 3", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f3, ContentModel.PROP_NAME, "Folder 3"); folder_count++; - NodeRef f4 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 4", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + f4 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 4", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f4, ContentModel.PROP_NAME, "Folder 4"); folder_count++; - NodeRef f5 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 5", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + f5 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 5", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f5, ContentModel.PROP_NAME, "Folder 5"); folder_count++; - NodeRef f6 = nodeService.createNode(f5, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 6", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + f6 = nodeService.createNode(f5, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 6", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f6, ContentModel.PROP_NAME, "Folder 6"); folder_count++; - NodeRef f7 = nodeService.createNode(f6, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 7", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + f7 = nodeService.createNode(f6, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 7", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f7, ContentModel.PROP_NAME, "Folder 7"); folder_count++; - NodeRef f8 = nodeService.createNode(f7, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 8", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + f8 = nodeService.createNode(f7, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 8", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); nodeService.setProperty(f8, ContentModel.PROP_NAME, "Folder 8"); folder_count++; - NodeRef f9 = nodeService.createNode(f8, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 9", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); - nodeService.setProperty(f9, ContentModel.PROP_NAME, "Folder 9"); + f9 = nodeService.createNode(f8, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Folder 9", namespaceService), ContentModel.TYPE_FOLDER).getChildRef(); + nodeService.setProperty(f9, ContentModel.PROP_NAME, "Folder 9'"); folder_count++; Map properties0 = new HashMap(); @@ -137,13 +257,15 @@ public class QueryTest extends BaseCMISTest properties0.put(ContentModel.PROP_TITLE, desc0); properties0.put(ContentModel.PROP_NAME, "Alfresco Tutorial"); properties0.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c0 = nodeService - .createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Alfresco Tutorial", namespaceService), ContentModel.TYPE_CONTENT, properties0).getChildRef(); + c0 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Alfresco Tutorial", namespaceService), ContentModel.TYPE_CONTENT, properties0) + .getChildRef(); ContentWriter writer0 = contentService.getWriter(c0, ContentModel.PROP_CONTENT, true); writer0.setEncoding("UTF-8"); writer0.putContent("The quick brown fox jumped over the lazy dog and ate the Alfresco Tutorial, in pdf format, along with the following stop words; a an and are" + " as at be but by for if in into is it no not of on or such that the their then there these they this to was will with: " + " and random charcters \u00E0\u00EA\u00EE\u00F0\u00F1\u00F6\u00FB\u00FF"); + contentLength0 = writer0.getSize(); + contentUrl0 = DefaultTypeConverter.INSTANCE.convert(ContentData.class, nodeService.getProperty(c0, ContentModel.PROP_CONTENT)).getContentUrl(); nodeService.addAspect(c0, ContentModel.ASPECT_TITLED, null); nodeService.addAspect(c0, ContentModel.ASPECT_OWNABLE, null); nodeService.setProperty(c0, ContentModel.PROP_OWNER, "andy"); @@ -156,10 +278,9 @@ public class QueryTest extends BaseCMISTest properties1.put(ContentModel.PROP_CONTENT, new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK)); properties1.put(ContentModel.PROP_DESCRIPTION, desc1); properties1.put(ContentModel.PROP_TITLE, desc1); - properties1.put(ContentModel.PROP_NAME, "AA"); + properties1.put(ContentModel.PROP_NAME, "AA%"); properties1.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c1 = nodeService.createNode(f1, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "One", namespaceService), ContentModel.TYPE_CONTENT, properties1) - .getChildRef(); + c1 = nodeService.createNode(f1, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "One", namespaceService), ContentModel.TYPE_CONTENT, properties1).getChildRef(); ContentWriter writer1 = contentService.getWriter(c1, ContentModel.PROP_CONTENT, true); writer1.setEncoding("UTF-8"); writer1.putContent("One Zebra Apple"); @@ -173,10 +294,9 @@ public class QueryTest extends BaseCMISTest properties2.put(ContentModel.PROP_CONTENT, new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK)); properties2.put(ContentModel.PROP_DESCRIPTION, desc2); properties2.put(ContentModel.PROP_TITLE, desc2); - properties2.put(ContentModel.PROP_NAME, "BB"); + properties2.put(ContentModel.PROP_NAME, "BB_"); properties2.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c2 = nodeService.createNode(f2, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Two", namespaceService), ContentModel.TYPE_CONTENT, properties2) - .getChildRef(); + c2 = nodeService.createNode(f2, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Two", namespaceService), ContentModel.TYPE_CONTENT, properties2).getChildRef(); ContentWriter writer2 = contentService.getWriter(c2, ContentModel.PROP_CONTENT, true); writer2.setEncoding("UTF-8"); writer2.putContent("Two Zebra Banana"); @@ -190,10 +310,9 @@ public class QueryTest extends BaseCMISTest properties3.put(ContentModel.PROP_CONTENT, new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK)); properties3.put(ContentModel.PROP_DESCRIPTION, desc3); properties3.put(ContentModel.PROP_TITLE, desc3); - properties3.put(ContentModel.PROP_NAME, "CC"); + properties3.put(ContentModel.PROP_NAME, "CC\\"); properties3.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c3 = nodeService.createNode(f3, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Three", namespaceService), ContentModel.TYPE_CONTENT, properties3) - .getChildRef(); + c3 = nodeService.createNode(f3, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Three", namespaceService), ContentModel.TYPE_CONTENT, properties3).getChildRef(); ContentWriter writer3 = contentService.getWriter(c3, ContentModel.PROP_CONTENT, true); writer3.setEncoding("UTF-8"); writer3.putContent("Three Zebra Clementine"); @@ -207,10 +326,9 @@ public class QueryTest extends BaseCMISTest properties4.put(ContentModel.PROP_CONTENT, new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK)); properties4.put(ContentModel.PROP_DESCRIPTION, desc4); properties4.put(ContentModel.PROP_TITLE, desc4); - properties4.put(ContentModel.PROP_NAME, "DD"); + properties4.put(ContentModel.PROP_NAME, "DD\'"); properties4.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c4 = nodeService.createNode(f4, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Four", namespaceService), ContentModel.TYPE_CONTENT, properties4) - .getChildRef(); + c4 = nodeService.createNode(f4, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Four", namespaceService), ContentModel.TYPE_CONTENT, properties4).getChildRef(); ContentWriter writer4 = contentService.getWriter(c4, ContentModel.PROP_CONTENT, true); writer4.setEncoding("UTF-8"); writer4.putContent("Four zebra durian"); @@ -226,14 +344,21 @@ public class QueryTest extends BaseCMISTest properties5.put(ContentModel.PROP_TITLE, desc5); properties5.put(ContentModel.PROP_NAME, "EE"); properties5.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c5 = nodeService.createNode(f5, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Five", namespaceService), ContentModel.TYPE_CONTENT, properties5) - .getChildRef(); + + c5 = nodeService.createNode(f5, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Five", namespaceService), ContentModel.TYPE_CONTENT, properties5).getChildRef(); ContentWriter writer5 = contentService.getWriter(c5, ContentModel.PROP_CONTENT, true); writer5.setEncoding("UTF-8"); writer5.putContent("Five zebra Ebury"); nodeService.addAspect(c5, ContentModel.ASPECT_TITLED, null); file_count++; + Map lockProperties = new HashMap(); + lockProperties.put(ContentModel.PROP_EXPIRY_DATE, DefaultTypeConverter.INSTANCE.convert(Date.class, "2012-12-12T12:12:12.012Z")); + lockProperties.put(ContentModel.PROP_LOCK_OWNER, "andy"); + lockProperties.put(ContentModel.PROP_LOCK_TYPE, "test"); + + nodeService.addAspect(c5, ContentModel.ASPECT_LOCKABLE, lockProperties); + Map properties6 = new HashMap(); MLText desc6 = new MLText(); desc6.addValue(Locale.ENGLISH, "Six"); @@ -243,8 +368,7 @@ public class QueryTest extends BaseCMISTest properties6.put(ContentModel.PROP_TITLE, desc6); properties6.put(ContentModel.PROP_NAME, "FF"); properties6.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c6 = nodeService.createNode(f6, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Six", namespaceService), ContentModel.TYPE_CONTENT, properties6) - .getChildRef(); + c6 = nodeService.createNode(f6, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Six", namespaceService), ContentModel.TYPE_CONTENT, properties6).getChildRef(); ContentWriter writer6 = contentService.getWriter(c6, ContentModel.PROP_CONTENT, true); writer6.setEncoding("UTF-8"); writer6.putContent("Six zebra fig"); @@ -258,10 +382,9 @@ public class QueryTest extends BaseCMISTest properties7.put(ContentModel.PROP_CONTENT, new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK)); properties7.put(ContentModel.PROP_DESCRIPTION, desc7); properties7.put(ContentModel.PROP_TITLE, desc7); - properties7.put(ContentModel.PROP_NAME, "GG"); + properties7.put(ContentModel.PROP_NAME, "GG*GG"); properties7.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c7 = nodeService.createNode(f7, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Seven", namespaceService), ContentModel.TYPE_CONTENT, properties7) - .getChildRef(); + c7 = nodeService.createNode(f7, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Seven", namespaceService), ContentModel.TYPE_CONTENT, properties7).getChildRef(); ContentWriter writer7 = contentService.getWriter(c7, ContentModel.PROP_CONTENT, true); writer7.setEncoding("UTF-8"); writer7.putContent("Seven zebra grapefruit"); @@ -275,10 +398,9 @@ public class QueryTest extends BaseCMISTest properties8.put(ContentModel.PROP_CONTENT, new ContentData(null, "text/plain", 0L, "UTF-8", Locale.UK)); properties8.put(ContentModel.PROP_DESCRIPTION, desc8); properties8.put(ContentModel.PROP_TITLE, desc8); - properties8.put(ContentModel.PROP_NAME, "HH"); + properties8.put(ContentModel.PROP_NAME, "HH?HH"); properties8.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c8 = nodeService.createNode(f8, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Eight", namespaceService), ContentModel.TYPE_CONTENT, properties8) - .getChildRef(); + c8 = nodeService.createNode(f8, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Eight", namespaceService), ContentModel.TYPE_CONTENT, properties8).getChildRef(); ContentWriter writer8 = contentService.getWriter(c8, ContentModel.PROP_CONTENT, true); writer8.setEncoding("UTF-8"); writer8.putContent("Eight zebra jackfruit"); @@ -294,20 +416,20 @@ public class QueryTest extends BaseCMISTest properties9.put(ContentModel.PROP_TITLE, desc9); properties9.put(ContentModel.PROP_NAME, "aa"); properties9.put(ContentModel.PROP_CREATED, new Date()); - NodeRef c9 = nodeService.createNode(f9, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Nine", namespaceService), ContentModel.TYPE_CONTENT, properties9) - .getChildRef(); + c9 = nodeService.createNode(f9, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Nine", namespaceService), ContentModel.TYPE_CONTENT, properties9).getChildRef(); ContentWriter writer9 = contentService.getWriter(c9, ContentModel.PROP_CONTENT, true); writer9.setEncoding("UTF-8"); writer9.putContent("Nine zebra kiwi"); nodeService.addAspect(c9, ContentModel.ASPECT_TITLED, null); file_count++; + nodeService.setProperty(c9, ContentModel.PROP_VERSION_LABEL, "label"); } private T testQuery(String query, int size, boolean dump, String returnPropertyName, T returnType, boolean shouldThrow) { return testQuery(query, size, dump, returnPropertyName, returnType, shouldThrow, CMISQueryMode.CMS_STRICT); } - + private T testExtendedQuery(String query, int size, boolean dump, String returnPropertyName, T returnType, boolean shouldThrow) { return testQuery(query, size, dump, returnPropertyName, returnType, shouldThrow, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); @@ -374,7 +496,18 @@ public class QueryTest extends BaseCMISTest throw e; } } - catch(FTSQueryException e) + catch (FTSQueryException e) + { + if (shouldThrow) + { + return null; + } + else + { + throw e; + } + } + catch (UnsupportedOperationException e) { if (shouldThrow) { @@ -404,35 +537,110 @@ public class QueryTest extends BaseCMISTest public void test_ALLOWED_CHILD_OBJECT_TYPES() { - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds = 'test'", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds <> 'test'", 10, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds < 'test'", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds <= 'test'", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds > 'test'", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds >= 'test'", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Folder", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(folder_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // not queryable + Serializable sValue = row.getValue("cmis:allowedChildObjectTypeIds"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:allowedChildObjectTypeIds"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds IN ('test')", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds NOT IN ('test')", 10, false, "cmis:allowedChildObjectTypeIds", new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds = 'test'", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds <> 'test'", 10, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds < 'test'", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds <= 'test'", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds > 'test'", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds >= 'test'", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds LIKE 'test'", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds NOT LIKE 'test'", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds IN ('test')", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds NOT IN ('test')", 10, false, "cmis:allowedChildObjectTypeIds", + new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds IS NOT NULL", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE cmis:allowedChildObjectTypeIds IS NULL", 10, false, "cmis:allowedChildObjectTypeIds", new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds LIKE 'test'", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds NOT LIKE 'test'", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE 'test' = ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE 'test' <> ANY cmis:allowedChildObjectTypeIds", 10, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE 'test' < ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE 'test' <= ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE 'test' > ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE 'test' >= ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds IS NOT NULL", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE cmis:allowedChildObjectTypeIds IS NULL", 10, false, "cmis:allowedChildObjectTypeIds", + new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE ANY cmis:allowedChildObjectTypeIds IN ('test')", 0, false, "cmis:allowedChildObjectTypeIds", new String(), true); - testQuery("SELECT cmis:allowedChildObjectTypeIds FROM Folder WHERE ANY cmis:allowedChildObjectTypeIds NOT IN ('test')", 10, false, "cmis:allowedChildObjectTypeIds", new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE 'test' = ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE 'test' <> ANY cmis:allowedChildObjectTypeIds", 10, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE 'test' < ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE 'test' <= ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE 'test' > ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE 'test' >= ANY cmis:allowedChildObjectTypeIds", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE ANY cmis:allowedChildObjectTypeIds IN ('test')", 0, false, "cmis:allowedChildObjectTypeIds", + new String(), true); + testQuery("SELECT cmis:allowedChildObjectTypeIds FROM cmis:Folder WHERE ANY cmis:allowedChildObjectTypeIds NOT IN ('test')", 10, false, "cmis:allowedChildObjectTypeIds", + new String(), true); } public void test_PARENT() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Folder", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(folder_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:parentId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:parentId"); + assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ParentProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:folder where cmis:parentId = '" + f8.toString() + "'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:parentId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals(f8.toString(), value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:parentId"); + assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ParentProperty); + } + rs.close(); + testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId = '" + rootNodeRef.toString() + "'", 4, false, "cmis:parentId", new String(), false); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId <> '" + rootNodeRef.toString() + "'", 6, false, "cmis:parentId", new String(), false); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId < '" + rootNodeRef.toString() + "'", 0, false, "cmis:parentId", new String(), true); @@ -443,96 +651,311 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId IN ('" + rootNodeRef.toString() + "')", 4, false, "cmis:parentId", new String(), false); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId NOT IN ('" + rootNodeRef.toString() + "')", 6, false, "cmis:parentId", new String(), false); - testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId LIKE '" + rootNodeRef.toString() + "'", 4, false, "cmis:parentId", new String(), false); - testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId NOT LIKE '" + rootNodeRef.toString() + "'", 6, false, "cmis:parentId", new String(), false); + testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId LIKE '" + rootNodeRef.toString() + "'", 4, false, "cmis:parentId", new String(), true); + testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId NOT LIKE '" + rootNodeRef.toString() + "'", 6, false, "cmis:parentId", new String(), true); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId IS NOT NULL", 10, false, "cmis:parentId", new String(), false); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE cmis:parentId IS NULL", 0, false, "cmis:parentId", new String(), false); - testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' = ANY cmis:parentId", 4, false, "cmis:parentId", new String(), false); - testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' <> ANY cmis:parentId", 6, false, "cmis:parentId", new String(), false); + testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' = ANY cmis:parentId", 4, false, "cmis:parentId", new String(), true); + testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' <> ANY cmis:parentId", 6, false, "cmis:parentId", new String(), true); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' < ANY cmis:parentId", 0, false, "cmis:parentId", new String(), true); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' <= ANY cmis:parentId", 0, false, "cmis:parentId", new String(), true); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' > ANY cmis:parentId", 0, false, "cmis:parentId", new String(), true); testQuery("SELECT cmis:parentId FROM cmis:folder WHERE '" + rootNodeRef.toString() + "' >= ANY cmis:parentId", 0, false, "cmis:parentId", new String(), true); - testQuery("SELECT cmis:parentId FROM cmis:folder WHERE ANY cmis:parentId IN ('" + rootNodeRef.toString() + "')", 4, false, "cmis:parentId", new String(), false); - testQuery("SELECT cmis:parentId FROM cmis:folder WHERE ANY cmis:parentId NOT IN ('" + rootNodeRef.toString() + "')", 6, false, "cmis:parentId", new String(), false); + testQuery("SELECT cmis:parentId FROM cmis:folder WHERE ANY cmis:parentId IN ('" + rootNodeRef.toString() + "')", 4, false, "cmis:parentId", new String(), true); + testQuery("SELECT cmis:parentId FROM cmis:folder WHERE ANY cmis:parentId NOT IN ('" + rootNodeRef.toString() + "')", 6, false, "cmis:parentId", new String(), true); + } + + public void test_PATH() + { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:folder", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(folder_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:path"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:path"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof PathProperty); + } + rs.close(); + + testQuery("SELECT cmis:path FROM cmis:folder", folder_count, false, "cmis:path", new String(), true); + testQuery("SELECT cmis:path FROM cmis:folder WHERE cmis:path = 'anything'", folder_count, false, "cmis:path", new String(), true); + + } + + public void test_CONTENT_STREAM_ID() + { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamId"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ContentStreamIdProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:contentStreamFileName = 'Alfresco Tutorial'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(contentUrl0, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamId"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ContentStreamIdProperty); + } + rs.close(); + + testQuery("SELECT cmis:contentStreamId FROM cmis:document", file_count, false, "cmis:contentStreamId", new String(), true); + + // not allowed in predicates + testQuery("SELECT cmis:contentStreamId FROM cmis:document WHERE cmis:contentStreamId = '" + contentUrl0 + "'", 1, false, "cmis:contentStreamId", new String(), true); + } public void test_CONTENT_STREAM_FILENAME() { - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'AA'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'BB'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'CC'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'DD'", 1, false, "cmis:contentStreamFileName", new String(), false); + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamFileName"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamFileName"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:contentStreamFileName = 'Alfresco Tutorial'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamFileName"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("Alfresco Tutorial", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamFileName"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'AA%'", 1, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'BB_'", 1, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'CC\\\\'", 1, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'DD\\''", 1, false, "cmis:contentStreamFileName", new String(), false); testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'EE'", 1, false, "cmis:contentStreamFileName", new String(), false); testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'FF'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'GG'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'HH'", 1, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'GG*GG'", 1, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'HH?HH'", 1, false, "cmis:contentStreamFileName", new String(), false); testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'aa'", 1, false, "cmis:contentStreamFileName", new String(), false); - - - - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName <> 'Alfresco Tutorial'", 9, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName < 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName <= 'Alfresco Tutorial'", 2, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName > 'Alfresco Tutorial'", 8, true, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName >= 'Alfresco Tutorial'", 9, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName IN ('Alfresco Tutorial')", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName NOT IN ('Alfresco Tutorial')", 9, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName = 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName <> 'Alfresco Tutorial'", 9, false, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName < 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName <= 'Alfresco Tutorial'", 2, false, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName > 'Alfresco Tutorial'", 8, true, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName >= 'Alfresco Tutorial'", 9, false, "cmis:contentStreamFileName", + new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName LIKE 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName NOT LIKE 'Alfresco Tutorial'", 9, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName IN ('Alfresco Tutorial')", 1, false, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName NOT IN ('Alfresco Tutorial')", 9, false, "cmis:contentStreamFileName", + new String(), false); + + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName LIKE 'Alfresco Tutorial'", 1, false, "cmis:contentStreamFileName", + new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName NOT LIKE 'Alfresco Tutorial'", 9, false, "cmis:contentStreamFileName", + new String(), false); testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName IS NOT NULL", 10, false, "cmis:contentStreamFileName", new String(), false); testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE cmis:contentStreamFileName IS NULL", 0, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' = ANY cmis:contentStreamFileName", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' <> ANY cmis:contentStreamFileName", 9, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' < ANY cmis:contentStreamFileName", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' <= ANY cmis:contentStreamFileName", 2, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' > ANY cmis:contentStreamFileName", 8, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' >= ANY cmis:contentStreamFileName", 9, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' = ANY cmis:contentStreamFileName", 1, false, "cmis:contentStreamFileName", + new String(), true); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' <> ANY cmis:contentStreamFileName", 9, false, "cmis:contentStreamFileName", + new String(), true); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' < ANY cmis:contentStreamFileName", 1, false, "cmis:contentStreamFileName", + new String(), true); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' <= ANY cmis:contentStreamFileName", 2, false, "cmis:contentStreamFileName", + new String(), true); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' > ANY cmis:contentStreamFileName", 8, false, "cmis:contentStreamFileName", + new String(), true); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE 'Alfresco Tutorial' >= ANY cmis:contentStreamFileName", 9, false, "cmis:contentStreamFileName", + new String(), true); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE ANY cmis:contentStreamFileName IN ('Alfresco Tutorial')", 1, false, "cmis:contentStreamFileName", new String(), false); - testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE ANY cmis:contentStreamFileName NOT IN ('Alfresco Tutorial')", 9, false, "cmis:contentStreamFileName", new String(), false); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE ANY cmis:contentStreamFileName IN ('Alfresco Tutorial')", 1, false, "cmis:contentStreamFileName", + new String(), true); + testQuery("SELECT cmis:contentStreamFileName FROM cmis:document WHERE ANY cmis:contentStreamFileName NOT IN ('Alfresco Tutorial')", 9, false, "cmis:contentStreamFileName", + new String(), true); } public void test_CONTENT_STREAM_MIME_TYPE() { - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType = 'text/plain'", 10, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType <> 'text/plain'", 0, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType < 'text/plain'", 0, true, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType <= 'text/plain'", 10, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType > 'text/plain'", 0, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType >= 'text/plain'", 10, false, "cmis:contentStreamMimeType", new String(), false); + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamMimeType"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamMimeType"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ContentStreamMimetypeProperty); + } + rs.close(); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType IN ('text/plain')", 10, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType NOT IN ('text/plain')", 0, false, "cmis:contentStreamMimeType", new String(), false); + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:contentStreamMimeType = 'text/plain'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertTrue(rs.length() > 0); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamMimeType"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("text/plain", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamMimeType"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ContentStreamMimetypeProperty); + } + rs.close(); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType LIKE 'text/plain'", 10, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType NOT LIKE 'text/plain'", 0, false, "cmis:contentStreamMimeType", new String(), false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType = 'text/plain'", 10, false, "cmis:contentStreamMimeType", new String(), + false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType <> 'text/plain'", 0, false, "cmis:contentStreamMimeType", new String(), + false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType < 'text/plain'", 0, true, "cmis:contentStreamMimeType", new String(), + false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType <= 'text/plain'", 10, false, "cmis:contentStreamMimeType", new String(), + false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType > 'text/plain'", 0, false, "cmis:contentStreamMimeType", new String(), + false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType >= 'text/plain'", 10, false, "cmis:contentStreamMimeType", new String(), + false); + + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType IN ('text/plain')", 10, false, "cmis:contentStreamMimeType", + new String(), false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType NOT IN ('text/plain')", 0, false, "cmis:contentStreamMimeType", + new String(), false); + + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType LIKE 'text/plain'", 10, false, "cmis:contentStreamMimeType", + new String(), false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType NOT LIKE 'text/plain'", 0, false, "cmis:contentStreamMimeType", + new String(), false); testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType IS NOT NULL", 10, false, "cmis:contentStreamMimeType", new String(), false); testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE cmis:contentStreamMimeType IS NULL", 0, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' = ANY cmis:contentStreamMimeType", 10, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' <> ANY cmis:contentStreamMimeType", 0, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' < ANY cmis:contentStreamMimeType", 0, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' <= ANY cmis:contentStreamMimeType", 10, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' > ANY cmis:contentStreamMimeType", 0, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' >= ANY cmis:contentStreamMimeType", 10, false, "cmis:contentStreamMimeType", new String(), false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' = ANY cmis:contentStreamMimeType", 10, false, "cmis:contentStreamMimeType", + new String(), true); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' <> ANY cmis:contentStreamMimeType", 0, false, "cmis:contentStreamMimeType", + new String(), true); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' < ANY cmis:contentStreamMimeType", 0, false, "cmis:contentStreamMimeType", + new String(), true); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' <= ANY cmis:contentStreamMimeType", 10, false, "cmis:contentStreamMimeType", + new String(), true); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' > ANY cmis:contentStreamMimeType", 0, false, "cmis:contentStreamMimeType", + new String(), true); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE 'text/plain' >= ANY cmis:contentStreamMimeType", 10, false, "cmis:contentStreamMimeType", + new String(), true); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE ANY cmis:contentStreamMimeType IN ('text/plain')", 10, false, "cmis:contentStreamMimeType", new String(), false); - testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE ANY cmis:contentStreamMimeType NOT IN ('text/plain')", 0, false, "cmis:contentStreamMimeType", new String(), false); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE ANY cmis:contentStreamMimeType IN ('text/plain')", 10, false, "cmis:contentStreamMimeType", + new String(), true); + testQuery("SELECT cmis:contentStreamMimeType FROM cmis:document WHERE ANY cmis:contentStreamMimeType NOT IN ('text/plain')", 0, false, "cmis:contentStreamMimeType", + new String(), true); } public void test_CONTENT_STREAM_LENGTH() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamLength"); + Long value = DefaultTypeConverter.INSTANCE.convert(Long.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamLength"); + assertEquals(CMISDataTypeEnum.INTEGER, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ContentStreamLengthProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:contentStreamLength = " + contentLength0, rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:contentStreamLength"); + Long value = DefaultTypeConverter.INSTANCE.convert(Long.class, sValue); + assertNotNull(value); + assertEquals(Long.valueOf(contentLength0), value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:contentStreamLength"); + assertEquals(CMISDataTypeEnum.INTEGER, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ContentStreamLengthProperty); + } + rs.close(); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength = 750", 0, false, "cmis:contentStreamLength", new String(), false); testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength <> 750", 10, true, "cmis:contentStreamLength", new String(), false); testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength < 750", 10, false, "cmis:contentStreamLength", new String(), false); @@ -543,25 +966,45 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength IN (750)", 0, false, "cmis:contentStreamLength", new String(), false); testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength NOT IN (750)", 10, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength LIKE '750'", 0, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength NOT LIKE '750'", 10, false, "cmis:contentStreamLength", new String(), false); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength LIKE '750'", 0, false, "cmis:contentStreamLength", new String(), true); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength NOT LIKE '750'", 10, false, "cmis:contentStreamLength", new String(), true); testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength IS NOT NULL", 10, false, "cmis:contentStreamLength", new String(), false); testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamLength IS NULL", 0, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 = ANY cmis:contentStreamLength", 0, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 <> ANY cmis:contentStreamLength", 10, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 < ANY cmis:contentStreamLength", 10, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 <= ANY cmis:contentStreamLength", 10, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 > ANY cmis:contentStreamLength", 0, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 >= ANY cmis:contentStreamLength", 0, false, "cmis:contentStreamLength", new String(), false); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 = ANY cmis:contentStreamLength", 0, false, "cmis:contentStreamLength", new String(), true); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 <> ANY cmis:contentStreamLength", 10, false, "cmis:contentStreamLength", new String(), true); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 < ANY cmis:contentStreamLength", 10, false, "cmis:contentStreamLength", new String(), true); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 <= ANY cmis:contentStreamLength", 10, false, "cmis:contentStreamLength", new String(), true); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 > ANY cmis:contentStreamLength", 0, false, "cmis:contentStreamLength", new String(), true); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE 750 >= ANY cmis:contentStreamLength", 0, false, "cmis:contentStreamLength", new String(), true); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE ANY cmis:contentStreamLength IN (750)", 0, false, "cmis:contentStreamLength", new String(), false); - testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE ANY cmis:contentStreamLength NOT IN (750)", 10, false, "cmis:contentStreamLength", new String(), false); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE ANY cmis:contentStreamLength IN (750)", 0, false, "cmis:contentStreamLength", new String(), true); + testQuery("SELECT cmis:contentStreamLength FROM cmis:document WHERE ANY cmis:contentStreamLength NOT IN (750)", 10, false, "cmis:contentStreamLength", new String(), true); } public void test_CHECKIN_COMMENT() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // not queryable + Serializable sValue = row.getValue("cmis:checkinComment"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:checkinComment"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof CheckinCommentProperty); + } + rs.close(); + testQuery("SELECT cmis:checkinComment FROM cmis:document WHERE cmis:checkinComment = 'admin'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:checkinComment FROM cmis:document WHERE cmis:checkinComment <> 'admin'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:checkinComment FROM cmis:document WHERE cmis:checkinComment < 'admin'", 0, false, "cmis:objectId", new String(), true); @@ -591,6 +1034,26 @@ public class QueryTest extends BaseCMISTest public void test_VERSION_SERIES_CHECKED_OUT_ID() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // not queryable + Serializable sValue = row.getValue("cmis:versionSeriesCheckedOutId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:versionSeriesCheckedOutId"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof CheckinCommentProperty); + } + rs.close(); + testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE cmis:versionSeriesCheckedOutId = 'admin'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE cmis:versionSeriesCheckedOutId <> 'admin'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE cmis:versionSeriesCheckedOutId < 'admin'", 0, false, "cmis:objectId", new String(), true); @@ -614,12 +1077,34 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE 'admin' > ANY cmis:versionSeriesCheckedOutId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE 'admin' >= ANY cmis:versionSeriesCheckedOutId", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutId IN ('admin')", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutId NOT IN ('admin')", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutId IN ('admin')", 0, false, "cmis:objectId", new String(), + true); + testQuery("SELECT cmis:versionSeriesCheckedOutId FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutId NOT IN ('admin')", 10, false, "cmis:objectId", new String(), + true); } public void test_VERSION_SERIES_CHECKED_OUT_BY() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // not queryable + Serializable sValue = row.getValue("cmis:versionSeriesCheckedOutBy"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:versionSeriesCheckedOutBy"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof CheckinCommentProperty); + } + rs.close(); + testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE cmis:versionSeriesCheckedOutBy = 'admin'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE cmis:versionSeriesCheckedOutBy <> 'admin'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE cmis:versionSeriesCheckedOutBy < 'admin'", 0, false, "cmis:objectId", new String(), true); @@ -643,12 +1128,34 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE 'admin' > ANY cmis:versionSeriesCheckedOutBy", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE 'admin' >= ANY cmis:versionSeriesCheckedOutBy", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutBy IN ('admin')", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutBy NOT IN ('admin')", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutBy IN ('admin')", 0, false, "cmis:objectId", new String(), + true); + testQuery("SELECT cmis:versionSeriesCheckedOutBy FROM cmis:document WHERE ANY cmis:versionSeriesCheckedOutBy NOT IN ('admin')", 10, false, "cmis:objectId", new String(), + true); } - public void test_VERSION_SERIES_IS_CHECKED_OUT() + public void test_IS_VERSION_SERIES_CHECKED_OUT() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // not queryable + Serializable sValue = row.getValue("cmis:isVeriesSeriesCheckedOut"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:isVeriesSeriesCheckedOut"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof CheckinCommentProperty); + } + rs.close(); + testQuery("SELECT cmis:isVeriesSeriesCheckedOut FROM cmis:document WHERE cmis:isVeriesSeriesCheckedOut = 'TRUE'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isVeriesSeriesCheckedOut FROM cmis:document WHERE cmis:isVeriesSeriesCheckedOut <> 'TRUE'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isVeriesSeriesCheckedOut FROM cmis:document WHERE cmis:isVeriesSeriesCheckedOut < 'TRUE'", 0, false, "cmis:objectId", new String(), true); @@ -678,6 +1185,25 @@ public class QueryTest extends BaseCMISTest public void test_VERSION_SERIES_ID() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:versionSeriesId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(row.getNodeRef().toString(), value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:versionSeriesId"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof VersionSeriesIdProperty); + } + rs.close(); + testQuery("SELECT cmis:versionSeriesId FROM cmis:document WHERE cmis:versionSeriesId = 'company'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesId FROM cmis:document WHERE cmis:versionSeriesId <> 'company'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:versionSeriesId FROM cmis:document WHERE cmis:versionSeriesId < 'company'", 0, false, "cmis:objectId", new String(), true); @@ -707,12 +1233,51 @@ public class QueryTest extends BaseCMISTest public void test_VERSION_LABEL() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (@SuppressWarnings("unused") + CMISResultSetRow row : rs) + { + // Serializable sValue = row.getValue("cmis:versionLabel"); + // String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + // could be anything + // assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:versionLabel"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:versionLabel = 'label'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:versionLabel"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("label", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:versionLabel"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel = 'company'", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel <> 'company'", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel < 'company'", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel <= 'company'", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel > 'company'", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel >= 'company'", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel > 'company'", 1, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel >= 'company'", 1, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel IN ('company')", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel NOT IN ('company')", 10, false, "cmis:objectId", new String(), false); @@ -720,22 +1285,42 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel LIKE 'company'", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel NOT LIKE 'company'", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel IS NOT NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel IS NULL", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel IS NOT NULL", 1, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE cmis:versionLabel IS NULL", 9, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' = ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' <> ANY cmis:versionLabel", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' < ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' <= ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' > ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' >= ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' = ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' <> ANY cmis:versionLabel", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' < ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' <= ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' > ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE 'company' >= ANY cmis:versionLabel", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE ANY cmis:versionLabel IN ('company')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE ANY cmis:versionLabel NOT IN ('company')", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE ANY cmis:versionLabel IN ('company')", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:versionLabel FROM cmis:document WHERE ANY cmis:versionLabel NOT IN ('company')", 10, false, "cmis:objectId", new String(), true); } public void test_IS_LATEST_MAJOR_VERSION() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // NOt queryable + Serializable sValue = row.getValue("cmis:isLatestMajorVersion"); + Boolean value = DefaultTypeConverter.INSTANCE.convert(Boolean.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:isLatestMajorVersion"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:isLatestMajorVersion FROM cmis:document WHERE cmis:isLatestMajorVersion = 'TRUE'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isLatestMajorVersion FROM cmis:document WHERE cmis:isLatestMajorVersion <> 'TRUE'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isLatestMajorVersion FROM cmis:document WHERE cmis:isLatestMajorVersion < 'TRUE'", 0, false, "cmis:objectId", new String(), true); @@ -765,6 +1350,26 @@ public class QueryTest extends BaseCMISTest public void test_IS_MAJOR_VERSION() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // NOt queryable + Serializable sValue = row.getValue("cmis:isMajorVersion"); + Boolean value = DefaultTypeConverter.INSTANCE.convert(Boolean.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:isMajorVersion"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:isMajorVersion FROM cmis:document WHERE cmis:isMajorVersion = TRUE", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isMajorVersion FROM cmis:document WHERE cmis:isMajorVersion = true", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isMajorVersion FROM cmis:document WHERE cmis:isMajorVersion = FALSE", 0, false, "cmis:objectId", new String(), true); @@ -797,6 +1402,26 @@ public class QueryTest extends BaseCMISTest public void test_IS_LATEST_VERSION() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // NOt queryable + Serializable sValue = row.getValue("cmis:isLatestVersion"); + Boolean value = DefaultTypeConverter.INSTANCE.convert(Boolean.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:isLatestVersion"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:isLatestVersion FROM cmis:document WHERE cmis:isLatestVersion = 'TRUE'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isLatestVersion FROM cmis:document WHERE cmis:isLatestVersion <> 'TRUE'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isLatestVersion FROM cmis:document WHERE cmis:isLatestVersion < 'TRUE'", 0, false, "cmis:objectId", new String(), true); @@ -826,6 +1451,26 @@ public class QueryTest extends BaseCMISTest public void test_IS_IMMUTABLE() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:Document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // NOt queryable + Serializable sValue = row.getValue("cmis:isImmutable"); + Boolean value = DefaultTypeConverter.INSTANCE.convert(Boolean.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:isImmutable"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:isImmutable FROM cmis:document WHERE cmis:isImmutable = 'TRUE'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isImmutable FROM cmis:document WHERE cmis:isImmutable <> 'TRUE'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:isImmutable FROM cmis:document WHERE cmis:isImmutable < 'TRUE'", 0, false, "cmis:objectId", new String(), true); @@ -855,6 +1500,43 @@ public class QueryTest extends BaseCMISTest public void test_folder_NAME() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:folder", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(folder_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:name"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:name"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:folder WHERE cmis:name = 'Folder 1'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:name"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("Folder 1", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:name"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:name FROM cmis:folder WHERE cmis:name = 'Folder 1'", 1, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:name FROM cmis:folder WHERE cmis:name <> 'Folder 1'", 9, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:name FROM cmis:folder WHERE cmis:name < 'Folder 1'", 1, false, "cmis:objectId", new String(), false); @@ -871,19 +1553,56 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:name FROM cmis:folder WHERE cmis:name IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:name FROM cmis:folder WHERE cmis:name IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' = ANY cmis:name", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' <> ANY cmis:name", 9, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' < ANY cmis:name", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' <= ANY cmis:name", 2, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' > ANY cmis:name", 8, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' >= ANY cmis:name", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' = ANY cmis:name", 1, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' <> ANY cmis:name", 9, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' < ANY cmis:name", 1, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' <= ANY cmis:name", 2, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' > ANY cmis:name", 8, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:name FROM cmis:folder WHERE 'Folder 1' >= ANY cmis:name", 9, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:name FROM cmis:folder WHERE ANY cmis:name IN ('Folder 1')", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name FROM cmis:folder WHERE ANY cmis:name NOT IN ('Folder 1')", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:name FROM cmis:folder WHERE ANY cmis:name IN ('Folder 1')", 1, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:name FROM cmis:folder WHERE ANY cmis:name NOT IN ('Folder 1')", 9, false, "cmis:objectId", new String(), true); } public void test_document_Name() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:name"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:name"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:name = 'Alfresco Tutorial'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:name"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("Alfresco Tutorial", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:name"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name = 'Alfresco Tutorial'", 1, false, "cmis:name", new String(), false); testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name <> 'Alfresco Tutorial'", 9, false, "cmis:name", new String(), false); testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name < 'Alfresco Tutorial'", 1, false, "cmis:name", new String(), false); @@ -900,19 +1619,39 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name IS NOT NULL", 10, false, "cmis:name", new String(), false); testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name IS NULL", 0, false, "cmis:name", new String(), false); - testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' = ANY cmis:name", 1, false, "cmis:name", new String(), false); - testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' <> ANY cmis:name", 9, false, "cmis:name", new String(), false); - testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' < ANY cmis:name", 1, false, "cmis:name", new String(), false); - testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' <= ANY cmis:name", 2, false, "cmis:name", new String(), false); - testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' > ANY cmis:name", 8, false, "cmis:name", new String(), false); - testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' >= ANY cmis:name", 9, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' = ANY cmis:name", 1, false, "cmis:name", new String(), true); + testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' <> ANY cmis:name", 9, false, "cmis:name", new String(), true); + testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' < ANY cmis:name", 1, false, "cmis:name", new String(), true); + testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' <= ANY cmis:name", 2, false, "cmis:name", new String(), true); + testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' > ANY cmis:name", 8, false, "cmis:name", new String(), true); + testQuery("SELECT cmis:name FROM cmis:document WHERE 'Alfresco Tutorial' >= ANY cmis:name", 9, false, "cmis:name", new String(), true); - testQuery("SELECT cmis:name FROM cmis:document WHERE ANY cmis:name IN ('Alfresco Tutorial')", 1, false, "cmis:name", new String(), false); - testQuery("SELECT cmis:name FROM cmis:document WHERE ANY cmis:name NOT IN ('Alfresco Tutorial')", 9, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE ANY cmis:name IN ('Alfresco Tutorial')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT cmis:name FROM cmis:document WHERE ANY cmis:name NOT IN ('Alfresco Tutorial')", 9, false, "cmis:name", new String(), true); } public void test_CHANGE_TOKEN() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + // not queryable + Serializable sValue = row.getValue("cmis:changeToken"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:changeToken"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:changeToken FROM cmis:folder WHERE cmis:changeToken = 'test'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:changeToken FROM cmis:folder WHERE cmis:changeToken <> 'test'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:changeToken FROM cmis:folder WHERE cmis:changeToken < 'test'", 0, false, "cmis:objectId", new String(), true); @@ -942,6 +1681,25 @@ public class QueryTest extends BaseCMISTest public void test_LAST_MODIFICATION_DATE() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:lastModificationDate"); + Date value = DefaultTypeConverter.INSTANCE.convert(Date.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:lastModificationDate"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + // By default we are only working to the day Calendar today = Calendar.getInstance(); @@ -953,6 +1711,27 @@ public class QueryTest extends BaseCMISTest SimpleDateFormat df = CachingDateFormat.getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", true); + Date lmd0 = DefaultTypeConverter.INSTANCE.convert(Date.class, nodeService.getProperty(c0, ContentModel.PROP_MODIFIED)); + String lmds0 = df.format(lmd0); + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:lastModificationDate = TIMESTAMP '" + lmds0 + "' and cmis:objectId = '" + c0.toString() + "'", + rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:lastModificationDate"); + Date value = DefaultTypeConverter.INSTANCE.convert(Date.class, sValue); + assertNotNull(value); + assertEquals(lmd0, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:lastModificationDate"); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + Date date = testQuery("SELECT cmis:lastModificationDate FROM cmis:document", -1, false, "cmis:lastModificationDate", new Date(), false); today.setTime(date); @@ -964,12 +1743,14 @@ public class QueryTest extends BaseCMISTest today.set(Calendar.MILLISECOND, today.getMinimum(Calendar.MILLISECOND)); String sDate = df.format(today.getTime()); - String sDate2 = sDate.substring(0, sDate.length()-1) + "+00:00"; + String sDate2 = sDate.substring(0, sDate.length() - 1) + "+00:00"; // Today (assuming al ws created today) - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate = TIMESTAMP '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate = TIMESTAMP '" + sDate2 + "'", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate = TIMESTAMP '" + sDate + "'", 10, false, "cmis:objectId", new String(), + false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate = TIMESTAMP '" + sDate2 + "'", 10, false, "cmis:objectId", new String(), + false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate <> '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate < '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate <= '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); @@ -979,23 +1760,25 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), + true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "') order by cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "') order by cmis:lastModificationDate", 0, false, + "cmis:objectId", new String(), true); // using yesterday @@ -1015,21 +1798,22 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), + true); // using tomorrow @@ -1049,26 +1833,64 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE cmis:lastModificationDate IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:lastModificationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:lastModificationDate", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModificationDate FROM cmis:document WHERE ANY cmis:lastModificationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), + true); } public void test_LAST_MODIFIED_BY() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:lastModifiedBy"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:lastModifiedBy"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:lastModifiedBy = 'System'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:lastModifiedBy"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("System", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:lastModifiedBy"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE cmis:lastModifiedBy = 'System'", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE cmis:lastModifiedBy <> 'System'", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE cmis:lastModifiedBy < 'System'", 0, false, "cmis:objectId", new String(), false); @@ -1085,21 +1907,41 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE cmis:lastModifiedBy IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE cmis:lastModifiedBy IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' = ANY cmis:lastModifiedBy", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' <> ANY cmis:lastModifiedBy", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' < ANY cmis:lastModifiedBy", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' <= ANY cmis:lastModifiedBy", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' > ANY cmis:lastModifiedBy", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' >= ANY cmis:lastModifiedBy", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' = ANY cmis:lastModifiedBy", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' <> ANY cmis:lastModifiedBy", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' < ANY cmis:lastModifiedBy", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' <= ANY cmis:lastModifiedBy", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' > ANY cmis:lastModifiedBy", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE 'System' >= ANY cmis:lastModifiedBy", 10, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE ANY cmis:lastModifiedBy IN ('System')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE ANY cmis:lastModifiedBy NOT IN ('System')", 0, false, "cmis:objectId", new String(), false); - - testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE ANY cmis:lastModifiedBy NOT IN ('System') order by cmis:lastModifiedBy", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE ANY cmis:lastModifiedBy IN ('System')", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE ANY cmis:lastModifiedBy NOT IN ('System')", 0, false, "cmis:objectId", new String(), true); + + testQuery("SELECT cmis:lastModifiedBy FROM cmis:document WHERE ANY cmis:lastModifiedBy NOT IN ('System') order by cmis:lastModifiedBy", 0, true, "cmis:objectId", + new String(), true); } public void test_CREATION_DATE() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:creationDate"); + Date value = DefaultTypeConverter.INSTANCE.convert(Date.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:creationDate"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + // By default we are only working to the day Calendar today = Calendar.getInstance(); @@ -1111,6 +1953,27 @@ public class QueryTest extends BaseCMISTest SimpleDateFormat df = CachingDateFormat.getDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", true); + Date cd0 = DefaultTypeConverter.INSTANCE.convert(Date.class, nodeService.getProperty(c0, ContentModel.PROP_CREATED)); + String cds0 = df.format(cd0); + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:creationDate = TIMESTAMP '" + cds0 + "' and cmis:objectId = '" + c0.toString() + "'", rootNodeRef + .getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:creationDate"); + Date value = DefaultTypeConverter.INSTANCE.convert(Date.class, sValue); + assertNotNull(value); + assertEquals(cd0, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:creationDate"); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + Date date = testQuery("SELECT cmis:creationDate FROM cmis:document", -1, false, "cmis:creationDate", new Date(), false); today.setTime(date); @@ -1135,23 +1998,24 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "') order by cmis:creationDate", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "') order by cmis:creationDate", 0, false, "cmis:objectId", + new String(), true); // using yesterday @@ -1171,21 +2035,21 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), true); // using tomorrow @@ -1205,25 +2069,62 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate LIKE '" + sDate + "'", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate NOT LIKE '" + sDate + "'", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:creationDate FROM cmis:document WHERE cmis:creationDate IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' = ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <> ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' < ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' <= ANY cmis:creationDate", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' > ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE '" + sDate + "' >= ANY cmis:creationDate", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate IN ('" + sDate + "')", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:creationDate FROM cmis:document WHERE ANY cmis:creationDate NOT IN ('" + sDate + "')", 10, false, "cmis:objectId", new String(), true); } public void test_CREATED_BY() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:createdBy"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:createdBy"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:document WHERE cmis:createdBy = 'System'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:createdBy"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("System", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:createdBy"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof DirectProperty); + } + rs.close(); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE cmis:createdBy = 'System'", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:createdBy FROM cmis:document WHERE cmis:createdBy <> 'System'", 0, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:createdBy FROM cmis:document WHERE cmis:createdBy < 'System'", 0, false, "cmis:objectId", new String(), false); @@ -1240,22 +2141,60 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:createdBy FROM cmis:document WHERE cmis:createdBy IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:createdBy FROM cmis:document WHERE cmis:createdBy IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' = ANY cmis:createdBy", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' <> ANY cmis:createdBy", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' < ANY cmis:createdBy", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' <= ANY cmis:createdBy", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' > ANY cmis:createdBy", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' >= ANY cmis:createdBy", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' = ANY cmis:createdBy", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' <> ANY cmis:createdBy", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' < ANY cmis:createdBy", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' <= ANY cmis:createdBy", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' > ANY cmis:createdBy", 0, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE 'System' >= ANY cmis:createdBy", 10, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE ANY cmis:createdBy IN ('System')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE ANY cmis:createdBy NOT IN ('System')", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE ANY cmis:createdBy IN ('System')", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE ANY cmis:createdBy NOT IN ('System')", 0, false, "cmis:objectId", new String(), true); + + testQuery("SELECT cmis:createdBy FROM cmis:document WHERE ANY cmis:createdBy IN ('System') order by cmis:createdBy", 10, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:createdBy FROM cmis:document WHERE ANY cmis:createdBy IN ('System') order by cmis:createdBy", 10, false, "cmis:objectId", new String(), false); - } public void test_OBJECT_TYPE_ID() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:objectTypeId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("cmis:document", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:objectTypeId"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ObjectTypeIdProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:folder", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(folder_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:objectTypeId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals("cmis:folder", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:objectTypeId"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ObjectTypeIdProperty); + } + rs.close(); + // DOC testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId = 'cmis:document'", 10, false, "cmis:objectId", new String(), false); @@ -1268,21 +2207,21 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId IN ('cmis:document')", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId NOT IN ('cmis:document')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId LIKE 'cmis:document'", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId NOT LIKE 'cmis:document'", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId LIKE 'cmis:document'", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId NOT LIKE 'cmis:document'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE cmis:objectTypeId IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' = ANY cmis:objectTypeId", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' <> ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' = ANY cmis:objectTypeId", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' <> ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' < ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' <= ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' > ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE 'cmis:document' >= ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE ANY cmis:objectTypeId IN ('cmis:document')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE ANY cmis:objectTypeId NOT IN ('cmis:document')", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE ANY cmis:objectTypeId IN ('cmis:document')", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectTypeId FROM cmis:document WHERE ANY cmis:objectTypeId NOT IN ('cmis:document')", 0, false, "cmis:objectId", new String(), true); // FOLDER @@ -1296,21 +2235,21 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId IN ('cmis:folder')", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId NOT IN ('cmis:folder')", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId LIKE 'cmis:folder'", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId NOT LIKE 'cmis:folder'", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId LIKE 'cmis:folder'", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId NOT LIKE 'cmis:folder'", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE cmis:objectTypeId IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' = ANY cmis:objectTypeId", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' <> ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' = ANY cmis:objectTypeId", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' <> ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' < ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' <= ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' > ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE 'cmis:folder' >= ANY cmis:objectTypeId", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE ANY cmis:objectTypeId IN ('cmis:folder')", 10, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE ANY cmis:objectTypeId NOT IN ('cmis:folder')", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE ANY cmis:objectTypeId IN ('cmis:folder')", 10, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectTypeId FROM cmis:folder WHERE ANY cmis:objectTypeId NOT IN ('cmis:folder')", 0, false, "cmis:objectId", new String(), true); // RELATIONSHIP @@ -1318,10 +2257,115 @@ public class QueryTest extends BaseCMISTest } + public void test_BASE_TYPE_ID() + { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:baseTypeId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals("cmis:document", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:baseTypeId"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof BaseTypeIdProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:folder", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(folder_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:baseTypeId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNull(value); + // assertEquals("cmis:folder", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:baseTypeId"); + assertNull(column); + // assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + // assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + // assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof BaseTypeIdProperty); + } + rs.close(); + + // DOC + + testQuery("SELECT cmis:baseTypeId FROM cmis:document", file_count, false, "cmis:baseTypeId", new String(), true); + testQuery("SELECT cmis:baseTypeId FROM cmis:document WHERE cmis:baseTypeId = 'cmis:document'", file_count, false, "cmis:baseTypeId", new String(), true); + testQuery("SELECT cmis:baseTypeId FROM cmis:folder", folder_count, false, "cmis:baseTypeId", new String(), true); + testQuery("SELECT cmis:baseTypeId FROM cmis:folder WHERE cmis:baseTypeId = 'cmis:folder'", folder_count, false, "cmis:baseTypeId", new String(), true); + + } + public void test_ObjectId() { + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(file_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:objectId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:objectId"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ObjectIdProperty); + } + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM cmis:folder", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(folder_count, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:objectId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + // assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:objectId"); + assertNotNull(column); + assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ObjectIdProperty); + } + rs.close(); + String companyHomeId = testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:name = 'Folder 0'", 1, false, "cmis:objectId", new String(), false); + options = new CMISQueryOptions("SELECT * FROM cmis:folder WHERE cmis:objectId = '" + companyHomeId + "'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("cmis:objectId"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertNotNull(value); + assertEquals(companyHomeId, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("cmis:objectId"); + assertEquals(CMISDataTypeEnum.ID, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + assertTrue(column.getCMISPropertyDefinition().getPropertyAccessor() instanceof ObjectIdProperty); + } + rs.close(); + Serializable ser = cmisService.getProperty(f0, CMISDictionaryModel.PROP_OBJECT_ID); String id = DefaultTypeConverter.INSTANCE.convert(String.class, ser); @@ -1337,8 +2381,8 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId IN ('" + companyHomeId + "')", 1, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId NOT IN ('" + companyHomeId + "')", 9, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId LIKE '" + companyHomeId + "'", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId NOT LIKE '" + companyHomeId + "'", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId LIKE '" + companyHomeId + "'", 1, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId NOT LIKE '" + companyHomeId + "'", 9, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE IN_FOLDER('" + companyHomeId + "')", 2, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE IN_TREE ('" + companyHomeId + "')", 6, false, "cmis:objectId", new String(), false); @@ -1346,99 +2390,407 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId IS NOT NULL", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE cmis:objectId IS NULL", 0, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' = ANY cmis:objectId", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' <> ANY cmis:objectId", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' = ANY cmis:objectId", 1, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' <> ANY cmis:objectId", 9, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' < ANY cmis:objectId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' <= ANY cmis:objectId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' > ANY cmis:objectId", 0, false, "cmis:objectId", new String(), true); testQuery("SELECT cmis:objectId FROM cmis:folder WHERE '" + companyHomeId + "' >= ANY cmis:objectId", 0, false, "cmis:objectId", new String(), true); - testQuery("SELECT cmis:objectId FROM cmis:folder WHERE ANY cmis:objectId IN ('" + companyHomeId + "')", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:objectId FROM cmis:folder WHERE ANY cmis:objectId NOT IN ('" + companyHomeId + "')", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT cmis:objectId FROM cmis:folder WHERE ANY cmis:objectId IN ('" + companyHomeId + "')", 1, false, "cmis:objectId", new String(), true); + testQuery("SELECT cmis:objectId FROM cmis:folder WHERE ANY cmis:objectId NOT IN ('" + companyHomeId + "')", 9, false, "cmis:objectId", new String(), true); } public void testOrderBy() { - CMISQueryOptions options = new CMISQueryOptions("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectId", rootNodeRef.getStoreRef()); - CMISResultSet rs = cmisQueryService.query(options); - assertEquals(folder_count, rs.getLength()); - for (CMISResultSetRow row : rs) - { - System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); - } - rs.close(); - rs = null; + testOrderBy("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectId", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectId"); + testOrderBy("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectTypeId", folder_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectTypeId"); + // testOrderBy("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectTypeId", folder_count, false, + // Order.ASCENDING, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS, + // "cmis:objectTypeId"); + testOrderBy("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectId ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectId"); + testOrderBy("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectId DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectId"); + testOrderBy("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectId DESC", folder_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectId"); - options = new CMISQueryOptions("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectId ASC", rootNodeRef.getStoreRef()); - rs = cmisQueryService.query(options); - assertEquals(folder_count, rs.getLength()); - for (CMISResultSetRow row : rs) - { - System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); - } - rs.close(); - rs = null; + testOrderBy("SELECT cmis:objectId Meep FROM cmis:folder ORDER BY Meep", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "Meep"); + testOrderBy("SELECT cmis:objectId Meep FROM cmis:folder ORDER BY cmis:objectId", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "Meep"); + testOrderBy("SELECT cmis:objectId Meep FROM cmis:folder ORDER BY Meep ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "Meep"); + testOrderBy("SELECT cmis:objectId Meep FROM cmis:folder ORDER BY Meep DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "Meep"); - options = new CMISQueryOptions("SELECT cmis:objectId FROM cmis:folder ORDER BY cmis:objectId DESC", rootNodeRef.getStoreRef()); - rs = cmisQueryService.query(options); - assertEquals(folder_count, rs.getLength()); - for (CMISResultSetRow row : rs) - { - System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); - } - rs.close(); - rs = null; - - options = new CMISQueryOptions("SELECT D.cmis:objectId FROM cmis:folder D ORDER BY D.cmis:objectId DESC", rootNodeRef.getStoreRef()); - rs = cmisQueryService.query(options); - assertEquals(folder_count, rs.getLength()); - for (CMISResultSetRow row : rs) - { - System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); - } - rs.close(); - rs = null; + testOrderBy("SELECT cmis:objectId FROM cmis:folder F ORDER BY F.cmis:objectId", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectId"); + testOrderBy("SELECT cmis:objectId FROM cmis:folder F ORDER BY cmis:objectId", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectId"); + testOrderBy("SELECT cmis:objectId FROM cmis:folder F ORDER BY F.cmis:objectId ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "F.cmis:objectId"); + testOrderBy("SELECT cmis:objectId FROM cmis:folder F ORDER BY F.cmis:objectId DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "F.cmis:objectId"); - options = new CMISQueryOptions("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder ORDER BY MEEP ASC", rootNodeRef.getStoreRef()); - rs = cmisQueryService.query(options); - assertEquals(folder_count, rs.getLength()); - for (CMISResultSetRow row : rs) - { - System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); - } - rs.close(); - rs = null; - - options = new CMISQueryOptions("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder ORDER BY MEEP ASC", rootNodeRef.getStoreRef()); - rs = cmisQueryService.query(options); - assertEquals(folder_count, rs.getLength()); - for (CMISResultSetRow row : rs) - { - System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); - } - rs.close(); - rs = null; + testOrderBy("SELECT F.cmis:objectId Meep FROM cmis:folder F ORDER BY Meep", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "Meep"); + testOrderBy("SELECT F.cmis:objectId Meep FROM cmis:folder F ORDER BY F.cmis:objectId", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "F.cmis:objectId"); + testOrderBy("SELECT F.cmis:objectId Meep FROM cmis:folder F ORDER BY cmis:objectId", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "F.cmis:objectId"); + testOrderBy("SELECT F.cmis:objectId Meep FROM cmis:folder F ORDER BY Meep ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectId"); + testOrderBy("SELECT F.cmis:objectId Meep FROM cmis:folder F ORDER BY Meep DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "Meep"); - options = new CMISQueryOptions("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder ORDER BY MEEP DESC", rootNodeRef.getStoreRef()); - rs = cmisQueryService.query(options); - assertEquals(folder_count, rs.getLength()); - for (CMISResultSetRow row : rs) - { - System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); - } - rs.close(); - rs = null; + testOrderBy("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:document where CONTAINS('*') ORDER BY MEEP", file_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "MEEP"); + testOrderBy("SELECT SCORE(), cmis:objectId FROM cmis:document where CONTAINS('*') ORDER BY SEARCH_SCORE", file_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "SEARCH_SCORE"); + testOrderBy("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:document where CONTAINS('*') ORDER BY MEEP ASC", file_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "MEEP"); + testOrderBy("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:document where CONTAINS('*') ORDER BY MEEP DESC", file_count, false, Order.DESCENDING, + CMISQueryMode.CMS_STRICT, "MEEP"); + + testOrderBy("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder where CONTAINS('cmis:name:*') ORDER BY MEEP", folder_count, false, Order.ASCENDING, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS, "MEEP"); + testOrderBy("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder where CONTAINS('cmis:name:*') ORDER BY MEEP ASC", folder_count, false, Order.ASCENDING, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS, "MEEP"); + testOrderBy("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder where CONTAINS('cmis:name:*') ORDER BY MEEP DESC", folder_count, false, Order.DESCENDING, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS, "MEEP"); + + // other orderable properties + + testOrderBy("SELECT cmis:objectTypeId FROM cmis:folder ORDER BY cmis:objectTypeId ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:objectTypeId"); + testOrderBy("SELECT cmis:objectTypeId FROM cmis:folder ORDER BY cmis:objectTypeId DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + "cmis:objectTypeId"); + // all are equal ... + testOrderBy("SELECT cmis:objectTypeId FROM cmis:folder ORDER BY cmis:objectTypeId ASC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + "cmis:objectTypeId"); + + testOrderBy("SELECT cmis:createdBy FROM cmis:folder ORDER BY cmis:createdBy ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:createdBy"); + testOrderBy("SELECT cmis:createdBy FROM cmis:folder ORDER BY cmis:createdBy DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "cmis:createdBy"); + // all are equal + testOrderBy("SELECT cmis:createdBy FROM cmis:folder ORDER BY cmis:createdBy ASC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "cmis:createdBy"); + + testOrderBy("SELECT cmis:creationDate FROM cmis:folder ORDER BY cmis:creationDate ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:creationDate"); + testOrderBy("SELECT cmis:creationDate FROM cmis:folder ORDER BY cmis:creationDate DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + "cmis:creationDate"); + testOrderBy("SELECT cmis:creationDate FROM cmis:folder ORDER BY cmis:creationDate DESC", folder_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:creationDate"); + + testOrderBy("SELECT cmis:lastModifiedBy FROM cmis:folder ORDER BY cmis:lastModifiedBy ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "cmis:lastModifiedBy"); + testOrderBy("SELECT cmis:lastModifiedBy FROM cmis:folder ORDER BY cmis:lastModifiedBy DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + "cmis:lastModifiedBy"); + // all equals .. + testOrderBy("SELECT cmis:lastModifiedBy FROM cmis:folder ORDER BY cmis:lastModifiedBy DESC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "cmis:lastModifiedBy"); + + testOrderBy("SELECT cmis:lastModificationDate FROM cmis:folder ORDER BY cmis:lastModificationDate ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "cmis:lastModificationDate"); + testOrderBy("SELECT cmis:lastModificationDate FROM cmis:folder ORDER BY cmis:lastModificationDate DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + "cmis:lastModificationDate"); + testOrderBy("SELECT cmis:lastModificationDate FROM cmis:folder ORDER BY cmis:lastModificationDate DESC", folder_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "cmis:lastModificationDate"); + + testOrderBy("SELECT cmis:name FROM cmis:folder ORDER BY cmis:name ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:name"); + testOrderBy("SELECT cmis:name FROM cmis:folder ORDER BY cmis:name DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "cmis:name"); + testOrderBy("SELECT cmis:name FROM cmis:folder ORDER BY cmis:name DESC", folder_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:name"); + + // version label is not orderable as indexed and tokenised + testOrderBy("SELECT cmis:versionLabel FROM cmis:document ORDER BY cmis:versionLabel ASC", file_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:versionLabel"); + testOrderBy("SELECT cmis:versionLabel FROM cmis:document ORDER BY cmis:versionLabel DESC", file_count, true, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + "cmis:versionLabel"); + testOrderBy("SELECT cmis:versionLabel FROM cmis:document ORDER BY cmis:versionLabel DESC", file_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:versionLabel"); + + // cmis:contentStreamFileName is not orderable as indexed and tokenised + testOrderBy("SELECT cmis:contentStreamFileName FROM cmis:document ORDER BY cmis:contentStreamFileName ASC", file_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "cmis:contentStreamFileName"); + testOrderBy("SELECT cmis:contentStreamFileName FROM cmis:document ORDER BY cmis:contentStreamFileName DESC", file_count, true, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + "cmis:contentStreamFileName"); + testOrderBy("SELECT cmis:contentStreamFileName FROM cmis:document ORDER BY cmis:contentStreamFileName DESC", file_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + "cmis:contentStreamFileName"); + + testOrderBy("SELECT cmis:parentId FROM cmis:folder ORDER BY cmis:parentId ASC", folder_count, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:parentId"); + testOrderBy("SELECT cmis:parentId FROM cmis:folder ORDER BY cmis:parentId DESC", folder_count, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, "cmis:parentId"); + testOrderBy("SELECT cmis:parentId FROM cmis:folder ORDER BY cmis:parentId DESC", folder_count, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, "cmis:parentId"); + + testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE CONTAINS('cmis:name:*') AND cmis:name = 'compan home') ORDER BY SCORE() DESC", 1, false, + "cmis:objectId", new String(), true); + testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE CONTAINS('cmis:name:*') AND cmis:name IN ('company', 'home') ORDER BY MEEEP DESC", 1, false, + "cmis:objectId", new String(), true); + testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE CONTAINS('cmis:name:*') AND cmis:name IN ('company', 'home') ORDER BY cmis:parentId DESC", 1, + false, "cmis:objectId", new String(), true); + testExtendedQuery("SELECT SCORE() AS MEEP, cmis:objectId, cmis:parentId FROM cmis:folder WHERE CONTAINS('cmis:name:*') ORDER BY cmis:parentId DESC", folder_count, false, + "cmis:objectId", new String(), false); + testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE CONTAINS('cmis:name:*') AND cmis:name IN ('company', 'home') ORDER BY cmis:notThere DESC", 1, + false, "cmis:objectId", new String(), true); + testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder as F WHERE CONTAINS('cmis:name:*') AND cmis:name IN ('company', 'home') ORDER BY F.cmis:parentId DESC", + 1, false, "cmis:objectId", new String(), true); + testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder F WHERE CONTAINS('cmis:name:*') AND cmis:name IN ('company', 'home') ORDER BY F.cmis:notThere DESC", 1, + false, "cmis:objectId", new String(), true); - testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE cmis:name = 'compan home') ORDER BY SCORE() DESC", 1, false, "cmis:objectId", new String(), true); - testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE cmis:name IN ('company', 'home') ORDER BY MEEEP DESC", 1, false, "cmis:objectId", new String(), true); - testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE cmis:name IN ('company', 'home') ORDER BY cmis:parentId DESC", 1, false, "cmis:objectId", new String(), true); - testQuery("SELECT SCORE() AS MEEP, cmis:objectId, cmis:parentId FROM cmis:folder ORDER BY cmis:parentId DESC", folder_count, false, "cmis:objectId", new String(), false); - testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder WHERE cmis:name IN ('company', 'home') ORDER BY cmis:notThere DESC", 1, false, "cmis:objectId", new String(), true); - testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder as F WHERE cmis:name IN ('company', 'home') ORDER BY F.cmis:parentId DESC", 1, false, "cmis:objectId", new String(), true); - testQuery("SELECT SCORE() AS MEEP, cmis:objectId FROM cmis:folder F WHERE cmis:name IN ('company', 'home') ORDER BY F.cmis:notThere DESC", 1, false, "cmis:objectId", new String(), true); - } - + + private void testOrderBy(String query, int size, boolean shouldThrow, Order order, CMISQueryMode mode, String... orderByPropertyName) + { + CMISResultSet rs = null; + try + { + CMISQueryOptions options = new CMISQueryOptions(query, rootNodeRef.getStoreRef()); + options.setQueryMode(mode); + rs = cmisQueryService.query(options); + Comparable[] previous = null; + boolean[] wasNull = null; + boolean[] hasValue = null; + + for (CMISResultSetRow row : rs) + { + if (previous == null) + { + previous = new Comparable[orderByPropertyName.length]; + wasNull = new boolean[orderByPropertyName.length]; + hasValue = new boolean[orderByPropertyName.length]; + for (int i = 0; i < orderByPropertyName.length; i++) + { + Serializable sValue = row.getValue(orderByPropertyName[i]); + if (sValue instanceof Comparable) + { + Comparable comparable = (Comparable) sValue; + previous[i] = comparable; + hasValue[i] = true; + } + else + { + previous[i] = null; + wasNull[i] = true; + } + + } + } + // if (row.getIndex() == 0) + // { + // Serializable sValue = row.getValue(returnPropertyName); + // returnValue = (T) DefaultTypeConverter.INSTANCE.convert(returnType.getClass(), sValue); + // + // } + else + { + for (int i = 0; i < orderByPropertyName.length; i++) + { + Serializable current = row.getValue(orderByPropertyName[i]); + Comparable last = previous[i]; + + if (last != null) + { + if (current == null) + { + switch (order) + { + case ASCENDING: + if (shouldThrow) + { + throw new IllegalStateException("Incorrect Order"); + } + else + { + fail("Null found after value ascending"); + } + case DESCENDING: + // OK + break; + default: + throw new UnsupportedOperationException(); + } + } + + Method ct = null; + Method[] methods = last.getClass().getMethods(); + for (int m = 0; m < methods.length; m++) + { + if (methods[m].getName().equals("compareTo") + && (methods[m].getParameterTypes().length == 1) && (methods[m].getParameterTypes()[0].equals(methods[m].getDeclaringClass()))) + { + if (ct != null) + { + throw new IllegalStateException("Found 2 or more compareTo methods"); + } + ct = methods[m]; + } + } + + int comparison = (Integer) ct.invoke(last, current); + switch (order) + { + case ASCENDING: + if (comparison <= 0) + { // as expected + break; + } + else + { + if (shouldThrow) + { + throw new IllegalStateException("Incorrect Order"); + } + else + { + fail("Incorrect Order"); + } + } + case DESCENDING: + if (comparison >= 0) + { // as expected + break; + } + else + { + if (shouldThrow) + { + throw new IllegalStateException("Incorrect Order"); + } + else + { + fail("Incorrect Order"); + } + } + default: + throw new UnsupportedOperationException("Column data type is not comparable " + orderByPropertyName[i]); + } + } + else + { + if (current != null) + { + switch (order) + { + case ASCENDING: + // OK + break; + case DESCENDING: + if (shouldThrow) + { + throw new IllegalStateException("Incorrect Order"); + } + else + { + fail("Null found descending"); + } + default: + throw new UnsupportedOperationException(); + } + } + } + + } + for (int i = 0; i < orderByPropertyName.length; i++) + { + Serializable sValue = row.getValue(orderByPropertyName[i]); + if (sValue instanceof Comparable) + { + Comparable comparable = (Comparable) sValue; + previous[i] = comparable; + hasValue[i] = true; + } + else + { + previous[i] = null; + wasNull[i] = true; + } + + } + } + + } + for (int i = 0; i < hasValue.length; i++) + { + if (!hasValue[i]) + { + throw new UnsupportedOperationException("Only nulls found for " + orderByPropertyName[i]); + } + } + if (size >= 0) + { + assertEquals(size, rs.getLength()); + } + if (shouldThrow) + { + fail("Should have thrown an exception"); + } + + } + catch (CMISQueryException e) + { + if (shouldThrow) + { + return; + } + else + { + throw e; + } + } + catch (QueryModelException e) + { + if (shouldThrow) + { + return; + } + else + { + throw e; + } + } + catch (FTSQueryException e) + { + if (shouldThrow) + { + return; + } + else + { + throw e; + } + } + catch (UnsupportedOperationException e) + { + if (shouldThrow) + { + return; + } + else + { + throw e; + } + } + catch (IllegalArgumentException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch (IllegalAccessException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch (InvocationTargetException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + catch (IllegalStateException e) + { + if (shouldThrow) + { + return; + } + else + { + throw e; + } + } + finally + { + if (rs != null) + { + try + { + rs.close(); + } + finally + { + rs = null; + } + } + } + + } + public void testUpperAndLower() { testExtendedQuery("SELECT * FROM cmis:folder WHERE cmis:name = 'Folder 1'", 1, false, "cmis:objectId", new String(), false); @@ -1450,22 +2802,24 @@ public class QueryTest extends BaseCMISTest testExtendedQuery("SELECT * FROM cmis:folder WHERE Lower(cmis:name) = 'FOLDER 1'", 0, false, "cmis:objectId", new String(), false); testExtendedQuery("SELECT * FROM cmis:folder WHERE Upper(cmis:name) = 'Folder 1'", 0, false, "cmis:objectId", new String(), false); testExtendedQuery("SELECT * FROM cmis:folder WHERE Lower(cmis:name) = 'Folder 1'", 0, false, "cmis:objectId", new String(), false); - + testExtendedQuery("SELECT * FROM cmis:folder WHERE Upper(cmis:name) <> 'FOLDER 1'", 9, false, "cmis:objectId", new String(), false); - + testExtendedQuery("SELECT * FROM cmis:folder WHERE Upper(cmis:name) <= 'FOLDER 1'", 2, false, "cmis:objectId", new String(), false); testExtendedQuery("SELECT * FROM cmis:folder WHERE Upper(cmis:name) < 'FOLDER 1'", 1, false, "cmis:objectId", new String(), false); testExtendedQuery("SELECT * FROM cmis:folder WHERE Upper(cmis:name) >= 'FOLDER 1'", 9, false, "cmis:objectId", new String(), false); testExtendedQuery("SELECT * FROM cmis:folder WHERE Upper(cmis:name) > 'FOLDER 1'", 8, false, "cmis:objectId", new String(), false); - + testQuery("SELECT * FROM cmis:folder WHERE Upper(cmis:name) > 'FOLDER 1'", 8, false, "cmis:objectId", new String(), true); } public void testAllSimpleTextPredicates() { testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder 1'", 1, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder 9'", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name = 'Folder 9\\''", 1, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND NOT cmis:name = 'Folder 1'", 9, false, "cmis:objectId", new String(), false); - testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND 'Folder 1' = ANY cmis:name", 1, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND 'Folder 1' = ANY cmis:name", 1, false, "cmis:objectId", new String(), true); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND NOT cmis:name <> 'Folder 1'", 1, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name <> 'Folder 1'", 9, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name < 'Folder 1'", 1, false, "cmis:objectId", new String(), false); @@ -1473,9 +2827,9 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name > 'Folder 1'", 8, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name >= 'Folder 1'", 9, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name IN ('Folder 1', '1')", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT IN ('Folder 1', 'Folder 9')", 8, false, "cmis:objectId", new String(), false); - testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND ANY cmis:name IN ('Folder 1', 'Folder 9')", 2, false, "cmis:objectId", new String(), false); - testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND ANY cmis:name NOT IN ('2', '3')", 10, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT IN ('Folder 1', 'Folder 9\\'')", 8, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND ANY cmis:name IN ('Folder 1', 'Folder 9\\'')", 2, false, "cmis:objectId", new String(), true); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND ANY cmis:name NOT IN ('2', '3')", 10, false, "cmis:objectId", new String(), true); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'Folder 1'", 1, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'Fol%'", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'F_l_e_ 1'", 1, false, "cmis:objectId", new String(), false); @@ -1483,8 +2837,8 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'F_l_e_ %'", 10, false, "cmis:objectId", new String(), false); testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT LIKE 'F_l_e_ %'", 0, false, "cmis:objectId", new String(), false); // TODO: Fix below which fail?? - //testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'F_l_e_ _'", 10, false, "cmis:objectId", new String(), false); - //testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT LIKE 'F_l_e_ _'", 0, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name LIKE 'F_l_e_ _'", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL AND cmis:name NOT LIKE 'F_l_e_ _'", 1, false, "cmis:objectId", new String(), false); } public void testSimpleConjunction() @@ -1500,6 +2854,19 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT * FROM cmis:folder WHERE cmis:name = 'Folder 1' OR cmis:name = 'Folder 2'", 2, false, "cmis:objectId", new String(), false); } + /** + * In strict mode you should not be able to refer to aspect properties direct from the type + */ + public void testPropertyToSelectorBinding() + { + testQuery("SELECT cmis:parentId FROM cmis:document", 10, false, "cmis:objectId", new String(), true, CMISQueryMode.CMS_STRICT); + testQuery("SELECT * FROM cmis:document where cmis:parentId <> 'woof://woof/woof'", 10, false, "cmis:objectId", new String(), true, CMISQueryMode.CMS_STRICT); + testQuery("SELECT D.*, O.cmis:name FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId", 1, false, "cmis:objectId", new String(), true, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT * FROM cmis:document order by cmis:parentId", 10, false, "cmis:objectId", new String(), true, CMISQueryMode.CMS_STRICT); + testQuery("SELECT * FROM cmis:document where CONTAINS('cmis:parentId:*')", 10, false, "cmis:objectId", new String(), true, CMISQueryMode.CMS_STRICT); + } + public void testExists() { testQuery("SELECT * FROM cmis:folder WHERE cmis:name IS NOT NULL", 10, false, "cmis:objectId", new String(), false); @@ -1535,6 +2902,15 @@ public class QueryTest extends BaseCMISTest String id = DefaultTypeConverter.INSTANCE.convert(String.class, ser); testQuery("SELECT * FROM cmis:folder WHERE IN_TREE('" + id + "')", 6, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder F WHERE IN_TREE(F, '" + id + "')", 6, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder X WHERE IN_TREE(F, '" + id + "')", 6, false, "cmis:objectId", new String(), true); + + testQuery("SELECT D.*, O.* FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId WHERE IN_TREE(D, '" + id + "')", 1, false, "cmis:objectId", + new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT D.*, O.* FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId WHERE IN_TREE('" + id + "')", 1, false, "cmis:objectId", + new String(), true, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + + testQuery("SELECT * FROM cmis:folder WHERE IN_TREE('woof://woof/woof')", 6, false, "cmis:objectId", new String(), true); } public void test_IN_FOLDER() @@ -1543,15 +2919,67 @@ public class QueryTest extends BaseCMISTest String id = DefaultTypeConverter.INSTANCE.convert(String.class, ser); testQuery("SELECT * FROM cmis:folder WHERE IN_FOLDER('" + id + "')", 2, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder F WHERE IN_FOLDER(F, '" + id + "')", 2, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:folder X WHERE IN_FOLDER(F, '" + id + "')", 2, false, "cmis:objectId", new String(), true); + + testQuery("SELECT D.*, O.* FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId WHERE IN_FOLDER(D, '" + id + "')", 1, false, "cmis:objectId", + new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT D.*, O.* FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId WHERE IN_FOLDER('" + id + "')", 1, false, "cmis:objectId", + new String(), true, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + + // TODO: Id + label is indistinguishable from label and so is never hit in the coes at the moment + // testQuery("SELECT * FROM cmis:folder WHERE IN_FOLDER('woof://woof/woof;woof')", 2, false, "cmis:objectId", + // new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE IN_FOLDER('woof://woof/woof')", 2, false, "cmis:objectId", new String(), true); } public void testFTS() { - testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\"zebra\"')", 9, false, "cmis:objectId", new String(), false); - testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\"quick\"')", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT * FROM cmis:document WHERE CONTAINS('TEXT:\"quick\"')", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT * FROM cmis:document D WHERE CONTAINS(D, 'cmis:name:\"Tutorial\"')", 1, false, "cmis:objectId", new String(), false); - testQuery("SELECT cmis:name as BOO FROM cmis:document D WHERE CONTAINS('BOO:\"Tutorial\"')", 1, false, "cmis:objectId", new String(), false); + testQuery("SELECT SCORE(), D.* FROM cmis:document D WHERE D.cmis:contentStreamFileName = 'zebra'", 9, false, "cmis:objectId", new String(), true); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'zebra\\'') AND CONTAINS('\\'quick\\'')", 9, false, "cmis:objectId", new String(), true); + testQuery("SELECT SCORE()as ONE, SCORE()as TWO, D.* FROM cmis:document D WHERE CONTAINS('\\'zebra\\'')", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'zebra\\'')", 9, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'quick\\'')", 1, false, "cmis:objectId", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'quick\\'')", 1, false, "cmis:objectId", new String(), false); + testExtendedQuery("SELECT * FROM cmis:document D WHERE CONTAINS(D, 'cmis:name:\\'Tutorial\\'')", 1, false, "cmis:objectId", new String(), false); + testExtendedQuery("SELECT cmis:name as BOO FROM cmis:document D WHERE CONTAINS('BOO:\\'Tutorial\\'')", 1, false, "cmis:objectId", new String(), false); + } + + public void testScoreValues() + { + + CMISQueryOptions options = new CMISQueryOptions("SELECT SCORE() AS ONE FROM cmis:document WHERE CONTAINS('cmis:name:\\'DD\\' and \\'Four\\'') AND cmis:name = 'DD\\''", + rootNodeRef.getStoreRef()); + options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.getLength()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); + assertEquals(1.0f, row.getScore()); + } + rs.close(); + rs = null; + + options = new CMISQueryOptions("SELECT SCORE() AS ONE FROM cmis:document WHERE CONTAINS('\\'Four zebra durian\\'')", rootNodeRef.getStoreRef()); + rs = cmisQueryService.query(options); + assertEquals(1, rs.getLength()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; + + options = new CMISQueryOptions("SELECT SCORE() AS ONE FROM cmis:document WHERE CONTAINS('\\'Zebra\\'')", rootNodeRef.getStoreRef()); + rs = cmisQueryService.query(options); + assertEquals(9, rs.getLength()); + for (CMISResultSetRow row : rs) + { + System.out.println(row.getValue("cmis:objectId") + " Score " + row.getScore() + " " + row.getScores()); + } + rs.close(); + rs = null; } public void testBasicSelectAsGuest() @@ -1560,7 +2988,7 @@ public class QueryTest extends BaseCMISTest testQuery("SELECT * FROM cmis:document", 0, false, "cmis:objectId", new String(), false); } - + public void testBasicSelectAsCmis() { runAs("cmis"); @@ -1581,9 +3009,9 @@ public class QueryTest extends BaseCMISTest assertNotNull(md.getQueryOptions()); CMISTypeDefinition typeDef = cmisDictionaryService.findType(CMISDictionaryModel.DOCUMENT_TYPE_ID); int count = 0; - for(CMISPropertyDefinition pdef : typeDef.getPropertyDefinitions().values()) + for (CMISPropertyDefinition pdef : typeDef.getPropertyDefinitions().values()) { - if(pdef.isQueryable()) + if (pdef.isQueryable()) { count++; } @@ -1753,13 +3181,31 @@ public class QueryTest extends BaseCMISTest query = "SELECT D.*, T.* FROM CM_TITLED T JOIN DOCUMENT D ON D.OBJECTID = T.OBJECTID"; parse(query); } - + public void testParse7() throws RecognitionException { String query = "SELECT * from DOCUMENT D JOIN DOCUMENT DD ON D.ID = DD.ID "; parse(query); - } - + } + + public void testParse8() throws RecognitionException + { + String query = "SELECT * from ((FOLDER F JOIN RELATIONSHIP RL ON F.ID = RL.ID))"; + parse(query); + } + + public void testDateFormattingErrors() + { + testQuery("SELECT * FROM cm:lockable L WHERE L.cm:expiryDate = TIMESTAMP '2012-12-12T12:12:12.012Z'", 1, false, "cmis:objectId", new String(), false, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT * FROM cm:lockable L WHERE L.cm:expiryDate = TIMESTAMP '2012-012-12T12:12:12.012Z'", 1, false, "cmis:objectId", new String(), false, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT * FROM cm:lockable L WHERE L.cm:expiryDate = TIMESTAMP '2012-2-12T12:12:12.012Z'", 0, false, "cmis:objectId", new String(), false, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT * FROM cm:lockable L WHERE L.cm:expiryDate = TIMESTAMP 'Mon Dec 12 12:12:12.012 GMT 2012'", 1, false, "cmis:objectId", new String(), true, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + } + public void testAspectProperties() { CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM CM:OWNABLE O", rootNodeRef.getStoreRef()); @@ -1785,9 +3231,9 @@ public class QueryTest extends BaseCMISTest public void testAspectJoin() { testQuery( - "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN CMIS:DOCUMENT AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, '\"jumped\"') and D.cmis:contentStreamLength <> 2", + "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN CMIS:DOCUMENT AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, '\\'jumped\\'') and D.cmis:contentStreamLength <> 2", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); - + testQuery("SELECT * FROM CM:OWNABLE", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery("SELECT * FROM CM:OWNABLE where CM:oWNER = 'andy'", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery("SELECT * FROM CM:OWNABLE where CM:OWNER = 'bob'", 0, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); @@ -1795,8 +3241,9 @@ public class QueryTest extends BaseCMISTest CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery("SELECT D.*, O.* FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); - testQuery("SELECT D.*, O.*, T.* FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId JOIN CM:TITLED AS T ON T.cmis:objectId = D.cmis:objectId", 1, false, "cmis:objectId", - new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery( + "SELECT D.*, O.*, T.* FROM CMIS:DOCUMENT AS D JOIN CM:OWNABLE AS O ON D.cmis:objectId = O.cmis:objectId JOIN CM:TITLED AS T ON T.cmis:objectId = D.cmis:objectId", + 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery("SELECT D.*, O.* FROM CM:OWNABLE O JOIN CMIS:DOCUMENT D ON D.cmis:objectId = O.cmis:objectId", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery("SELECT D.*, F.* FROM CMIS:FOLDER F JOIN CMIS:DOCUMENT D ON D.cmis:objectId = F.cmis:objectId", 0, false, "cmis:objectId", new String(), false, @@ -1809,10 +3256,10 @@ public class QueryTest extends BaseCMISTest CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery("select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId )", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); - testQuery("select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN CMIS:DOCUMENT AS D ON D.cmis:objectId = o.cmis:objectId )", 1, false, "cmis:objectId", - new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN CMIS:DOCUMENT AS D ON D.cmis:objectId = o.cmis:objectId )", 1, + false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery( - "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN CMIS:DOCUMENT AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, '\"jumped\"') and D.cmis:contentStreamLength <> 2", + "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN CMIS:DOCUMENT AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, '\\'jumped\\'') and D.cmis:contentStreamLength <> 2", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); testQuery( "select o.*, t.* from ( cm:ownable o join cm:titled t on o.cmis:objectId = t.cmis:objectId JOIN CMIS:DOCUMENT AS D ON D.cmis:objectId = o.cmis:objectId ) where o.cm:owner = 'andy' and t.cm:title = 'Alfresco tutorial' and CONTAINS(D, 'jumped') and D.cmis:contentStreamLength <> 2", @@ -1837,7 +3284,7 @@ public class QueryTest extends BaseCMISTest for (int skip = 0; skip < 20; skip++) { - for(int max = 0; max < 20; max++) + for (int max = 0; max < 20; max++) { doPage(expected, skip, max); } @@ -1847,21 +3294,25 @@ public class QueryTest extends BaseCMISTest public void testFTSConnectives() { - testQuery("SELECT * FROM cmis:document where contains('\"one\" and \"zebra\"')", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_STRICT); - testQuery("SELECT * FROM cmis:document where contains('\"one\" or \"zebra\"')", 9, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_STRICT); - testQuery("SELECT * FROM cmis:document where contains('\"one\" \"zebra\"')", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_STRICT); - testQuery("SELECT * FROM cmis:document where contains('\"one\" and \"zebra\"')", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); - testQuery("SELECT * FROM cmis:document where contains('\"one\" or \"zebra\"')", 9, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); - testQuery("SELECT * FROM cmis:document where contains('\"one\" \"zebra\"')", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT * FROM cmis:document where contains('\\'one\\' or \\'zebra\\'')", 9, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_STRICT); + testQuery("SELECT * FROM cmis:document where contains('\\'one\\' \\'zebra\\'')", 1, false, "cmis:objectId", new String(), false, CMISQueryMode.CMS_STRICT); + testQuery("SELECT * FROM cmis:document where contains('\\'one\\' and \\'zebra\\'')", 1, false, "cmis:objectId", new String(), false, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT * FROM cmis:document where contains('\\'one\\' or \\'zebra\\'')", 9, false, "cmis:objectId", new String(), false, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); + testQuery("SELECT * FROM cmis:document where contains('\\'one\\' \\'zebra\\'')", 1, false, "cmis:objectId", new String(), false, + CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); - CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document where contains('\"one\" \"zebra\"')", rootNodeRef.getStoreRef()); + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:document where contains('\\'one\\' \\'zebra\\'')", rootNodeRef.getStoreRef()); + // options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); options.setDefaultFTSConnective(Connective.OR); options.setDefaultFTSFieldConnective(Connective.OR); CMISResultSet rs = cmisQueryService.query(options); assertEquals(1, rs.length()); rs.close(); - - options = new CMISQueryOptions("SELECT * FROM cmis:document where contains('\"one\" \"zebra\"')", rootNodeRef.getStoreRef()); + + options = new CMISQueryOptions("SELECT * FROM cmis:document where contains('\\'one\\' \\'zebra\\'')", rootNodeRef.getStoreRef()); + options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); options.setDefaultFTSConnective(Connective.OR); options.setDefaultFTSFieldConnective(Connective.OR); options.setQueryMode(CMISQueryMode.CMS_WITH_ALFRESCO_EXTENSIONS); @@ -1869,32 +3320,2053 @@ public class QueryTest extends BaseCMISTest assertEquals(9, rs.length()); rs.close(); } - + + public void testLikeEscaping() + { + // TODO: + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco Tutorial'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco Tutoria_'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T_______'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T______\\_'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'Alfresco T\\%'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'GG*GG'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '__*__'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '%*%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'HH?HH'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '__?__'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE '%?%'", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'AA%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'AA\\%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'A%'", 2, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'a%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'A\\%'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'BB_'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'BB\\_'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'B__'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'B_\\_'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'B\\_\\_'", 0, false, "cmis:name", new String(), false); + + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'CC\\\\'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT cmis:name FROM cmis:document WHERE cmis:name LIKE 'DD\\''", 1, false, "cmis:name", new String(), false); + } + + public void testColumnAliasUse() + { + testQuery("SELECT cmis:name as myname FROM cmis:document WHERE myname LIKE 'Alfresco Tutorial'", 1, false, "myname", new String(), false); + testQuery("SELECT cmis:name as myname FROM cmis:document WHERE myname LIKE 'A%' order by myname", 2, false, "cmis:name", new String(), false); + testExtendedQuery("SELECT SCORE() as myscore, D.cmis:name as myname FROM cmis:document D WHERE CONTAINS(D, 'myname:\\'Tutorial\\'') order by myscore", 1, false, + "cmis:objectId", new String(), false); + testExtendedQuery("SELECT SCORE() as myscore, D.cmis:name FROM cmis:document D WHERE CONTAINS(D, 'cmis:name:\\'Tutorial\\'') and myscore > 0.5 order by myscore", 9, false, + "cmis:objectId", new String(), true); + + } + private void doPage(List expected, int skip, int max) { CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM cmis:folder", rootNodeRef.getStoreRef()); options.setSkipCount(skip); options.setMaxItems(max); CMISResultSet rs = cmisQueryService.query(options); - assertEquals("Skip = "+skip+ " max = "+max, skip+max > 10 ? 10 - skip : max, rs.getLength()); - assertEquals("Skip = "+skip+ " max = "+max, (skip+max) < 10, rs.hasMore()); - assertEquals("Skip = "+skip+ " max = "+max, skip, rs.getStart()); + assertEquals("Skip = " + skip + " max = " + max, skip + max > 10 ? 10 - skip : max, rs.getLength()); + assertEquals("Skip = " + skip + " max = " + max, (skip + max) < 10, rs.hasMore()); + assertEquals("Skip = " + skip + " max = " + max, skip, rs.getStart()); int actualPosition = skip; for (CMISResultSetRow row : rs) { Serializable sValue = row.getValue("cmis:objectId"); String id = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); - assertEquals("Skip = "+skip+ " max = "+max+" actual = "+actualPosition, expected.get(actualPosition), id); + assertEquals("Skip = " + skip + " max = " + max + " actual = " + actualPosition, expected.get(actualPosition), id); actualPosition++; } } - private void parse(String query) throws RecognitionException + private CommonTree parse(String query) throws RecognitionException { CharStream cs = new ANTLRStringStream(query); CMISLexer lexer = new CMISLexer(cs); CommonTokenStream tokens = new CommonTokenStream(lexer); CMISParser parser = new CMISParser(tokens); CommonTree queryNode = (CommonTree) parser.query().getTree(); + return queryNode; + } + + public void test_d_text() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleTextBoth"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertEquals("Un tokenised", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleTextBoth"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:singleTextUntokenised"); + value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertEquals("Un tokenised", value); + column = rs.getResultSetMetaData().getColumn("test:singleTextUntokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:singleTextTokenised"); + value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertEquals("Un tokenised", value); + column = rs.getResultSetMetaData().getColumn("test:singleTextTokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleTextBoth"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(String.class, sValue); + assertEquals(2, collection.size()); + String[] members = new String[2]; + members = collection.toArray(members); + assertEquals("Un tokenised", members[0]); + assertEquals("two parts", members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleTextBoth"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleTextUntokenised"); + assert (sValue instanceof Collection); + collection = DefaultTypeConverter.INSTANCE.getCollection(String.class, sValue); + assertEquals(2, collection.size()); + members = new String[2]; + members = collection.toArray(members); + assertEquals("Un tokenised", members[0]); + assertEquals("two parts", members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleTextUntokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleTextTokenised"); + assert (sValue instanceof Collection); + collection = DefaultTypeConverter.INSTANCE.getCollection(String.class, sValue); + assertEquals(2, collection.size()); + members = new String[2]; + members = collection.toArray(members); + assertEquals("Un tokenised", members[0]); + assertEquals("two parts", members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleTextTokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // d:text single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextBoth = 'Un tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextBoth <> 'tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextBoth LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextBoth NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextBoth IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextBoth NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'Un tokenised' = ANY test:singleTextBoth ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleTextBoth IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleTextBoth NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextUntokenised = 'Un tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextUntokenised <> 'tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextUntokenised LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextUntokenised NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextUntokenised IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextUntokenised NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'Un tokenised' = ANY test:singleTextUntokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleTextUntokenised IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleTextUntokenised NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextTokenised = 'tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextTokenised <> 'tokenized'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextTokenised LIKE 'to%sed'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextTokenised NOT LIKE 'Ut__eniz%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextTokenised IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleTextTokenised NOT IN ('tokenized')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'tokenised' = ANY test:singleTextTokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleTextTokenised IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleTextTokenised NOT IN ('tokenized')", 1, false, "cmis:name", new String(), true); + + // d:text single by alias + + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE alias = 'Un tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE alias <> 'tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE alias LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE alias NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE 'Un tokenised' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE ANY alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:singleTextBoth as alias FROM test:extendedContent as T WHERE ANY alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE alias = 'Un tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE alias <> 'tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE alias LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE alias NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), + false); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE 'Un tokenised' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE ANY alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), + true); + testQuery("SELECT T.test:singleTextUntokenised as alias FROM test:extendedContent as T WHERE ANY alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE alias = 'tokenised'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE alias <> 'tokenized'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE alias LIKE 'to%sed'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE alias NOT LIKE 'Ut__eniz%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE alias IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE alias NOT IN ('tokenized')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE 'tokenised' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE ANY alias IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleTextTokenised as alias FROM test:extendedContent WHERE ANY alias NOT IN ('tokenized')", 1, false, "cmis:name", new String(), true); + + // d:text multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextBoth = 'Un tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextBoth <> 'tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextBoth LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextBoth NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextBoth IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextBoth NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'Un tokenised' = ANY test:multipleTextBoth ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleTextBoth IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleTextBoth NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextUntokenised = 'Un tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextUntokenised <> 'tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextUntokenised LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextUntokenised NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextUntokenised IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextUntokenised NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'Un tokenised' = ANY test:multipleTextUntokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleTextUntokenised IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleTextUntokenised NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextTokenised = 'tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextTokenised <> 'tokenized'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextTokenised LIKE 'to%sed'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextTokenised NOT LIKE 'Ut__eniz%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextTokenised IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleTextTokenised NOT IN ('tokenized')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'tokenised' = ANY test:multipleTextTokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleTextTokenised IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleTextTokenised NOT IN ('tokenized')", 1, false, "cmis:name", new String(), false); + + // d:text multiple by alias + + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE alias = 'Un tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE alias <> 'tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE alias LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE alias NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE 'Un tokenised' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE ANY alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleTextBoth as alias FROM test:extendedContent WHERE ANY alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE alias = 'Un tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE alias <> 'tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE alias LIKE 'U_ to%sed'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE alias NOT LIKE 't__eni%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE 'Un tokenised' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE ANY alias IN ('Un tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleTextUntokenised alias FROM test:extendedContent WHERE ANY alias NOT IN ('Un tokenized')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE alias = 'tokenised'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE alias <> 'tokenized'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE alias LIKE 'to%sed'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE alias NOT LIKE 'Ut__eniz%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE alias IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE alias NOT IN ('tokenized')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE 'tokenised' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE ANY alias IN ('tokenised', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT T.test:multipleTextTokenised alias FROM test:extendedContent T WHERE ANY alias NOT IN ('tokenized')", 1, false, "cmis:name", new String(), false); + } + + public void test_locale() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'AAAA BBBB'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setLocales(Collections.singletonList(Locale.ENGLISH)); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'AAAA BBBB'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setLocales(Collections.singletonList(Locale.FRENCH)); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'AAAA BBBB'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setLocales(Collections.singletonList(Locale.FRENCH)); + options.setMlAnalaysisMode(MLAnalysisMode.ALL_LANGUAGES); + rs = cmisQueryService.query(options); + assertEquals(0, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'CCCC DDDD'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setLocales(Collections.singletonList(Locale.ENGLISH)); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'CCCC DDDD'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setLocales(Collections.singletonList(Locale.ENGLISH)); + options.setMlAnalaysisMode(MLAnalysisMode.ALL_LANGUAGES); + rs = cmisQueryService.query(options); + assertEquals(0, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'CCCC DDDD'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setLocales(Collections.singletonList(Locale.FRENCH)); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'CCCC DDDD'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setLocales(Collections.singletonList(Locale.FRENCH)); + options.setIncludeInTransactionData(false); + rs = cmisQueryService.query(options); + assertEquals(0, rs.length()); + rs.close(); + + I18NUtil.setLocale(Locale.UK); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'AAAA BBBB'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setMlAnalaysisMode(MLAnalysisMode.ALL_LANGUAGES); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'CCCC DDDD'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setMlAnalaysisMode(MLAnalysisMode.ALL_LANGUAGES); + rs = cmisQueryService.query(options); + assertEquals(0, rs.length()); + rs.close(); + + I18NUtil.setLocale(Locale.FRANCE); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'AAAA BBBB'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setMlAnalaysisMode(MLAnalysisMode.ALL_LANGUAGES); + rs = cmisQueryService.query(options); + assertEquals(0, rs.length()); + rs.close(); + + options = new CMISQueryOptions("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'CCCC DDDD'", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + options.setMlAnalaysisMode(MLAnalysisMode.ALL_LANGUAGES); + rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + rs.close(); + } + + public void test_d_mltext() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleMLTextBoth"); + String value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertEquals("AAAA BBBB", value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleMLTextBoth"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:singleMLTextUntokenised"); + value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertEquals("AAAA BBBB", value); + column = rs.getResultSetMetaData().getColumn("test:singleMLTextUntokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:singleMLTextTokenised"); + value = DefaultTypeConverter.INSTANCE.convert(String.class, sValue); + assertEquals("AAAA BBBB", value); + column = rs.getResultSetMetaData().getColumn("test:singleMLTextTokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleMLTextBoth"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(String.class, sValue); + assertEquals(1, collection.size()); + String[] members = new String[1]; + members = collection.toArray(members); + assertEquals("AAAA BBBB", members[0]); + column = rs.getResultSetMetaData().getColumn("test:multipleMLTextBoth"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleMLTextUntokenised"); + assert (sValue instanceof Collection); + collection = DefaultTypeConverter.INSTANCE.getCollection(String.class, sValue); + assertEquals(1, collection.size()); + members = new String[1]; + members = collection.toArray(members); + assertEquals("AAAA BBBB", members[0]); + column = rs.getResultSetMetaData().getColumn("test:multipleMLTextUntokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleMLTextTokenised"); + assert (sValue instanceof Collection); + collection = DefaultTypeConverter.INSTANCE.getCollection(String.class, sValue); + assertEquals(1, collection.size()); + members = new String[1]; + members = collection.toArray(members); + assertEquals("AAAA BBBB", members[0]); + column = rs.getResultSetMetaData().getColumn("test:multipleMLTextTokenised"); + assertEquals(CMISDataTypeEnum.STRING, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // Note language agnostic tokenisation included in the default settings includes matches you may not expect + // Corss language search support + + // d:mltext single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'AAAA BBBB'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'AAAA'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'BBBB'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth = 'CCCC DDDD'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth NOT LIKE 'B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth NOT LIKE 'D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextBoth NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'AAAA BBBB' = ANY test:singleMLTextBoth ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'CCCC DDDD' = ANY test:singleMLTextBoth ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextBoth IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextBoth IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextBoth NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised = 'AAAA BBBB'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised = 'CCCC DDDD'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised NOT LIKE 'B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised NOT LIKE 'D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextUntokenised NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'AAAA BBBB' = ANY test:singleMLTextUntokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'CCCC DDDD' = ANY test:singleMLTextUntokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextUntokenised IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextUntokenised IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextUntokenised NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised = 'AAAA'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised = 'BBBB'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised = 'CCCC'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised = 'DDDD'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised <> 'EEEE'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised LIKE 'A%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised LIKE '_B__'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised LIKE '%C'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised LIKE 'D%D'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised NOT LIKE 'CCCC_'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleMLTextTokenised NOT IN ('EEEE')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'AAAA' = ANY test:singleMLTextTokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'BBBB' = ANY test:singleMLTextTokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'CCCC' = ANY test:singleMLTextTokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'DDDD' = ANY test:singleMLTextTokenised ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextTokenised IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextTokenised IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextTokenised IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextTokenised IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleMLTextTokenised NOT IN ('EEEE')", 1, false, "cmis:name", new String(), true); + + // d:mltext single by alias + + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias = 'AAAA BBBB'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias = 'AAAA'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias = 'BBBB'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias = 'CCCC DDDD'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias NOT LIKE 'B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias NOT LIKE 'D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE 'AAAA BBBB' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE 'CCCC DDDD' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE ANY alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE ANY alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextBoth as alias FROM test:extendedContent WHERE ANY alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias = 'AAAA BBBB'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias = 'CCCC DDDD'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias NOT LIKE 'B%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias NOT LIKE 'D%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE 'AAAA BBBB' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE 'CCCC DDDD' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE ANY alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE ANY alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextUntokenised as alias FROM test:extendedContent WHERE ANY alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias = 'AAAA'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias = 'BBBB'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias = 'CCCC'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias = 'DDDD'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias <> 'EEEE'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias LIKE 'A%'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias LIKE '_B__'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias LIKE '%C'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias LIKE 'D%D'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias NOT LIKE 'CCCC_'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE alias NOT IN ('EEEE')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE 'AAAA' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE 'BBBB' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE 'CCCC' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE 'DDDD' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE ANY alias IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE ANY alias IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE ANY alias IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE ANY alias IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleMLTextTokenised as alias FROM test:extendedContent WHERE ANY alias NOT IN ('EEEE')", 1, false, "cmis:name", new String(), true); + + // d:mltext multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth = 'AAAA BBBB'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth = 'AAAA'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth = 'BBBB'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth = 'CCCC DDDD'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth NOT LIKE 'B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth NOT LIKE 'D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextBoth NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'AAAA BBBB' = ANY test:multipleMLTextBoth ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'CCCC DDDD' = ANY test:multipleMLTextBoth ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextBoth IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextBoth IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextBoth NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised = 'AAAA BBBB'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised = 'CCCC DDDD'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised NOT LIKE 'B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised NOT LIKE 'D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextUntokenised NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'AAAA BBBB' = ANY test:multipleMLTextUntokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'CCCC DDDD' = ANY test:multipleMLTextUntokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextUntokenised IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextUntokenised IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextUntokenised NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised = 'AAAA'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised = 'BBBB'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised = 'CCCC'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised = 'DDDD'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised <> 'EEEE'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised LIKE 'A%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised LIKE '_B__'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised LIKE '%C'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised LIKE 'D%D'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised NOT LIKE 'CCCC_'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleMLTextTokenised NOT IN ('EEEE')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE 'AAAA' = ANY test:multipleMLTextTokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'BBBB' = ANY test:multipleMLTextTokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'CCCC' = ANY test:multipleMLTextTokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE 'DDDD' = ANY test:multipleMLTextTokenised ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextTokenised IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextTokenised IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextTokenised IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextTokenised IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleMLTextTokenised NOT IN ('EEEE')", 1, false, "cmis:name", new String(), false); + + // d:mltext multiple by alias + + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias = 'AAAA BBBB'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias = 'AAAA'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias = 'BBBB'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias = 'CCCC DDDD'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias NOT LIKE 'B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias NOT LIKE 'D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE 'AAAA BBBB' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE 'CCCC DDDD' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE ANY alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE ANY alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextBoth alias FROM test:extendedContent WHERE ANY alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias = 'AAAA BBBB'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias = 'CCCC DDDD'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias <> 'EEEE FFFF'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias LIKE 'AAA_ B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias LIKE 'CCC_ D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias NOT LIKE 'B%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias NOT LIKE 'D%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE 'AAAA BBBB' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE 'CCCC DDDD' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE ANY alias IN ('AAAA BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE ANY alias IN ('CCCC DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextUntokenised alias FROM test:extendedContent WHERE ANY alias NOT IN ('EEEE FFFF')", 1, false, "cmis:name", new String(), false); + + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias = 'AAAA'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias = 'BBBB'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias = 'CCCC'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias = 'DDDD'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias <> 'EEEE'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias LIKE 'A%'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias LIKE '_B__'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias LIKE '%C'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias LIKE 'D%D'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias NOT LIKE 'CCCC_'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE alias NOT IN ('EEEE')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE 'AAAA' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE 'BBBB' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE 'CCCC' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE 'DDDD' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE ANY alias IN ('AAAA', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE ANY alias IN ('BBBB', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE ANY alias IN ('CCCC', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE ANY alias IN ('DDDD', 'Monkey')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleMLTextTokenised alias FROM test:extendedContent WHERE ANY alias NOT IN ('EEEE')", 1, false, "cmis:name", new String(), false); + } + + public void test_d_float() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleFloat"); + Float value = DefaultTypeConverter.INSTANCE.convert(Float.class, sValue); + assertEquals(1.0f, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleFloat"); + assertEquals(CMISDataTypeEnum.DECIMAL, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleFloat"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(Float.class, sValue); + assertEquals(2, collection.size()); + Float[] members = new Float[2]; + members = collection.toArray(members); + assertEquals(1.0f, members[0]); + assertEquals(1.1f, members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleFloat"); + assertEquals(CMISDataTypeEnum.DECIMAL, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // d:float single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat = 1.1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat <> 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat < 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat <= 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat > 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat >= 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleFloat NOT IN (1.1)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:singleFloat ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '1.1' = ANY test:singleFloat ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleFloat IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleFloat NOT IN (1.1, 2.2)", 1, false, "cmis:name", new String(), true); + + // d:float single by alias + + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias = 1.1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias <> 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias < 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias <= 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias > 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias >= 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE alias NOT IN (1.1)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE '1.1' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleFloat as alias FROM test:extendedContent WHERE ANY alias NOT IN (1.1, 2.2)", 1, false, "cmis:name", new String(), true); + + // d:float multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat = 1.1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat <> 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat < 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat <= 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat > 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat >= 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleFloat NOT IN (1.1)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:multipleFloat ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '1.1' = ANY test:multipleFloat ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleFloat IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleFloat IN (1.1, 2.2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleFloat NOT IN (1.1, 2.2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleFloat NOT IN (1.3, 2.3)", 1, false, "cmis:name", new String(), false); + + // d:float multiple by alias + + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias = 1.1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias <> 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias < 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias <= 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias > 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias >= 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE alias NOT IN (1.1)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE '1.1' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE ANY alias IN (1.1, 2.2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE ANY alias NOT IN (1.1, 2.2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleFloat as alias FROM test:extendedContent WHERE ANY alias NOT IN (1.3, 2.3)", 1, false, "cmis:name", new String(), false); + } + + public void test_d_double() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleDouble"); + Double value = DefaultTypeConverter.INSTANCE.convert(Double.class, sValue); + assertEquals(1.0d, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleDouble"); + assertEquals(CMISDataTypeEnum.DECIMAL, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleDouble"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(Double.class, sValue); + assertEquals(2, collection.size()); + Double[] members = new Double[2]; + members = collection.toArray(members); + assertEquals(1.0d, members[0]); + assertEquals(1.1d, members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleDouble"); + assertEquals(CMISDataTypeEnum.DECIMAL, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // d:double single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble = 1.1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble <> 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble < 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble <= 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble > 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble >= 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDouble NOT IN (1.1)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:singleDouble ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '1.1' = ANY test:singleDouble ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleDouble IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleDouble NOT IN (1.1, 2.2)", 1, false, "cmis:name", new String(), true); + + // d:double single by alias + + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias = 1.1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias <> 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias < 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias <= 1.1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias > 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias >= 0.9", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE alias NOT IN (1.1)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE '1.1' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDouble alias FROM test:extendedContent WHERE ANY alias NOT IN (1.1, 2.2)", 1, false, "cmis:name", new String(), true); + + // d:double multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble = 1.1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble <> 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble < 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble <= 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble > 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble >= 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDouble NOT IN (1.1)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:multipleDouble ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '1.1' = ANY test:multipleDouble ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDouble IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDouble IN (1.1, 2.2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDouble NOT IN (1.1, 2.2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDouble NOT IN (1.3, 2.3)", 1, false, "cmis:name", new String(), false); + + // d:double multiple by alias + + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias = 1.1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias <> 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias < 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias <= 1.1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias > 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias >= 0.9", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE alias NOT IN (1.1)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE '1.1' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE ANY alias IN (1.1, 2.2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE ANY alias NOT IN (1.1, 2.2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDouble alias FROM test:extendedContent WHERE ANY alias NOT IN (1.3, 2.3)", 1, false, "cmis:name", new String(), false); + } + + public void test_d_int() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleInteger"); + Integer value = DefaultTypeConverter.INSTANCE.convert(Integer.class, sValue); + assertEquals(Integer.valueOf(1), value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleInteger"); + assertEquals(CMISDataTypeEnum.INTEGER, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleInteger"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(Integer.class, sValue); + assertEquals(2, collection.size()); + Integer[] members = new Integer[2]; + members = collection.toArray(members); + assertEquals(Integer.valueOf(1), members[0]); + assertEquals(Integer.valueOf(2), members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleInteger"); + assertEquals(CMISDataTypeEnum.INTEGER, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // d:int single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger = 2", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger <> 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger < 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger <= 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger > 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger >= 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleInteger NOT IN (2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:singleInteger ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '2' = ANY test:singleInteger ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleInteger IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleInteger NOT IN (2, 3)", 1, false, "cmis:name", new String(), true); + + // d:int single by alias + + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias = 2", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias <> 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias < 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias <= 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias > 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias >= 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE alias NOT IN (2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE '2' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleInteger alias FROM test:extendedContent WHERE ANY alias NOT IN (2, 3)", 1, false, "cmis:name", new String(), true); + + // d:int multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger = 2", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger <> 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger < 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger <= 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger > 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger >= 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleInteger NOT IN (2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:multipleInteger ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '2' = ANY test:multipleInteger ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleInteger IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleInteger IN (2, 3)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleInteger NOT IN (1, 2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleInteger NOT IN (2, 3)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleInteger NOT IN (3, 4)", 1, false, "cmis:name", new String(), false); + + // d:int multiple by alias + + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias = 2", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias <> 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias < 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias <= 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias > 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias >= 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE alias NOT IN (2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE '2' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE ANY alias IN (2, 3)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE ANY alias NOT IN (1, 2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE ANY alias NOT IN (2, 3)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleInteger as alias FROM test:extendedContent WHERE ANY alias NOT IN (3, 4)", 1, false, "cmis:name", new String(), false); + } + + public void test_d_long() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleLong"); + Long value = DefaultTypeConverter.INSTANCE.convert(Long.class, sValue); + assertEquals(Long.valueOf(1), value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleLong"); + assertEquals(CMISDataTypeEnum.INTEGER, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleLong"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(Long.class, sValue); + assertEquals(2, collection.size()); + Long[] members = new Long[2]; + members = collection.toArray(members); + assertEquals(Long.valueOf(1), members[0]); + assertEquals(Long.valueOf(2), members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleLong"); + assertEquals(CMISDataTypeEnum.INTEGER, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // d:long single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong = 2", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong <> 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong < 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong <= 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong > 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong >= 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleLong NOT IN (2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:singleLong ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '2' = ANY test:singleLong ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleLong IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleLong NOT IN (2, 3)", 1, false, "cmis:name", new String(), true); + + // d:long single by alias + + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias = 2", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias <> 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias < 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias <= 2", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias > 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias >= 0", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE alias NOT IN (2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE '2' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleLong as alias FROM test:extendedContent WHERE ANY alias NOT IN (2, 3)", 1, false, "cmis:name", new String(), true); + + // d:long multiple + + testQuery("SELECT alias FROM test:extendedContent WHERE test:multipleLong = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong = 2", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong <> 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong < 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong <= 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong > 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong >= 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleLong NOT IN (2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:multipleLong ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '2' = ANY test:multipleLong ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleLong IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleLong IN (2, 3)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleLong NOT IN (1, 2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleLong NOT IN (2, 3)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleLong NOT IN (3, 4)", 1, false, "cmis:name", new String(), false); + + // d:long multiple by alias + + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias = 2", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias <> 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias < 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias <= 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias > 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias >= 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE alias NOT IN (2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE '2' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE ANY alias IN (2, 3)", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE ANY alias NOT IN (1, 2)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE ANY alias NOT IN (2, 3)", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleLong alias FROM test:extendedContent WHERE ANY alias NOT IN (3, 4)", 1, false, "cmis:name", new String(), false); + } + + public void test_d_date() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleDate"); + Date value = DefaultTypeConverter.INSTANCE.convert(Date.class, sValue); + assertEquals(date1, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleDate"); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleDate"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(Date.class, sValue); + assertEquals(2, collection.size()); + Date[] members = new Date[2]; + members = collection.toArray(members); + assertEquals(date1, members[0]); + assertEquals(date2, members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleDate"); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // d:date single + + SimpleDateFormat df1 = new SimpleDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSSZ"); + + String d0 = df1.format(date0); + StringBuilder builder = new StringBuilder(); + builder.append(d0); + builder.insert(builder.length() - 2, ':'); + d0 = builder.toString(); + + String d1 = df1.format(date1); + builder = new StringBuilder(); + builder.append(d1); + builder.insert(builder.length() - 2, ':'); + d1 = builder.toString(); + + String d2 = df1.format(date2); + builder = new StringBuilder(); + builder.append(d2); + builder.insert(builder.length() - 2, ':'); + d2 = builder.toString(); + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate LIKE TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate IN (TIMESTAMP '" + d0 + "' ,TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDate NOT IN (TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY test:singleDate ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY test:singleDate ", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleDate IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleDate NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), true); + + // d:date single by alias + + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias LIKE TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias IN (TIMESTAMP '" + d0 + "' ,TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", new String(), + false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE alias NOT IN (TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY alias ", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE ANY alias IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", + new String(), true); + testQuery("SELECT test:singleDate as alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", + new String(), true); + + // d:date multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate LIKE TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDate NOT IN (TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY test:multipleDate ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY test:multipleDate ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDate IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDate IN (TIMESTAMP '" + d2 + "', TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDate NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d1 + "')", 0, false, "cmis:name", new String(), + false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDate NOT IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 0, false, "cmis:name", new String(), + false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDate NOT IN (TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", new String(), false); + + // d:date multiple by alias + + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias LIKE TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), + true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE alias NOT IN (TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE ANY alias IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE ANY alias IN (TIMESTAMP '" + d2 + "', TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d1 + "')", 0, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 0, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDate alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", new String(), false); + + } + + public void test_d_datetime() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleDatetime"); + Date value = DefaultTypeConverter.INSTANCE.convert(Date.class, sValue); + assertEquals(date1, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleDatetime"); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleDatetime"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(Date.class, sValue); + assertEquals(2, collection.size()); + Date[] members = new Date[2]; + members = collection.toArray(members); + assertEquals(date1, members[0]); + assertEquals(date2, members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleDatetime"); + assertEquals(CMISDataTypeEnum.DATETIME, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + SimpleDateFormat df1 = new SimpleDateFormat("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'SSSZ"); + + String d0 = df1.format(date0); + StringBuilder builder = new StringBuilder(); + builder.append(d0); + builder.insert(builder.length() - 2, ':'); + d0 = builder.toString(); + + String d1 = df1.format(date1); + builder = new StringBuilder(); + builder.append(d1); + builder.insert(builder.length() - 2, ':'); + d1 = builder.toString(); + + String d2 = df1.format(date2); + builder = new StringBuilder(); + builder.append(d2); + builder.insert(builder.length() - 2, ':'); + d2 = builder.toString(); + + // d:datetime single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime LIKE TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime IN (TIMESTAMP '" + d0 + "' ,TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleDatetime NOT IN (TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY test:singleDatetime ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY test:singleDatetime ", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleDatetime IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleDatetime NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), + true); + + // d:datetime single by alias + + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias LIKE TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias IN (TIMESTAMP '" + d0 + "' ,TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", + new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE alias NOT IN (TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY alias ", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE ANY alias IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", + new String(), true); + testQuery("SELECT test:singleDatetime alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", + new String(), true); + + // d:date multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime LIKE TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleDatetime NOT IN (TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY test:multipleDatetime ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY test:multipleDatetime ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDatetime IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", new String(), + false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDatetime IN (TIMESTAMP '" + d2 + "', TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", new String(), + false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDatetime NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d1 + "')", 0, false, "cmis:name", + new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDatetime NOT IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 0, false, "cmis:name", + new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleDatetime NOT IN (TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", new String(), false); + + // d:date multiple by alias + + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias = TIMESTAMP '" + d2 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias <> TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias < TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias <= TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d1 + "'", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias > TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d1 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias >= TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias LIKE TIMESTAMP '" + d0 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias NOT LIKE TIMESTAMP '" + d2 + "'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", + new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE alias NOT IN (TIMESTAMP '" + d1 + "')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE TIMESTAMP '" + d1 + "' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE TIMESTAMP '" + d2 + "' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE ANY alias IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 1, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE ANY alias IN (TIMESTAMP '" + d2 + "', TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d0 + "', TIMESTAMP '" + d1 + "')", 0, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d1 + "', TIMESTAMP '" + d2 + "')", 0, false, "cmis:name", + new String(), false); + testQuery("SELECT test:multipleDatetime alias FROM test:extendedContent WHERE ANY alias NOT IN (TIMESTAMP '" + d0 + "')", 1, false, "cmis:name", new String(), false); + + } + + public void test_d_boolean() + { + addTypeTestData(); + assertNotNull(dictionaryService.getType(extendedContent)); + assertNotNull(cmisDictionaryService.findTypeByQueryName("test:extendedContent")); + + testQuery("SELECT * FROM test:extendedContent", 1, false, "cmis:name", new String(), false); + + CMISQueryOptions options = new CMISQueryOptions("SELECT * FROM test:extendedContent", rootNodeRef.getStoreRef()); + options.setDefaultFTSConnective(Connective.OR); + options.setDefaultFTSFieldConnective(Connective.OR); + CMISResultSet rs = cmisQueryService.query(options); + assertEquals(1, rs.length()); + for (CMISResultSetRow row : rs) + { + Serializable sValue = row.getValue("test:singleBoolean"); + Boolean value = DefaultTypeConverter.INSTANCE.convert(Boolean.class, sValue); + assertEquals(Boolean.TRUE, value); + CMISResultSetColumn column = rs.getResultSetMetaData().getColumn("test:singleBoolean"); + assertEquals(CMISDataTypeEnum.BOOLEAN, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.SINGLE_VALUED, column.getCMISPropertyDefinition().getCardinality()); + + sValue = row.getValue("test:multipleBoolean"); + assert (sValue instanceof Collection); + Collection collection = DefaultTypeConverter.INSTANCE.getCollection(Boolean.class, sValue); + assertEquals(2, collection.size()); + Boolean[] members = new Boolean[2]; + members = collection.toArray(members); + assertEquals(Boolean.TRUE, members[0]); + assertEquals(Boolean.FALSE, members[1]); + column = rs.getResultSetMetaData().getColumn("test:multipleBoolean"); + assertEquals(CMISDataTypeEnum.BOOLEAN, column.getCMISDataType()); + assertEquals(CMISCardinalityEnum.MULTI_VALUED, column.getCMISPropertyDefinition().getCardinality()); + } + rs.close(); + + // d:boolean single + + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean = TRUE", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean = true", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean = FALSE", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean = false", 0, false, "cmis:name", new String(), false); + // not strictly compliant... + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean = TRue", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean <> TRUE", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean <> FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean < TRUE", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean < FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean <= TRUE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean <= FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean > TRUE", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean > FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean >= TRUE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean >= FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean LIKE 'TRUE'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean NOT LIKE 'FALSE'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean IN (TRUE)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:singleBoolean NOT IN (FALSE)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE TRUE = ANY test:singleBoolean ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE FALSE = ANY test:singleBoolean ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleBoolean IN (TRUE)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:singleBoolean NOT IN (FALSE)", 1, false, "cmis:name", new String(), true); + + // d:boolean single by alias + + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias = TRUE", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias = true", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias = FALSE", 0, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias = false", 0, false, "cmis:name", new String(), false); + // not strictly compliant... + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias = TRue", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias <> TRUE", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias <> FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias < TRUE", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias < FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias <= TRUE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias <= FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias > TRUE", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias > FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias >= TRUE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias >= FALSE", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias LIKE 'TRUE'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias NOT LIKE 'FALSE'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias IN (TRUE)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE alias NOT IN (FALSE)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE TRUE = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE FALSE = ANY alias ", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE ANY alias IN (TRUE)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:singleBoolean alias FROM test:extendedContent WHERE ANY alias NOT IN (FALSE)", 1, false, "cmis:name", new String(), true); + + // d:boolean multiple + + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean = 2", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean <> 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean < 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean <= 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean > 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean >= 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE test:multipleBoolean NOT IN (2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE '1' = ANY test:multipleBoolean ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE '2' = ANY test:multipleBoolean ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleBoolean IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleBoolean IN (2, 3)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleBoolean NOT IN (1, 2)", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleBoolean NOT IN (2, 3)", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM test:extendedContent WHERE ANY test:multipleBoolean NOT IN (3, 4)", 1, false, "cmis:name", new String(), true); + + // d:boolean multiple by alias + + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias = 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias = 2", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias <> 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias <> 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias < 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias < 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias <= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias <= 2", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias > 1", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias > 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias >= 1", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias >= 0", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias LIKE '1'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias NOT LIKE '2'", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE alias NOT IN (2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE '1' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE '2' = ANY alias ", 1, false, "cmis:name", new String(), false); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE ANY alias IN (1, 2)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE ANY alias IN (2, 3)", 1, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE ANY alias NOT IN (1, 2)", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE ANY alias NOT IN (2, 3)", 0, false, "cmis:name", new String(), true); + testQuery("SELECT test:multipleBoolean as alias FROM test:extendedContent WHERE ANY alias NOT IN (3, 4)", 1, false, "cmis:name", new String(), true); + } + + public void testBasicContainsSyntax() + { + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('one')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('-quick')", 9, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick brown fox')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick one')", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick -one')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('-quick one')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('-quick -one')", 8, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('fox brown quick')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR one')", 2, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR -one')", 9, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('-quick OR -one')", 10, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'quick brown fox\\'')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'fox brown quick\\'')", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'quick brown fox\\' one')", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('\\'quick brown fox\\' -one')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('-\\'quick brown fox\\' one')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('-\\'quick brown fox\\' -one')", 8, false, "cmis:name", new String(), false); + + // escaping + testExtendedQuery("SELECT * FROM cmis:folder WHERE CONTAINS('cmis:name:\\'Folder 9\\\\\\'\\'')", 1, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:folder WHERE CONTAINS('cmis:name:\\'Folder 9\\\\\\'\\'')", 1, false, "cmis:name", new String(), true); + + // precedence + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR brown one')", 1, false, "cmis:name", new String(), false); + testExtendedQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR brown AND one')", 1, false, "cmis:name", new String(), false); + testExtendedQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR (brown AND one)')", 1, false, "cmis:name", new String(), false); + testExtendedQuery("SELECT * FROM cmis:document WHERE CONTAINS('(quick OR brown) AND one')", 0, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR brown OR one')", 2, false, "cmis:name", new String(), false); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR brown AND one')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('quick OR (brown AND one)')", 1, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM cmis:document WHERE CONTAINS('(quick OR brown) AND one')", 0, false, "cmis:name", new String(), true); + } + + public void testOrderableProperties() + { + + addTypeSortTestData(); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleTextUntokenised").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:singleTextTokenised").isOrderable()); + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleTextBoth").isOrderable()); + + testOrderableProperty("test:singleTextUntokenised"); + testOrderablePropertyFail("test:singleTextTokenised"); + testOrderableProperty("test:singleTextBoth"); + + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleTextUntokenised").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleTextTokenised").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleTextBoth").isOrderable()); + + testOrderablePropertyFail("test:multipleTextUntokenised"); + testOrderablePropertyFail("test:multipleTextTokenised"); + testOrderablePropertyFail("test:multipleTextBoth"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleMLTextUntokenised").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:singleMLTextTokenised").isOrderable()); + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleMLTextBoth").isOrderable()); + + testOrderableProperty("test:singleMLTextUntokenised"); + testOrderablePropertyFail("test:singleMLTextTokenised"); + testOrderableProperty("test:singleMLTextBoth"); + + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleMLTextUntokenised").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleMLTextTokenised").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleMLTextBoth").isOrderable()); + + testOrderablePropertyFail("test:multipleMLTextUntokenised"); + testOrderablePropertyFail("test:multipleMLTextTokenised"); + testOrderablePropertyFail("test:multipleMLTextBoth"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleFloat").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleFloat").isOrderable()); + + testOrderableProperty("test:singleFloat"); + testOrderablePropertyFail("test:multipleFloat"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleDouble").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleDouble").isOrderable()); + + testOrderableProperty("test:singleDouble"); + testOrderablePropertyFail("test:multipleDouble"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleInteger").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleInteger").isOrderable()); + + testOrderableProperty("test:singleInteger"); + testOrderablePropertyFail("test:multipleInteger"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleLong").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleLong").isOrderable()); + + testOrderableProperty("test:singleLong"); + testOrderablePropertyFail("test:multipleLong"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleDate").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleDate").isOrderable()); + + testOrderableProperty("test:singleDate"); + testOrderablePropertyFail("test:multipleDate"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleDatetime").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleDatetime").isOrderable()); + + testOrderableProperty("test:singleDatetime"); + testOrderablePropertyFail("test:multipleDatetime"); + + assertTrue(cmisDictionaryService.findPropertyByQueryName("test:singleBoolean").isOrderable()); + assertFalse(cmisDictionaryService.findPropertyByQueryName("test:multipleBoolean").isOrderable()); + + testOrderableProperty("test:singleBoolean"); + testOrderablePropertyFail("test:multipleBoolean"); + } + + public void testNonQueryableTypes() + { + testQuery("SELECT * FROM cmis:policy", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM cmis:relationship ", 0, false, "cmis:name", new String(), true); + testQuery("SELECT * FROM cm:ownable ", 0, false, "cmis:name", new String(), true); + testExtendedQuery("SELECT * FROM cm:ownable ", 1, false, "cmis:name", new String(), false); + } + + private void testOrderableProperty(String propertyQueryName) + { + testOrderBy("SELECT " + propertyQueryName + " FROM test:extendedContent ORDER BY " + propertyQueryName + " ASC", 13, false, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + propertyQueryName); + testOrderBy("SELECT " + propertyQueryName + " FROM test:extendedContent ORDER BY " + propertyQueryName + " DESC", 13, false, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + propertyQueryName); + testOrderBy("SELECT " + propertyQueryName + " FROM test:extendedContent ORDER BY " + propertyQueryName + " DESC", 13, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + propertyQueryName); + } + + private void testOrderablePropertyFail(String propertyQueryName) + { + testOrderBy("SELECT " + propertyQueryName + " FROM test:extendedContent ORDER BY " + propertyQueryName + " ASC", 13, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + propertyQueryName); + testOrderBy("SELECT " + propertyQueryName + " FROM test:extendedContent ORDER BY " + propertyQueryName + " DESC", 13, true, Order.DESCENDING, CMISQueryMode.CMS_STRICT, + propertyQueryName); + testOrderBy("SELECT " + propertyQueryName + " FROM test:extendedContent ORDER BY " + propertyQueryName + " DESC", 13, true, Order.ASCENDING, CMISQueryMode.CMS_STRICT, + propertyQueryName); + } + + private void addTypeTestDataModel() + { + // load in the test model + ClassLoader cl = BaseNodeServiceTest.class.getClassLoader(); + InputStream modelStream = cl.getResourceAsStream("org/alfresco/cmis/search/CMIS-query-test-model.xml"); + assertNotNull(modelStream); + M2Model model = M2Model.createModel(modelStream); + dictionaryDAO.putModel(model); + + ((CMISAbstractDictionaryService) cmisDictionaryService).afterDictionaryDestroy(); + ((CMISAbstractDictionaryService) cmisDictionaryService).afterDictionaryInit(); + + namespaceDao.addPrefix("test", "http://www.alfresco.org/test/cmis-query-test"); + } + + private void addTypeSortTestData() + { + addTypeTestDataModel(); + + addSortableNull(); + for (int i = 0; i < 10; i++) + { + addSortableNode(i); + if (i == 5) + { + addSortableNull(); + } + } + + addSortableNull(); + } + + private NodeRef addSortableNull() + { + Map properties = new HashMap(); + MLText ml = new MLText(); + ml.addValue(Locale.ENGLISH, "Test null"); + properties.put(ContentModel.PROP_DESCRIPTION, ml); + properties.put(ContentModel.PROP_TITLE, ml); + properties.put(ContentModel.PROP_NAME, "Test null"); + properties.put(ContentModel.PROP_CREATED, new Date()); + NodeRef c0 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Test One", namespaceService), extendedContent, properties).getChildRef(); + return c0; + } + + private static String[] orderable = new String[] { "zero loons", "one banana", "two apples", "three fruit", "four lemurs", "five rats", "six badgers", "seven cards", + "eight cabbages", "nine zebras", "ten lemons" }; + + private NodeRef addSortableNode(int position) + { + Map properties = new HashMap(); + MLText ml = new MLText(); + ml.addValue(Locale.ENGLISH, "Test " + position); + properties.put(ContentModel.PROP_DESCRIPTION, ml); + properties.put(ContentModel.PROP_TITLE, ml); + properties.put(ContentModel.PROP_NAME, "Test " + position); + properties.put(ContentModel.PROP_CREATED, new Date()); + properties.put(singleTextUntokenised, orderable[position]); + properties.put(singleTextTokenised, orderable[position]); + properties.put(singleTextBoth, orderable[position]); + properties.put(multipleTextUntokenised, asArray(orderable[position], orderable[position + 1])); + properties.put(multipleTextTokenised, asArray(orderable[position], orderable[position + 1])); + properties.put(multipleTextBoth, asArray(orderable[position], orderable[position + 1])); + properties.put(singleMLTextUntokenised, makeMLText(position)); + properties.put(singleMLTextTokenised, makeMLText(position)); + properties.put(singleMLTextBoth, makeMLText(position)); + properties.put(multipleMLTextUntokenised, makeMLTextMVP(position)); + properties.put(multipleMLTextTokenised, makeMLTextMVP(position)); + properties.put(multipleMLTextBoth, makeMLTextMVP(position)); + properties.put(singleFloat, 1.1f * position); + properties.put(multipleFloat, asArray(1.1f * position, 2.2f * position)); + properties.put(singleDouble, 1.1d * position); + properties.put(multipleDouble, asArray(1.1d * position, 2.2d * position)); + properties.put(singleInteger, 1 * position); + properties.put(multipleInteger, asArray(1 * position, 2 * position)); + properties.put(singleLong, 1l * position); + properties.put(multipleLong, asArray(1l * position, 2l * position)); + GregorianCalendar cal = new GregorianCalendar(); + cal.setTime(new Date()); + cal.add(Calendar.DAY_OF_MONTH, position); + Date d1 = cal.getTime(); + cal.add(Calendar.DAY_OF_MONTH, -1); + // Date d0 = cal.getTime(); + cal.add(Calendar.DAY_OF_MONTH, 2); + Date d2 = cal.getTime(); + properties.put(singleDate, d1); + properties.put(multipleDate, asArray(d1, d2)); + properties.put(singleDatetime, d1); + properties.put(multipleDatetime, asArray(d1, d2)); + properties.put(singleBoolean, position % 2 == 0 ? true : false); + properties.put(multipleBoolean, asArray(true, false)); + NodeRef c0 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Test One", namespaceService), extendedContent, properties).getChildRef(); + return c0; + } + + private NodeRef addTypeTestData() + { + addTypeTestDataModel(); + + I18NUtil.setLocale(Locale.UK); + + Map properties = new HashMap(); + MLText ml = new MLText(); + ml.addValue(Locale.ENGLISH, "Test one"); + ml.addValue(Locale.US, "Test 1"); + properties.put(ContentModel.PROP_DESCRIPTION, ml); + properties.put(ContentModel.PROP_TITLE, ml); + properties.put(ContentModel.PROP_NAME, "Test one"); + properties.put(ContentModel.PROP_CREATED, new Date()); + properties.put(singleTextUntokenised, "Un tokenised"); + properties.put(singleTextTokenised, "Un tokenised"); + properties.put(singleTextBoth, "Un tokenised"); + properties.put(multipleTextUntokenised, asArray("Un tokenised", "two parts")); + properties.put(multipleTextTokenised, asArray("Un tokenised", "two parts")); + properties.put(multipleTextBoth, asArray("Un tokenised", "two parts")); + properties.put(singleMLTextUntokenised, makeMLText()); + properties.put(singleMLTextTokenised, makeMLText()); + properties.put(singleMLTextBoth, makeMLText()); + properties.put(multipleMLTextUntokenised, makeMLTextMVP()); + properties.put(multipleMLTextTokenised, makeMLTextMVP()); + properties.put(multipleMLTextBoth, makeMLTextMVP()); + properties.put(singleFloat, 1f); + properties.put(multipleFloat, asArray(1f, 1.1f)); + properties.put(singleDouble, 1d); + properties.put(multipleDouble, asArray(1d, 1.1d)); + properties.put(singleInteger, 1); + properties.put(multipleInteger, asArray(1, 2)); + properties.put(singleLong, 1l); + properties.put(multipleLong, asArray(1l, 2l)); + date1 = new Date(); + GregorianCalendar cal = new GregorianCalendar(); + cal.setTime(date1); + cal.add(Calendar.DAY_OF_MONTH, -1); + date0 = cal.getTime(); + cal.add(Calendar.DAY_OF_MONTH, 2); + date2 = cal.getTime(); + properties.put(singleDate, date1); + properties.put(multipleDate, asArray(date1, date2)); + properties.put(singleDatetime, date1); + properties.put(multipleDatetime, asArray(date1, date2)); + properties.put(singleBoolean, true); + properties.put(multipleBoolean, asArray(true, false)); + NodeRef c0 = nodeService.createNode(f0, ContentModel.ASSOC_CHILDREN, QName.createQName("cm", "Test One", namespaceService), extendedContent, properties).getChildRef(); + return c0; + } + + private static String[] mlOrderable_en = new String[] { "AAAA BBBB", "EEEE FFFF", "II", "KK", "MM", "OO", "QQ", "SS", "UU", "AA", "CC" }; + + private static String[] mlOrderable_fr = new String[] { "CCCC DDDD", "GGGG HHHH", "JJ", "LL", "NN", "PP", "RR", "TT", "VV", "BB", "DD" }; + + private MLText makeMLText() + { + return makeMLText(0); + } + + private MLText makeMLText(int position) + { + MLText ml = new MLText(); + ml.addValue(Locale.ENGLISH, mlOrderable_en[position]); + ml.addValue(Locale.FRENCH, mlOrderable_fr[position]); + return ml; + } + + private ArrayList makeMLTextMVP() + { + return makeMLTextMVP(0); + } + + private ArrayList makeMLTextMVP(int position) + { + MLText m1 = new MLText(); + m1.addValue(Locale.ENGLISH, mlOrderable_en[position]); + MLText m2 = new MLText(); + m2.addValue(Locale.FRENCH, mlOrderable_fr[position]); + ArrayList answer = new ArrayList(2); + answer.add(m1); + answer.add(m2); + return answer; + } + + private ArrayList asArray(T... ts) + { + ArrayList list = new ArrayList(ts.length); + for (T t : ts) + { + list.add(t); + } + return list; } } diff --git a/source/java/org/alfresco/repo/audit/AuditBootstrap.java b/source/java/org/alfresco/repo/audit/AuditBootstrap.java index 0e94b27b55..d9af9c74dd 100644 --- a/source/java/org/alfresco/repo/audit/AuditBootstrap.java +++ b/source/java/org/alfresco/repo/audit/AuditBootstrap.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,9 +18,9 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing + * http://www.alfresco.com/legal/licensing" */ package org.alfresco.repo.audit; @@ -40,6 +40,7 @@ public class AuditBootstrap extends AbstractLifecycleBean { private TransactionService transactionService; private AuditModelRegistry auditModelRegistry; + private boolean isActive = true; public void setTransactionService(TransactionService transactionService) { @@ -50,6 +51,11 @@ public class AuditBootstrap extends AbstractLifecycleBean { this.auditModelRegistry = registry; } + + public void setActive(boolean isActive) + { + this.isActive = isActive; + } /** * @see AuditModelRegistry#loadAuditModels() @@ -63,6 +69,12 @@ public class AuditBootstrap extends AbstractLifecycleBean return; } + // Don't start if we've been configured out + if (!this.isActive) + { + return; + } + RetryingTransactionCallback callback = new RetryingTransactionCallback() { public Void execute() throws Throwable diff --git a/source/java/org/alfresco/repo/audit/AuditBootstrapTest.java b/source/java/org/alfresco/repo/audit/AuditBootstrapTest.java index 3e49fa9909..28b9531896 100644 --- a/source/java/org/alfresco/repo/audit/AuditBootstrapTest.java +++ b/source/java/org/alfresco/repo/audit/AuditBootstrapTest.java @@ -33,7 +33,8 @@ import org.alfresco.repo.audit.extractor.DataExtractor; import org.alfresco.repo.audit.generator.DataGenerator; import org.alfresco.repo.audit.model.AuditApplication; import org.alfresco.repo.audit.model.AuditModelException; -import org.alfresco.repo.audit.model.AuditModelRegistry; +import org.alfresco.repo.audit.model.AuditModelRegistryImpl; +import org.alfresco.repo.management.subsystems.ApplicationContextFactory; import org.alfresco.util.ApplicationContextHelper; import org.alfresco.util.PathMapper; import org.apache.commons.logging.Log; @@ -57,12 +58,15 @@ public class AuditBootstrapTest extends TestCase private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext(); private static final Log logger = LogFactory.getLog(AuditBootstrapTest.class); - private AuditModelRegistry auditModelRegistry; + private AuditModelRegistryImpl auditModelRegistry; @Override public void setUp() throws Exception { - auditModelRegistry = (AuditModelRegistry) ctx.getBean("auditModel.modelRegistry"); + // We have to look inside the subsystem for this test + ApplicationContextFactory subsystem = (ApplicationContextFactory) ctx.getBean("Audit"); + ApplicationContext subCtx = subsystem.getApplicationContext(); + auditModelRegistry = (AuditModelRegistryImpl) subCtx.getBean("auditModel.modelRegistry"); // Register a new model URL testModelUrl = ResourceUtils.getURL("classpath:alfresco/audit/alfresco-audit-test.xml"); diff --git a/source/java/org/alfresco/repo/audit/AuditComponent.java b/source/java/org/alfresco/repo/audit/AuditComponent.java index daf838d8da..15c0768e16 100644 --- a/source/java/org/alfresco/repo/audit/AuditComponent.java +++ b/source/java/org/alfresco/repo/audit/AuditComponent.java @@ -93,6 +93,15 @@ public interface AuditComponent /* * V3.2 from here on. Put all fixes to the older audit code before this point, please. */ + + /** + * Determines whether the given source path is mapped to any audit applications. Allows optimizations to be made in + * calling components. + * + * @return true if the given source path is mapped to one or more audit applications + * @since 3.3 + */ + public boolean isSourcePathMapped(String sourcePath); /** * Delete audit entries for the given application and time range diff --git a/source/java/org/alfresco/repo/audit/AuditComponentImpl.java b/source/java/org/alfresco/repo/audit/AuditComponentImpl.java index 9ef15d13fc..a779394973 100644 --- a/source/java/org/alfresco/repo/audit/AuditComponentImpl.java +++ b/source/java/org/alfresco/repo/audit/AuditComponentImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,9 +18,9 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing + * http://www.alfresco.com/legal/licensing" */ package org.alfresco.repo.audit; @@ -954,6 +954,15 @@ public class AuditComponentImpl implements AuditComponent } } + /** + * {@inheritDoc} + * @since 3.2 + */ + public boolean isSourcePathMapped(String sourcePath) + { + return !auditModelRegistry.getAuditPathMapper().isEmpty(); + } + /** * {@inheritDoc} * @since 3.2 @@ -971,7 +980,7 @@ public class AuditComponentImpl implements AuditComponent { logger.debug("No audit application named '" + applicationName + "' has been registered."); } - return true; + return false; } // Check the path against the application application.checkPath(path); @@ -1162,10 +1171,11 @@ public class AuditComponentImpl implements AuditComponent ParameterCheck.mandatory("rootPath", rootPath); AuditApplication.checkPathFormat(rootPath); - if (values == null || values.isEmpty()) + if (values == null || values.isEmpty() || !isSourcePathMapped(rootPath)) { return Collections.emptyMap(); } + // Build the key paths using the session root path Map pathedValues = new HashMap(values.size() * 2); for (Map.Entry entry : values.entrySet()) diff --git a/source/java/org/alfresco/repo/audit/AuditComponentTest.java b/source/java/org/alfresco/repo/audit/AuditComponentTest.java index f07b76c92d..fc76315b8c 100644 --- a/source/java/org/alfresco/repo/audit/AuditComponentTest.java +++ b/source/java/org/alfresco/repo/audit/AuditComponentTest.java @@ -38,7 +38,8 @@ import junit.framework.TestCase; import org.alfresco.error.AlfrescoRuntimeException; import org.alfresco.repo.audit.model.AuditApplication; import org.alfresco.repo.audit.model.AuditModelException; -import org.alfresco.repo.audit.model.AuditModelRegistry; +import org.alfresco.repo.audit.model.AuditModelRegistryImpl; +import org.alfresco.repo.management.subsystems.ApplicationContextFactory; import org.alfresco.repo.security.authentication.AuthenticationException; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork; @@ -79,9 +80,9 @@ public class AuditComponentTest extends TestCase private static ApplicationContext ctx = ApplicationContextHelper.getApplicationContext(); - private AuditModelRegistry auditModelRegistry; + private ApplicationContextFactory subsystem; + private AuditModelRegistryImpl auditModelRegistry; private AuditComponent auditComponent; - private AuditMethodInterceptor auditMethodInterceptor; private AuditService auditService; private ServiceRegistry serviceRegistry; private TransactionService transactionService; @@ -93,9 +94,11 @@ public class AuditComponentTest extends TestCase @Override public void setUp() throws Exception { - auditModelRegistry = (AuditModelRegistry) ctx.getBean("auditModel.modelRegistry"); + // We have to look inside the subsystem for this test + subsystem = (ApplicationContextFactory) ctx.getBean("Audit"); + ApplicationContext subCtx = subsystem.getApplicationContext(); + auditModelRegistry = (AuditModelRegistryImpl) subCtx.getBean("auditModel.modelRegistry"); auditComponent = (AuditComponent) ctx.getBean("auditComponent"); - auditMethodInterceptor = (AuditMethodInterceptor) ctx.getBean("AuditMethodInterceptor"); serviceRegistry = (ServiceRegistry) ctx.getBean(ServiceRegistry.SERVICE_REGISTRY); auditService = serviceRegistry.getAuditService(); transactionService = serviceRegistry.getTransactionService(); @@ -129,17 +132,14 @@ public class AuditComponentTest extends TestCase } }; transactionService.getRetryingTransactionHelper().doInTransaction(resetDisabledPathsCallback); - - auditMethodInterceptor.setEnabled(true); - auditMethodInterceptor.setUseNewConfig(true); } @Override public void tearDown() throws Exception { AuthenticationUtil.clearCurrentSecurityContext(); - auditMethodInterceptor.setEnabled(false); - auditMethodInterceptor.setUseNewConfig(false); + // Throw away the reconfigured registry in the subsystem + subsystem.stop(); } public void testSetUp() @@ -314,7 +314,12 @@ public class AuditComponentTest extends TestCase final MutableInt rowCount = new MutableInt(); AuditQueryCallback callback = new AuditQueryCallback() - { + { + public boolean valuesRequired() + { + return true; + } + public boolean handleAuditEntry( Long entryId, String applicationName, String user, long time, Map values) { @@ -482,6 +487,11 @@ public class AuditComponentTest extends TestCase final StringBuilder sb = new StringBuilder(); AuditQueryCallback auditQueryCallback = new AuditQueryCallback() { + public boolean valuesRequired() + { + return true; + } + public boolean handleAuditEntry( Long entryId, String applicationName, @@ -576,6 +586,11 @@ public class AuditComponentTest extends TestCase { AuditQueryCallback auditQueryCallback = new AuditQueryCallback() { + public boolean valuesRequired() + { + return true; + } + public boolean handleAuditEntry( Long entryId, String applicationName, @@ -604,4 +619,5 @@ public class AuditComponentTest extends TestCase params.setToId(Long.MAX_VALUE); auditService.auditQuery(auditQueryCallback, params, 1); } + } diff --git a/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java b/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java index e15c73836b..91213b90cf 100644 --- a/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java +++ b/source/java/org/alfresco/repo/audit/AuditMethodInterceptor.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,7 +18,7 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ @@ -84,8 +84,9 @@ import org.apache.commons.logging.LogFactory; */ public class AuditMethodInterceptor implements MethodInterceptor { - public static final String AUDIT_PATH_API_PRE = "/alfresco-api/pre"; - public static final String AUDIT_PATH_API_POST = "/alfresco-api/post"; + public static final String AUDIT_PATH_API_ROOT = "/alfresco-api"; + public static final String AUDIT_PATH_API_PRE = AUDIT_PATH_API_ROOT + "/pre"; + public static final String AUDIT_PATH_API_POST = AUDIT_PATH_API_ROOT + "/post"; public static final String AUDIT_SNIPPET_ARGS = "/args"; public static final String AUDIT_SNIPPET_RESULT = "/result"; public static final String AUDIT_SNIPPET_ERROR = "/error"; @@ -97,24 +98,17 @@ public class AuditMethodInterceptor implements MethodInterceptor private AuditComponent auditComponent; private TransactionService transactionService; - private boolean enabled = false; + // SysAdmin cache - used to cluster certain configuration parameters private boolean useNewConfig = false; private final ThreadLocal inAudit = new ThreadLocal(); + private final ThreadLocal auditEnabled = new ThreadLocal(); public AuditMethodInterceptor() { super(); } - - /** - * Enable or disable auditing at a high level (default: false) - */ - public void setEnabled(boolean enabled) - { - this.enabled = enabled; - } - + /** * Use the new audit configuration (default: false) * @@ -142,22 +136,44 @@ public class AuditMethodInterceptor implements MethodInterceptor public Object invoke(MethodInvocation mi) throws Throwable { - if(!enabled) + // Cache the enabled flag at the top of the stack + Boolean wasEnabled = auditEnabled.get(); + try { - // No auditing - return mi.proceed(); + boolean enabled; + if (wasEnabled == null) + { + // There hasn't been an invocation in this thread yet, so check whether we are currently enabled in the + // audit subsystem + enabled = this.auditComponent.isSourcePathMapped(AUDIT_PATH_API_ROOT); + auditEnabled.set(enabled); + } + else + { + enabled = wasEnabled; + } + + if(!enabled) + { + // No auditing + return mi.proceed(); + } + else if (useNewConfig) + { + // New configuration to be used + return proceed(mi); + } + else + { + // Use previous configuration + return auditComponent.audit(mi); + } } - else if (useNewConfig) + finally { - // New configuration to be used - return proceed(mi); + auditEnabled.set(wasEnabled); } - else - { - // Use previous configuration - return auditComponent.audit(mi); - } - + } /** diff --git a/source/java/org/alfresco/repo/audit/model/AuditModelReader.java b/source/java/org/alfresco/repo/audit/model/AuditModelReader.java index 693104ab5b..ae769be616 100644 --- a/source/java/org/alfresco/repo/audit/model/AuditModelReader.java +++ b/source/java/org/alfresco/repo/audit/model/AuditModelReader.java @@ -39,7 +39,8 @@ import org.springframework.util.ResourceUtils; public class AuditModelReader implements InitializingBean { private URL auditModelUrl; - private AuditModelRegistry auditModelRegistry; + private AuditModelRegistryImpl auditModelRegistry; + private boolean isActive = true; /** * Set the XML location using file:, classpath: or any of the @@ -56,16 +57,32 @@ public class AuditModelReader implements InitializingBean * * @param auditModelRegistry the registry that combines all loaded models */ - public void setAuditModelRegistry(AuditModelRegistry auditModelRegistry) + public void setAuditModelRegistry(AuditModelRegistryImpl auditModelRegistry) { this.auditModelRegistry = auditModelRegistry; } + + /** + * Controls whether or not this bean registers its model with the registry on initialization. + * + * @param isActive + * true if this bean should register its model with the registry on initialization. + */ + public void setActive(boolean isActive) + { + this.isActive = isActive; + } /** * Pulls in the configuration and registers it */ public void afterPropertiesSet() throws Exception { + if (!this.isActive) + { + return; + } + PropertyCheck.mandatory(this, "configUrl", auditModelUrl); PropertyCheck.mandatory(this, "auditModelRegistry", auditModelRegistry); diff --git a/source/java/org/alfresco/repo/audit/model/AuditModelRegistry.java b/source/java/org/alfresco/repo/audit/model/AuditModelRegistry.java index 1f307855ac..9c8d097605 100644 --- a/source/java/org/alfresco/repo/audit/model/AuditModelRegistry.java +++ b/source/java/org/alfresco/repo/audit/model/AuditModelRegistry.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2009 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,209 +18,27 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: - * http://www.alfresco.com/legal/licensing + * http://www.alfresco.com/legal/licensing" */ package org.alfresco.repo.audit.model; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.io.InputStream; import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.locks.ReentrantReadWriteLock; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBElement; -import javax.xml.bind.Unmarshaller; -import javax.xml.bind.ValidationEvent; -import javax.xml.bind.ValidationEventHandler; -import javax.xml.bind.ValidationEventLocator; -import javax.xml.validation.Schema; -import javax.xml.validation.SchemaFactory; - -import org.alfresco.error.AlfrescoRuntimeException; -import org.alfresco.error.ExceptionStackUtil; -import org.alfresco.repo.audit.extractor.DataExtractor; -import org.alfresco.repo.audit.generator.DataGenerator; -import org.alfresco.repo.audit.model._3.Application; -import org.alfresco.repo.audit.model._3.Audit; -import org.alfresco.repo.audit.model._3.DataExtractors; -import org.alfresco.repo.audit.model._3.DataGenerators; -import org.alfresco.repo.audit.model._3.ObjectFactory; -import org.alfresco.repo.audit.model._3.PathMap; -import org.alfresco.repo.audit.model._3.PathMappings; -import org.alfresco.repo.domain.audit.AuditDAO; -import org.alfresco.repo.domain.audit.AuditDAO.AuditApplicationInfo; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.transaction.TransactionService; import org.alfresco.util.PathMapper; -import org.springframework.extensions.surf.util.PropertyCheck; -import org.alfresco.util.registry.NamedObjectRegistry; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.springframework.util.ResourceUtils; -import org.xml.sax.SAXParseException; /** - * Component used to store audit model definitions. It ensures that duplicate application and converter - * definitions are detected and provides a single lookup for code using the Audit model. + * Interface for component used to store audit model definitions. * * @author Derek Hulley - * @since 3.2 + * @since 3.3 */ -public class AuditModelRegistry +public interface AuditModelRegistry { - public static final String AUDIT_SCHEMA_LOCATION = "classpath:alfresco/audit/alfresco-audit-3.2.xsd"; public static final String AUDIT_RESERVED_KEY_USERNAME = "username"; public static final String AUDIT_RESERVED_KEY_SYSTEMTIME = "systemTime"; - - private static final Log logger = LogFactory.getLog(AuditModelRegistry.class); - - private TransactionService transactionService; - private AuditDAO auditDAO; - private NamedObjectRegistry dataExtractors; - private NamedObjectRegistry dataGenerators; - - private final ReentrantReadWriteLock.ReadLock readLock; - private final ReentrantReadWriteLock.WriteLock writeLock; - private final ObjectFactory objectFactory; - - private final Set auditModelUrls; - private final List auditModels; - /** - * Used to lookup path translations - */ - private PathMapper auditPathMapper; - /** - * Used to lookup the audit application java hierarchy - */ - private final Map auditApplicationsByKey; - /** - * Used to lookup the audit application java hierarchy - */ - private final Map auditApplicationsByName; - - /** - * Default constructor - */ - public AuditModelRegistry() - { - ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); - readLock = lock.readLock(); - writeLock = lock.writeLock(); - - objectFactory = new ObjectFactory(); - - auditModelUrls = new HashSet(7); - auditModels = new ArrayList(7); - auditPathMapper = new PathMapper(); - auditApplicationsByKey = new HashMap(7); - auditApplicationsByName = new HashMap(7); - } - /** - * Service to ensure DAO calls are transactionally wrapped - */ - public void setTransactionService(TransactionService transactionService) - { - this.transactionService = transactionService; - } - - /** - * Set the DAO used to persisted the registered audit models - */ - public void setAuditDAO(AuditDAO auditDAO) - { - this.auditDAO = auditDAO; - } - - /** - * Set the registry of {@link DataExtractor data extractors} - */ - public void setDataExtractors(NamedObjectRegistry dataExtractors) - { - this.dataExtractors = dataExtractors; - } - - /** - * Set the registry of {@link DataGenerator data generators} - */ - public void setDataGenerators(NamedObjectRegistry dataGenerators) - { - this.dataGenerators = dataGenerators; - } - - /** - * Ensures that all properties have been set for use. - */ - private void checkProperties() - { - PropertyCheck.mandatory(this, "transactionService", transactionService); - PropertyCheck.mandatory(this, "auditDAO", auditDAO); - PropertyCheck.mandatory(this, "dataExtractors", dataExtractors); - PropertyCheck.mandatory(this, "dataGenerators", dataGenerators); - } - - /** - * Register an audit model at a given URL. - * - * @param auditModelUrl the source of the model - */ - public void registerModel(URL auditModelUrl) - { - checkProperties(); - writeLock.lock(); - try - { - if (auditModelUrls.contains(auditModelUrl)) - { - logger.warn("An audit model has already been registered at URL " + auditModelUrl); - } - auditModelUrls.add(auditModelUrl); - } - finally - { - writeLock.unlock(); - } - } - - /** - * Register an audit model at a given node reference. - * - * @param auditModelNodeRef the source of the audit model - */ - public void registerModel(NodeRef auditModelNodeRef) - { - checkProperties(); - writeLock.lock(); - try - { - throw new UnsupportedOperationException(); - } - finally - { - writeLock.unlock(); - } - } - - /** - * Cleans out all derived data - */ - private void clearCaches() - { - auditModels.clear(); - auditApplicationsByKey.clear(); - auditApplicationsByName.clear(); - } - /** * Method to load audit models into memory. This method is also responsible for persisting * the audit models for later retrieval. Models are loaded from the locations given by the @@ -229,364 +47,27 @@ public class AuditModelRegistry * Note, the models are loaded in a new transaction, so this method can be called by any code * at any time. */ - public void loadAuditModels() - { - checkProperties(); - - RetryingTransactionCallback loadModelsCallback = new RetryingTransactionCallback() - { - public Void execute() throws Throwable - { - // Load models from the URLs - Set auditModelUrlsInner = new HashSet(auditModelUrls); - for (URL auditModelUrl : auditModelUrlsInner) - { - try - { - Audit audit = AuditModelRegistry.unmarshallModel(auditModelUrl); - // That worked, so now get an input stream and write the model - Long auditModelId = auditDAO.getOrCreateAuditModel(auditModelUrl).getFirst(); - // Now cache it (eagerly) - cacheAuditElements(auditModelId, audit); - } - catch (Throwable e) - { - // Mainly for test purposes, we clear out the failed URL - auditModelUrls.remove(auditModelUrl); - clearCaches(); - - throw new AuditModelException( - "Failed to load audit model: " + auditModelUrl, - e); - } - } - // NOTE: If we support other types of loading, then that will have to go here, too - - // Done - return null; - } - }; + public void loadAuditModels(); - writeLock.lock(); - // Drop all cached data - clearCaches(); - try - { - auditPathMapper = new PathMapper(); - transactionService.getRetryingTransactionHelper().doInTransaction(loadModelsCallback, - transactionService.isReadOnly(), true); - auditPathMapper.lock(); - } - finally - { - writeLock.unlock(); - } - } - /** * Get the application model for the given root key (as defined on the application) * * @param key the key defined on the application * @return the java model (null if not found) */ - public AuditApplication getAuditApplicationByKey(String key) - { - readLock.lock(); - try - { - return auditApplicationsByKey.get(key); - } - finally - { - readLock.unlock(); - } - } - + public AuditApplication getAuditApplicationByKey(String key); + /** * Get the application model for the given application name * * @param applicationName the name of the audited application * @return the java model (null if not found) */ - public AuditApplication getAuditApplicationByName(String applicationName) - { - readLock.lock(); - try - { - return auditApplicationsByName.get(applicationName); - } - finally - { - readLock.unlock(); - } - } - - /** - * Get the - * @return - */ - public PathMapper getAuditPathMapper() - { - return auditPathMapper; - } - - /** - * Unmarshalls the Audit model from the URL. - * - * @throws AlfrescoRuntimeException if an IOException occurs - */ - public static Audit unmarshallModel(URL configUrl) - { - try - { - // Load it - InputStream is = new BufferedInputStream(configUrl.openStream()); - return unmarshallModel(is, configUrl.toString()); - } - catch (IOException e) - { - throw new AlfrescoRuntimeException("The Audit model XML failed to load: " + configUrl, e); - } - } + public AuditApplication getAuditApplicationByName(String applicationName); /** - * Unmarshalls the Audit model from a stream + * Get the path mapper. + * @return the path mapper */ - private static Audit unmarshallModel(InputStream is, final String source) - { - final Schema schema; - final JAXBContext jaxbCtx; - final Unmarshaller jaxbUnmarshaller; - try - { - SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI); - schema = sf.newSchema(ResourceUtils.getURL(AUDIT_SCHEMA_LOCATION)); - jaxbCtx = JAXBContext.newInstance("org.alfresco.repo.audit.model._3"); - jaxbUnmarshaller = jaxbCtx.createUnmarshaller(); - jaxbUnmarshaller.setSchema(schema); - jaxbUnmarshaller.setEventHandler(new ValidationEventHandler() - { - public boolean handleEvent(ValidationEvent ve) - { - if (ve.getSeverity() == ValidationEvent.FATAL_ERROR || ve.getSeverity() == ValidationEvent.ERROR) - { - ValidationEventLocator locator = ve.getLocator(); - logger.error("Invalid Audit XML: \n" + - " Source: " + source + "\n" + - " Location: Line " + locator.getLineNumber() + " column " + locator.getColumnNumber() + "\n" + - " Error: " + ve.getMessage()); - } - return false; - } - }); - } - catch (Throwable e) - { - throw new AlfrescoRuntimeException( - "Failed to load Alfresco Audit Schema from " + AUDIT_SCHEMA_LOCATION, e); - } - try - { - // Unmarshall with validation - @SuppressWarnings("unchecked") - JAXBElement auditElement = (JAXBElement) jaxbUnmarshaller.unmarshal(is); - - Audit audit = auditElement.getValue(); - // Done - return audit; - } - catch (Throwable e) - { - // Dig out a SAXParseException, if there is one - Throwable saxError = ExceptionStackUtil.getCause(e, SAXParseException.class); - if (saxError != null) - { - e = saxError; - } - throw new AuditModelException( - "Failed to read Audit model XML: \n" + - " Source: " + source + "\n" + - " Error: " + e.getMessage()); - } - finally - { - try { is.close(); } catch (IOException e) {} - } - } - - private void cacheAuditElements(Long auditModelId, Audit audit) - { - Map dataExtractorsByName = new HashMap(13); - Map dataGeneratorsByName = new HashMap(13); - - // Get the data extractors and check for duplicates - DataExtractors extractorsElement = audit.getDataExtractors(); - if (extractorsElement == null) - { - extractorsElement = objectFactory.createDataExtractors(); - } - List extractorElements = extractorsElement.getDataExtractor(); - for (org.alfresco.repo.audit.model._3.DataExtractor extractorElement : extractorElements) - { - String name = extractorElement.getName(); - // If the name is taken, make sure that they are equal - if (dataExtractorsByName.containsKey(name)) - { - throw new AuditModelException( - "Audit data extractor '" + name + "' has already been defined."); - } - // Construct the converter - final DataExtractor dataExtractor; - if (extractorElement.getClazz() != null) - { - try - { - Class dataExtractorClazz = Class.forName(extractorElement.getClazz()); - dataExtractor = (DataExtractor) dataExtractorClazz.newInstance(); - } - catch (ClassNotFoundException e) - { - throw new AuditModelException( - "Audit data extractor '" + name + "' class not found: " + extractorElement.getClazz()); - } - catch (Exception e) - { - throw new AuditModelException( - "Audit data extractor '" + name + "' could not be constructed: " + extractorElement.getClazz()); - } - } - else if (extractorElement.getRegisteredName() != null) - { - String registeredName = extractorElement.getRegisteredName(); - dataExtractor = dataExtractors.getNamedObject(registeredName); - if (dataExtractor == null) - { - throw new AuditModelException( - "No registered audit data extractor exists for '" + registeredName + "'."); - } - } - else - { - throw new AuditModelException( - "Audit data extractor has no class or registered name: " + name); - } - // Store - dataExtractorsByName.put(name, dataExtractor); - } - // Get the data generators and check for duplicates - DataGenerators generatorsElement = audit.getDataGenerators(); - if (generatorsElement == null) - { - generatorsElement = objectFactory.createDataGenerators(); - } - List generatorElements = generatorsElement.getDataGenerator(); - for (org.alfresco.repo.audit.model._3.DataGenerator generatorElement : generatorElements) - { - String name = generatorElement.getName(); - // If the name is taken, make sure that they are equal - if (dataGeneratorsByName.containsKey(name)) - { - throw new AuditModelException( - "Audit data generator '" + name + "' has already been defined."); - } - // Construct the generator - final DataGenerator dataGenerator; - if (generatorElement.getClazz() != null) - { - try - { - Class dataGeneratorClazz = Class.forName(generatorElement.getClazz()); - dataGenerator = (DataGenerator) dataGeneratorClazz.newInstance(); - } - catch (ClassNotFoundException e) - { - throw new AuditModelException( - "Audit data generator '" + name + "' class not found: " + generatorElement.getClazz()); - } - catch (Exception e) - { - throw new AuditModelException( - "Audit data generator '" + name + "' could not be constructed: " + generatorElement.getClazz()); - } - } - else if (generatorElement.getRegisteredName() != null) - { - String registeredName = generatorElement.getRegisteredName(); - dataGenerator = dataGenerators.getNamedObject(registeredName); - if (dataGenerator == null) - { - throw new AuditModelException( - "No registered audit data generator exists for '" + registeredName + "'."); - } - } - else - { - throw new AuditModelException( - "Audit data generator has no class or registered name: " + name); - } - // Store - dataGeneratorsByName.put(name, dataGenerator); - } - // Get the application and check for duplicates - List applications = audit.getApplication(); - for (Application application : applications) - { - String key = application.getKey(); - if (auditApplicationsByKey.containsKey(key)) - { - throw new AuditModelException( - "Audit application key '" + key + "' is used by: " + auditApplicationsByKey.get(key)); - } - - String name = application.getName(); - if (auditApplicationsByName.containsKey(name)) - { - throw new AuditModelException( - "Audit application '" + name + "' is used by: " + auditApplicationsByName.get(name)); - } - - // Get the ID of the application - AuditApplicationInfo appInfo = auditDAO.getAuditApplication(name); - if (appInfo == null) - { - appInfo = auditDAO.createAuditApplication(name, auditModelId); - } - else - { - // Update it with the new model ID - auditDAO.updateAuditApplicationModel(appInfo.getId(), auditModelId); - } - - AuditApplication wrapperApp = new AuditApplication( - dataExtractorsByName, - dataGeneratorsByName, - application, - appInfo.getId(), - appInfo.getDisabledPathsId()); - auditApplicationsByName.put(name, wrapperApp); - auditApplicationsByKey.put(key, wrapperApp); - } - // Pull out all the audit path maps - buildAuditPathMap(audit); - // Store the model itself - auditModels.add(audit); - } - - /** - * Construct the reverse lookup maps for quick conversion of data to target maps - */ - private void buildAuditPathMap(Audit audit) - { - PathMappings pathMappings = audit.getPathMappings(); - if (pathMappings == null) - { - pathMappings = objectFactory.createPathMappings(); - } - for (PathMap pathMap : pathMappings.getPathMap()) - { - String sourcePath = pathMap.getSource(); - String targetPath = pathMap.getTarget(); - auditPathMapper.addPathMap(sourcePath, targetPath); - } - } -} + public PathMapper getAuditPathMapper(); +} \ No newline at end of file diff --git a/source/java/org/alfresco/repo/audit/model/AuditModelRegistryImpl.java b/source/java/org/alfresco/repo/audit/model/AuditModelRegistryImpl.java new file mode 100644 index 0000000000..32c7fa0b36 --- /dev/null +++ b/source/java/org/alfresco/repo/audit/model/AuditModelRegistryImpl.java @@ -0,0 +1,578 @@ +/* + * Copyright (C) 2005-2010 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 received 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.audit.model; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBElement; +import javax.xml.bind.Unmarshaller; +import javax.xml.bind.ValidationEvent; +import javax.xml.bind.ValidationEventHandler; +import javax.xml.bind.ValidationEventLocator; +import javax.xml.validation.Schema; +import javax.xml.validation.SchemaFactory; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.error.ExceptionStackUtil; +import org.alfresco.repo.audit.extractor.DataExtractor; +import org.alfresco.repo.audit.generator.DataGenerator; +import org.alfresco.repo.audit.model._3.Application; +import org.alfresco.repo.audit.model._3.Audit; +import org.alfresco.repo.audit.model._3.DataExtractors; +import org.alfresco.repo.audit.model._3.DataGenerators; +import org.alfresco.repo.audit.model._3.ObjectFactory; +import org.alfresco.repo.audit.model._3.PathMap; +import org.alfresco.repo.audit.model._3.PathMappings; +import org.alfresco.repo.domain.audit.AuditDAO; +import org.alfresco.repo.domain.audit.AuditDAO.AuditApplicationInfo; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.transaction.TransactionService; +import org.alfresco.util.PathMapper; +import org.alfresco.util.registry.NamedObjectRegistry; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.extensions.surf.util.PropertyCheck; +import org.springframework.util.ResourceUtils; +import org.xml.sax.SAXParseException; + +/** + * Component used to store audit model definitions. It ensures that duplicate application and converter + * definitions are detected and provides a single lookup for code using the Audit model. + * + * @author Derek Hulley + * @since 3.2 + */ +public class AuditModelRegistryImpl implements AuditModelRegistry +{ + private static final String AUDIT_SCHEMA_LOCATION = "classpath:alfresco/audit/alfresco-audit-3.2.xsd"; + + private static final Log logger = LogFactory.getLog(AuditModelRegistryImpl.class); + + private TransactionService transactionService; + private AuditDAO auditDAO; + private NamedObjectRegistry dataExtractors; + private NamedObjectRegistry dataGenerators; + + private final ReentrantReadWriteLock.ReadLock readLock; + private final ReentrantReadWriteLock.WriteLock writeLock; + private final ObjectFactory objectFactory; + + private final Set auditModelUrls; + private final List auditModels; + /** + * Used to lookup path translations + */ + private PathMapper auditPathMapper; + /** + * Used to lookup the audit application java hierarchy + */ + private final Map auditApplicationsByKey; + /** + * Used to lookup the audit application java hierarchy + */ + private final Map auditApplicationsByName; + + /** + * Default constructor + */ + public AuditModelRegistryImpl() + { + ReentrantReadWriteLock lock = new ReentrantReadWriteLock(); + readLock = lock.readLock(); + writeLock = lock.writeLock(); + + objectFactory = new ObjectFactory(); + + auditModelUrls = new HashSet(7); + auditModels = new ArrayList(7); + auditPathMapper = new PathMapper(); + auditApplicationsByKey = new HashMap(7); + auditApplicationsByName = new HashMap(7); + } + + /** + * Service to ensure DAO calls are transactionally wrapped + */ + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + + /** + * Set the DAO used to persisted the registered audit models + */ + public void setAuditDAO(AuditDAO auditDAO) + { + this.auditDAO = auditDAO; + } + + /** + * Set the registry of {@link DataExtractor data extractors} + */ + public void setDataExtractors(NamedObjectRegistry dataExtractors) + { + this.dataExtractors = dataExtractors; + } + + /** + * Set the registry of {@link DataGenerator data generators} + */ + public void setDataGenerators(NamedObjectRegistry dataGenerators) + { + this.dataGenerators = dataGenerators; + } + + /** + * Ensures that all properties have been set for use. + */ + private void checkProperties() + { + PropertyCheck.mandatory(this, "transactionService", transactionService); + PropertyCheck.mandatory(this, "auditDAO", auditDAO); + PropertyCheck.mandatory(this, "dataExtractors", dataExtractors); + PropertyCheck.mandatory(this, "dataGenerators", dataGenerators); + } + + /** + * Register an audit model at a given URL. + * + * @param auditModelUrl the source of the model + */ + public void registerModel(URL auditModelUrl) + { + checkProperties(); + writeLock.lock(); + try + { + if (auditModelUrls.contains(auditModelUrl)) + { + logger.warn("An audit model has already been registered at URL " + auditModelUrl); + } + auditModelUrls.add(auditModelUrl); + } + finally + { + writeLock.unlock(); + } + } + + /** + * Register an audit model at a given node reference. + * + * @param auditModelNodeRef the source of the audit model + */ + public void registerModel(NodeRef auditModelNodeRef) + { + checkProperties(); + writeLock.lock(); + try + { + throw new UnsupportedOperationException(); + } + finally + { + writeLock.unlock(); + } + } + + /** + * Cleans out all derived data + */ + private void clearCaches() + { + auditModels.clear(); + auditApplicationsByKey.clear(); + auditApplicationsByName.clear(); + } + + /** + * @see org.alfresco.repo.audit.model.AuditModelRegistry#loadAuditModels() + */ + public void loadAuditModels() + { + checkProperties(); + + RetryingTransactionCallback loadModelsCallback = new RetryingTransactionCallback() + { + public Void execute() throws Throwable + { + // Load models from the URLs + Set auditModelUrlsInner = new HashSet(auditModelUrls); + for (URL auditModelUrl : auditModelUrlsInner) + { + try + { + Audit audit = AuditModelRegistryImpl.unmarshallModel(auditModelUrl); + // That worked, so now get an input stream and write the model + Long auditModelId = auditDAO.getOrCreateAuditModel(auditModelUrl).getFirst(); + // Now cache it (eagerly) + cacheAuditElements(auditModelId, audit); + } + catch (Throwable e) + { + // Mainly for test purposes, we clear out the failed URL + auditModelUrls.remove(auditModelUrl); + clearCaches(); + + throw new AuditModelException( + "Failed to load audit model: " + auditModelUrl, + e); + } + } + // NOTE: If we support other types of loading, then that will have to go here, too + + // Done + return null; + } + }; + + writeLock.lock(); + // Drop all cached data + clearCaches(); + try + { + auditPathMapper = new PathMapper(); + transactionService.getRetryingTransactionHelper().doInTransaction(loadModelsCallback, + transactionService.isReadOnly(), true); + auditPathMapper.lock(); + } + finally + { + writeLock.unlock(); + } + } + + /** + * @see org.alfresco.repo.audit.model.AuditModelRegistry#getAuditApplicationByKey(java.lang.String) + */ + public AuditApplication getAuditApplicationByKey(String key) + { + readLock.lock(); + try + { + return auditApplicationsByKey.get(key); + } + finally + { + readLock.unlock(); + } + } + + /** + * @see org.alfresco.repo.audit.model.AuditModelRegistry#getAuditApplicationByName(java.lang.String) + */ + public AuditApplication getAuditApplicationByName(String applicationName) + { + readLock.lock(); + try + { + return auditApplicationsByName.get(applicationName); + } + finally + { + readLock.unlock(); + } + } + + /** + * @see org.alfresco.repo.audit.model.AuditModelRegistry#getAuditPathMapper() + */ + public PathMapper getAuditPathMapper() + { + return auditPathMapper; + } + + /** + * Unmarshalls the Audit model from the URL. + * + * @throws AlfrescoRuntimeException if an IOException occurs + */ + public static Audit unmarshallModel(URL configUrl) + { + try + { + // Load it + InputStream is = new BufferedInputStream(configUrl.openStream()); + return unmarshallModel(is, configUrl.toString()); + } + catch (IOException e) + { + throw new AlfrescoRuntimeException("The Audit model XML failed to load: " + configUrl, e); + } + } + + /** + * Unmarshalls the Audit model from a stream + */ + private static Audit unmarshallModel(InputStream is, final String source) + { + final Schema schema; + final JAXBContext jaxbCtx; + final Unmarshaller jaxbUnmarshaller; + try + { + SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI); + schema = sf.newSchema(ResourceUtils.getURL(AUDIT_SCHEMA_LOCATION)); + jaxbCtx = JAXBContext.newInstance("org.alfresco.repo.audit.model._3"); + jaxbUnmarshaller = jaxbCtx.createUnmarshaller(); + jaxbUnmarshaller.setSchema(schema); + jaxbUnmarshaller.setEventHandler(new ValidationEventHandler() + { + public boolean handleEvent(ValidationEvent ve) + { + if (ve.getSeverity() == ValidationEvent.FATAL_ERROR || ve.getSeverity() == ValidationEvent.ERROR) + { + ValidationEventLocator locator = ve.getLocator(); + logger.error("Invalid Audit XML: \n" + + " Source: " + source + "\n" + + " Location: Line " + locator.getLineNumber() + " column " + locator.getColumnNumber() + "\n" + + " Error: " + ve.getMessage()); + } + return false; + } + }); + } + catch (Throwable e) + { + throw new AlfrescoRuntimeException( + "Failed to load Alfresco Audit Schema from " + AUDIT_SCHEMA_LOCATION, e); + } + try + { + // Unmarshall with validation + @SuppressWarnings("unchecked") + JAXBElement auditElement = (JAXBElement) jaxbUnmarshaller.unmarshal(is); + + Audit audit = auditElement.getValue(); + // Done + return audit; + } + catch (Throwable e) + { + // Dig out a SAXParseException, if there is one + Throwable saxError = ExceptionStackUtil.getCause(e, SAXParseException.class); + if (saxError != null) + { + e = saxError; + } + throw new AuditModelException( + "Failed to read Audit model XML: \n" + + " Source: " + source + "\n" + + " Error: " + e.getMessage()); + } + finally + { + try { is.close(); } catch (IOException e) {} + } + } + + private void cacheAuditElements(Long auditModelId, Audit audit) + { + Map dataExtractorsByName = new HashMap(13); + Map dataGeneratorsByName = new HashMap(13); + + // Get the data extractors and check for duplicates + DataExtractors extractorsElement = audit.getDataExtractors(); + if (extractorsElement == null) + { + extractorsElement = objectFactory.createDataExtractors(); + } + List extractorElements = extractorsElement.getDataExtractor(); + for (org.alfresco.repo.audit.model._3.DataExtractor extractorElement : extractorElements) + { + String name = extractorElement.getName(); + // If the name is taken, make sure that they are equal + if (dataExtractorsByName.containsKey(name)) + { + throw new AuditModelException( + "Audit data extractor '" + name + "' has already been defined."); + } + // Construct the converter + final DataExtractor dataExtractor; + if (extractorElement.getClazz() != null) + { + try + { + Class dataExtractorClazz = Class.forName(extractorElement.getClazz()); + dataExtractor = (DataExtractor) dataExtractorClazz.newInstance(); + } + catch (ClassNotFoundException e) + { + throw new AuditModelException( + "Audit data extractor '" + name + "' class not found: " + extractorElement.getClazz()); + } + catch (Exception e) + { + throw new AuditModelException( + "Audit data extractor '" + name + "' could not be constructed: " + extractorElement.getClazz()); + } + } + else if (extractorElement.getRegisteredName() != null) + { + String registeredName = extractorElement.getRegisteredName(); + dataExtractor = dataExtractors.getNamedObject(registeredName); + if (dataExtractor == null) + { + throw new AuditModelException( + "No registered audit data extractor exists for '" + registeredName + "'."); + } + } + else + { + throw new AuditModelException( + "Audit data extractor has no class or registered name: " + name); + } + // Store + dataExtractorsByName.put(name, dataExtractor); + } + // Get the data generators and check for duplicates + DataGenerators generatorsElement = audit.getDataGenerators(); + if (generatorsElement == null) + { + generatorsElement = objectFactory.createDataGenerators(); + } + List generatorElements = generatorsElement.getDataGenerator(); + for (org.alfresco.repo.audit.model._3.DataGenerator generatorElement : generatorElements) + { + String name = generatorElement.getName(); + // If the name is taken, make sure that they are equal + if (dataGeneratorsByName.containsKey(name)) + { + throw new AuditModelException( + "Audit data generator '" + name + "' has already been defined."); + } + // Construct the generator + final DataGenerator dataGenerator; + if (generatorElement.getClazz() != null) + { + try + { + Class dataGeneratorClazz = Class.forName(generatorElement.getClazz()); + dataGenerator = (DataGenerator) dataGeneratorClazz.newInstance(); + } + catch (ClassNotFoundException e) + { + throw new AuditModelException( + "Audit data generator '" + name + "' class not found: " + generatorElement.getClazz()); + } + catch (Exception e) + { + throw new AuditModelException( + "Audit data generator '" + name + "' could not be constructed: " + generatorElement.getClazz()); + } + } + else if (generatorElement.getRegisteredName() != null) + { + String registeredName = generatorElement.getRegisteredName(); + dataGenerator = dataGenerators.getNamedObject(registeredName); + if (dataGenerator == null) + { + throw new AuditModelException( + "No registered audit data generator exists for '" + registeredName + "'."); + } + } + else + { + throw new AuditModelException( + "Audit data generator has no class or registered name: " + name); + } + // Store + dataGeneratorsByName.put(name, dataGenerator); + } + // Get the application and check for duplicates + List applications = audit.getApplication(); + for (Application application : applications) + { + String key = application.getKey(); + if (auditApplicationsByKey.containsKey(key)) + { + throw new AuditModelException( + "Audit application key '" + key + "' is used by: " + auditApplicationsByKey.get(key)); + } + + String name = application.getName(); + if (auditApplicationsByName.containsKey(name)) + { + throw new AuditModelException( + "Audit application '" + name + "' is used by: " + auditApplicationsByName.get(name)); + } + + // Get the ID of the application + AuditApplicationInfo appInfo = auditDAO.getAuditApplication(name); + if (appInfo == null) + { + appInfo = auditDAO.createAuditApplication(name, auditModelId); + } + else + { + // Update it with the new model ID + auditDAO.updateAuditApplicationModel(appInfo.getId(), auditModelId); + } + + AuditApplication wrapperApp = new AuditApplication( + dataExtractorsByName, + dataGeneratorsByName, + application, + appInfo.getId(), + appInfo.getDisabledPathsId()); + auditApplicationsByName.put(name, wrapperApp); + auditApplicationsByKey.put(key, wrapperApp); + } + // Pull out all the audit path maps + buildAuditPathMap(audit); + // Store the model itself + auditModels.add(audit); + } + + /** + * Construct the reverse lookup maps for quick conversion of data to target maps + */ + private void buildAuditPathMap(Audit audit) + { + PathMappings pathMappings = audit.getPathMappings(); + if (pathMappings == null) + { + pathMappings = objectFactory.createPathMappings(); + } + for (PathMap pathMap : pathMappings.getPathMap()) + { + String sourcePath = pathMap.getSource(); + String targetPath = pathMap.getTarget(); + auditPathMapper.addPathMap(sourcePath, targetPath); + } + } +} diff --git a/source/java/org/alfresco/repo/dictionary/M2AnonymousTypeDefinition.java b/source/java/org/alfresco/repo/dictionary/M2AnonymousTypeDefinition.java index 1b52eccbc8..5f01a028a9 100644 --- a/source/java/org/alfresco/repo/dictionary/M2AnonymousTypeDefinition.java +++ b/source/java/org/alfresco/repo/dictionary/M2AnonymousTypeDefinition.java @@ -158,6 +158,11 @@ import org.alfresco.service.namespace.QName; { return type.getArchive(); } + + public Boolean getIncludedInSuperTypeQuery() + { + return type.getIncludedInSuperTypeQuery(); + } /* (non-Javadoc) * @see org.alfresco.repo.dictionary.ClassDefinition#getProperties() diff --git a/source/java/org/alfresco/repo/dictionary/M2Class.java b/source/java/org/alfresco/repo/dictionary/M2Class.java index 576261646f..0aeb42a014 100644 --- a/source/java/org/alfresco/repo/dictionary/M2Class.java +++ b/source/java/org/alfresco/repo/dictionary/M2Class.java @@ -41,6 +41,7 @@ public abstract class M2Class private String description = null; private String parentName = null; private Boolean archive = null; + private Boolean includedInSuperTypeQuery = null; private List properties = new ArrayList(); private List propertyOverrides = new ArrayList(); @@ -109,6 +110,16 @@ public abstract class M2Class { this.archive = Boolean.valueOf(archive); } + + public Boolean getIncludedInSuperTypeQuery() + { + return includedInSuperTypeQuery; + } + + public void setIncludedInSuperTypeQuery(boolean includedInSuperTypeQuery) + { + this.includedInSuperTypeQuery = Boolean.valueOf(includedInSuperTypeQuery); + } public M2Property createProperty(String name) { diff --git a/source/java/org/alfresco/repo/dictionary/M2ClassDefinition.java b/source/java/org/alfresco/repo/dictionary/M2ClassDefinition.java index 8eeee1e82b..10154762bd 100644 --- a/source/java/org/alfresco/repo/dictionary/M2ClassDefinition.java +++ b/source/java/org/alfresco/repo/dictionary/M2ClassDefinition.java @@ -71,6 +71,8 @@ import org.alfresco.util.EqualsHelper; private Set inheritedDefaultAspectNames = new HashSet(); private Boolean archive = null; private Boolean inheritedArchive = null; + private Boolean includedInSuperTypeQuery = null; + private Boolean inheritedIncludedInSuperTypeQuery = null; /** * Construct @@ -88,6 +90,7 @@ import org.alfresco.util.EqualsHelper; // Resolve Names this.name = QName.createQName(m2Class.getName(), resolver); this.archive = m2Class.getArchive(); + this.includedInSuperTypeQuery = m2Class.getIncludedInSuperTypeQuery(); if (m2Class.getParentName() != null && m2Class.getParentName().length() > 0) { this.parentName = QName.createQName(m2Class.getParentName(), resolver); @@ -315,6 +318,13 @@ import org.alfresco.util.EqualsHelper; // archive not explicitly set on this class and there is a parent class inheritedArchive = ((M2ClassDefinition)parentClass).getArchive(); } + + // resolve includedInSuperTypeQuery inheritance + if (parentClass != null && includedInSuperTypeQuery == null) + { + // archive not explicitly set on this class and there is a parent class + inheritedIncludedInSuperTypeQuery = ((M2ClassDefinition)parentClass).getIncludedInSuperTypeQuery(); + } } /* (non-Javadoc) @@ -382,6 +392,22 @@ import org.alfresco.util.EqualsHelper; { return archive == null ? inheritedArchive : archive; } + + /* (non-Javadoc) + * @see org.alfresco.service.cmr.dictionary.ClassDefinition#includedInSuperTypeQuery() + */ + public Boolean getIncludedInSuperTypeQuery() + { + if(includedInSuperTypeQuery != null) + { + return includedInSuperTypeQuery; + } + if(inheritedIncludedInSuperTypeQuery != null) + { + return inheritedIncludedInSuperTypeQuery; + } + return Boolean.TRUE; + } /* (non-Javadoc) * @see org.alfresco.repo.dictionary.ClassDefinition#getProperties() @@ -617,6 +643,23 @@ import org.alfresco.util.EqualsHelper; isUpdatedIncrementally = true; } } + + // check includedInSuperTypeQuery/inheritedIncludedInSuperTypeQuery + if (includedInSuperTypeQuery == null) + { + if (classDef.getIncludedInSuperTypeQuery() != null) + { + isUpdatedIncrementally = true; + } + } + else + { + Boolean classIncludedInSuperTypeQuery = classDef.getIncludedInSuperTypeQuery(); + if (classIncludedInSuperTypeQuery == null || classIncludedInSuperTypeQuery.booleanValue() != includedInSuperTypeQuery.booleanValue()) + { + isUpdatedIncrementally = true; + } + } String modelDiffType; if (isAspect()) diff --git a/source/java/org/alfresco/repo/dictionary/m2binding.xml b/source/java/org/alfresco/repo/dictionary/m2binding.xml index 194333aa18..84d39710eb 100644 --- a/source/java/org/alfresco/repo/dictionary/m2binding.xml +++ b/source/java/org/alfresco/repo/dictionary/m2binding.xml @@ -61,7 +61,8 @@ - + + diff --git a/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java b/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java index 4ec7d3fa60..00a3a3b743 100644 --- a/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/audit/AbstractAuditDAOImpl.java @@ -362,6 +362,12 @@ public abstract class AbstractAuditDAOImpl implements AuditDAO this.callback = callback; this.more = true; } + + public boolean valuesRequired() + { + return callback.valuesRequired(); + } + @SuppressWarnings("unchecked") public void processResult(AuditQueryResult row) { @@ -371,56 +377,53 @@ public abstract class AbstractAuditDAOImpl implements AuditDAO return; } // See if the value is available or if it has to be built up - Map auditValues = row.getAuditValue(); - if (auditValues == null) + Map auditValues = null; + if (valuesRequired()) { - List propMapRows = row.getAuditValueRows(); - if (propMapRows == null) + auditValues = row.getAuditValue(); + if (auditValues == null) { - // Use the audit values ID - Long auditValuesId = row.getAuditValuesId(); - Pair auditValuesPair = propertyValueDAO.getPropertyValueById(auditValuesId); - if (auditValuesPair == null) + List propMapRows = row.getAuditValueRows(); + if (propMapRows == null) { - // Ignore - more = callback.handleAuditEntryError( - row.getAuditEntryId(), - "Audit entry not joined to audit properties: " + row, - null); - return; + // Use the audit values ID + Long auditValuesId = row.getAuditValuesId(); + Pair auditValuesPair = propertyValueDAO.getPropertyValueById(auditValuesId); + if (auditValuesPair == null) + { + // Ignore + more = callback.handleAuditEntryError(row.getAuditEntryId(), + "Audit entry not joined to audit properties: " + row, null); + return; + } + auditValues = (Map) auditValuesPair.getSecond(); } - auditValues = (Map) auditValuesPair.getSecond(); - } - else - { - // Resolve the map - try + else { - auditValues = (Map) propertyValueDAO.convertPropertyIdSearchRows(propMapRows); - } - catch (ClassCastException e) - { - more = callback.handleAuditEntryError( - row.getAuditEntryId(), - "Audit entry not linked to a Map value: " + row, - e); - return; - } - catch (Throwable e) - { - more = callback.handleAuditEntryError( - row.getAuditEntryId(), - "Audit entry unable to extract audited values: " + row, - e); - return; - } - if (auditValues == null) - { - more = callback.handleAuditEntryError( - row.getAuditEntryId(), - "Audit entry incompletely joined to audit properties: " + row, - null); - return; + // Resolve the map + try + { + auditValues = (Map) propertyValueDAO + .convertPropertyIdSearchRows(propMapRows); + } + catch (ClassCastException e) + { + more = callback.handleAuditEntryError(row.getAuditEntryId(), + "Audit entry not linked to a Map value: " + row, e); + return; + } + catch (Throwable e) + { + more = callback.handleAuditEntryError(row.getAuditEntryId(), + "Audit entry unable to extract audited values: " + row, e); + return; + } + if (auditValues == null) + { + more = callback.handleAuditEntryError(row.getAuditEntryId(), + "Audit entry incompletely joined to audit properties: " + row, null); + return; + } } } } diff --git a/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java b/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java index 3eaaa783b3..5712cf4fd0 100644 --- a/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java +++ b/source/java/org/alfresco/repo/domain/audit/AuditDAOTest.java @@ -195,7 +195,12 @@ public class AuditDAOTest extends TestCase final LinkedList timestamps = new LinkedList(); // Find everything, but look for a specific key final AuditQueryCallback callback = new AuditQueryCallback() - { + { + public boolean valuesRequired() + { + return false; + } + public boolean handleAuditEntry( Long entryId, String applicationName, @@ -263,6 +268,11 @@ public class AuditDAOTest extends TestCase { final AuditQueryCallback noResultsCallback = new AuditQueryCallback() { + public boolean valuesRequired() + { + return false; + } + public boolean handleAuditEntry( Long entryId, String applicationName, diff --git a/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java b/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java index 3be6a7c995..280ffa1ad6 100644 --- a/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java +++ b/source/java/org/alfresco/repo/domain/audit/ibatis/AuditDAOImpl.java @@ -315,7 +315,8 @@ public class AuditDAOImpl extends AbstractAuditDAOImpl queryRowHandler, maxResults); - template.queryWithRowHandler(SELECT_ENTRIES_WITH_VALUES, params, rollupRowHandler); + template.queryWithRowHandler(rowHandler.valuesRequired() ? SELECT_ENTRIES_WITH_VALUES + : SELECT_ENTRIES_WITHOUT_VALUES, params, rollupRowHandler); rollupRowHandler.processLastResults(); } } diff --git a/source/java/org/alfresco/repo/jscript/RhinoScriptProcessor.java b/source/java/org/alfresco/repo/jscript/RhinoScriptProcessor.java index c73ec95760..8a098016c1 100644 --- a/source/java/org/alfresco/repo/jscript/RhinoScriptProcessor.java +++ b/source/java/org/alfresco/repo/jscript/RhinoScriptProcessor.java @@ -448,7 +448,7 @@ public class RhinoScriptProcessor extends BaseProcessor implements ScriptProcess Object result = script.exec(cx, scope); // extract java object result if wrapped by Rhino - return valueConverter.convertValueForRepo((Serializable)result); + return valueConverter.convertValueForJava(result); } catch (WrappedException w) { diff --git a/source/java/org/alfresco/repo/jscript/ValueConverter.java b/source/java/org/alfresco/repo/jscript/ValueConverter.java index 4e23056ee8..a9de518d37 100644 --- a/source/java/org/alfresco/repo/jscript/ValueConverter.java +++ b/source/java/org/alfresco/repo/jscript/ValueConverter.java @@ -25,6 +25,7 @@ package org.alfresco.repo.jscript; import java.io.Serializable; +import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -64,6 +65,7 @@ public class ValueConverter * * @return Value safe for scripting usage */ + @SuppressWarnings("unchecked") public Serializable convertValueForScript(ServiceRegistry services, Scriptable scope, QName qname, Serializable value) { // perform conversions from Java objects to JavaScript scriptable instances @@ -133,8 +135,7 @@ public class ValueConverter return value; } - - + /** * Convert an object from any script wrapper value to a valid repository serializable value. * This includes converting JavaScript Array objects to Lists of valid objects. @@ -144,6 +145,12 @@ public class ValueConverter * @return valid repo value */ public Serializable convertValueForRepo(Serializable value) + { + Object converted = convertValueForJava((Object)value); + return converted instanceof Serializable ? (Serializable)converted : value; + } + + public final Object convertValueForJava(Object value) { if (value == null) { @@ -166,7 +173,7 @@ public class ValueConverter { // unwrap a Java object from a JavaScript wrapper // recursively call this method to convert the unwrapped value - value = convertValueForRepo((Serializable)((Wrapper)value).unwrap()); + value = convertValueForJava(((Wrapper)value).unwrap()); } else if (value instanceof Scriptable) { @@ -179,19 +186,15 @@ public class ValueConverter // TODO: add code here to use the dictionary and convert to correct value type if (TYPE_DATE.equals(((IdScriptableObject)value).getClassName())) { - Object javaObj = Context.jsToJava(value, Date.class); - if (javaObj instanceof Serializable) - { - value = (Serializable)javaObj; - } + value = Context.jsToJava(value, Date.class); } else if (value instanceof NativeArray) { - // convert JavaScript array of values to a List of Serializable objects + // convert JavaScript array of values to a List of objects Object[] propIds = values.getIds(); if (isArray(propIds) == true) { - List propValues = new ArrayList(propIds.length); + List propValues = new ArrayList(propIds.length); for (int i=0; i propValues = new HashMap(propIds.length); + Map propValues = new HashMap(propIds.length); for (Object propId : propIds) { // Get the value and add to the map - Serializable val = (Serializable)values.get(propId.toString(), values); - propValues.put(convertValueForRepo((Serializable)propId), convertValueForRepo(val)); + Object val = values.get(propId.toString(), values); + propValues.put(convertValueForJava(propId), convertValueForJava(val)); } - value = (Serializable)propValues; + value = propValues; } } else { - // convert Scriptable object of values to a Map of Serializable objects + // convert Scriptable object of values to a Map of objects Object[] propIds = values.getIds(); - Map propValues = new HashMap(propIds.length); + Map propValues = new HashMap(propIds.length); for (int i=0; i propValues = new HashMap(propIds.length); + Map propValues = new HashMap(propIds.length); for (int i=0; i list = new ArrayList(array.length); - for (int i=0; i list = new ArrayList(length); + for (int i=0; i auditMap = new HashMap(13); + auditMap.put(NODE_PATH_COMPONENT, nodeRef); + auditMap = auditComponent.recordAuditValues(BEFORE_DELETE_NODE_PATH, auditMap); + if (logger.isDebugEnabled()) + { + logger.debug("NodeAuditor: Audited node deletion: \n" + auditMap); + } + } +} \ No newline at end of file diff --git a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java index e38de81f76..2481585a24 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneIndexerImpl.java @@ -97,7 +97,6 @@ import org.apache.lucene.search.Searcher; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.BooleanClause.Occur; - /** * The implementation of the lucene based indexer. Supports basic transactional behaviour if used on its own. * @@ -576,11 +575,12 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp { if (tenantService.isEnabled() && ((AuthenticationUtil.getRunAsUser() == null) || (AuthenticationUtil.isRunAsUserTheSystemUser()))) { - // ETHREEOH-2014 - dictionary access should be in context of tenant (eg. full reindex with MT dynamic models) + // ETHREEOH-2014 - dictionary access should be in context of tenant (eg. full reindex with MT dynamic + // models) return AuthenticationUtil.runAs(new RunAsWork>() { public List doWork() - { + { return createDocumentsImpl(stringNodeRef, isNew, indexAllProperties, includeDirectoryDocuments); } }, tenantService.getDomainUser(AuthenticationUtil.getSystemUserName(), tenantService.getDomain(new NodeRef(stringNodeRef).getStoreRef().getIdentifier()))); @@ -590,7 +590,7 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp return createDocumentsImpl(stringNodeRef, isNew, indexAllProperties, includeDirectoryDocuments); } } - + private List createDocumentsImpl(String stringNodeRef, boolean isNew, boolean indexAllProperties, boolean includeDirectoryDocuments) { NodeRef nodeRef = new NodeRef(stringNodeRef); @@ -617,9 +617,9 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp for (QName propertyName : properties.keySet()) { Serializable value = properties.get(propertyName); - + value = convertForMT(propertyName, value); - + if (indexAllProperties) { indexProperty(nodeRef, propertyName, value, xdoc, false); @@ -675,7 +675,8 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp qNameBuffer.append(ISO9075.getXPathName(qNameRef.getQName())); assocTypeQNameBuffer.append(ISO9075.getXPathName(qNameRef.getTypeQName())); xdoc.add(new Field("PARENT", qNameRef.getParentRef().toString(), Field.Store.YES, Field.Index.NO_NORMS, Field.TermVector.NO)); - //xdoc.add(new Field("ASSOCTYPEQNAME", ISO9075.getXPathName(qNameRef.getTypeQName()), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); + // xdoc.add(new Field("ASSOCTYPEQNAME", ISO9075.getXPathName(qNameRef.getTypeQName()), + // Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); xdoc.add(new Field("LINKASPECT", (pair.getSecond() == null) ? "" : ISO9075.getXPathName(pair.getSecond()), Field.Store.YES, Field.Index.NO_NORMS, Field.TermVector.NO)); } @@ -723,7 +724,7 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp xdoc.add(new Field("PATH", "", Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); xdoc.add(new Field("QNAME", "", Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); xdoc.add(new Field("ISROOT", "T", Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); - xdoc.add(new Field("PRIMARYASSOCTYPEQNAME", ISO9075.getXPathName(ContentModel.ASSOC_CHILDREN), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); + xdoc.add(new Field("PRIMARYASSOCTYPEQNAME", ISO9075.getXPathName(ContentModel.ASSOC_CHILDREN), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); xdoc.add(new Field("ISNODE", "T", Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); docs.add(xdoc); @@ -738,7 +739,7 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp ChildAssociationRef primary = nodeService.getPrimaryParent(nodeRef); xdoc.add(new Field("PRIMARYPARENT", tenantService.getName(primary.getParentRef()).toString(), Field.Store.YES, Field.Index.NO_NORMS, Field.TermVector.NO)); - xdoc.add(new Field("PRIMARYASSOCTYPEQNAME", ISO9075.getXPathName(primary.getTypeQName()), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); + xdoc.add(new Field("PRIMARYASSOCTYPEQNAME", ISO9075.getXPathName(primary.getTypeQName()), Field.Store.YES, Field.Index.TOKENIZED, Field.TermVector.NO)); QName typeQName = nodeService.getType(nodeRef); xdoc.add(new Field("TYPE", ISO9075.getXPathName(typeQName), Field.Store.YES, Field.Index.NO_NORMS, Field.TermVector.NO)); @@ -772,21 +773,22 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp return docs; } - + private Serializable convertForMT(QName propertyName, Serializable inboundValue) { - if (! tenantService.isEnabled()) + if (!tenantService.isEnabled()) { // no conversion return inboundValue; } - + PropertyDefinition propertyDef = getDictionaryService().getProperty(propertyName); - if ((propertyDef != null) && ((propertyDef.getDataType().getName().equals(DataTypeDefinition.NODE_REF)) || (propertyDef.getDataType().getName().equals(DataTypeDefinition.CATEGORY)))) + if ((propertyDef != null) + && ((propertyDef.getDataType().getName().equals(DataTypeDefinition.NODE_REF)) || (propertyDef.getDataType().getName().equals(DataTypeDefinition.CATEGORY)))) { if (inboundValue instanceof Collection) { - Collection in = (Collection)inboundValue; + Collection in = (Collection) inboundValue; ArrayList out = new ArrayList(in.size()); for (NodeRef o : in) { @@ -796,13 +798,13 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp } else { - return tenantService.getName((NodeRef)inboundValue); + return tenantService.getName((NodeRef) inboundValue); } } - + return inboundValue; } - + /** * @param indexAtomicPropertiesOnly * true to ignore all properties that must be indexed non-atomically @@ -1076,6 +1078,7 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp { doc.add(new Field(attributeName + "." + localeText + ".sort", t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); } + // locale free identifiers are in the default field doc.add(new Field(attributeName, t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); @@ -1114,6 +1117,12 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp { doc.add(new Field(attributeName + "." + localeText + ".sort", t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); } + else + { + // no locale + doc.add(new Field(attributeName + ".no_locale", t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); + } + } } catch (IOException e) @@ -1147,7 +1156,7 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp { locale = I18NUtil.getLocale(); } - + StringBuilder builder; MLAnalysisMode analysisMode; VerbatimAnalyser vba; @@ -1183,7 +1192,6 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp { doc.add(new Field(attributeName + "." + localeText + ".sort", t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); } - doc.add(new Field(attributeName, t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); } } @@ -1216,14 +1224,20 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp } else { - + } } - + + // localised sort support if (localeText.length() > 0) { doc.add(new Field(attributeName + "." + localeText + ".sort", t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); } + else + { + // All identifiers for cross language search as supported by false + doc.add(new Field(attributeName + ".no_locale", t.termText(), Field.Store.NO, Field.Index.NO_NORMS, Field.TermVector.NO)); + } } } catch (IOException e) @@ -1571,8 +1585,8 @@ public class ADMLuceneIndexerImpl extends AbstractLuceneIndexerImpl imp try { writer.addDocument(doc /* - * TODO: Select the language based analyser - */); + * TODO: Select the language based analyser + */); } catch (IOException 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 493e333091..531054044f 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/ADMLuceneTest.java @@ -221,6 +221,8 @@ public class ADMLuceneTest extends TestCase private QueryEngine queryEngine; + private NodeRef n15; + /** * */ @@ -418,6 +420,8 @@ public class ADMLuceneTest extends TestCase // nodeService.addAspect(n14, DictionaryBootstrap.ASPECT_QNAME_CONTENT, // properties); + n15 = nodeService.createNode(n13, ASSOC_TYPE_QNAME, QName.createQName("{namespace}fifteen"), ContentModel.TYPE_THUMBNAIL, getOrderProperties()).getChildRef(); + ContentWriter writer = contentService.getWriter(n14, ContentModel.PROP_CONTENT, true); writer.setEncoding("UTF-8"); // InputStream is = @@ -439,7 +443,7 @@ public class ADMLuceneTest extends TestCase nodeService.addChild(n12, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); nodeService.addChild(n13, n14, ASSOC_TYPE_QNAME, QName.createQName("{namespace}common")); - documentOrder = new NodeRef[] { rootNodeRef, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n3, n1, n2 }; + documentOrder = new NodeRef[] { rootNodeRef, n4, n5, n6, n7, n8, n9, n10, n11, n12, n13, n14, n15, n3, n1, n2 }; // TODO: Why was the cm:auditable aspect added here? // By adding it, the auditable properties were set automatically. @@ -476,7 +480,7 @@ public class ADMLuceneTest extends TestCase MLText mlText = new MLText(); mlText.addValue(Locale.ENGLISH, new String(new char[] { (char) ('a' + orderTextCount) }) + " banana"); - mlText.addValue(Locale.FRENCH, new String(new char[] { (char) ('z' - orderTextCount) }) + " banane"); + mlText.addValue(Locale.FRENCH, new String(new char[] { (char) ('Z' - orderTextCount) }) + " banane"); mlText.addValue(Locale.CHINESE, new String(new char[] { (char) ('香' + orderTextCount) }) + " 香蕉"); testProperties.put(orderMLText, mlText); @@ -687,7 +691,7 @@ public class ADMLuceneTest extends TestCase ResultSetMetaData md; results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); md = results.getResultSetMetaData(); for (ResultSetRow row : results) { @@ -710,7 +714,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); sp.setMaxPermissionChecks(2); @@ -738,8 +742,8 @@ public class ADMLuceneTest extends TestCase sp.setSkipCount(skip); sp.setMaxItems(max); ResultSet results = searcher.query(sp); - assertEquals("Skip = " + skip + " max = " + max, skip + max > 15 ? 15 - skip : max, results.length()); - assertEquals("Skip = " + skip + " max = " + max, (skip + max) < 15, results.hasMore()); + assertEquals("Skip = " + skip + " max = " + max, skip + max > 16 ? 16 - skip : max, results.length()); + assertEquals("Skip = " + skip + " max = " + max, (skip + max) < 16, results.hasMore()); assertEquals("Skip = " + skip + " max = " + max, skip, results.getStart()); int actualPosition = skip; for (ResultSetRow row : results) @@ -776,7 +780,7 @@ public class ADMLuceneTest extends TestCase ResultSetMetaData md; results = searcher.query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); md = results.getResultSetMetaData(); for (ResultSetRow row : results) { @@ -799,8 +803,8 @@ public class ADMLuceneTest extends TestCase sp.setSkipCount(skip); sp.setMaxItems(max); ResultSet results = searcher.query(sp); - assertEquals("Skip = " + skip + " max = " + max, skip + max > 15 ? 15 - skip : max, results.length()); - assertEquals("Skip = " + skip + " max = " + max, (skip + max) < 15, results.hasMore()); + assertEquals("Skip = " + skip + " max = " + max, skip + max > 16 ? 16 - skip : max, results.length()); + assertEquals("Skip = " + skip + " max = " + max, (skip + max) < 16, results.hasMore()); assertEquals("Skip = " + skip + " max = " + max, skip, results.getStart()); int actualPosition = skip; for (ResultSetRow row : results) @@ -831,7 +835,7 @@ public class ADMLuceneTest extends TestCase public void alfrescoSqlQueryWithCount(ADMLuceneSearcherImpl searcher, String query, int count) { - ResultSet results = searcher.query(rootNodeRef.getStoreRef(), SearchService.LANGUAGE_SQL_ALFTRESCO, query, null); + ResultSet results = searcher.query(rootNodeRef.getStoreRef(), SearchService.LANGUAGE_CMIS_ALFRESCO, query, null); assertEquals(count, results.length()); results.getResultSetMetaData(); results.close(); @@ -856,7 +860,7 @@ public class ADMLuceneTest extends TestCase public void sqlQueryWithCount(ADMLuceneSearcherImpl searcher, String query, int count) { - ResultSet results = searcher.query(rootNodeRef.getStoreRef(), SearchService.LANGUAGE_SQL_CMIS_STRICT, query, null); + ResultSet results = searcher.query(rootNodeRef.getStoreRef(), SearchService.LANGUAGE_CMIS_STRICT, query, null); assertEquals(count, results.length()); results.getResultSetMetaData(); results.close(); @@ -884,7 +888,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(true); sp.addSort(ContentModel.PROP_NODE_UUID.toString(), true); ResultSet results = searcher.query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); String f = null; for (ResultSetRow row : results) @@ -909,7 +913,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(true); sp.addSort(ContentModel.PROP_NODE_UUID.toString(), false); results = searcher.query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); f = null; for (ResultSetRow row : results) @@ -934,7 +938,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(true); sp.addSort("@" + ContentModel.PROP_NODE_UUID.toString(), false); results = searcher.query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); f = null; for (ResultSetRow row : results) @@ -959,7 +963,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(true); sp.addSort("cm:name", false); results = searcher.query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); f = null; for (ResultSetRow row : results) @@ -984,7 +988,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(true); sp.addSort("test:neverIndexed", false); results = searcher.query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); } @@ -1004,24 +1008,24 @@ public class ADMLuceneTest extends TestCase ftsQueryWithCount(searcher, "\"lazy\"", 1); ftsQueryWithCount(searcher, "lazy and dog", 1); - ftsQueryWithCount(searcher, "-lazy and -dog", 14); + ftsQueryWithCount(searcher, "-lazy and -dog", 15); ftsQueryWithCount(searcher, "-lazy and dog", 0); ftsQueryWithCount(searcher, "lazy and -dog", 0); ftsQueryWithCount(searcher, "|lazy and |dog", 1); ftsQueryWithCount(searcher, "|eager and |dog", 1); ftsQueryWithCount(searcher, "|lazy and |wolf", 1); ftsQueryWithCount(searcher, "|eager and |wolf", 0); - ftsQueryWithCount(searcher, "-lazy or -dog", 14); - ftsQueryWithCount(searcher, "-eager or -dog", 15); - ftsQueryWithCount(searcher, "-lazy or -wolf", 15); - ftsQueryWithCount(searcher, "-eager or -wolf", 15); + ftsQueryWithCount(searcher, "-lazy or -dog", 15); + ftsQueryWithCount(searcher, "-eager or -dog", 16); + ftsQueryWithCount(searcher, "-lazy or -wolf", 16); + ftsQueryWithCount(searcher, "-eager or -wolf", 16); ftsQueryWithCount(searcher, "lazy dog", 1); ftsQueryWithCount(searcher, "lazy and not dog", 0); - ftsQueryWithCount(searcher, "lazy not dog", 15); + ftsQueryWithCount(searcher, "lazy not dog", 16); ftsQueryWithCount(searcher, "lazy and !dog", 0); - ftsQueryWithCount(searcher, "lazy !dog", 15); + ftsQueryWithCount(searcher, "lazy !dog", 16); ftsQueryWithCount(searcher, "lazy and -dog", 0); - ftsQueryWithCount(searcher, "lazy -dog", 15); + ftsQueryWithCount(searcher, "lazy -dog", 16); ftsQueryWithCount(searcher, "TEXT:\"lazy\"", 1); ftsQueryWithCount(searcher, "cm_content:\"lazy\"", 1); ftsQueryWithCount(searcher, "cm:content:big OR cm:content:lazy", 1); @@ -1044,24 +1048,24 @@ public class ADMLuceneTest extends TestCase ftsQueryWithCount(searcher, "brown *(6) dog", 1); ftsQueryWithCount(searcher, "TEXT:(\"lazy\")", 1); ftsQueryWithCount(searcher, "TEXT:(lazy and dog)", 1); - ftsQueryWithCount(searcher, "TEXT:(-lazy and -dog)", 14); + ftsQueryWithCount(searcher, "TEXT:(-lazy and -dog)", 15); ftsQueryWithCount(searcher, "TEXT:(-lazy and dog)", 0); ftsQueryWithCount(searcher, "TEXT:(lazy and -dog)", 0); ftsQueryWithCount(searcher, "TEXT:(|lazy and |dog)", 1); ftsQueryWithCount(searcher, "TEXT:(|eager and |dog)", 1); ftsQueryWithCount(searcher, "TEXT:(|lazy and |wolf)", 1); ftsQueryWithCount(searcher, "TEXT:(|eager and |wolf)", 0); - ftsQueryWithCount(searcher, "TEXT:(-lazy or -dog)", 14); - ftsQueryWithCount(searcher, "TEXT:(-eager or -dog)", 15); - ftsQueryWithCount(searcher, "TEXT:(-lazy or -wolf)", 15); - ftsQueryWithCount(searcher, "TEXT:(-eager or -wolf)", 15); + ftsQueryWithCount(searcher, "TEXT:(-lazy or -dog)", 15); + ftsQueryWithCount(searcher, "TEXT:(-eager or -dog)", 16); + ftsQueryWithCount(searcher, "TEXT:(-lazy or -wolf)", 16); + ftsQueryWithCount(searcher, "TEXT:(-eager or -wolf)", 16); ftsQueryWithCount(searcher, "TEXT:(lazy dog)", 1); ftsQueryWithCount(searcher, "TEXT:(lazy and not dog)", 0); - ftsQueryWithCount(searcher, "TEXT:(lazy not dog)", 15); + ftsQueryWithCount(searcher, "TEXT:(lazy not dog)", 16); ftsQueryWithCount(searcher, "TEXT:(lazy and !dog)", 0); - ftsQueryWithCount(searcher, "TEXT:(lazy !dog)", 15); + ftsQueryWithCount(searcher, "TEXT:(lazy !dog)", 16); ftsQueryWithCount(searcher, "TEXT:(lazy and -dog)", 0); - ftsQueryWithCount(searcher, "TEXT:(lazy -dog)", 15); + ftsQueryWithCount(searcher, "TEXT:(lazy -dog)", 16); ftsQueryWithCount(searcher, "cm_content:(\"lazy\")", 1); ftsQueryWithCount(searcher, "cm:content:(big OR lazy)", 1); ftsQueryWithCount(searcher, "cm:content:(big AND lazy)", 0); @@ -1181,10 +1185,10 @@ public class ADMLuceneTest extends TestCase ftsQueryWithCount(searcher, "\"fox quick\"~3", 1); ftsQueryWithCount(searcher, "lazy", 1); - ftsQueryWithCount(searcher, "-lazy", 14); - ftsQueryWithCount(searcher, "lazy -lazy", 15, null, n14); - ftsQueryWithCount(searcher, "lazy^20 -lazy", 15, n14, null); - ftsQueryWithCount(searcher, "lazy^20 -lazy^20", 15, null, n14); + ftsQueryWithCount(searcher, "-lazy", 15); + ftsQueryWithCount(searcher, "lazy -lazy", 16, null, n14); + ftsQueryWithCount(searcher, "lazy^20 -lazy", 16, n14, null); + ftsQueryWithCount(searcher, "lazy^20 -lazy^20", 16, null, n14); ftsQueryWithCount(searcher, "cm:content:lazy", 1); // Simple template @@ -1192,21 +1196,24 @@ public class ADMLuceneTest extends TestCase // default namesapce cm ftsQueryWithCount(searcher, "content:lazy", 1); - ftsQueryWithCount(searcher, "PATH:\"//.\"", 15); + ftsQueryWithCount(searcher, "PATH:\"//.\"", 16); ftsQueryWithCount(searcher, "+PATH:\"/app:company_home/st:sites/cm:rmtestnew1/cm:documentLibrary//*\"", 0); ftsQueryWithCount(searcher, "+PATH:\"/app:company_home/st:sites/cm:rmtestnew1/cm:documentLibrary//*\" -TYPE:\"{http://www.alfresco.org/model/content/1.0}thumbnail\"", 15); ftsQueryWithCount(searcher, "+PATH:\"/app:company_home/st:sites/cm:rmtestnew1/cm:documentLibrary//*\" AND -TYPE:\"{http://www.alfresco.org/model/content/1.0}thumbnail\"", 0); - ftsQueryWithCount(searcher, "(brown *(6) dog)", 1); ftsQueryWithCount(searcher, "TEXT:(brown *(6) dog)", 1); ftsQueryWithCount(searcher, "\"//.\"", 0); - ftsQueryWithCount(searcher, "PATH", "\"//.\"", 15); + ftsQueryWithCount(searcher, "PATH", "\"//.\"", 16); ftsQueryWithCount(searcher, "cm:content:brown", 1); ftsQueryWithCount(searcher, "ANDY:brown", 1); ftsQueryWithCount(searcher, "ANDY", "brown", 1); + + // test date ranges + ftsQueryWithCount(searcher, "modified:*", 2); + ftsQueryWithCount(searcher, "modified:[MIN TO NOW]", 2); } public void ftsQueryWithCount(ADMLuceneSearcherImpl searcher, String query, int count) @@ -1569,7 +1576,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(false); sp.addSort("ID", true); ResultSet results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); String current = null; for (ResultSetRow row : results) @@ -1598,7 +1605,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(false); sp.addSort("ID", true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(16, results.length()); + assertEquals(17, results.length()); current = null; for (ResultSetRow row : results) { @@ -1626,7 +1633,7 @@ public class ADMLuceneTest extends TestCase sp.excludeDataInTheCurrentTransaction(false); sp.addSort("ID", true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(17, results.length()); + assertEquals(18, results.length()); current = null; for (ResultSetRow row : results) { @@ -1862,40 +1869,40 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//.\"", null); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//.\"", null); - assertEquals(23, results.length()); + assertEquals(24, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/.\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/./.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/./.\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//./*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//./*\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//././*/././.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//././*/././.\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//common\"", null); assertEquals(1, results.length()); @@ -1904,13 +1911,13 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null); - assertEquals(6, results.length()); + assertEquals(7, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); - assertEquals(9, results.length()); + assertEquals(10, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); - assertEquals(7, results.length()); + assertEquals(8, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null); assertEquals(1, results.length()); @@ -2038,7 +2045,7 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:*/namespace:*\"", null); - assertEquals(5, results.length()); + assertEquals(6, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:*\"", null); assertEquals(4, results.length()); @@ -2062,7 +2069,7 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/*/*\"", null); - assertEquals(5, results.length()); + assertEquals(6, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/*\"", null); assertEquals(4, results.length()); @@ -2074,40 +2081,40 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//.\"", null); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//.\"", null); - assertEquals(25, results.length()); + assertEquals(27, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*\"", null); - assertEquals(24, results.length()); + assertEquals(26, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/.\"", null); - assertEquals(24, results.length()); + assertEquals(26, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/./.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/./.\"", null); - assertEquals(24, results.length()); + assertEquals(26, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//./*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//./*\"", null); - assertEquals(24, results.length()); + assertEquals(26, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//././*/././.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//././*/././.\"", null); - assertEquals(24, results.length()); + assertEquals(26, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//common\"", null); assertEquals(1, results.length()); @@ -2116,13 +2123,13 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null); - assertEquals(6, results.length()); + assertEquals(7, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); - assertEquals(8, results.length()); + assertEquals(9, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); - assertEquals(7, results.length()); + assertEquals(8, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null); assertEquals(1, results.length()); @@ -2396,7 +2403,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(false); ResultSet results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); sp = new SearchParameters(); @@ -2405,7 +2412,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); runBaseTests(); @@ -2416,7 +2423,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); Map props = new HashMap(); @@ -2429,7 +2436,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); pns.setProperty(n1, ContentModel.PROP_TITLE, "cube"); @@ -2440,7 +2447,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); testTX.rollback(); @@ -2927,7 +2934,8 @@ public class ADMLuceneTest extends TestCase // sort by ML text - Locale[] testLocales = new Locale[] { I18NUtil.getLocale(), Locale.ENGLISH, Locale.FRENCH, Locale.CHINESE }; + //Locale[] testLocales = new Locale[] { I18NUtil.getLocale(), Locale.ENGLISH, Locale.FRENCH, Locale.CHINESE }; + Locale[] testLocales = new Locale[] { I18NUtil.getLocale(), Locale.ENGLISH, Locale.FRENCH }; for (Locale testLocale : testLocales) { @@ -3312,6 +3320,7 @@ public class ADMLuceneTest extends TestCase indexer.createNode(new ChildAssociationRef(ASSOC_TYPE_QNAME, n5, QName.createQName("{namespace}twelve"), n12)); indexer.createNode(new ChildAssociationRef(ASSOC_TYPE_QNAME, n12, QName.createQName("{namespace}thirteen"), n13)); indexer.createNode(new ChildAssociationRef(ASSOC_TYPE_QNAME, n13, QName.createQName("{namespace}fourteen"), n14)); + indexer.createNode(new ChildAssociationRef(ASSOC_TYPE_QNAME, n13, QName.createQName("{namespace}fifteen"), n15)); indexer.updateNode(n3); indexer.updateNode(n1); indexer.updateNode(n2); @@ -3441,10 +3450,10 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/namespace:*/namespace:*/namespace:*\"", null); - assertEquals(8, results.length()); + assertEquals(9, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:*/namespace:*\"", null); - assertEquals(5, results.length()); + assertEquals(6, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:*\"", null); assertEquals(4, results.length()); @@ -3468,10 +3477,10 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/*/*/*\"", null); - assertEquals(8, results.length()); + assertEquals(9, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/*/*\"", null); - assertEquals(5, results.length()); + assertEquals(6, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/*\"", null); assertEquals(4, results.length()); @@ -3483,40 +3492,40 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//.\"", null); - assertEquals(26, results.length()); + assertEquals(28, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//.\"", null); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*\"", null); - assertEquals(25, results.length()); + assertEquals(27, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/.\"", null); - assertEquals(25, results.length()); + assertEquals(27, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/./.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/./.\"", null); - assertEquals(25, results.length()); + assertEquals(27, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//./*\"", null); - assertEquals(25, results.length()); + assertEquals(27, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//./*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//././*/././.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//././*/././.\"", null); - assertEquals(25, results.length()); + assertEquals(27, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//common\"", null); assertEquals(1, results.length()); @@ -3531,17 +3540,17 @@ public class ADMLuceneTest extends TestCase assertEquals(5, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null); - assertEquals(6, results.length()); - results.close(); - results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); - assertEquals(9, results.length()); - results.close(); - results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); assertEquals(7, results.length()); results.close(); - results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//.\"", null); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); assertEquals(10, results.length()); results.close(); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); + assertEquals(8, results.length()); + results.close(); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//.\"", null); + assertEquals(11, results.length()); + results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null); assertEquals(1, results.length()); results.close(); @@ -3562,11 +3571,11 @@ public class ADMLuceneTest extends TestCase results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PRIMARYASSOCTYPEQNAME:\"test:assoc\"", null); - assertEquals(10, results.length()); + assertEquals(11, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "ASSOCTYPEQNAME:\"test:assoc\"", null); - assertEquals(10, results.length()); + assertEquals(11, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PRIMARYASSOCTYPEQNAME:\"sys:children\"", null); @@ -3914,22 +3923,22 @@ public class ADMLuceneTest extends TestCase sDate = df.format(date); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@cm\\:created:[MIN TO " + sDate + "]", null); - assertEquals(1, results.length()); + assertEquals(2, results.length()); results.close(); sDate = df.format(date); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@cm\\:created:[MIN TO NOW]", null); - assertEquals(1, results.length()); + assertEquals(2, results.length()); results.close(); sDate = df.format(date); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@cm\\:created:[MIN TO TODAY]", null); - assertEquals(1, results.length()); + assertEquals(2, results.length()); results.close(); sDate = df.format(date); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "\\@" + escapeQName(ContentModel.PROP_CREATED) + ":[MIN TO " + sDate + "]", null); - assertEquals(1, results.length()); + assertEquals(2, results.length()); results.close(); // Date ranges @@ -4265,7 +4274,19 @@ public class ADMLuceneTest extends TestCase results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "TYPE:\"" + testSuperType.toPrefixString(namespacePrefixResolver) + "\"", null); assertEquals(13, results.length()); results.close(); + + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "TYPE:\"" + ContentModel.TYPE_CONTENT.toString() + "\"", null); + assertEquals(1, results.length()); + results.close(); + + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "TYPE:\"" + ContentModel.TYPE_THUMBNAIL.toString() + "\"", null); + assertEquals(1, results.length()); + results.close(); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "TYPE:\"" + ContentModel.TYPE_THUMBNAIL.toString() + "\" TYPE:\"" + ContentModel.TYPE_CONTENT.toString() + "\"", null); + assertEquals(2, results.length()); + results.close(); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "EXACTTYPE:\"" + testSuperType.toString() + "\"", null); assertEquals(12, results.length()); results.close(); @@ -4431,7 +4452,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:\"cabbage\""); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -4440,7 +4461,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:\"cab*\""); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -4449,7 +4470,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:\"*bage\""); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -4458,7 +4479,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:\"*ba*\""); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); // term @@ -4469,7 +4490,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:cabbage"); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -4479,7 +4500,7 @@ public class ADMLuceneTest extends TestCase sp.addTextAttribute("@" + orderText.toString()); sp.addLocale(Locale.ENGLISH); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -4488,7 +4509,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:*bage"); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -4497,7 +4518,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:*ba*"); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -4506,7 +4527,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("TEXT:dabbage~0.8"); sp.addTextAttribute("@" + orderText.toString()); results = searcher.query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); // Wild cards in TEXT phrase @@ -5476,7 +5497,7 @@ public class ADMLuceneTest extends TestCase queryQName = QName.createQName("alf:test3", namespacePrefixResolver); qp = new QueryParameter(QName.createQName("alf:banana", namespacePrefixResolver), "/one/five//*"); results = searcher.query(rootNodeRef.getStoreRef(), queryQName, new QueryParameter[] { qp }); - assertEquals(6, results.length()); + assertEquals(7, results.length()); results.close(); // TODO: should not have a null property type definition @@ -5543,17 +5564,17 @@ public class ADMLuceneTest extends TestCase results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null); - assertEquals(6, results.length()); + assertEquals(7, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); - assertEquals(9, results.length()); + assertEquals(10, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); - assertEquals(7, results.length()); + assertEquals(8, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//.\"", null); - assertEquals(10, results.length()); + assertEquals(11, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null); @@ -5585,13 +5606,13 @@ public class ADMLuceneTest extends TestCase ResultSet results = searcher.query(rootNodeRef.getStoreRef(), "xpath", "//./*", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); luceneFTS.resume(); QueryParameterDefinition paramDef = new QueryParameterDefImpl(QName.createQName("alf:query", namespacePrefixResolver), (DataTypeDefinition) null, true, "//./*"); results = searcher.query(rootNodeRef.getStoreRef(), "xpath", "${alf:query}", new QueryParameterDefinition[] { paramDef }); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); } @@ -5778,7 +5799,7 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:*/namespace:*/namespace:*\"", null); - assertEquals(4, results.length()); + assertEquals(5, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/namespace:*\"", null); assertEquals(3, results.length()); @@ -5802,7 +5823,7 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/*/*/*\"", null); - assertEquals(4, results.length()); + assertEquals(5, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/namespace:one/*\"", null); assertEquals(3, results.length()); @@ -5814,40 +5835,40 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//.\"", null); - assertEquals(17, results.length()); + assertEquals(19, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*\"", null); - assertEquals(13, results.length()); + assertEquals(14, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*\"", null); - assertEquals(16, results.length()); + assertEquals(18, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/.\"", null); - assertEquals(13, results.length()); + assertEquals(14, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/.\"", null); - assertEquals(16, results.length()); + assertEquals(18, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/./.\"", null); - assertEquals(13, results.length()); + assertEquals(14, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/./.\"", null); - assertEquals(16, results.length()); + assertEquals(18, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//./*\"", null); - assertEquals(13, results.length()); + assertEquals(14, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//./*\"", null); - assertEquals(16, results.length()); + assertEquals(18, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//././*/././.\"", null); - assertEquals(13, results.length()); + assertEquals(14, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//././*/././.\"", null); - assertEquals(16, results.length()); + assertEquals(18, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//common\"", null); assertEquals(0, results.length()); @@ -5856,13 +5877,13 @@ public class ADMLuceneTest extends TestCase assertEquals(0, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null); - assertEquals(5, results.length()); + assertEquals(6, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); - assertEquals(5, results.length()); + assertEquals(6, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); - assertEquals(6, results.length()); + assertEquals(7, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null); assertEquals(1, results.length()); @@ -6325,40 +6346,40 @@ public class ADMLuceneTest extends TestCase assertEquals(1, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//.\"", null); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//.\"", null); - assertEquals(23, results.length()); + assertEquals(24, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/.\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//*/./.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//*/./.\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//./*\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//./*\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//././*/././.\"", null); - assertEquals(14, results.length()); + assertEquals(15, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//././*/././.\"", null); - assertEquals(22, results.length()); + assertEquals(23, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//common\"", null); assertEquals(1, results.length()); @@ -6373,17 +6394,17 @@ public class ADMLuceneTest extends TestCase assertEquals(5, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//*\"", null); - assertEquals(6, results.length()); - results.close(); - results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); - assertEquals(9, results.length()); - results.close(); - results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); assertEquals(7, results.length()); results.close(); - results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//.\"", null); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//*\"", null); assertEquals(10, results.length()); results.close(); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one/five//.\"", null); + assertEquals(8, results.length()); + results.close(); + results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"/one/five//.\"", null); + assertEquals(11, results.length()); + results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"/one//five/nine\"", null); assertEquals(1, results.length()); results.close(); @@ -6425,11 +6446,11 @@ public class ADMLuceneTest extends TestCase searcher.setNamespacePrefixResolver(getNamespacePrefixResolver("namespace")); ResultSet results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//namespace:link//.\"", null); - assertEquals(2, results.length()); + assertEquals(3, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//namespace:link//.\"", null); - assertEquals(3, results.length()); + assertEquals(4, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//namespace:renamed_link//.\"", null); @@ -6465,10 +6486,10 @@ public class ADMLuceneTest extends TestCase results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH:\"//namespace:renamed_link//.\"", null); - assertEquals(2, results.length()); + assertEquals(3, results.length()); results.close(); results = searcher.query(rootNodeRef.getStoreRef(), "lucene", "PATH_WITH_REPEATS:\"//namespace:renamed_link//.\"", null); - assertEquals(3, results.length()); + assertEquals(4, results.length()); results.close(); luceneFTS.resume(); } @@ -6757,7 +6778,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); testTX.rollback(); @@ -6772,7 +6793,7 @@ public class ADMLuceneTest extends TestCase sp.addSort("ID", true); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); testTX.rollback(); @@ -6794,7 +6815,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(12, results.length()); + assertEquals(13, results.length()); results.close(); sp = new SearchParameters(); @@ -6803,7 +6824,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); testTX.rollback(); @@ -6818,7 +6839,7 @@ public class ADMLuceneTest extends TestCase sp.addSort("ID", true); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); testTX.rollback(); @@ -6840,7 +6861,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(16, results.length()); + assertEquals(17, results.length()); results.close(); testTX.rollback(); @@ -6855,7 +6876,7 @@ public class ADMLuceneTest extends TestCase sp.addSort("ID", true); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); testTX.rollback(); @@ -6933,7 +6954,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); NodeRef created = serviceRegistry.getNodeService().createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{namespace}texas"), testSuperType).getChildRef(); @@ -6953,7 +6974,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); serviceRegistry.getNodeService().deleteNode(created); @@ -6973,7 +6994,7 @@ public class ADMLuceneTest extends TestCase sp.setQuery("PATH:\"//.\""); sp.excludeDataInTheCurrentTransaction(true); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); testTX.rollback(); @@ -6988,7 +7009,7 @@ public class ADMLuceneTest extends TestCase sp.addSort("ID", true); sp.excludeDataInTheCurrentTransaction(false); results = serviceRegistry.getSearchService().query(sp); - assertEquals(15, results.length()); + assertEquals(16, results.length()); results.close(); } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/AnalysisMode.java b/source/java/org/alfresco/repo/search/impl/lucene/AnalysisMode.java index b373346a66..4cd153a844 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/AnalysisMode.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/AnalysisMode.java @@ -37,6 +37,8 @@ public enum AnalysisMode PREFIX , WILD + , + LIKE ; } diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoFtsQueryLanguage.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoFtsQueryLanguage.java index 3b4b02f367..6f52e6c58e 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoFtsQueryLanguage.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoFtsQueryLanguage.java @@ -6,8 +6,10 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import org.alfresco.cmis.CMISQueryOptions.CMISQueryMode; import org.alfresco.repo.search.impl.parsers.AlfrescoFunctionEvaluationContext; import org.alfresco.repo.search.impl.parsers.CMISParser; +import org.alfresco.repo.search.impl.parsers.FTSParser; import org.alfresco.repo.search.impl.parsers.FTSQueryParser; import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.Column; @@ -77,7 +79,18 @@ public class LuceneAlfrescoFtsQueryLanguage implements LuceneQueryLanguageSPI options.setLocales(searchParameters.getLocales()); options.setStores(searchParameters.getStores()); - Constraint constraint = FTSQueryParser.buildFTS(ftsExpression, factory, context, null, null, options.getDefaultFTSConnective(), options.getDefaultFTSFieldConnective(), + FTSParser.Mode mode; + + if(options.getDefaultFTSConnective() == Connective.AND) + { + mode = FTSParser.Mode.DEFAULT_CONJUNCTION; + } + else + { + mode = FTSParser.Mode.DEFAULT_DISJUNCTION; + } + + Constraint constraint = FTSQueryParser.buildFTS(ftsExpression, factory, context, null, null, mode, options.getDefaultFTSFieldConnective(), searchParameters.getQueryTemplates(), options.getDefaultFieldName()); org.alfresco.repo.search.impl.querymodel.Query query = factory.createQuery(null, null, constraint, buildOrderings(factory, searchParameters)); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoSqlQueryLanguage.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoSqlQueryLanguage.java index d5aba0c28b..23bb238906 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoSqlQueryLanguage.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneAlfrescoSqlQueryLanguage.java @@ -89,7 +89,7 @@ public class LuceneAlfrescoSqlQueryLanguage implements LuceneQueryLanguageSPI public String getName() { - return SearchService.LANGUAGE_SQL_ALFTRESCO; + return SearchService.LANGUAGE_CMIS_ALFRESCO; } public void setFactories(List factories) diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneAnalyser.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneAnalyser.java index 25868d0c67..8795e6cf15 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneAnalyser.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneAnalyser.java @@ -36,6 +36,7 @@ import org.alfresco.repo.search.impl.lucene.analysis.LongAnalyser; import org.alfresco.repo.search.impl.lucene.analysis.MLAnalayser; import org.alfresco.repo.search.impl.lucene.analysis.PathAnalyser; import org.alfresco.repo.search.impl.lucene.analysis.VerbatimAnalyser; +import org.alfresco.repo.search.impl.lucene.analysis.VerbatimMLAnalayser; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.PropertyDefinition; @@ -95,23 +96,6 @@ public class LuceneAnalyser extends Analyzer public TokenStream tokenStream(String fieldName, Reader reader, AnalysisMode analysisMode) { - // Treat multilingual as a special case. - // If multilingual then we need to find the correct tokeniser. - // This is done dynamically by reading a language code at the start of the reader. - if (fieldName.startsWith("@")) - { - QName propertyQName = QName.createQName(fieldName.substring(1)); - PropertyDefinition propertyDef = dictionaryService.getProperty(propertyQName); - if (propertyDef != null) - { - if (propertyDef.getDataType().getName().equals(DataTypeDefinition.MLTEXT)) - { - MLAnalayser analyser = new MLAnalayser(dictionaryService, mlAlaysisMode); - return analyser.tokenStream(fieldName, reader); - } - } - } - Analyzer analyser = (Analyzer) analysers.get(fieldName); if (analyser == null) { @@ -209,6 +193,10 @@ public class LuceneAnalyser extends Analyzer { analyser = new MLAnalayser(dictionaryService, MLAnalysisMode.ALL_ONLY); } + else if (dataType.getName().equals(DataTypeDefinition.MLTEXT)) + { + analyser = new MLAnalayser(dictionaryService, mlAlaysisMode); + } else { analyser = loadAnalyzer(dataType); @@ -227,13 +215,24 @@ public class LuceneAnalyser extends Analyzer { analyser = new MLAnalayser(dictionaryService, MLAnalysisMode.ALL_ONLY); } + else if (dataType.getName().equals(DataTypeDefinition.MLTEXT)) + { + analyser = new MLAnalayser(dictionaryService, mlAlaysisMode); + } else { analyser = loadAnalyzer(dataType); } break; case IDENTIFIER: - analyser = new VerbatimAnalyser(); + if (dataType.getName().equals(DataTypeDefinition.MLTEXT)) + { + analyser = new VerbatimMLAnalayser(mlAlaysisMode); + } + else + { + analyser = new VerbatimAnalyser(); + } break; default: throw new UnsupportedOperationException("TYPE must not be tokenised"); @@ -241,6 +240,7 @@ public class LuceneAnalyser extends Analyzer break; case FALSE: + // TODO: MLText verbatim analyser analyser = new VerbatimAnalyser(); break; default: @@ -274,6 +274,7 @@ public class LuceneAnalyser extends Analyzer analysers.put(fieldName, analyser); return analyser; } + /** * Find an instantiate an analyser. The shuld all be thread sade as Analyser.tokenStream should be re-entrant. diff --git a/source/java/org/alfresco/repo/search/impl/lucene/LuceneCmisStrictSqlQueryLanguage.java b/source/java/org/alfresco/repo/search/impl/lucene/LuceneCmisStrictSqlQueryLanguage.java index 46057640ea..8ef9e2dfa7 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneCmisStrictSqlQueryLanguage.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneCmisStrictSqlQueryLanguage.java @@ -88,7 +88,7 @@ public class LuceneCmisStrictSqlQueryLanguage implements LuceneQueryLanguageSPI public String getName() { - return SearchService.LANGUAGE_SQL_CMIS_STRICT; + return SearchService.LANGUAGE_CMIS_STRICT; } public void setFactories(List factories) 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 f1bd1bc48f..da538734bb 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/LuceneQueryParser.java @@ -83,6 +83,7 @@ import org.apache.lucene.search.Query; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.WildcardTermEnum; import org.apache.lucene.search.BooleanClause.Occur; +import org.apache.lucene.search.regex.RegexQuery; import org.apache.lucene.search.spans.SpanNearQuery; import org.apache.lucene.search.spans.SpanQuery; import org.apache.lucene.search.spans.SpanTermQuery; @@ -307,8 +308,8 @@ public class LuceneQueryParser extends QueryParser */ public Query getLikeQuery(String field, String sqlLikeClause, AnalysisMode analysisMode) throws ParseException { - String luceneWildCardExpression = SearchLanguageConversion.convertSQLLikeToLucene(sqlLikeClause); - return getFieldQuery(field, luceneWildCardExpression, analysisMode, LuceneFunction.FIELD); + String luceneWildCardExpression = SearchLanguageConversion.convert(SearchLanguageConversion.DEF_SQL_LIKE, SearchLanguageConversion.DEF_LUCENE, sqlLikeClause); + return getWildcardQuery(field, luceneWildCardExpression, AnalysisMode.LIKE); } /** @@ -649,10 +650,14 @@ public class LuceneQueryParser extends QueryParser BooleanQuery booleanQuery = new BooleanQuery(); for (QName qname : subclasses) { - TermQuery termQuery = new TermQuery(new Term(field, qname.toString())); - if (termQuery != null) + TypeDefinition current = dictionaryService.getType(qname); + if (target.getName().equals(current.getName()) || current.getIncludedInSuperTypeQuery()) { - booleanQuery.add(termQuery, Occur.SHOULD); + TermQuery termQuery = new TermQuery(new Term(field, qname.toString())); + if (termQuery != null) + { + booleanQuery.add(termQuery, Occur.SHOULD); + } } } return booleanQuery; @@ -722,10 +727,14 @@ public class LuceneQueryParser extends QueryParser BooleanQuery booleanQuery = new BooleanQuery(); for (QName qname : subclasses) { - TermQuery termQuery = new TermQuery(new Term(field, qname.toString())); - if (termQuery != null) + AspectDefinition current = dictionaryService.getAspect(qname); + if (target.getName().equals(current.getName()) || current.getIncludedInSuperTypeQuery()) { - booleanQuery.add(termQuery, Occur.SHOULD); + TermQuery termQuery = new TermQuery(new Term(field, qname.toString())); + if (termQuery != null) + { + booleanQuery.add(termQuery, Occur.SHOULD); + } } } return booleanQuery; @@ -1637,21 +1646,25 @@ public class LuceneQueryParser extends QueryParser } for (Locale locale : (((expandedLocales == null) || (expandedLocales.size() == 0)) ? Collections.singletonList(I18NUtil.getLocale()) : expandedLocales)) { - if (locale.toString().length() == 0) - { - continue; - } String textFieldName = fieldName; - if (analysisMode == AnalysisMode.IDENTIFIER) + if ((analysisMode == AnalysisMode.IDENTIFIER) || (analysisMode == AnalysisMode.LIKE)) { { // text and ml text need locale IndexTokenisationMode tm = propertyDef.getIndexTokenisationMode(); if ((tm != null) && (tm == IndexTokenisationMode.BOTH)) { - textFieldName = textFieldName + "." + locale + ".sort"; + if (locale.toString().length() == 0) + { + textFieldName = textFieldName + ".no_locale"; + } + else + { + textFieldName = textFieldName + "." + locale + ".sort"; + } + } } @@ -1668,8 +1681,8 @@ public class LuceneQueryParser extends QueryParser case IDENTIFIER: addLocaleSpecificUntokenisedTextRange(field, part1, part2, includeLower, includeUpper, booleanQuery, mlAnalysisMode, locale, textFieldName); break; - case WILD: + case LIKE: case PREFIX: case FUZZY: default: @@ -1736,7 +1749,7 @@ public class LuceneQueryParser extends QueryParser start.set(Calendar.MINUTE, start.getMinimum(Calendar.MINUTE)); start.set(Calendar.SECOND, start.getMinimum(Calendar.SECOND)); start.set(Calendar.MILLISECOND, start.getMinimum(Calendar.MILLISECOND)); - + } else { @@ -1780,7 +1793,7 @@ public class LuceneQueryParser extends QueryParser end.set(Calendar.MINUTE, end.getMinimum(Calendar.MINUTE)); end.set(Calendar.SECOND, end.getMinimum(Calendar.SECOND)); end.set(Calendar.MILLISECOND, end.getMinimum(Calendar.MILLISECOND)); - + } else { @@ -2712,6 +2725,32 @@ public class LuceneQueryParser extends QueryParser return query; } } + else if (field.equals("ID")) + { + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try + { + setLowercaseExpandedTerms(false); + return super.getPrefixQuery(field, termStr); + } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); + } + } + else if (field.equals("PARENT")) + { + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try + { + setLowercaseExpandedTerms(false); + return super.getPrefixQuery(field, termStr); + } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); + } + } else { return super.getPrefixQuery(field, termStr); @@ -2720,10 +2759,15 @@ public class LuceneQueryParser extends QueryParser @Override public Query getWildcardQuery(String field, String termStr) throws ParseException + { + return getWildcardQuery(field, termStr, AnalysisMode.WILD); + } + + private Query getWildcardQuery(String field, String termStr, AnalysisMode analysisMode) throws ParseException { if (field.startsWith("@")) { - return attributeQueryBuilder(field, termStr, new WildcardQuery(), AnalysisMode.WILD, LuceneFunction.FIELD); + return attributeQueryBuilder(field, termStr, new WildcardQuery(), analysisMode, LuceneFunction.FIELD); } else if (field.equals("TEXT")) @@ -2766,6 +2810,32 @@ public class LuceneQueryParser extends QueryParser return query; } } + else if (field.equals("ID")) + { + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try + { + setLowercaseExpandedTerms(false); + return super.getWildcardQuery(field, termStr); + } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); + } + } + else if (field.equals("PARENT")) + { + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try + { + setLowercaseExpandedTerms(false); + return super.getWildcardQuery(field, termStr); + } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); + } + } else { return super.getWildcardQuery(field, termStr); @@ -2820,6 +2890,32 @@ public class LuceneQueryParser extends QueryParser return query; } } + else if (field.equals("ID")) + { + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try + { + setLowercaseExpandedTerms(false); + return super.getFuzzyQuery(field, termStr, minSimilarity); + } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); + } + } + else if (field.equals("PARENT")) + { + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try + { + setLowercaseExpandedTerms(false); + return super.getFuzzyQuery(field, termStr, minSimilarity); + } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); + } + } else { return super.getFuzzyQuery(field, termStr, minSimilarity); @@ -2881,6 +2977,43 @@ public class LuceneQueryParser extends QueryParser return super.getWildcardQuery(field, termStr); } + /* + * (non-Javadoc) + * @see org.apache.lucene.queryParser.QueryParser#newWildcardQuery(org.apache.lucene.index.Term) + */ + @Override + protected Query newWildcardQuery(Term t) + { + if (t.text().contains("\\")) + { + String regexp = SearchLanguageConversion.convert(SearchLanguageConversion.DEF_LUCENE, SearchLanguageConversion.DEF_REGEX, t.text()); + return new RegexQuery(new Term(t.field(), regexp)); + } + else + { + return super.newWildcardQuery(t); + } + } + + /* + * (non-Javadoc) + * @see org.apache.lucene.queryParser.QueryParser#newPrefixQuery(org.apache.lucene.index.Term) + */ + @Override + protected Query newPrefixQuery(Term prefix) + { + if (prefix.text().contains("\\")) + { + String regexp = SearchLanguageConversion.convert(SearchLanguageConversion.DEF_LUCENE, SearchLanguageConversion.DEF_REGEX, prefix.text()); + return new RegexQuery(new Term(prefix.field(), regexp)); + } + else + { + return super.newPrefixQuery(prefix); + } + + } + interface SubQuery { /** @@ -3025,60 +3158,80 @@ public class LuceneQueryParser extends QueryParser { String mlFieldName = expandedFieldName; - if ((tokenisationMode == IndexTokenisationMode.BOTH) && (analysisMode == AnalysisMode.IDENTIFIER)) + if ((tokenisationMode == IndexTokenisationMode.BOTH) && ((analysisMode == AnalysisMode.IDENTIFIER) || (analysisMode == AnalysisMode.LIKE))) { { // text and ml text need locale IndexTokenisationMode tm = propertyDef.getIndexTokenisationMode(); if ((tm != null) && (tm == IndexTokenisationMode.BOTH)) { - mlFieldName = mlFieldName + "." + locale + ".sort"; + if (locale.toString().length() == 0) + { + mlFieldName = mlFieldName + ".no_locale"; + } + else + { + mlFieldName = mlFieldName + "." + locale + ".sort"; + } } } } - switch (tokenisationMode) + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try { - case BOTH: - switch (analysisMode) + switch (tokenisationMode) { - default: - case DEFAULT: - case TOKENISE: - addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, mlFieldName); + case BOTH: + switch (analysisMode) + { + default: + case DEFAULT: + case TOKENISE: + addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, expandedFieldName); + break; + case IDENTIFIER: + case FUZZY: + case PREFIX: + case WILD: + case LIKE: + setLowercaseExpandedTerms(false); + addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, + mlFieldName); + + break; + } break; - case IDENTIFIER: - case FUZZY: - case PREFIX: - case WILD: + case FALSE: + setLowercaseExpandedTerms(false); addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, mlFieldName); break; - } - break; - case FALSE: - addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, - mlFieldName); - break; - case TRUE: - default: - switch (analysisMode) - { + case TRUE: default: - case DEFAULT: - case TOKENISE: - case IDENTIFIER: - addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, mlFieldName); - break; - case FUZZY: - case PREFIX: - case WILD: - addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, - mlFieldName); - break; + switch (analysisMode) + { + default: + case DEFAULT: + case TOKENISE: + case IDENTIFIER: + addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, expandedFieldName); + break; + case FUZZY: + case PREFIX: + case WILD: + case LIKE: + addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, + mlFieldName); + break; + } } } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); + } } return booleanQuery; } @@ -3179,7 +3332,7 @@ public class LuceneQueryParser extends QueryParser { String textFieldName = expandedFieldName; - if ((tokenisationMode == IndexTokenisationMode.BOTH) && (analysisMode == AnalysisMode.IDENTIFIER)) + if ((tokenisationMode == IndexTokenisationMode.BOTH) && ((analysisMode == AnalysisMode.IDENTIFIER) || (analysisMode == AnalysisMode.LIKE))) { { // text and ml text need locale @@ -3192,46 +3345,58 @@ public class LuceneQueryParser extends QueryParser } } - switch (tokenisationMode) + boolean lowercaseExpandedTerms = getLowercaseExpandedTerms(); + try { - case BOTH: - switch (analysisMode) + switch (tokenisationMode) { + case BOTH: + switch (analysisMode) + { + default: + case DEFAULT: + case TOKENISE: + addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, textFieldName); + break; + case IDENTIFIER: + case FUZZY: + case PREFIX: + case WILD: + case LIKE: + setLowercaseExpandedTerms(false); + addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, + textFieldName); + break; + } + break; + case FALSE: + setLowercaseExpandedTerms(false); + addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, + textFieldName); + break; + case TRUE: default: - case DEFAULT: - case TOKENISE: - addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, textFieldName); - break; - case IDENTIFIER: - case FUZZY: - case PREFIX: - case WILD: - addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, - textFieldName); + switch (analysisMode) + { + case DEFAULT: + case TOKENISE: + case IDENTIFIER: + addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, expandedFieldName); + break; + case FUZZY: + case PREFIX: + case WILD: + case LIKE: + addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, + textFieldName); + break; + } break; } - break; - case FALSE: - addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, - textFieldName); - break; - case TRUE: - default: - switch (analysisMode) - { - case DEFAULT: - case TOKENISE: - case IDENTIFIER: - addLocaleSpecificTokenisedMLOrTextAttribute(queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, locale, textFieldName); - break; - case FUZZY: - case PREFIX: - case WILD: - addLocaleSpecificUntokenisedMLOrTextAttribute(field, queryText, subQueryBuilder, analysisMode, luceneFunction, booleanQuery, mlAnalysisMode, locale, - textFieldName); - break; - } - break; + } + finally + { + setLowercaseExpandedTerms(lowercaseExpandedTerms); } } @@ -3239,6 +3404,15 @@ public class LuceneQueryParser extends QueryParser } else { + // Date does not support like + if ((propertyDef != null) && (propertyDef.getDataType().getName().equals(DataTypeDefinition.DATETIME))) + { + if (analysisMode == AnalysisMode.LIKE) + { + throw new UnsupportedOperationException("Wild cards are not supported for the datetime type"); + } + } + // Sort and id is only special for MLText, text, and content // Dates are not special in this case Query query = subQueryBuilder.getQuery(expandedFieldName, queryText, AnalysisMode.DEFAULT, luceneFunction); diff --git a/source/java/org/alfresco/repo/search/impl/lucene/analysis/VerbatimMLAnalayser.java b/source/java/org/alfresco/repo/search/impl/lucene/analysis/VerbatimMLAnalayser.java new file mode 100644 index 0000000000..bac61dbb26 --- /dev/null +++ b/source/java/org/alfresco/repo/search/impl/lucene/analysis/VerbatimMLAnalayser.java @@ -0,0 +1,169 @@ +/* + * 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.lucene.analysis; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.Reader; +import java.util.Locale; + +import org.alfresco.repo.search.MLAnalysisMode; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.lucene.analysis.Analyzer; +import org.apache.lucene.analysis.TokenStream; + +public class VerbatimMLAnalayser extends Analyzer +{ + private static Log s_logger = LogFactory.getLog(VerbatimMLAnalayser.class); + + + private MLAnalysisMode mlAnalaysisMode; + + public VerbatimMLAnalayser(MLAnalysisMode mlAnalaysisMode) + { + this.mlAnalaysisMode = mlAnalaysisMode; + } + + @Override + public TokenStream tokenStream(String fieldName, Reader reader) + { + // We use read ahead to get the language info - if this does not exist we need to restart + // an use the default - there foer we need mark and restore. + + if (!(reader instanceof BufferedReader)) + { + BufferedReader breader = new BufferedReader(reader); + try + { + if (!breader.markSupported()) + { + throw new AnalysisException( + "Multilingual tokenisation requires a reader that supports marks and reset"); + } + breader.mark(100); + StringBuilder builder = new StringBuilder(); + if (breader.read() == '\u0000') + { + String language = ""; + String country = ""; + String varient = ""; + char c; + int count = 0; + while ((c = (char) breader.read()) != '\u0000') + { + if (count++ > 99) + { + breader.reset(); + return getAnalyser().tokenStream(fieldName, breader); + } + if (c == '_') + { + if (language.length() == 0) + { + language = builder.toString(); + } + else if (country.length() == 0) + { + country = builder.toString(); + } + else if (varient.length() == 0) + { + varient = builder.toString(); + } + else + { + breader.reset(); + return getAnalyser().tokenStream(fieldName, breader); + } + builder = new StringBuilder(); + } + else + { + builder.append(c); + } + } + if (builder.length() > 0) + { + if (language.length() == 0) + { + language = builder.toString(); + } + else if (country.length() == 0) + { + country = builder.toString(); + } + else if (varient.length() == 0) + { + varient = builder.toString(); + } + else + { + breader.reset(); + return getAnalyser().tokenStream(fieldName, breader); + } + } + Locale locale = new Locale(language, country, varient); + // leave the reader where it is .... + return new MLTokenDuplicator(getAnalyser().tokenStream(fieldName, breader), locale, breader, mlAnalaysisMode); + } + else + { + breader.reset(); + return getAnalyser().tokenStream(fieldName, breader); + } + } + catch (IOException io) + { + try + { + breader.reset(); + } + catch (IOException e) + { + throw new AnalysisException("Failed to reset buffered reader - token stream will be invalid", e); + } + return getAnalyser().tokenStream(fieldName, breader); + } + + } + else + { + throw new AnalysisException("Multilingual tokenisation requires a buffered reader"); + } + } + + /** + * @return + */ + private Analyzer getAnalyser() + { + return new VerbatimAnalyser(false); + } + + + + +} diff --git a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java index 67a05bf09b..cd3612dcdb 100644 --- a/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java +++ b/source/java/org/alfresco/repo/search/impl/lucene/index/IndexInfo.java @@ -3278,11 +3278,11 @@ public class IndexInfo implements IndexMonitor if (action == MergeAction.APPLY_DELTA_DELETION) { - mergeDeletions(); + action = mergeDeletions(); } else if (action == MergeAction.MERGE_INDEX) { - mergeIndexes(); + action = mergeIndexes(); } if (action == MergeAction.NONE) @@ -3401,7 +3401,7 @@ public class IndexInfo implements IndexMonitor return ExitState.DONE; } - void mergeDeletions() throws IOException + MergeAction mergeDeletions() throws IOException { if (s_logger.isDebugEnabled()) { @@ -3495,7 +3495,7 @@ public class IndexInfo implements IndexMonitor if (toDelete.size() == 0) { - return; + return MergeAction.NONE; } // Build readers @@ -3709,9 +3709,10 @@ public class IndexInfo implements IndexMonitor { releaseWriteLock(); } + return MergeAction.APPLY_DELTA_DELETION; } - void mergeIndexes() throws IOException + MergeAction mergeIndexes() throws IOException { if (s_logger.isDebugEnabled()) @@ -3813,7 +3814,7 @@ public class IndexInfo implements IndexMonitor if (toMerge.size() == 0) { - return; + return MergeAction.NONE; } String mergeTargetId = null; @@ -3983,6 +3984,7 @@ public class IndexInfo implements IndexMonitor s_logger.debug("..done merging"); } + return MergeAction.MERGE_INDEX; } private final int findMergeIndex(long min, long max, int factor, List entries) throws IOException diff --git a/source/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java b/source/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java index eecb2f5e0c..edd94b1946 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/AlfrescoFunctionEvaluationContext.java @@ -41,7 +41,7 @@ import org.alfresco.repo.search.impl.lucene.analysis.DateTimeAnalyser; import org.alfresco.repo.search.impl.querymodel.FunctionArgument; import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.PredicateMode; -import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.alfresco.repo.search.impl.querymodel.Selector; import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DictionaryService; import org.alfresco.service.cmr.dictionary.PropertyDefinition; @@ -49,16 +49,14 @@ import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.namespace.NamespacePrefixResolver; import org.alfresco.service.namespace.QName; -import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexReader.FieldOption; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.search.Query; -import org.apache.lucene.search.SortField; /** * Alfrecso function evaluation context for evaluating FTS expressions against lucene. + * * @author andyh - * */ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationContext { @@ -103,7 +101,6 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont this.dictionaryService = dictionaryService; this.defaultNamespace = defaultNamespace; } - public Query buildLuceneEquality(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode, LuceneFunction luceneFunction) throws ParseException { @@ -120,7 +117,8 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont throw new UnsupportedOperationException(); } - public Query buildLuceneGreaterThanOrEquals(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode, LuceneFunction luceneFunction) throws ParseException + public Query buildLuceneGreaterThanOrEquals(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode, LuceneFunction luceneFunction) + throws ParseException { throw new UnsupportedOperationException(); } @@ -140,7 +138,8 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont throw new UnsupportedOperationException(); } - public Query buildLuceneLessThanOrEquals(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode, LuceneFunction luceneFunction) throws ParseException + public Query buildLuceneLessThanOrEquals(LuceneQueryParser lqp, String propertyName, Serializable value, PredicateMode mode, LuceneFunction luceneFunction) + throws ParseException { throw new UnsupportedOperationException(); } @@ -153,11 +152,11 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont public String getLuceneSortField(LuceneQueryParser lqp, String propertyName) { // Score is special - if(propertyName.equalsIgnoreCase("Score")) + if (propertyName.equalsIgnoreCase("Score")) { return "Score"; } - String field = getLuceneFieldName(propertyName); + String field = getLuceneFieldName(propertyName); // need to find the real field to use Locale sortLocale = null; if (field.startsWith("@")) @@ -168,8 +167,7 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont { throw new SearcherException("Order on content properties is not curently supported"); } - else if ((propertyDef.getDataType().getName().equals(DataTypeDefinition.MLTEXT)) - || (propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT))) + else if ((propertyDef.getDataType().getName().equals(DataTypeDefinition.MLTEXT)) || (propertyDef.getDataType().getName().equals(DataTypeDefinition.TEXT))) { List locales = lqp.getSearchParameters().getLocales(); if (((locales == null) || (locales.size() == 0))) @@ -194,7 +192,7 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont String sortField = field; - for (Object current : lqp.getIndexReader().getFieldNames(FieldOption.INDEXED)) + for (Object current : lqp.getIndexReader().getFieldNames(FieldOption.INDEXED)) { String currentString = (String) current; if (currentString.startsWith(field) && currentString.endsWith(".sort")) @@ -355,4 +353,24 @@ public class AlfrescoFunctionEvaluationContext implements FunctionEvaluationCont throw new UnsupportedOperationException(); } + /* + * (non-Javadoc) + * @see + * org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext#checkFieldApplies(org.alfresco.service.namespace + * .QName, java.lang.String) + */ + public void checkFieldApplies(Selector selector, String propertyName) + { + throw new UnsupportedOperationException(); + } + + /* + * (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext#isMultiValued(java.lang.String) + */ + public boolean isMultiValued(String propertyName) + { + throw new UnsupportedOperationException(); + } + } 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 4003627b58..a9132cf9ae 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.g @@ -22,72 +22,69 @@ * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ - /* * Parser for the CMIS query language * * The semantics of multivalued properties are ignored for the initial parse of the language. * They are applied in a second pass, when we have enough information to determine the column type. */ - + grammar CMIS; options { - output=AST; + output = AST; } tokens { - QUERY; - ALL_COLUMNS; - COLUMN; - COLUMNS; - COLUMN_REF; - QUALIFIER; - FUNCTION; - SOURCE; - TABLE; - TABLE_REF; - PARAMETER; - - CONJUNCTION; - DISJUNCTION; - NEGATION; - PRED_COMPARISON; - PRED_IN; - PRED_EXISTS; - PRED_LIKE; - PRED_FTS; - LIST; - PRED_CHILD; - PRED_DESCENDANT; - SORT_SPECIFICATION; - - NUMERIC_LITERAL; - STRING_LITERAL; - DATETIME_LITERAL; - BOOLEAN_LITERAL; + QUERY; + ALL_COLUMNS; + COLUMN; + COLUMNS; + COLUMN_REF; + QUALIFIER; + FUNCTION; + SOURCE; + TABLE; + TABLE_REF; + PARAMETER; + CONJUNCTION; + DISJUNCTION; + NEGATION; + PRED_COMPARISON; + PRED_IN; + PRED_EXISTS; + PRED_LIKE; + PRED_FTS; + LIST; + PRED_CHILD; + PRED_DESCENDANT; + SORT_SPECIFICATION; + NUMERIC_LITERAL; + STRING_LITERAL; + DATETIME_LITERAL; + BOOLEAN_LITERAL; + SINGLE_VALUED_PROPERTY; } @lexer::header { package org.alfresco.repo.search.impl.parsers; import org.alfresco.cmis.CMISQueryException; -} +} @header { package org.alfresco.repo.search.impl.parsers; import org.alfresco.cmis.CMISQueryException; } - - /* * Instance methods and properties for the parser. * Realisations of the parser should over-ride these as required */ - + + @members { private Stack paraphrases = new Stack(); @@ -285,7 +282,6 @@ tokens } } - /** * This is mostly a direct take fom the CMIS spec. * The only significant chnanges are to remove left recursion which is not supported in antlr @@ -293,524 +289,1388 @@ tokens * The top level rule for the parser */ query - @init { paraphrases.push("in query"); } - @after{ paraphrases.pop(); } - : SELECT selectList fromClause whereClause? orderByClause? EOF - -> ^(QUERY selectList fromClause whereClause? orderByClause?) - ; +@init +{ + paraphrases.push("in query"); +} +@after +{ + paraphrases.pop(); +} + : + SELECT selectList fromClause whereClause? orderByClause? EOF + -> + ^(QUERY selectList fromClause whereClause? orderByClause?) + ; - selectList - @init { paraphrases.push("in select list"); } - @after{ paraphrases.pop(); } - : STAR - -> ^(ALL_COLUMNS) - | selectSubList ( COMMA selectSubList )* - -> ^(COLUMNS selectSubList+) - ; - - +@init +{ + paraphrases.push("in select list"); +} +@after +{ + paraphrases.pop(); +} + : + STAR + -> + ^(ALL_COLUMNS) + | selectSubList (COMMA selectSubList)* + -> + ^(COLUMNS selectSubList+) + ; + selectSubList - : (valueExpression)=> valueExpression ( AS? columnName )? - -> ^(COLUMN valueExpression columnName?) - | qualifier DOTSTAR - -> ^(ALL_COLUMNS qualifier) - | multiValuedColumnReference - -> /* No AST - MVCs are included in value expressions */ - ; - + : + valueExpression (AS? columnName)? + -> + ^(COLUMN valueExpression columnName?) + | qualifier DOTSTAR + -> + ^(ALL_COLUMNS qualifier) + ; + valueExpression - @init { paraphrases.push("in value expression"); } - @after{ paraphrases.pop(); } - : columnReference - -> columnReference - | valueFunction - -> valueFunction - ; +@init +{ + paraphrases.push("in value expression"); +} +@after +{ + paraphrases.pop(); +} + : + columnReference + -> columnReference + | valueFunction + -> valueFunction + ; columnReference - @init { paraphrases.push("in column reference"); } - @after{ paraphrases.pop(); } - : ( qualifier DOT )? columnName - -> ^(COLUMN_REF columnName qualifier?) - ; - -/* - * This production is proteted by a dynamic predicate. - * TODO Add look a head and perform the test - */ -multiValuedColumnReference - @init { paraphrases.push("in column reference"); } - @after{ paraphrases.pop(); } - : ( qualifier DOT )? multiValuedColumnName - -> ^(COLUMN_REF multiValuedColumnName qualifier?) - ; - +@init +{ + paraphrases.push("in column reference"); +} +@after +{ + paraphrases.pop(); +} + : + (qualifier DOT)? columnName + -> + ^(COLUMN_REF columnName qualifier?) + ; + valueFunction - @init { paraphrases.push("in function"); } - @after{ paraphrases.pop(); } - : cmisFunctionName=cmisFunction LPAREN functionArgument* RPAREN - -> ^(FUNCTION $cmisFunctionName LPAREN functionArgument* RPAREN) - | {strict == false}? =>functionName=keyWordOrId LPAREN functionArgument* RPAREN - -> ^(FUNCTION $functionName LPAREN functionArgument* RPAREN) - ; - +@init +{ + paraphrases.push("in function"); +} +@after +{ + paraphrases.pop(); +} + : + cmisFunctionName=cmisFunction LPAREN functionArgument* RPAREN + -> + ^(FUNCTION $cmisFunctionName LPAREN functionArgument* RPAREN) + | {strict == false}?=> functionName=keyWordOrId LPAREN functionArgument* RPAREN + -> + ^(FUNCTION $functionName LPAREN functionArgument* RPAREN) + ; + functionArgument - : qualifier DOT columnName - -> ^(COLUMN_REF columnName qualifier) - | identifier - | literalOrParameterName - ; - + : + qualifier DOT columnName + -> + ^(COLUMN_REF columnName qualifier) + | identifier + | literalOrParameterName + ; + qualifier - : (tableName) => tableName - -> tableName - | correlationName - -> correlationName - ; - + : + (tableName) => tableName + -> tableName + | correlationName + -> correlationName + ; + fromClause - @init { paraphrases.push("in from"); } - @after{ paraphrases.pop(); } - : FROM tableReference - -> tableReference - ; - -tableReference - : singleTable joinedTable* - -> ^(SOURCE singleTable joinedTable*) - ; - +@init +{ + paraphrases.push("in fromClause"); +} +@after +{ + paraphrases.pop(); +} + : + FROM tableReference + -> tableReference + ; + +tableReference +@init +{ + paraphrases.push("in tableReference"); +} +@after +{ + paraphrases.pop(); +} + : + singleTable joinedTable* + -> + ^(SOURCE singleTable joinedTable*) + ; /* * Created to avoid left recursion between tableReference and joinedTable. */ -singleTable - : tableName ( AS? correlationName )? - -> ^(TABLE_REF tableName correlationName?) - | LPAREN joinedTables RPAREN - -> ^(TABLE joinedTables) - ; - -joinedTable - @init { paraphrases.push("in join"); } - @after{ paraphrases.pop(); } - : joinType? JOIN tableReference joinSpecification - -> ^(JOIN tableReference joinType? joinSpecification) - ; - -joinedTables - : singleTable joinedTable+ - -> ^(SOURCE singleTable joinedTable+) - ; - -joinType - : INNER - -> INNER - | LEFT OUTER? - -> LEFT - ; - + +singleTable +@init +{ + paraphrases.push("in singleTable"); +} +@after +{ + paraphrases.pop(); +} + : + simpleTable + -> simpleTable + | complexTable + -> + ^(TABLE complexTable) + ; + +simpleTable +@init +{ + paraphrases.push("in simpleTable"); +} +@after +{ + paraphrases.pop(); +} + : + tableName (AS? correlationName)? + -> + ^(TABLE_REF tableName correlationName?) + ; + +joinedTable +@init +{ + paraphrases.push("in joinedTable"); +} +@after +{ + paraphrases.pop(); +} + : + joinType? JOIN tableReference joinSpecification + -> + ^(JOIN tableReference joinType? joinSpecification) + ; + +complexTable +@init +{ + paraphrases.push("in complexTable"); +} +@after +{ + paraphrases.pop(); +} + : + (LPAREN singleTable joinedTable+ RPAREN) => LPAREN singleTable joinedTable+ RPAREN + -> + ^(SOURCE singleTable joinedTable+) + | LPAREN complexTable RPAREN + -> complexTable + ; + +joinType + : + INNER + -> INNER + | LEFT OUTER? + -> LEFT + ; + joinSpecification - @init { paraphrases.push("in join condition"); } - @after{ paraphrases.pop(); } - : ON lhs=columnReference EQUALS rhs=columnReference - -> ^(ON $lhs EQUALS $rhs) - ; - - +@init +{ + paraphrases.push("in join condition"); +} +@after +{ + paraphrases.pop(); +} + : + ON lhs=columnReference EQUALS rhs=columnReference + -> + ^(ON $lhs EQUALS $rhs) + ; /* * Broken out the left recursion from the spec */ + + whereClause - @init { paraphrases.push("in where"); } - @after{ paraphrases.pop(); } - : WHERE searchOrCondition - -> searchOrCondition - ; - +@init +{ + paraphrases.push("in where"); +} +@after +{ + paraphrases.pop(); +} + : + WHERE searchOrCondition + -> searchOrCondition + ; + /** * Broken left recursion. */ searchOrCondition - : searchAndCondition (OR searchAndCondition)* - -> ^(DISJUNCTION searchAndCondition+) - ; - + : + searchAndCondition (OR searchAndCondition)* + -> + ^(DISJUNCTION searchAndCondition+) + ; /** * Broken left recursion. - */ + */ searchAndCondition - : searchNotCondition (AND searchNotCondition)* - -> ^(CONJUNCTION searchNotCondition+) - ; - + : + searchNotCondition (AND searchNotCondition)* + -> + ^(CONJUNCTION searchNotCondition+) + ; + searchNotCondition - : NOT searchTest - -> ^(NEGATION searchTest) - | searchTest - -> searchTest - ; - + : + NOT searchTest + -> + ^(NEGATION searchTest) + | searchTest + -> searchTest + ; + searchTest - : predicate - -> predicate - | LPAREN searchOrCondition RPAREN - -> searchOrCondition - ; + : + predicate + -> predicate + | LPAREN searchOrCondition RPAREN + -> searchOrCondition + ; predicate - : comparisonPredicate - | inPredicate - | likePredicate - | nullPredicate - | quantifiedComparisonPredicate - | quantifiedInPredicate - | textSearchPredicate - | folderPredicate - ; - + : + comparisonPredicate + | inPredicate + | likePredicate + | nullPredicate + | quantifiedComparisonPredicate + | quantifiedInPredicate + | textSearchPredicate + | folderPredicate + ; + comparisonPredicate - : valueExpression compOp literalOrParameterName - -> ^(PRED_COMPARISON ANY valueExpression compOp literalOrParameterName) - ; - -compOp - : EQUALS - | NOTEQUALS - | LESSTHAN - | GREATERTHAN - | LESSTHANOREQUALS - | GREATERTHANOREQUALS - ; - + : + valueExpression compOp literalOrParameterName + -> + ^(PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName) + ; + +compOp + : + EQUALS + | NOTEQUALS + | LESSTHAN + | GREATERTHAN + | LESSTHANOREQUALS + | GREATERTHANOREQUALS + ; + literalOrParameterName - : literal - | {strict == false}?=> parameterName - ; - -literal - : signedNumericLiteral - | characterStringLiteral - | booleanLiteral - | datetimeLiteral - ; - + : + literal + | {strict == false}?=> parameterName + ; + +literal + : + signedNumericLiteral + | characterStringLiteral + | booleanLiteral + | datetimeLiteral + ; + inPredicate - : columnReference NOT? IN LPAREN inValueList RPAREN - -> ^(PRED_IN ANY columnReference inValueList NOT?) - ; - + : + columnReference NOT? IN LPAREN inValueList RPAREN + -> + ^(PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList NOT?) + ; + inValueList - : literalOrParameterName (COMMA literalOrParameterName )* - -> ^(LIST literalOrParameterName+) - ; - + : + literalOrParameterName (COMMA literalOrParameterName)* + -> + ^(LIST literalOrParameterName+) + ; + likePredicate - : columnReference NOT? LIKE characterStringLiteral - -> ^(PRED_LIKE columnReference characterStringLiteral NOT?) - ; - + : + columnReference NOT? LIKE characterStringLiteral + -> + ^(PRED_LIKE columnReference characterStringLiteral NOT?) + ; + nullPredicate - : ( (columnReference)=> columnReference | multiValuedColumnReference) IS NULL - -> ^(PRED_EXISTS columnReference NOT) - | ( (columnReference)=> columnReference | multiValuedColumnReference) IS NOT NULL - -> ^(PRED_EXISTS columnReference) - ; - + : + columnReference IS NULL + -> + ^(PRED_EXISTS columnReference NOT) + | columnReference IS NOT NULL + -> + ^(PRED_EXISTS columnReference) + ; + quantifiedComparisonPredicate - : literalOrParameterName compOp ANY multiValuedColumnReference - -> ^(PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference) - ; - - + : + literalOrParameterName compOp ANY columnReference + -> + ^(PRED_COMPARISON ANY literalOrParameterName compOp columnReference) + ; + quantifiedInPredicate - : ANY multiValuedColumnReference NOT? IN LPAREN inValueList RPAREN - -> ^(PRED_IN ANY multiValuedColumnReference inValueList NOT?) - ; - + : + ANY columnReference NOT? IN LPAREN inValueList RPAREN + -> + ^(PRED_IN ANY columnReference inValueList NOT?) + ; + textSearchPredicate - : CONTAINS LPAREN (qualifier COMMA)? textSearchExpression RPAREN - -> ^(PRED_FTS textSearchExpression qualifier?) - ; - + : + CONTAINS LPAREN (qualifier COMMA)? textSearchExpression RPAREN + -> + ^(PRED_FTS textSearchExpression qualifier?) + ; + folderPredicate - : IN_FOLDER folderPredicateArgs - -> ^(PRED_CHILD folderPredicateArgs) - | IN_TREE folderPredicateArgs - -> ^(PRED_DESCENDANT folderPredicateArgs) - ; - + : + IN_FOLDER folderPredicateArgs + -> + ^(PRED_CHILD folderPredicateArgs) + | IN_TREE folderPredicateArgs + -> + ^(PRED_DESCENDANT folderPredicateArgs) + ; + folderPredicateArgs - : LPAREN (qualifier COMMA)? folderId RPAREN - -> folderId qualifier? - ; - + : + LPAREN (qualifier COMMA)? folderId RPAREN + -> folderId qualifier? + ; + orderByClause - @init { paraphrases.push("in order by"); } - @after{ paraphrases.pop(); } - : ORDER BY sortSpecification ( COMMA sortSpecification )* - -> ^(ORDER sortSpecification+) - ; - +@init +{ + paraphrases.push("in order by"); +} +@after +{ + paraphrases.pop(); +} + : + ORDER BY sortSpecification (COMMA sortSpecification)* + -> + ^(ORDER sortSpecification+) + ; + sortSpecification - : columnReference - -> ^(SORT_SPECIFICATION columnReference ASC) - | columnReference ( by=ASC | by=DESC ) - -> ^(SORT_SPECIFICATION columnReference $by) - ; - + : + columnReference + -> + ^(SORT_SPECIFICATION columnReference ASC) + | columnReference + ( + by=ASC + | by=DESC + ) + -> + ^(SORT_SPECIFICATION columnReference $by) + ; + correlationName - : identifier - ; - + : + identifier + ; /* * Parse time validation of the table name * TODO wire up the look a head */ + + tableName - : identifier - -> identifier - ; - + : + identifier + -> identifier + ; + columnName - : identifier - -> identifier - ; - -multiValuedColumnName - : identifier - -> identifier - ; - + : + identifier + -> identifier + ; + parameterName - : COLON identifier - -> ^(PARAMETER identifier) - ; - + : + COLON identifier + -> + ^(PARAMETER identifier) + ; + folderId - : characterStringLiteral - -> characterStringLiteral - ; - + : + characterStringLiteral + -> characterStringLiteral + ; + textSearchExpression - : QUOTED_STRING - ; - + : + QUOTED_STRING + ; + identifier - : ID - -> ID - | {strict == false}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE - -> ^(keyWordOrId) - ; + : + ID + -> ID + | {strict == false}?=> DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE + -> + ^(keyWordOrId) + ; signedNumericLiteral - : FLOATING_POINT_LITERAL - -> ^(NUMERIC_LITERAL FLOATING_POINT_LITERAL) - | integerLiteral - -> integerLiteral - ; - + : + FLOATING_POINT_LITERAL + -> + ^(NUMERIC_LITERAL FLOATING_POINT_LITERAL) + | integerLiteral + -> integerLiteral + ; + integerLiteral - : DECIMAL_INTEGER_LITERAL - -> ^(NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL) - ; - + : + DECIMAL_INTEGER_LITERAL + -> + ^(NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL) + ; + booleanLiteral - : TRUE - -> ^(BOOLEAN_LITERAL TRUE) - | FALSE - -> ^(BOOLEAN_LITERAL FALSE) - ; - + : + TRUE + -> + ^(BOOLEAN_LITERAL TRUE) + | FALSE + -> + ^(BOOLEAN_LITERAL FALSE) + ; + datetimeLiteral - : TIMESTAMP QUOTED_STRING - -> ^(DATETIME_LITERAL QUOTED_STRING) - ; - + : + TIMESTAMP QUOTED_STRING + -> + ^(DATETIME_LITERAL QUOTED_STRING) + ; + characterStringLiteral - : QUOTED_STRING - -> ^(STRING_LITERAL QUOTED_STRING) - ; - - -keyWord - : SELECT - | AS - | FROM - | JOIN - | INNER - | LEFT - | OUTER - | ON - | WHERE - | OR - | AND - | NOT - | IN - | LIKE - | IS - | NULL - | ANY - | CONTAINS - | IN_FOLDER - | IN_TREE - | ORDER - | BY - | ASC - | DESC - | TIMESTAMP - | TRUE - | FALSE - | cmisFunction - ; - -cmisFunction : SCORE - -> SCORE -; - -keyWordOrId - : keyWord - -> keyWord - | ID - -> ID - ; - + : + QUOTED_STRING + -> + ^(STRING_LITERAL QUOTED_STRING) + ; + +keyWord + : + SELECT + | AS + | FROM + | JOIN + | INNER + | LEFT + | OUTER + | ON + | WHERE + | OR + | AND + | NOT + | IN + | LIKE + | IS + | NULL + | ANY + | CONTAINS + | IN_FOLDER + | IN_TREE + | ORDER + | BY + | ASC + | DESC + | TIMESTAMP + | TRUE + | FALSE + | cmisFunction + ; + +cmisFunction + : + SCORE + -> SCORE + ; + +keyWordOrId + : + keyWord + -> keyWord + | ID + -> ID + ; /* * LEXER - */ - + */ /* * Quoted strings take precedence */ -QUOTED_STRING - : '\'' ( ~'\'' | '\'\'')* '\'' - ; - -SELECT : ('S'|'s')('E'|'e')('L'|'l')('E'|'e')('C'|'c')('T'|'t'); -AS : ('A'|'a')('S'|'s'); -FROM : ('F'|'f')('R'|'r')('O'|'o')('M'|'m'); -JOIN : ('J'|'j')('O'|'o')('I'|'i')('N'|'n'); -INNER : ('I'|'i')('N'|'n')('N'|'n')('E'|'e')('R'|'r'); -LEFT : ('L'|'l')('E'|'e')('F'|'f')('T'|'t'); -OUTER : ('O'|'o')('U'|'u')('T'|'t')('E'|'e')('R'|'r'); -ON : ('O'|'o')('N'|'n'); -WHERE : ('W'|'w')('H'|'h')('E'|'e')('R'|'r')('E'|'e'); -OR : ('O'|'o')('R'|'r'); -AND : ('A'|'a')('N'|'n')('D'|'d'); -NOT : ('N'|'n')('O'|'o')('T'|'t'); -IN : ('I'|'i')('N'|'n'); -LIKE : ('L'|'l')('I'|'i')('K'|'k')('E'|'e'); -IS : ('I'|'i')('S'|'s'); -NULL : ('N'|'n')('U'|'u')('L'|'l')('L'|'l'); -ANY : ('A'|'a')('N'|'n')('Y'|'y'); -CONTAINS: ('C'|'c')('O'|'o')('N'|'n')('T'|'t')('A'|'a')('I'|'i')('N'|'n')('S'|'s'); + +QUOTED_STRING + : + '\'' + ( + ~('\'' | '\\') + | '\\' . + )* + '\'' + ; + +SELECT + : + ( + 'S' + | 's' + ) + ( + 'E' + | 'e' + ) + ( + 'L' + | 'l' + ) + ( + 'E' + | 'e' + ) + ( + 'C' + | 'c' + ) + ( + 'T' + | 't' + ) + ; + +AS + : + ( + 'A' + | 'a' + ) + ( + 'S' + | 's' + ) + ; + +FROM + : + ( + 'F' + | 'f' + ) + ( + 'R' + | 'r' + ) + ( + 'O' + | 'o' + ) + ( + 'M' + | 'm' + ) + ; + +JOIN + : + ( + 'J' + | 'j' + ) + ( + 'O' + | 'o' + ) + ( + 'I' + | 'i' + ) + ( + 'N' + | 'n' + ) + ; + +INNER + : + ( + 'I' + | 'i' + ) + ( + 'N' + | 'n' + ) + ( + 'N' + | 'n' + ) + ( + 'E' + | 'e' + ) + ( + 'R' + | 'r' + ) + ; + +LEFT + : + ( + 'L' + | 'l' + ) + ( + 'E' + | 'e' + ) + ( + 'F' + | 'f' + ) + ( + 'T' + | 't' + ) + ; + +OUTER + : + ( + 'O' + | 'o' + ) + ( + 'U' + | 'u' + ) + ( + 'T' + | 't' + ) + ( + 'E' + | 'e' + ) + ( + 'R' + | 'r' + ) + ; + +ON + : + ( + 'O' + | 'o' + ) + ( + 'N' + | 'n' + ) + ; + +WHERE + : + ( + 'W' + | 'w' + ) + ( + 'H' + | 'h' + ) + ( + 'E' + | 'e' + ) + ( + 'R' + | 'r' + ) + ( + 'E' + | 'e' + ) + ; + +OR + : + ( + 'O' + | 'o' + ) + ( + 'R' + | 'r' + ) + ; + +AND + : + ( + 'A' + | 'a' + ) + ( + 'N' + | 'n' + ) + ( + 'D' + | 'd' + ) + ; + +NOT + : + ( + 'N' + | 'n' + ) + ( + 'O' + | 'o' + ) + ( + 'T' + | 't' + ) + ; + +IN + : + ( + 'I' + | 'i' + ) + ( + 'N' + | 'n' + ) + ; + +LIKE + : + ( + 'L' + | 'l' + ) + ( + 'I' + | 'i' + ) + ( + 'K' + | 'k' + ) + ( + 'E' + | 'e' + ) + ; + +IS + : + ( + 'I' + | 'i' + ) + ( + 'S' + | 's' + ) + ; + +NULL + : + ( + 'N' + | 'n' + ) + ( + 'U' + | 'u' + ) + ( + 'L' + | 'l' + ) + ( + 'L' + | 'l' + ) + ; + +ANY + : + ( + 'A' + | 'a' + ) + ( + 'N' + | 'n' + ) + ( + 'Y' + | 'y' + ) + ; + +CONTAINS + : + ( + 'C' + | 'c' + ) + ( + 'O' + | 'o' + ) + ( + 'N' + | 'n' + ) + ( + 'T' + | 't' + ) + ( + 'A' + | 'a' + ) + ( + 'I' + | 'i' + ) + ( + 'N' + | 'n' + ) + ( + 'S' + | 's' + ) + ; + IN_FOLDER - : ('I'|'i')('N'|'n')'_'('F'|'f')('O'|'o')('L'|'l')('D'|'d')('E'|'e')('R'|'r'); -IN_TREE : ('I'|'i')('N'|'n')'_'('T'|'t')('R'|'r')('E'|'e')('E'|'e'); -ORDER : ('O'|'o')('R'|'r')('D'|'d')('E'|'e')('R'|'r'); -BY : ('B'|'b')('Y'|'y'); -ASC : ('A'|'a')('S'|'s')('C'|'c'); -DESC : ('D'|'d')('E'|'e')('S'|'s')('C'|'c'); -TIMESTAMP - : ('T'|'t')('I'|'i')('M'|'m')('E'|'e')('S'|'s')('T'|'s')('A'|'a')('M'|'m')('P'|'p'); -TRUE : ('T'|'t')('R'|'r')('U'|'u')('E'|'e'); -FALSE : ('F'|'f')('A'|'a')('L'|'l')('S'|'s')('E'|'e'); -SCORE : ('S'|'s')('C'|'c')('O'|'o')('R'|'r')('E'|'e'); -LPAREN : '(' ; -RPAREN : ')' ; -STAR : '*' ; -COMMA : ',' ; -DOTSTAR : '.*' ; -DOT : '.' ; -DOTDOT : '..' ; -EQUALS : '=' ; -TILDA : '~' ; + : + ( + 'I' + | 'i' + ) + ( + 'N' + | 'n' + ) + '_' + ( + 'F' + | 'f' + ) + ( + 'O' + | 'o' + ) + ( + 'L' + | 'l' + ) + ( + 'D' + | 'd' + ) + ( + 'E' + | 'e' + ) + ( + 'R' + | 'r' + ) + ; + +IN_TREE + : + ( + 'I' + | 'i' + ) + ( + 'N' + | 'n' + ) + '_' + ( + 'T' + | 't' + ) + ( + 'R' + | 'r' + ) + ( + 'E' + | 'e' + ) + ( + 'E' + | 'e' + ) + ; + +ORDER + : + ( + 'O' + | 'o' + ) + ( + 'R' + | 'r' + ) + ( + 'D' + | 'd' + ) + ( + 'E' + | 'e' + ) + ( + 'R' + | 'r' + ) + ; + +BY + : + ( + 'B' + | 'b' + ) + ( + 'Y' + | 'y' + ) + ; + +ASC + : + ( + 'A' + | 'a' + ) + ( + 'S' + | 's' + ) + ( + 'C' + | 'c' + ) + ; + +DESC + : + ( + 'D' + | 'd' + ) + ( + 'E' + | 'e' + ) + ( + 'S' + | 's' + ) + ( + 'C' + | 'c' + ) + ; + +TIMESTAMP + : + ( + 'T' + | 't' + ) + ( + 'I' + | 'i' + ) + ( + 'M' + | 'm' + ) + ( + 'E' + | 'e' + ) + ( + 'S' + | 's' + ) + ( + 'T' + | 't' + ) + ( + 'A' + | 'a' + ) + ( + 'M' + | 'm' + ) + ( + 'P' + | 'p' + ) + ; + +TRUE + : + ( + 'T' + | 't' + ) + ( + 'R' + | 'r' + ) + ( + 'U' + | 'u' + ) + ( + 'E' + | 'e' + ) + ; + +FALSE + : + ( + 'F' + | 'f' + ) + ( + 'A' + | 'a' + ) + ( + 'L' + | 'l' + ) + ( + 'S' + | 's' + ) + ( + 'E' + | 'e' + ) + ; + +SCORE + : + ( + 'S' + | 's' + ) + ( + 'C' + | 'c' + ) + ( + 'O' + | 'o' + ) + ( + 'R' + | 'r' + ) + ( + 'E' + | 'e' + ) + ; + +LPAREN + : + '(' + ; + +RPAREN + : + ')' + ; + +STAR + : + '*' + ; + +COMMA + : + ',' + ; + +DOTSTAR + : + '.*' + ; + +DOT + : + '.' + ; + +DOTDOT + : + '..' + ; + +EQUALS + : + '=' + ; + +TILDA + : + '~' + ; + NOTEQUALS - : '<>' ; + : + '<>' + ; + GREATERTHAN - : '>' ; -LESSTHAN - : '<' ; + : + '>' + ; + +LESSTHAN + : + '<' + ; + GREATERTHANOREQUALS - : '>=' ; + : + '>=' + ; + LESSTHANOREQUALS - : '<=' ; -COLON : ':' ; + : + '<=' + ; + +COLON + : + ':' + ; DOUBLE_QUOTE - : '"' - ; - - + : + '"' + ; /* * Decimal adapted from the Java spec */ -DECIMAL_INTEGER_LITERAL - : ( PLUS | MINUS )? DECIMAL_NUMERAL - ; + +DECIMAL_INTEGER_LITERAL + : + ( + PLUS + | MINUS + )? + DECIMAL_NUMERAL + ; /* * Floating point adapted from the Java spec */ + + FLOATING_POINT_LITERAL - : ( PLUS | MINUS )? DIGIT+ DOT DIGIT* EXPONENT? - | ( PLUS | MINUS )? DOT DIGIT+ EXPONENT? - | ( PLUS | MINUS )? DIGIT+ EXPONENT - ; - - + : + ( + PLUS + | MINUS + )? + DIGIT+ DOT DIGIT* EXPONENT? + | + ( + PLUS + | MINUS + )? + DOT DIGIT+ EXPONENT? + | + ( + PLUS + | MINUS + )? + DIGIT+ EXPONENT + ; + /** * We should support _x????_ encoding for invalid sql characters - */ -ID : ('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0'..'9'|'_'|':'|'$'|'#')* ; + */ +ID + : + ( + 'a'..'z' + | 'A'..'Z' + | '_' + ) + ( + 'a'..'z' + | 'A'..'Z' + | '0'..'9' + | '_' + | ':' + | '$' + | '#' + )* + ; -WS : ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN; } ; - +WS + : + ( + ' ' + | '\t' + | '\r' + | '\n' + )+ + { $channel = HIDDEN; } + ; /** * Fragments for decimal */ - fragment DECIMAL_NUMERAL - : ZERO_DIGIT - | NON_ZERO_DIGIT DIGIT* - ; -fragment -DIGIT : ZERO_DIGIT | NON_ZERO_DIGIT ; -fragment -ZERO_DIGIT - : '0' ; -fragment -NON_ZERO_DIGIT - : '1'..'9' ; -fragment -PLUS : '+' ; -fragment -MINUS : '-' ; + : + ZERO_DIGIT + | NON_ZERO_DIGIT DIGIT* + ; fragment -E : ('e' | 'E') ; +DIGIT + : + ZERO_DIGIT + | NON_ZERO_DIGIT + ; +fragment +ZERO_DIGIT + : + '0' + ; +fragment +NON_ZERO_DIGIT + : + '1'..'9' + ; - +fragment +PLUS + : + '+' + ; + +fragment +MINUS + : + '-' + ; + +fragment +E + : + ( + 'e' + | 'E' + ) + ; /* * Fragments for floating point */ - + + fragment EXPONENT - : E SIGNED_INTEGER - ; + : + E SIGNED_INTEGER + ; + fragment SIGNED_INTEGER - : (PLUS | MINUS)? DIGIT+ - ; - - - + : + ( + PLUS + | MINUS + )? + DIGIT+ + ; diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens index ba2a6cfe18..3be489efda 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMIS.tokens @@ -1,85 +1,86 @@ FUNCTION=10 -WHERE=46 -EXPONENT=83 +WHERE=47 +EXPONENT=84 PRED_FTS=22 -STAR=32 -INNER=41 -ORDER=63 -DOUBLE_QUOTE=70 +STAR=33 +INNER=42 +ORDER=64 +DOUBLE_QUOTE=71 NUMERIC_LITERAL=27 PRED_COMPARISON=18 -CONTAINS=60 +CONTAINS=61 TABLE=12 SOURCE=11 -DOTDOT=77 -EQUALS=45 -NOT=49 -ID=69 -AND=48 -LPAREN=37 -LESSTHANOREQUALS=53 -AS=34 -RPAREN=38 -TILDA=78 +DOTDOT=78 +EQUALS=46 +NOT=50 +ID=70 +AND=49 +LPAREN=38 +LESSTHANOREQUALS=54 +AS=35 +RPAREN=39 +TILDA=79 PRED_LIKE=21 STRING_LITERAL=28 -IN=55 -DECIMAL_NUMERAL=81 -FLOATING_POINT_LITERAL=71 -COMMA=33 -IS=57 -LEFT=42 -SIGNED_INTEGER=88 +IN=56 +DECIMAL_NUMERAL=82 +FLOATING_POINT_LITERAL=72 +COMMA=34 +IS=58 +LEFT=43 +SIGNED_INTEGER=89 PARAMETER=14 COLUMN=6 -PLUS=79 -QUOTED_STRING=68 -ZERO_DIGIT=85 -DIGIT=82 -DOT=36 +PLUS=80 +QUOTED_STRING=69 +SINGLE_VALUED_PROPERTY=31 +ZERO_DIGIT=86 +DIGIT=83 +DOT=37 COLUMN_REF=8 -SELECT=31 -LIKE=56 -GREATERTHAN=52 -DOTSTAR=35 -E=87 -OUTER=43 -BY=64 -LESSTHAN=51 -NON_ZERO_DIGIT=86 -ASC=65 +SELECT=32 +LIKE=57 +GREATERTHAN=53 +DOTSTAR=36 +E=88 +OUTER=44 +BY=65 +LESSTHAN=52 +NON_ZERO_DIGIT=87 +ASC=66 QUALIFIER=9 CONJUNCTION=15 -NULL=58 -ON=44 -NOTEQUALS=50 +NULL=59 +ON=45 +NOTEQUALS=51 DATETIME_LITERAL=29 -MINUS=80 +MINUS=81 LIST=23 -TRUE=73 +TRUE=74 PRED_DESCENDANT=25 -JOIN=40 -IN_FOLDER=61 -COLON=67 -GREATERTHANOREQUALS=54 +JOIN=41 +IN_FOLDER=62 +COLON=68 +GREATERTHANOREQUALS=55 BOOLEAN_LITERAL=30 DISJUNCTION=16 COLUMNS=7 -WS=84 -ANY=59 -SCORE=76 +WS=85 +ANY=60 +SCORE=77 NEGATION=17 TABLE_REF=13 SORT_SPECIFICATION=26 -IN_TREE=62 -OR=47 +IN_TREE=63 +OR=48 PRED_CHILD=24 PRED_EXISTS=20 QUERY=4 -DECIMAL_INTEGER_LITERAL=72 -DESC=66 +DECIMAL_INTEGER_LITERAL=73 +DESC=67 ALL_COLUMNS=5 -FROM=39 -FALSE=74 -TIMESTAMP=75 +FROM=40 +FALSE=75 +TIMESTAMP=76 PRED_IN=19 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 ac324734fc..b437a1f168 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 !Unknown version! W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2009-10-28 12:12:42 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2010-02-04 11:06:31 package org.alfresco.repo.search.impl.parsers; import org.alfresco.cmis.CMISQueryException; @@ -11,90 +11,91 @@ import java.util.ArrayList; public class CMISLexer extends Lexer { public static final int FUNCTION=10; - public static final int WHERE=46; - public static final int EXPONENT=83; + public static final int WHERE=47; + public static final int EXPONENT=84; public static final int PRED_FTS=22; - public static final int STAR=32; - public static final int INNER=41; - public static final int ORDER=63; - public static final int DOUBLE_QUOTE=70; + public static final int STAR=33; + public static final int INNER=42; + public static final int ORDER=64; + public static final int DOUBLE_QUOTE=71; public static final int NUMERIC_LITERAL=27; public static final int PRED_COMPARISON=18; - public static final int CONTAINS=60; + public static final int CONTAINS=61; public static final int TABLE=12; public static final int SOURCE=11; - public static final int EQUALS=45; - public static final int DOTDOT=77; - public static final int NOT=49; - public static final int ID=69; - public static final int AND=48; + public static final int EQUALS=46; + public static final int DOTDOT=78; + public static final int NOT=50; + public static final int ID=70; + public static final int AND=49; public static final int EOF=-1; - public static final int LPAREN=37; - public static final int LESSTHANOREQUALS=53; - public static final int AS=34; - public static final int RPAREN=38; - public static final int TILDA=78; + public static final int LPAREN=38; + public static final int LESSTHANOREQUALS=54; + public static final int AS=35; + public static final int RPAREN=39; + public static final int TILDA=79; public static final int PRED_LIKE=21; public static final int STRING_LITERAL=28; - public static final int IN=55; - public static final int DECIMAL_NUMERAL=81; - public static final int FLOATING_POINT_LITERAL=71; - public static final int COMMA=33; - public static final int IS=57; - public static final int LEFT=42; - public static final int SIGNED_INTEGER=88; + public static final int IN=56; + public static final int DECIMAL_NUMERAL=82; + public static final int FLOATING_POINT_LITERAL=72; + public static final int COMMA=34; + public static final int IS=58; + public static final int LEFT=43; + public static final int SIGNED_INTEGER=89; public static final int PARAMETER=14; public static final int COLUMN=6; - public static final int PLUS=79; - public static final int QUOTED_STRING=68; - public static final int ZERO_DIGIT=85; - public static final int DIGIT=82; - public static final int DOT=36; + public static final int PLUS=80; + public static final int QUOTED_STRING=69; + public static final int SINGLE_VALUED_PROPERTY=31; + public static final int ZERO_DIGIT=86; + public static final int DIGIT=83; + public static final int DOT=37; public static final int COLUMN_REF=8; - public static final int SELECT=31; - public static final int LIKE=56; - public static final int DOTSTAR=35; - public static final int GREATERTHAN=52; - public static final int OUTER=43; - public static final int E=87; - public static final int LESSTHAN=51; - public static final int BY=64; - public static final int ASC=65; - public static final int NON_ZERO_DIGIT=86; + public static final int SELECT=32; + public static final int LIKE=57; + public static final int DOTSTAR=36; + public static final int GREATERTHAN=53; + public static final int OUTER=44; + public static final int E=88; + public static final int LESSTHAN=52; + public static final int BY=65; + public static final int ASC=66; + public static final int NON_ZERO_DIGIT=87; public static final int QUALIFIER=9; public static final int CONJUNCTION=15; - public static final int NULL=58; - public static final int ON=44; - public static final int NOTEQUALS=50; + public static final int NULL=59; + public static final int ON=45; + public static final int NOTEQUALS=51; public static final int DATETIME_LITERAL=29; - public static final int MINUS=80; + public static final int MINUS=81; public static final int LIST=23; public static final int PRED_DESCENDANT=25; - public static final int TRUE=73; - public static final int JOIN=40; - public static final int IN_FOLDER=61; + public static final int TRUE=74; + public static final int JOIN=41; + public static final int IN_FOLDER=62; public static final int BOOLEAN_LITERAL=30; - public static final int GREATERTHANOREQUALS=54; - public static final int COLON=67; + public static final int GREATERTHANOREQUALS=55; + public static final int COLON=68; public static final int COLUMNS=7; public static final int DISJUNCTION=16; - public static final int ANY=59; - public static final int WS=84; - public static final int SCORE=76; + public static final int ANY=60; + public static final int WS=85; + public static final int SCORE=77; public static final int NEGATION=17; public static final int TABLE_REF=13; public static final int SORT_SPECIFICATION=26; - public static final int IN_TREE=62; - public static final int OR=47; + public static final int IN_TREE=63; + public static final int OR=48; public static final int PRED_CHILD=24; public static final int PRED_EXISTS=20; public static final int QUERY=4; public static final int ALL_COLUMNS=5; - public static final int DESC=66; - public static final int DECIMAL_INTEGER_LITERAL=72; - public static final int FROM=39; - public static final int FALSE=74; - public static final int TIMESTAMP=75; + public static final int DESC=67; + public static final int DECIMAL_INTEGER_LITERAL=73; + public static final int FROM=40; + public static final int FALSE=75; + public static final int TIMESTAMP=76; public static final int PRED_IN=19; public Token nextToken() { @@ -149,42 +150,36 @@ public class CMISLexer extends Lexer { super(input,state); } - public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } // $ANTLR start "QUOTED_STRING" public final void mQUOTED_STRING() throws RecognitionException { try { int _type = QUOTED_STRING; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:5: ( '\\'' (~ '\\'' | '\\'\\'' )* '\\'' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:9: '\\'' (~ '\\'' | '\\'\\'' )* '\\'' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:859:9: ( '\\'' (~ ( '\\'' | '\\\\' ) | '\\\\' . )* '\\'' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:860:9: '\\'' (~ ( '\\'' | '\\\\' ) | '\\\\' . )* '\\'' { match('\''); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:14: (~ '\\'' | '\\'\\'' )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:861:9: (~ ( '\\'' | '\\\\' ) | '\\\\' . )* loop1: do { int alt1=3; int LA1_0 = input.LA(1); - if ( (LA1_0=='\'') ) { - int LA1_1 = input.LA(2); - - if ( (LA1_1=='\'') ) { - alt1=2; - } - - - } - else if ( ((LA1_0>='\u0000' && LA1_0<='&')||(LA1_0>='(' && LA1_0<='\uFFFF')) ) { + if ( ((LA1_0>='\u0000' && LA1_0<='&')||(LA1_0>='(' && LA1_0<='[')||(LA1_0>=']' && LA1_0<='\uFFFF')) ) { alt1=1; } + else if ( (LA1_0=='\\') ) { + alt1=2; + } switch (alt1) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:16: ~ '\\'' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:862:17: ~ ( '\\'' | '\\\\' ) { - if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='\uFFFF') ) { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { input.consume(); } @@ -197,10 +192,10 @@ public class CMISLexer extends Lexer { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:690:24: '\\'\\'' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:863:19: '\\\\' . { - match("''"); - + match('\\'); + matchAny(); } break; @@ -227,8 +222,8 @@ public class CMISLexer extends Lexer { try { int _type = SELECT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:693:8: ( ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:693:10: ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:869:9: ( ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:870:9: ( 'S' | 's' ) ( 'E' | 'e' ) ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'C' | 'c' ) ( 'T' | 't' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -300,8 +295,8 @@ public class CMISLexer extends Lexer { try { int _type = AS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:694:4: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:694:6: ( 'A' | 'a' ) ( 'S' | 's' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:897:9: ( ( 'A' | 'a' ) ( 'S' | 's' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:898:9: ( 'A' | 'a' ) ( 'S' | 's' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -337,8 +332,8 @@ public class CMISLexer extends Lexer { try { int _type = FROM; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:695:6: ( ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:695:8: ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:909:9: ( ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:910:9: ( 'F' | 'f' ) ( 'R' | 'r' ) ( 'O' | 'o' ) ( 'M' | 'm' ) { if ( input.LA(1)=='F'||input.LA(1)=='f' ) { input.consume(); @@ -392,8 +387,8 @@ public class CMISLexer extends Lexer { try { int _type = JOIN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:696:6: ( ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:696:8: ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:929:9: ( ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:930:9: ( 'J' | 'j' ) ( 'O' | 'o' ) ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='J'||input.LA(1)=='j' ) { input.consume(); @@ -447,8 +442,8 @@ public class CMISLexer extends Lexer { try { int _type = INNER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:697:7: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:697:9: ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:949:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:950:9: ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'N' | 'n' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -511,8 +506,8 @@ public class CMISLexer extends Lexer { try { int _type = LEFT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:698:6: ( ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:698:8: ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:973:9: ( ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:974:9: ( 'L' | 'l' ) ( 'E' | 'e' ) ( 'F' | 'f' ) ( 'T' | 't' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -566,8 +561,8 @@ public class CMISLexer extends Lexer { try { int _type = OUTER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:699:7: ( ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:699:9: ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:993:9: ( ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:994:9: ( 'O' | 'o' ) ( 'U' | 'u' ) ( 'T' | 't' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -630,8 +625,8 @@ public class CMISLexer extends Lexer { try { int _type = ON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:700:4: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:700:6: ( 'O' | 'o' ) ( 'N' | 'n' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1017:9: ( ( 'O' | 'o' ) ( 'N' | 'n' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1018:9: ( 'O' | 'o' ) ( 'N' | 'n' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -667,8 +662,8 @@ public class CMISLexer extends Lexer { try { int _type = WHERE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:701:7: ( ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:701:9: ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1029:9: ( ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1030:9: ( 'W' | 'w' ) ( 'H' | 'h' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='W'||input.LA(1)=='w' ) { input.consume(); @@ -731,8 +726,8 @@ public class CMISLexer extends Lexer { try { int _type = OR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:702:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:702:6: ( 'O' | 'o' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1053:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1054:9: ( 'O' | 'o' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -768,8 +763,8 @@ public class CMISLexer extends Lexer { try { int _type = AND; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:703:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:703:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1065:9: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1066:9: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -814,8 +809,8 @@ public class CMISLexer extends Lexer { try { int _type = NOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:704:5: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:704:7: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1081:9: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1082:9: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -860,8 +855,8 @@ public class CMISLexer extends Lexer { try { int _type = IN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:705:4: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:705:6: ( 'I' | 'i' ) ( 'N' | 'n' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1097:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1098:9: ( 'I' | 'i' ) ( 'N' | 'n' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -897,8 +892,8 @@ public class CMISLexer extends Lexer { try { int _type = LIKE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:706:6: ( ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:706:8: ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1109:9: ( ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1110:9: ( 'L' | 'l' ) ( 'I' | 'i' ) ( 'K' | 'k' ) ( 'E' | 'e' ) { if ( input.LA(1)=='L'||input.LA(1)=='l' ) { input.consume(); @@ -952,8 +947,8 @@ public class CMISLexer extends Lexer { try { int _type = IS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:707:4: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:707:6: ( 'I' | 'i' ) ( 'S' | 's' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1129:9: ( ( 'I' | 'i' ) ( 'S' | 's' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1130:9: ( 'I' | 'i' ) ( 'S' | 's' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -989,8 +984,8 @@ public class CMISLexer extends Lexer { try { int _type = NULL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:708:6: ( ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:708:8: ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1141:9: ( ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1142:9: ( 'N' | 'n' ) ( 'U' | 'u' ) ( 'L' | 'l' ) ( 'L' | 'l' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -1044,8 +1039,8 @@ public class CMISLexer extends Lexer { try { int _type = ANY; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:709:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:709:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1161:9: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1162:9: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1090,8 +1085,8 @@ public class CMISLexer extends Lexer { try { int _type = CONTAINS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:710:9: ( ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:710:11: ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1177:9: ( ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1178:9: ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'N' | 'n' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'I' | 'i' ) ( 'N' | 'n' ) ( 'S' | 's' ) { if ( input.LA(1)=='C'||input.LA(1)=='c' ) { input.consume(); @@ -1181,8 +1176,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_FOLDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:712:2: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:712:4: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1213:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1214:9: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'F' | 'f' ) ( 'O' | 'o' ) ( 'L' | 'l' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1273,8 +1268,8 @@ public class CMISLexer extends Lexer { try { int _type = IN_TREE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:713:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:713:11: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1250:9: ( ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1251:9: ( 'I' | 'i' ) ( 'N' | 'n' ) '_' ( 'T' | 't' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ( 'E' | 'e' ) { if ( input.LA(1)=='I'||input.LA(1)=='i' ) { input.consume(); @@ -1347,8 +1342,8 @@ public class CMISLexer extends Lexer { try { int _type = ORDER; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:714:7: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:714:9: ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1279:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1280:9: ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -1411,8 +1406,8 @@ public class CMISLexer extends Lexer { try { int _type = BY; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:715:4: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:715:6: ( 'B' | 'b' ) ( 'Y' | 'y' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1303:9: ( ( 'B' | 'b' ) ( 'Y' | 'y' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1304:9: ( 'B' | 'b' ) ( 'Y' | 'y' ) { if ( input.LA(1)=='B'||input.LA(1)=='b' ) { input.consume(); @@ -1448,8 +1443,8 @@ public class CMISLexer extends Lexer { try { int _type = ASC; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:716:5: ( ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:716:7: ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1315:9: ( ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1316:9: ( 'A' | 'a' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -1494,8 +1489,8 @@ public class CMISLexer extends Lexer { try { int _type = DESC; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:717:6: ( ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:717:8: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1331:9: ( ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1332:9: ( 'D' | 'd' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'C' | 'c' ) { if ( input.LA(1)=='D'||input.LA(1)=='d' ) { input.consume(); @@ -1549,8 +1544,8 @@ public class CMISLexer extends Lexer { try { int _type = TIMESTAMP; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:719:9: ( ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 's' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:719:17: ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 's' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1351:9: ( ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1352:9: ( 'T' | 't' ) ( 'I' | 'i' ) ( 'M' | 'm' ) ( 'E' | 'e' ) ( 'S' | 's' ) ( 'T' | 't' ) ( 'A' | 'a' ) ( 'M' | 'm' ) ( 'P' | 'p' ) { if ( input.LA(1)=='T'||input.LA(1)=='t' ) { input.consume(); @@ -1597,7 +1592,7 @@ public class CMISLexer extends Lexer { recover(mse); throw mse;} - if ( input.LA(1)=='T'||input.LA(1)=='s' ) { + if ( input.LA(1)=='T'||input.LA(1)=='t' ) { input.consume(); } @@ -1649,8 +1644,8 @@ public class CMISLexer extends Lexer { try { int _type = TRUE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:720:9: ( ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:720:17: ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1391:9: ( ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1392:9: ( 'T' | 't' ) ( 'R' | 'r' ) ( 'U' | 'u' ) ( 'E' | 'e' ) { if ( input.LA(1)=='T'||input.LA(1)=='t' ) { input.consume(); @@ -1704,8 +1699,8 @@ public class CMISLexer extends Lexer { try { int _type = FALSE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:721:9: ( ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:721:17: ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1411:9: ( ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1412:9: ( 'F' | 'f' ) ( 'A' | 'a' ) ( 'L' | 'l' ) ( 'S' | 's' ) ( 'E' | 'e' ) { if ( input.LA(1)=='F'||input.LA(1)=='f' ) { input.consume(); @@ -1768,8 +1763,8 @@ public class CMISLexer extends Lexer { try { int _type = SCORE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:722:9: ( ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:722:17: ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1435:9: ( ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1436:9: ( 'S' | 's' ) ( 'C' | 'c' ) ( 'O' | 'o' ) ( 'R' | 'r' ) ( 'E' | 'e' ) { if ( input.LA(1)=='S'||input.LA(1)=='s' ) { input.consume(); @@ -1832,8 +1827,8 @@ public class CMISLexer extends Lexer { try { int _type = LPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:723:8: ( '(' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:723:10: '(' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1459:9: ( '(' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1460:9: '(' { match('('); @@ -1852,8 +1847,8 @@ public class CMISLexer extends Lexer { try { int _type = RPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:724:8: ( ')' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:724:10: ')' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1464:9: ( ')' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1465:9: ')' { match(')'); @@ -1872,8 +1867,8 @@ public class CMISLexer extends Lexer { try { int _type = STAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:725:6: ( '*' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:725:8: '*' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1469:9: ( '*' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1470:9: '*' { match('*'); @@ -1892,8 +1887,8 @@ public class CMISLexer extends Lexer { try { int _type = COMMA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:726:7: ( ',' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:726:9: ',' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1474:9: ( ',' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1475:9: ',' { match(','); @@ -1912,8 +1907,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTSTAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:727:9: ( '.*' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:727:11: '.*' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1479:9: ( '.*' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1480:9: '.*' { match(".*"); @@ -1933,8 +1928,8 @@ public class CMISLexer extends Lexer { try { int _type = DOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:728:5: ( '.' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:728:7: '.' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1484:9: ( '.' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1485:9: '.' { match('.'); @@ -1953,8 +1948,8 @@ public class CMISLexer extends Lexer { try { int _type = DOTDOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:729:8: ( '..' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:729:10: '..' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1489:9: ( '..' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1490:9: '..' { match(".."); @@ -1974,8 +1969,8 @@ public class CMISLexer extends Lexer { try { int _type = EQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:730:9: ( '=' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:730:11: '=' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1494:9: ( '=' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1495:9: '=' { match('='); @@ -1994,8 +1989,8 @@ public class CMISLexer extends Lexer { try { int _type = TILDA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:731:7: ( '~' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:731:9: '~' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1499:9: ( '~' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1500:9: '~' { match('~'); @@ -2014,8 +2009,8 @@ public class CMISLexer extends Lexer { try { int _type = NOTEQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:733:2: ( '<>' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:733:4: '<>' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1504:9: ( '<>' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1505:9: '<>' { match("<>"); @@ -2035,8 +2030,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:735:2: ( '>' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:735:4: '>' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1509:9: ( '>' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1510:9: '>' { match('>'); @@ -2055,8 +2050,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHAN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:737:2: ( '<' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:737:4: '<' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1514:9: ( '<' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1515:9: '<' { match('<'); @@ -2075,8 +2070,8 @@ public class CMISLexer extends Lexer { try { int _type = GREATERTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:739:2: ( '>=' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:739:4: '>=' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1519:9: ( '>=' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1520:9: '>=' { match(">="); @@ -2096,8 +2091,8 @@ public class CMISLexer extends Lexer { try { int _type = LESSTHANOREQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:741:2: ( '<=' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:741:4: '<=' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1524:9: ( '<=' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1525:9: '<=' { match("<="); @@ -2117,8 +2112,8 @@ public class CMISLexer extends Lexer { try { int _type = COLON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:742:7: ( ':' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:742:9: ':' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1529:9: ( ':' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1530:9: ':' { match(':'); @@ -2137,8 +2132,8 @@ public class CMISLexer extends Lexer { try { int _type = DOUBLE_QUOTE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:745:2: ( '\"' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:745:4: '\"' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1534:9: ( '\"' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1535:9: '\"' { match('\"'); @@ -2157,10 +2152,10 @@ public class CMISLexer extends Lexer { try { int _type = DECIMAL_INTEGER_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:753:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:753:11: ( PLUS | MINUS )? DECIMAL_NUMERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1543:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1544:9: ( PLUS | MINUS )? DECIMAL_NUMERAL { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:753:11: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1544:9: ( PLUS | MINUS )? int alt2=2; int LA2_0 = input.LA(1); @@ -2169,7 +2164,7 @@ public class CMISLexer extends Lexer { } switch (alt2) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2203,14 +2198,14 @@ public class CMISLexer extends Lexer { try { int _type = FLOATING_POINT_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:2: ( ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1556:9: ( ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT ) int alt12=3; alt12 = dfa12.predict(input); switch (alt12) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:4: ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1557:9: ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:4: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1557:9: ( PLUS | MINUS )? int alt3=2; int LA3_0 = input.LA(1); @@ -2219,7 +2214,7 @@ public class CMISLexer extends Lexer { } switch (alt3) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2236,7 +2231,7 @@ public class CMISLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:22: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:9: ( DIGIT )+ int cnt4=0; loop4: do { @@ -2250,7 +2245,7 @@ public class CMISLexer extends Lexer { switch (alt4) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:22: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:9: DIGIT { mDIGIT(); @@ -2267,7 +2262,7 @@ public class CMISLexer extends Lexer { } while (true); mDOT(); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:33: ( DIGIT )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:20: ( DIGIT )* loop5: do { int alt5=2; @@ -2280,7 +2275,7 @@ public class CMISLexer extends Lexer { switch (alt5) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:33: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:20: DIGIT { mDIGIT(); @@ -2292,7 +2287,7 @@ public class CMISLexer extends Lexer { } } while (true); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:40: ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:27: ( EXPONENT )? int alt6=2; int LA6_0 = input.LA(1); @@ -2301,7 +2296,7 @@ public class CMISLexer extends Lexer { } switch (alt6) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:760:40: EXPONENT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1561:27: EXPONENT { mEXPONENT(); @@ -2314,9 +2309,9 @@ public class CMISLexer extends Lexer { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:761:4: ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1563:9: ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:761:4: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1563:9: ( PLUS | MINUS )? int alt7=2; int LA7_0 = input.LA(1); @@ -2325,7 +2320,7 @@ public class CMISLexer extends Lexer { } switch (alt7) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2343,7 +2338,7 @@ public class CMISLexer extends Lexer { } mDOT(); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:761:26: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:13: ( DIGIT )+ int cnt8=0; loop8: do { @@ -2357,7 +2352,7 @@ public class CMISLexer extends Lexer { switch (alt8) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:761:26: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:13: DIGIT { mDIGIT(); @@ -2373,7 +2368,7 @@ public class CMISLexer extends Lexer { cnt8++; } while (true); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:761:33: ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:20: ( EXPONENT )? int alt9=2; int LA9_0 = input.LA(1); @@ -2382,7 +2377,7 @@ public class CMISLexer extends Lexer { } switch (alt9) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:761:33: EXPONENT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1567:20: EXPONENT { mEXPONENT(); @@ -2395,9 +2390,9 @@ public class CMISLexer extends Lexer { } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:762:4: ( PLUS | MINUS )? ( DIGIT )+ EXPONENT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1569:9: ( PLUS | MINUS )? ( DIGIT )+ EXPONENT { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:762:4: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1569:9: ( PLUS | MINUS )? int alt10=2; int LA10_0 = input.LA(1); @@ -2406,7 +2401,7 @@ public class CMISLexer extends Lexer { } switch (alt10) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2423,7 +2418,7 @@ public class CMISLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:762:22: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1573:9: ( DIGIT )+ int cnt11=0; loop11: do { @@ -2437,7 +2432,7 @@ public class CMISLexer extends Lexer { switch (alt11) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:762:22: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1573:9: DIGIT { mDIGIT(); @@ -2472,8 +2467,8 @@ public class CMISLexer extends Lexer { try { int _type = ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:769:4: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:769:6: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1580:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1581:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* { if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -2484,7 +2479,7 @@ public class CMISLexer extends Lexer { recover(mse); throw mse;} - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:769:29: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1586:9: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | ':' | '$' | '#' )* loop13: do { int alt13=2; @@ -2497,7 +2492,7 @@ public class CMISLexer extends Lexer { switch (alt13) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( (input.LA(1)>='#' && input.LA(1)<='$')||(input.LA(1)>='0' && input.LA(1)<=':')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -2533,10 +2528,10 @@ public class CMISLexer extends Lexer { try { int _type = WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:771:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:771:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1598:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1599:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:771:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1599:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ int cnt14=0; loop14: do { @@ -2550,7 +2545,7 @@ public class CMISLexer extends Lexer { switch (alt14) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) { input.consume(); @@ -2589,7 +2584,7 @@ public class CMISLexer extends Lexer { // $ANTLR start "DECIMAL_NUMERAL" public final void mDECIMAL_NUMERAL() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:780:2: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1613:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) int alt16=2; int LA16_0 = input.LA(1); @@ -2607,17 +2602,17 @@ public class CMISLexer extends Lexer { } switch (alt16) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:780:4: ZERO_DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1614:9: ZERO_DIGIT { mZERO_DIGIT(); } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:781:4: NON_ZERO_DIGIT ( DIGIT )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1615:11: NON_ZERO_DIGIT ( DIGIT )* { mNON_ZERO_DIGIT(); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:781:19: ( DIGIT )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1615:26: ( DIGIT )* loop15: do { int alt15=2; @@ -2630,7 +2625,7 @@ public class CMISLexer extends Lexer { switch (alt15) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:781:19: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1615:26: DIGIT { mDIGIT(); @@ -2656,8 +2651,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "DIGIT" public final void mDIGIT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:784:7: ( ZERO_DIGIT | NON_ZERO_DIGIT ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1620:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( (input.LA(1)>='0' && input.LA(1)<='9') ) { input.consume(); @@ -2680,8 +2675,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "ZERO_DIGIT" public final void mZERO_DIGIT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:787:2: ( '0' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:787:4: '0' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1627:9: ( '0' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1628:9: '0' { match('0'); @@ -2696,8 +2691,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "NON_ZERO_DIGIT" public final void mNON_ZERO_DIGIT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:790:2: ( '1' .. '9' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:790:4: '1' .. '9' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1633:9: ( '1' .. '9' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1634:9: '1' .. '9' { matchRange('1','9'); @@ -2712,8 +2707,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "PLUS" public final void mPLUS() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:792:6: ( '+' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:792:8: '+' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1639:9: ( '+' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1640:9: '+' { match('+'); @@ -2728,8 +2723,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "MINUS" public final void mMINUS() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:794:7: ( '-' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:794:9: '-' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1645:9: ( '-' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1646:9: '-' { match('-'); @@ -2744,8 +2739,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "E" public final void mE() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:797:3: ( ( 'e' | 'E' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:797:5: ( 'e' | 'E' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1651:9: ( ( 'e' | 'E' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1652:9: ( 'e' | 'E' ) { if ( input.LA(1)=='E'||input.LA(1)=='e' ) { input.consume(); @@ -2768,8 +2763,8 @@ public class CMISLexer extends Lexer { // $ANTLR start "EXPONENT" public final void mEXPONENT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:808:2: ( E SIGNED_INTEGER ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:808:4: E SIGNED_INTEGER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1664:9: ( E SIGNED_INTEGER ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1665:9: E SIGNED_INTEGER { mE(); mSIGNED_INTEGER(); @@ -2785,10 +2780,10 @@ public class CMISLexer extends Lexer { // $ANTLR start "SIGNED_INTEGER" public final void mSIGNED_INTEGER() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:2: ( ( PLUS | MINUS )? ( DIGIT )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:4: ( PLUS | MINUS )? ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1670:9: ( ( PLUS | MINUS )? ( DIGIT )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1671:9: ( PLUS | MINUS )? ( DIGIT )+ { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:4: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1671:9: ( PLUS | MINUS )? int alt17=2; int LA17_0 = input.LA(1); @@ -2797,7 +2792,7 @@ public class CMISLexer extends Lexer { } switch (alt17) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2814,7 +2809,7 @@ public class CMISLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:20: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1675:9: ( DIGIT )+ int cnt18=0; loop18: do { @@ -2828,7 +2823,7 @@ public class CMISLexer extends Lexer { switch (alt18) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:20: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1675:9: DIGIT { mDIGIT(); @@ -2854,348 +2849,348 @@ public class CMISLexer extends Lexer { // $ANTLR end "SIGNED_INTEGER" public void mTokens() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:8: ( QUOTED_STRING | SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | DOUBLE_QUOTE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:8: ( QUOTED_STRING | SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | SCORE | LPAREN | RPAREN | STAR | COMMA | DOTSTAR | DOT | DOTDOT | EQUALS | TILDA | NOTEQUALS | GREATERTHAN | LESSTHAN | GREATERTHANOREQUALS | LESSTHANOREQUALS | COLON | DOUBLE_QUOTE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | ID | WS ) int alt19=49; alt19 = dfa19.predict(input); switch (alt19) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:10: QUOTED_STRING + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:10: QUOTED_STRING { mQUOTED_STRING(); } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:24: SELECT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:24: SELECT { mSELECT(); } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:31: AS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:31: AS { mAS(); } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:34: FROM + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:34: FROM { mFROM(); } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:39: JOIN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:39: JOIN { mJOIN(); } break; case 6 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:44: INNER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:44: INNER { mINNER(); } break; case 7 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:50: LEFT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:50: LEFT { mLEFT(); } break; case 8 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:55: OUTER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:55: OUTER { mOUTER(); } break; case 9 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:61: ON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:61: ON { mON(); } break; case 10 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:64: WHERE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:64: WHERE { mWHERE(); } break; case 11 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:70: OR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:70: OR { mOR(); } break; case 12 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:73: AND + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:73: AND { mAND(); } break; case 13 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:77: NOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:77: NOT { mNOT(); } break; case 14 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:81: IN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:81: IN { mIN(); } break; case 15 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:84: LIKE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:84: LIKE { mLIKE(); } break; case 16 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:89: IS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:89: IS { mIS(); } break; case 17 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:92: NULL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:92: NULL { mNULL(); } break; case 18 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:97: ANY + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:97: ANY { mANY(); } break; case 19 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:101: CONTAINS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:101: CONTAINS { mCONTAINS(); } break; case 20 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:110: IN_FOLDER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:110: IN_FOLDER { mIN_FOLDER(); } break; case 21 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:120: IN_TREE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:120: IN_TREE { mIN_TREE(); } break; case 22 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:128: ORDER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:128: ORDER { mORDER(); } break; case 23 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:134: BY + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:134: BY { mBY(); } break; case 24 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:137: ASC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:137: ASC { mASC(); } break; case 25 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:141: DESC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:141: DESC { mDESC(); } break; case 26 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:146: TIMESTAMP + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:146: TIMESTAMP { mTIMESTAMP(); } break; case 27 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:156: TRUE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:156: TRUE { mTRUE(); } break; case 28 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:161: FALSE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:161: FALSE { mFALSE(); } break; case 29 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:167: SCORE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:167: SCORE { mSCORE(); } break; case 30 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:173: LPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:173: LPAREN { mLPAREN(); } break; case 31 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:180: RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:180: RPAREN { mRPAREN(); } break; case 32 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:187: STAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:187: STAR { mSTAR(); } break; case 33 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:192: COMMA + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:192: COMMA { mCOMMA(); } break; case 34 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:198: DOTSTAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:198: DOTSTAR { mDOTSTAR(); } break; case 35 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:206: DOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:206: DOT { mDOT(); } break; case 36 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:210: DOTDOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:210: DOTDOT { mDOTDOT(); } break; case 37 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:217: EQUALS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:217: EQUALS { mEQUALS(); } break; case 38 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:224: TILDA + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:224: TILDA { mTILDA(); } break; case 39 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:230: NOTEQUALS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:230: NOTEQUALS { mNOTEQUALS(); } break; case 40 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:240: GREATERTHAN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:240: GREATERTHAN { mGREATERTHAN(); } break; case 41 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:252: LESSTHAN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:252: LESSTHAN { mLESSTHAN(); } break; case 42 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:261: GREATERTHANOREQUALS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:261: GREATERTHANOREQUALS { mGREATERTHANOREQUALS(); } break; case 43 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:281: LESSTHANOREQUALS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:281: LESSTHANOREQUALS { mLESSTHANOREQUALS(); } break; case 44 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:298: COLON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:298: COLON { mCOLON(); } break; case 45 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:304: DOUBLE_QUOTE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:304: DOUBLE_QUOTE { mDOUBLE_QUOTE(); } break; case 46 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:317: DECIMAL_INTEGER_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:317: DECIMAL_INTEGER_LITERAL { mDECIMAL_INTEGER_LITERAL(); } break; case 47 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:341: FLOATING_POINT_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:341: FLOATING_POINT_LITERAL { mFLOATING_POINT_LITERAL(); } break; case 48 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:364: ID + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:364: ID { mID(); } break; case 49 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:367: WS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:1:367: WS { mWS(); @@ -3260,57 +3255,46 @@ public class CMISLexer extends Lexer { this.transition = DFA12_transition; } public String getDescription() { - return "759:1: FLOATING_POINT_LITERAL : ( ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT );"; + return "1555:1: FLOATING_POINT_LITERAL : ( ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT );"; } } static final String DFA19_eotS = - "\2\uffff\15\35\4\uffff\1\67\2\uffff\1\73\1\75\3\uffff\2\76\2\uffff"+ - "\2\35\1\103\4\35\1\113\1\114\3\35\1\120\1\122\4\35\1\127\3\35\12"+ - "\uffff\1\76\2\35\1\135\1\uffff\1\136\1\137\5\35\2\uffff\3\35\1\uffff"+ - "\1\35\1\uffff\1\35\1\153\2\35\1\uffff\5\35\3\uffff\1\163\1\35\1"+ - "\165\3\35\1\171\1\172\3\35\1\uffff\1\176\1\35\1\u0080\1\35\1\u0082"+ - "\1\35\1\u0084\1\uffff\1\u0085\1\uffff\1\u0086\2\35\2\uffff\1\u0089"+ - "\1\u008a\1\u008b\1\uffff\1\35\1\uffff\1\35\1\uffff\1\u008e\3\uffff"+ - "\2\35\3\uffff\2\35\1\uffff\1\35\1\u0094\3\35\1\uffff\1\u0098\1\35"+ - "\1\u009a\1\uffff\1\u009b\2\uffff"; + "\2\uffff\15\42\4\uffff\1\71\2\uffff\1\75\1\77\3\uffff\2\101\2\uffff"+ + "\2\42\2\uffff\1\111\4\42\1\121\1\122\3\42\1\126\1\130\4\42\1\135"+ + "\3\42\16\uffff\1\101\2\42\1\143\1\uffff\1\144\1\145\5\42\2\uffff"+ + "\3\42\1\uffff\1\42\1\uffff\1\42\1\161\2\42\1\uffff\5\42\3\uffff"+ + "\1\171\1\42\1\173\3\42\1\177\1\u0080\3\42\1\uffff\1\u0084\1\42\1"+ + "\u0086\1\42\1\u0088\1\42\1\u008a\1\uffff\1\u008b\1\uffff\1\u008c"+ + "\2\42\2\uffff\1\u008f\1\u0090\1\u0091\1\uffff\1\42\1\uffff\1\42"+ + "\1\uffff\1\u0094\3\uffff\2\42\3\uffff\2\42\1\uffff\1\42\1\u009a"+ + "\3\42\1\uffff\1\u009e\1\42\1\u00a0\1\uffff\1\u00a1\2\uffff"; static final String DFA19_eofS = - "\u009c\uffff"; + "\u00a2\uffff"; static final String DFA19_minS = - "\1\11\1\uffff\1\103\1\116\1\101\1\117\1\116\1\105\1\116\1\110\2"+ - "\117\1\131\1\105\1\111\4\uffff\1\52\2\uffff\2\75\2\uffff\3\56\2"+ - "\uffff\1\114\1\117\1\43\1\104\1\117\1\114\1\111\2\43\1\106\1\113"+ - "\1\124\2\43\1\105\1\124\1\114\1\116\1\43\1\123\1\115\1\125\12\uffff"+ - "\1\56\1\105\1\122\1\43\1\uffff\2\43\1\115\1\123\1\116\1\105\1\106"+ - "\2\uffff\1\124\2\105\1\uffff\1\105\1\uffff\1\122\1\43\1\114\1\124"+ - "\1\uffff\1\103\2\105\1\103\1\105\3\uffff\1\43\1\105\1\43\1\122\1"+ - "\117\1\122\2\43\2\122\1\105\1\uffff\1\43\1\101\1\43\1\123\1\43\1"+ - "\124\1\43\1\uffff\1\43\1\uffff\1\43\1\114\1\105\2\uffff\3\43\1\uffff"+ - "\1\111\1\uffff\1\124\1\uffff\1\43\3\uffff\1\104\1\105\3\uffff\1"+ - "\116\1\101\1\uffff\1\105\1\43\1\123\1\115\1\122\1\uffff\1\43\1\120"+ - "\1\43\1\uffff\1\43\2\uffff"; + "\1\11\1\uffff\15\43\4\uffff\1\52\2\uffff\2\75\2\uffff\3\56\2\uffff"+ + "\2\43\2\uffff\24\43\16\uffff\1\56\3\43\1\uffff\7\43\2\uffff\3\43"+ + "\1\uffff\1\43\1\uffff\4\43\1\uffff\5\43\3\uffff\13\43\1\uffff\7"+ + "\43\1\uffff\1\43\1\uffff\3\43\2\uffff\3\43\1\uffff\1\43\1\uffff"+ + "\1\43\1\uffff\1\43\3\uffff\2\43\3\uffff\2\43\1\uffff\5\43\1\uffff"+ + "\3\43\1\uffff\1\43\2\uffff"; static final String DFA19_maxS = - "\1\176\1\uffff\1\145\1\163\1\162\1\157\1\163\1\151\1\165\1\150"+ - "\1\165\1\157\1\171\1\145\1\162\4\uffff\1\71\2\uffff\1\76\1\75\2"+ - "\uffff\1\71\2\145\2\uffff\1\154\1\157\1\172\1\171\1\157\1\154\1"+ - "\151\2\172\1\146\1\153\1\164\2\172\1\145\1\164\1\154\1\156\1\172"+ - "\1\163\1\155\1\165\12\uffff\2\145\1\162\1\172\1\uffff\2\172\1\155"+ - "\1\163\1\156\1\145\1\164\2\uffff\1\164\2\145\1\uffff\1\145\1\uffff"+ - "\1\162\1\172\1\154\1\164\1\uffff\1\143\2\145\1\143\1\145\3\uffff"+ - "\1\172\1\145\1\172\1\162\1\157\1\162\2\172\2\162\1\145\1\uffff\1"+ - "\172\1\141\1\172\1\163\1\172\1\164\1\172\1\uffff\1\172\1\uffff\1"+ - "\172\1\154\1\145\2\uffff\3\172\1\uffff\1\151\1\uffff\1\163\1\uffff"+ - "\1\172\3\uffff\1\144\1\145\3\uffff\1\156\1\141\1\uffff\1\145\1\172"+ - "\1\163\1\155\1\162\1\uffff\1\172\1\160\1\172\1\uffff\1\172\2\uffff"; + "\1\176\1\uffff\15\172\4\uffff\1\71\2\uffff\1\76\1\75\2\uffff\1"+ + "\71\2\145\2\uffff\2\172\2\uffff\24\172\16\uffff\1\145\3\172\1\uffff"+ + "\7\172\2\uffff\3\172\1\uffff\1\172\1\uffff\4\172\1\uffff\5\172\3"+ + "\uffff\13\172\1\uffff\7\172\1\uffff\1\172\1\uffff\3\172\2\uffff"+ + "\3\172\1\uffff\1\172\1\uffff\1\172\1\uffff\1\172\3\uffff\2\172\3"+ + "\uffff\2\172\1\uffff\5\172\1\uffff\3\172\1\uffff\1\172\2\uffff"; static final String DFA19_acceptS = "\1\uffff\1\1\15\uffff\1\36\1\37\1\40\1\41\1\uffff\1\45\1\46\2\uffff"+ - "\1\54\1\55\3\uffff\1\60\1\61\26\uffff\1\42\1\44\1\43\1\57\1\47\1"+ - "\53\1\51\1\52\1\50\1\56\4\uffff\1\3\7\uffff\1\16\1\20\3\uffff\1"+ - "\11\1\uffff\1\13\4\uffff\1\27\5\uffff\1\30\1\14\1\22\13\uffff\1"+ - "\15\7\uffff\1\4\1\uffff\1\5\3\uffff\1\7\1\17\3\uffff\1\21\1\uffff"+ - "\1\31\1\uffff\1\33\1\uffff\1\35\1\34\1\6\2\uffff\1\10\1\26\1\12"+ - "\2\uffff\1\2\5\uffff\1\25\3\uffff\1\23\1\uffff\1\24\1\32"; + "\1\54\1\55\3\uffff\1\60\1\61\2\uffff\2\60\24\uffff\1\42\1\44\1\43"+ + "\1\57\1\47\1\53\1\51\1\52\1\50\1\57\1\56\3\57\4\uffff\1\3\7\uffff"+ + "\1\16\1\20\3\uffff\1\11\1\uffff\1\13\4\uffff\1\27\5\uffff\1\30\1"+ + "\14\1\22\13\uffff\1\15\7\uffff\1\4\1\uffff\1\5\3\uffff\1\7\1\17"+ + "\3\uffff\1\21\1\uffff\1\31\1\uffff\1\33\1\uffff\1\35\1\34\1\6\2"+ + "\uffff\1\10\1\26\1\12\2\uffff\1\2\5\uffff\1\25\3\uffff\1\23\1\uffff"+ + "\1\24\1\32"; static final String DFA19_specialS = - "\u009c\uffff}>"; + "\u00a2\uffff}>"; static final String[] DFA19_transitionS = { "\2\36\2\uffff\1\36\22\uffff\1\36\1\uffff\1\31\4\uffff\1\1\1"+ "\17\1\20\1\21\1\32\1\22\1\32\1\23\1\uffff\1\33\11\34\1\30\1"+ @@ -3320,64 +3304,95 @@ public class CMISLexer extends Lexer { "\1\6\1\5\1\35\1\7\1\35\1\12\1\10\3\35\1\2\1\16\2\35\1\11\3\35"+ "\3\uffff\1\25", "", - "\1\40\1\uffff\1\37\35\uffff\1\40\1\uffff\1\37", - "\1\42\4\uffff\1\41\32\uffff\1\42\4\uffff\1\41", - "\1\44\20\uffff\1\43\16\uffff\1\44\20\uffff\1\43", - "\1\45\37\uffff\1\45", - "\1\46\4\uffff\1\47\32\uffff\1\46\4\uffff\1\47", - "\1\50\3\uffff\1\51\33\uffff\1\50\3\uffff\1\51", - "\1\53\3\uffff\1\54\2\uffff\1\52\30\uffff\1\53\3\uffff\1\54"+ - "\2\uffff\1\52", - "\1\55\37\uffff\1\55", - "\1\56\5\uffff\1\57\31\uffff\1\56\5\uffff\1\57", - "\1\60\37\uffff\1\60", - "\1\61\37\uffff\1\61", - "\1\62\37\uffff\1\62", - "\1\63\10\uffff\1\64\26\uffff\1\63\10\uffff\1\64", + "\2\41\13\uffff\13\41\6\uffff\2\41\1\40\1\41\1\37\25\41\4\uffff"+ + "\1\41\1\uffff\2\41\1\40\1\41\1\37\25\41", + "\2\41\13\uffff\13\41\6\uffff\15\41\1\44\4\41\1\43\7\41\4\uffff"+ + "\1\41\1\uffff\15\41\1\44\4\41\1\43\7\41", + "\2\41\13\uffff\13\41\6\uffff\1\46\20\41\1\45\10\41\4\uffff"+ + "\1\41\1\uffff\1\46\20\41\1\45\10\41", + "\2\41\13\uffff\13\41\6\uffff\16\41\1\47\13\41\4\uffff\1\41"+ + "\1\uffff\16\41\1\47\13\41", + "\2\41\13\uffff\13\41\6\uffff\15\41\1\50\4\41\1\51\7\41\4\uffff"+ + "\1\41\1\uffff\15\41\1\50\4\41\1\51\7\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\52\3\41\1\53\21\41\4\uffff"+ + "\1\41\1\uffff\4\41\1\52\3\41\1\53\21\41", + "\2\41\13\uffff\13\41\6\uffff\15\41\1\55\3\41\1\56\2\41\1\54"+ + "\5\41\4\uffff\1\41\1\uffff\15\41\1\55\3\41\1\56\2\41\1\54\5"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\7\41\1\57\22\41\4\uffff\1\41"+ + "\1\uffff\7\41\1\57\22\41", + "\2\41\13\uffff\13\41\6\uffff\16\41\1\60\5\41\1\61\5\41\4\uffff"+ + "\1\41\1\uffff\16\41\1\60\5\41\1\61\5\41", + "\2\41\13\uffff\13\41\6\uffff\16\41\1\62\13\41\4\uffff\1\41"+ + "\1\uffff\16\41\1\62\13\41", + "\2\41\13\uffff\13\41\6\uffff\30\41\1\63\1\41\4\uffff\1\41"+ + "\1\uffff\30\41\1\63\1\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\64\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\64\25\41", + "\2\41\13\uffff\13\41\6\uffff\10\41\1\65\10\41\1\66\10\41\4"+ + "\uffff\1\41\1\uffff\10\41\1\65\10\41\1\66\10\41", "", "", "", "", - "\1\65\3\uffff\1\66\1\uffff\12\70", + "\1\67\3\uffff\1\70\1\uffff\12\72", "", "", - "\1\72\1\71", - "\1\74", + "\1\74\1\73", + "\1\76", "", "", - "\1\70\1\uffff\1\33\11\34", - "\1\70\1\uffff\12\70\13\uffff\1\70\37\uffff\1\70", - "\1\70\1\uffff\12\77\13\uffff\1\70\37\uffff\1\70", + "\1\100\1\uffff\1\33\11\34", + "\1\102\1\uffff\12\103\13\uffff\1\104\37\uffff\1\104", + "\1\102\1\uffff\12\105\13\uffff\1\104\37\uffff\1\104", "", "", - "\1\100\37\uffff\1\100", - "\1\101\37\uffff\1\101", - "\2\35\13\uffff\13\35\6\uffff\2\35\1\102\27\35\4\uffff\1\35"+ - "\1\uffff\2\35\1\102\27\35", - "\1\104\24\uffff\1\105\12\uffff\1\104\24\uffff\1\105", - "\1\106\37\uffff\1\106", - "\1\107\37\uffff\1\107", - "\1\110\37\uffff\1\110", - "\2\35\13\uffff\13\35\6\uffff\15\35\1\111\14\35\4\uffff\1\112"+ - "\1\uffff\15\35\1\111\14\35", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\115\37\uffff\1\115", - "\1\116\37\uffff\1\116", - "\1\117\37\uffff\1\117", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\2\35\13\uffff\13\35\6\uffff\3\35\1\121\26\35\4\uffff\1\35"+ - "\1\uffff\3\35\1\121\26\35", - "\1\123\37\uffff\1\123", - "\1\124\37\uffff\1\124", - "\1\125\37\uffff\1\125", - "\1\126\37\uffff\1\126", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\130\37\uffff\1\130", - "\1\131\37\uffff\1\131", - "\1\132\37\uffff\1\132", + "\2\41\13\uffff\13\41\6\uffff\13\41\1\106\16\41\4\uffff\1\41"+ + "\1\uffff\13\41\1\106\16\41", + "\2\41\13\uffff\13\41\6\uffff\16\41\1\107\13\41\4\uffff\1\41"+ + "\1\uffff\16\41\1\107\13\41", + "", + "", + "\2\41\13\uffff\13\41\6\uffff\2\41\1\110\27\41\4\uffff\1\41"+ + "\1\uffff\2\41\1\110\27\41", + "\2\41\13\uffff\13\41\6\uffff\3\41\1\112\24\41\1\113\1\41\4"+ + "\uffff\1\41\1\uffff\3\41\1\112\24\41\1\113\1\41", + "\2\41\13\uffff\13\41\6\uffff\16\41\1\114\13\41\4\uffff\1\41"+ + "\1\uffff\16\41\1\114\13\41", + "\2\41\13\uffff\13\41\6\uffff\13\41\1\115\16\41\4\uffff\1\41"+ + "\1\uffff\13\41\1\115\16\41", + "\2\41\13\uffff\13\41\6\uffff\10\41\1\116\21\41\4\uffff\1\41"+ + "\1\uffff\10\41\1\116\21\41", + "\2\41\13\uffff\13\41\6\uffff\15\41\1\117\14\41\4\uffff\1\120"+ + "\1\uffff\15\41\1\117\14\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\5\41\1\123\24\41\4\uffff\1\41"+ + "\1\uffff\5\41\1\123\24\41", + "\2\41\13\uffff\13\41\6\uffff\12\41\1\124\17\41\4\uffff\1\41"+ + "\1\uffff\12\41\1\124\17\41", + "\2\41\13\uffff\13\41\6\uffff\23\41\1\125\6\41\4\uffff\1\41"+ + "\1\uffff\23\41\1\125\6\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\3\41\1\127\26\41\4\uffff\1\41"+ + "\1\uffff\3\41\1\127\26\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\131\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\131\25\41", + "\2\41\13\uffff\13\41\6\uffff\23\41\1\132\6\41\4\uffff\1\41"+ + "\1\uffff\23\41\1\132\6\41", + "\2\41\13\uffff\13\41\6\uffff\13\41\1\133\16\41\4\uffff\1\41"+ + "\1\uffff\13\41\1\133\16\41", + "\2\41\13\uffff\13\41\6\uffff\15\41\1\134\14\41\4\uffff\1\41"+ + "\1\uffff\15\41\1\134\14\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\22\41\1\136\7\41\4\uffff\1\41"+ + "\1\uffff\22\41\1\136\7\41", + "\2\41\13\uffff\13\41\6\uffff\14\41\1\137\15\41\4\uffff\1\41"+ + "\1\uffff\14\41\1\137\15\41", + "\2\41\13\uffff\13\41\6\uffff\24\41\1\140\5\41\4\uffff\1\41"+ + "\1\uffff\24\41\1\140\5\41", "", "", "", @@ -3388,119 +3403,165 @@ public class CMISLexer extends Lexer { "", "", "", - "\1\70\1\uffff\12\77\13\uffff\1\70\37\uffff\1\70", - "\1\133\37\uffff\1\133", - "\1\134\37\uffff\1\134", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\140\37\uffff\1\140", - "\1\141\37\uffff\1\141", - "\1\142\37\uffff\1\142", - "\1\143\37\uffff\1\143", - "\1\144\15\uffff\1\145\21\uffff\1\144\15\uffff\1\145", - "", - "", - "\1\146\37\uffff\1\146", - "\1\147\37\uffff\1\147", - "\1\150\37\uffff\1\150", - "", - "\1\151\37\uffff\1\151", - "", - "\1\152\37\uffff\1\152", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\154\37\uffff\1\154", - "\1\155\37\uffff\1\155", - "", - "\1\156\37\uffff\1\156", - "\1\157\37\uffff\1\157", - "\1\160\37\uffff\1\160", - "\1\161\37\uffff\1\161", - "\1\162\37\uffff\1\162", "", "", "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\164\37\uffff\1\164", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\166\37\uffff\1\166", - "\1\167\37\uffff\1\167", - "\1\170\37\uffff\1\170", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\173\37\uffff\1\173", - "\1\174\37\uffff\1\174", - "\1\175\37\uffff\1\175", "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\177\37\uffff\1\177", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\u0081\37\uffff\1\u0081", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\u0083\37\uffff\1\u0083", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", + "\1\102\1\uffff\12\105\13\uffff\1\104\37\uffff\1\104", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\141\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\141\25\41", + "\2\41\13\uffff\13\41\6\uffff\21\41\1\142\10\41\4\uffff\1\41"+ + "\1\uffff\21\41\1\142\10\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\u0087\37\uffff\1\u0087", - "\1\u0088\37\uffff\1\u0088", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\14\41\1\146\15\41\4\uffff\1\41"+ + "\1\uffff\14\41\1\146\15\41", + "\2\41\13\uffff\13\41\6\uffff\22\41\1\147\7\41\4\uffff\1\41"+ + "\1\uffff\22\41\1\147\7\41", + "\2\41\13\uffff\13\41\6\uffff\15\41\1\150\14\41\4\uffff\1\41"+ + "\1\uffff\15\41\1\150\14\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\151\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\151\25\41", + "\2\41\13\uffff\13\41\6\uffff\5\41\1\152\15\41\1\153\6\41\4"+ + "\uffff\1\41\1\uffff\5\41\1\152\15\41\1\153\6\41", "", "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", + "\2\41\13\uffff\13\41\6\uffff\23\41\1\154\6\41\4\uffff\1\41"+ + "\1\uffff\23\41\1\154\6\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\155\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\155\25\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\156\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\156\25\41", "", - "\1\u008c\37\uffff\1\u008c", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\157\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\157\25\41", "", - "\1\u008d\36\uffff\1\u008d", + "\2\41\13\uffff\13\41\6\uffff\21\41\1\160\10\41\4\uffff\1\41"+ + "\1\uffff\21\41\1\160\10\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\13\41\1\162\16\41\4\uffff\1\41"+ + "\1\uffff\13\41\1\162\16\41", + "\2\41\13\uffff\13\41\6\uffff\23\41\1\163\6\41\4\uffff\1\41"+ + "\1\uffff\23\41\1\163\6\41", "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", + "\2\41\13\uffff\13\41\6\uffff\2\41\1\164\27\41\4\uffff\1\41"+ + "\1\uffff\2\41\1\164\27\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\165\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\165\25\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\166\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\166\25\41", + "\2\41\13\uffff\13\41\6\uffff\2\41\1\167\27\41\4\uffff\1\41"+ + "\1\uffff\2\41\1\167\27\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\170\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\170\25\41", "", "", "", - "\1\u008f\37\uffff\1\u008f", - "\1\u0090\37\uffff\1\u0090", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\172\25\41\4\uffff\1\41"+ + "\1\uffff\4\41\1\172\25\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\21\41\1\174\10\41\4\uffff\1\41"+ + "\1\uffff\21\41\1\174\10\41", + "\2\41\13\uffff\13\41\6\uffff\16\41\1\175\13\41\4\uffff\1\41"+ + "\1\uffff\16\41\1\175\13\41", + "\2\41\13\uffff\13\41\6\uffff\21\41\1\176\10\41\4\uffff\1\41"+ + "\1\uffff\21\41\1\176\10\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\21\41\1\u0081\10\41\4\uffff\1"+ + "\41\1\uffff\21\41\1\u0081\10\41", + "\2\41\13\uffff\13\41\6\uffff\21\41\1\u0082\10\41\4\uffff\1"+ + "\41\1\uffff\21\41\1\u0082\10\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\u0083\25\41\4\uffff\1"+ + "\41\1\uffff\4\41\1\u0083\25\41", + "", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\1\u0085\31\41\4\uffff\1\41\1"+ + "\uffff\1\u0085\31\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\22\41\1\u0087\7\41\4\uffff\1"+ + "\41\1\uffff\22\41\1\u0087\7\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\23\41\1\u0089\6\41\4\uffff\1"+ + "\41\1\uffff\23\41\1\u0089\6\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\13\41\1\u008d\16\41\4\uffff\1"+ + "\41\1\uffff\13\41\1\u008d\16\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\u008e\25\41\4\uffff\1"+ + "\41\1\uffff\4\41\1\u008e\25\41", + "", + "", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "", + "\2\41\13\uffff\13\41\6\uffff\10\41\1\u0092\21\41\4\uffff\1"+ + "\41\1\uffff\10\41\1\u0092\21\41", + "", + "\2\41\13\uffff\13\41\6\uffff\23\41\1\u0093\6\41\4\uffff\1"+ + "\41\1\uffff\23\41\1\u0093\6\41", + "", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", "", "", "", - "\1\u0091\37\uffff\1\u0091", - "\1\u0092\37\uffff\1\u0092", + "\2\41\13\uffff\13\41\6\uffff\3\41\1\u0095\26\41\4\uffff\1"+ + "\41\1\uffff\3\41\1\u0095\26\41", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\u0096\25\41\4\uffff\1"+ + "\41\1\uffff\4\41\1\u0096\25\41", "", - "\1\u0093\37\uffff\1\u0093", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\u0095\37\uffff\1\u0095", - "\1\u0096\37\uffff\1\u0096", - "\1\u0097\37\uffff\1\u0097", "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", - "\1\u0099\37\uffff\1\u0099", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", "", - "\2\35\13\uffff\13\35\6\uffff\32\35\4\uffff\1\35\1\uffff\32"+ - "\35", + "\2\41\13\uffff\13\41\6\uffff\15\41\1\u0097\14\41\4\uffff\1"+ + "\41\1\uffff\15\41\1\u0097\14\41", + "\2\41\13\uffff\13\41\6\uffff\1\u0098\31\41\4\uffff\1\41\1"+ + "\uffff\1\u0098\31\41", + "", + "\2\41\13\uffff\13\41\6\uffff\4\41\1\u0099\25\41\4\uffff\1"+ + "\41\1\uffff\4\41\1\u0099\25\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\22\41\1\u009b\7\41\4\uffff\1"+ + "\41\1\uffff\22\41\1\u009b\7\41", + "\2\41\13\uffff\13\41\6\uffff\14\41\1\u009c\15\41\4\uffff\1"+ + "\41\1\uffff\14\41\1\u009c\15\41", + "\2\41\13\uffff\13\41\6\uffff\21\41\1\u009d\10\41\4\uffff\1"+ + "\41\1\uffff\21\41\1\u009d\10\41", + "", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "\2\41\13\uffff\13\41\6\uffff\17\41\1\u009f\12\41\4\uffff\1"+ + "\41\1\uffff\17\41\1\u009f\12\41", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", + "", + "\2\41\13\uffff\13\41\6\uffff\32\41\4\uffff\1\41\1\uffff\32"+ + "\41", "", "" }; 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 e5e9819b30..8d2ec83047 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 !Unknown version! W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2009-10-28 12:12:41 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g 2010-02-04 11:06:30 package org.alfresco.repo.search.impl.parsers; import org.alfresco.cmis.CMISQueryException; @@ -15,93 +15,94 @@ import org.antlr.runtime.tree.*; public class CMISParser extends Parser { public static final String[] tokenNames = new String[] { - "", "", "", "", "QUERY", "ALL_COLUMNS", "COLUMN", "COLUMNS", "COLUMN_REF", "QUALIFIER", "FUNCTION", "SOURCE", "TABLE", "TABLE_REF", "PARAMETER", "CONJUNCTION", "DISJUNCTION", "NEGATION", "PRED_COMPARISON", "PRED_IN", "PRED_EXISTS", "PRED_LIKE", "PRED_FTS", "LIST", "PRED_CHILD", "PRED_DESCENDANT", "SORT_SPECIFICATION", "NUMERIC_LITERAL", "STRING_LITERAL", "DATETIME_LITERAL", "BOOLEAN_LITERAL", "SELECT", "STAR", "COMMA", "AS", "DOTSTAR", "DOT", "LPAREN", "RPAREN", "FROM", "JOIN", "INNER", "LEFT", "OUTER", "ON", "EQUALS", "WHERE", "OR", "AND", "NOT", "NOTEQUALS", "LESSTHAN", "GREATERTHAN", "LESSTHANOREQUALS", "GREATERTHANOREQUALS", "IN", "LIKE", "IS", "NULL", "ANY", "CONTAINS", "IN_FOLDER", "IN_TREE", "ORDER", "BY", "ASC", "DESC", "COLON", "QUOTED_STRING", "ID", "DOUBLE_QUOTE", "FLOATING_POINT_LITERAL", "DECIMAL_INTEGER_LITERAL", "TRUE", "FALSE", "TIMESTAMP", "SCORE", "DOTDOT", "TILDA", "PLUS", "MINUS", "DECIMAL_NUMERAL", "DIGIT", "EXPONENT", "WS", "ZERO_DIGIT", "NON_ZERO_DIGIT", "E", "SIGNED_INTEGER" + "", "", "", "", "QUERY", "ALL_COLUMNS", "COLUMN", "COLUMNS", "COLUMN_REF", "QUALIFIER", "FUNCTION", "SOURCE", "TABLE", "TABLE_REF", "PARAMETER", "CONJUNCTION", "DISJUNCTION", "NEGATION", "PRED_COMPARISON", "PRED_IN", "PRED_EXISTS", "PRED_LIKE", "PRED_FTS", "LIST", "PRED_CHILD", "PRED_DESCENDANT", "SORT_SPECIFICATION", "NUMERIC_LITERAL", "STRING_LITERAL", "DATETIME_LITERAL", "BOOLEAN_LITERAL", "SINGLE_VALUED_PROPERTY", "SELECT", "STAR", "COMMA", "AS", "DOTSTAR", "DOT", "LPAREN", "RPAREN", "FROM", "JOIN", "INNER", "LEFT", "OUTER", "ON", "EQUALS", "WHERE", "OR", "AND", "NOT", "NOTEQUALS", "LESSTHAN", "GREATERTHAN", "LESSTHANOREQUALS", "GREATERTHANOREQUALS", "IN", "LIKE", "IS", "NULL", "ANY", "CONTAINS", "IN_FOLDER", "IN_TREE", "ORDER", "BY", "ASC", "DESC", "COLON", "QUOTED_STRING", "ID", "DOUBLE_QUOTE", "FLOATING_POINT_LITERAL", "DECIMAL_INTEGER_LITERAL", "TRUE", "FALSE", "TIMESTAMP", "SCORE", "DOTDOT", "TILDA", "PLUS", "MINUS", "DECIMAL_NUMERAL", "DIGIT", "EXPONENT", "WS", "ZERO_DIGIT", "NON_ZERO_DIGIT", "E", "SIGNED_INTEGER" }; public static final int FUNCTION=10; - public static final int WHERE=46; - public static final int EXPONENT=83; + public static final int WHERE=47; + public static final int EXPONENT=84; public static final int PRED_FTS=22; - public static final int STAR=32; - public static final int INNER=41; - public static final int ORDER=63; - public static final int DOUBLE_QUOTE=70; + public static final int STAR=33; + public static final int INNER=42; + public static final int ORDER=64; + public static final int DOUBLE_QUOTE=71; public static final int NUMERIC_LITERAL=27; public static final int PRED_COMPARISON=18; - public static final int CONTAINS=60; + public static final int CONTAINS=61; public static final int TABLE=12; public static final int SOURCE=11; - public static final int DOTDOT=77; - public static final int EQUALS=45; - public static final int NOT=49; - public static final int ID=69; - public static final int AND=48; + public static final int DOTDOT=78; + public static final int EQUALS=46; + public static final int NOT=50; + public static final int ID=70; + public static final int AND=49; public static final int EOF=-1; - public static final int LPAREN=37; - public static final int LESSTHANOREQUALS=53; - public static final int AS=34; - public static final int RPAREN=38; - public static final int TILDA=78; + public static final int LPAREN=38; + public static final int LESSTHANOREQUALS=54; + public static final int AS=35; + public static final int RPAREN=39; + public static final int TILDA=79; public static final int PRED_LIKE=21; public static final int STRING_LITERAL=28; - public static final int IN=55; - public static final int DECIMAL_NUMERAL=81; - public static final int FLOATING_POINT_LITERAL=71; - public static final int COMMA=33; - public static final int IS=57; - public static final int LEFT=42; - public static final int SIGNED_INTEGER=88; + public static final int IN=56; + public static final int DECIMAL_NUMERAL=82; + public static final int FLOATING_POINT_LITERAL=72; + public static final int COMMA=34; + public static final int IS=58; + public static final int LEFT=43; + public static final int SIGNED_INTEGER=89; public static final int PARAMETER=14; public static final int COLUMN=6; - public static final int PLUS=79; - public static final int QUOTED_STRING=68; - public static final int ZERO_DIGIT=85; - public static final int DIGIT=82; - public static final int DOT=36; + public static final int PLUS=80; + public static final int QUOTED_STRING=69; + public static final int SINGLE_VALUED_PROPERTY=31; + public static final int ZERO_DIGIT=86; + public static final int DIGIT=83; + public static final int DOT=37; public static final int COLUMN_REF=8; - public static final int SELECT=31; - public static final int LIKE=56; - public static final int GREATERTHAN=52; - public static final int DOTSTAR=35; - public static final int E=87; - public static final int OUTER=43; - public static final int BY=64; - public static final int LESSTHAN=51; - public static final int NON_ZERO_DIGIT=86; - public static final int ASC=65; + public static final int SELECT=32; + public static final int LIKE=57; + public static final int GREATERTHAN=53; + public static final int DOTSTAR=36; + public static final int E=88; + public static final int OUTER=44; + public static final int BY=65; + public static final int LESSTHAN=52; + public static final int NON_ZERO_DIGIT=87; + public static final int ASC=66; public static final int QUALIFIER=9; public static final int CONJUNCTION=15; - public static final int NULL=58; - public static final int ON=44; - public static final int NOTEQUALS=50; + public static final int NULL=59; + public static final int ON=45; + public static final int NOTEQUALS=51; public static final int DATETIME_LITERAL=29; - public static final int MINUS=80; + public static final int MINUS=81; public static final int LIST=23; - public static final int TRUE=73; + public static final int TRUE=74; public static final int PRED_DESCENDANT=25; - public static final int JOIN=40; - public static final int IN_FOLDER=61; - public static final int COLON=67; - public static final int GREATERTHANOREQUALS=54; + public static final int JOIN=41; + public static final int IN_FOLDER=62; + public static final int COLON=68; + public static final int GREATERTHANOREQUALS=55; public static final int BOOLEAN_LITERAL=30; public static final int DISJUNCTION=16; public static final int COLUMNS=7; - public static final int WS=84; - public static final int ANY=59; - public static final int SCORE=76; + public static final int WS=85; + public static final int ANY=60; + public static final int SCORE=77; public static final int NEGATION=17; public static final int TABLE_REF=13; public static final int SORT_SPECIFICATION=26; - public static final int IN_TREE=62; - public static final int OR=47; + public static final int IN_TREE=63; + public static final int OR=48; public static final int PRED_CHILD=24; public static final int PRED_EXISTS=20; public static final int QUERY=4; - public static final int DECIMAL_INTEGER_LITERAL=72; - public static final int DESC=66; + public static final int DECIMAL_INTEGER_LITERAL=73; + public static final int DESC=67; public static final int ALL_COLUMNS=5; - public static final int FROM=39; - public static final int FALSE=74; - public static final int TIMESTAMP=75; + public static final int FROM=40; + public static final int FALSE=75; + public static final int TIMESTAMP=76; public static final int PRED_IN=19; // delegates @@ -126,7 +127,7 @@ public class CMISParser extends Parser { } public String[] getTokenNames() { return CMISParser.tokenNames; } - public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g"; } private Stack paraphrases = new Stack(); @@ -279,7 +280,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "query" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:289:1: query : SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:285:1: query : SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ; public final CMISParser.query_return query() throws RecognitionException { CMISParser.query_return retval = new CMISParser.query_return(); retval.start = input.LT(1); @@ -305,27 +306,29 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_orderByClause=new RewriteRuleSubtreeStream(adaptor,"rule orderByClause"); RewriteRuleSubtreeStream stream_selectList=new RewriteRuleSubtreeStream(adaptor,"rule selectList"); RewriteRuleSubtreeStream stream_fromClause=new RewriteRuleSubtreeStream(adaptor,"rule fromClause"); + paraphrases.push("in query"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:298:2: ( SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:298:4: SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:300:9: ( SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:301:9: SELECT selectList fromClause ( whereClause )? ( orderByClause )? EOF { - SELECT1=(Token)match(input,SELECT,FOLLOW_SELECT_in_query217); if (state.failed) return retval; + SELECT1=(Token)match(input,SELECT,FOLLOW_SELECT_in_query415); if (state.failed) return retval; if ( state.backtracking==0 ) stream_SELECT.add(SELECT1); - pushFollow(FOLLOW_selectList_in_query219); + pushFollow(FOLLOW_selectList_in_query417); selectList2=selectList(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_selectList.add(selectList2.getTree()); - pushFollow(FOLLOW_fromClause_in_query221); + pushFollow(FOLLOW_fromClause_in_query419); fromClause3=fromClause(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_fromClause.add(fromClause3.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:298:33: ( whereClause )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:301:38: ( whereClause )? int alt1=2; int LA1_0 = input.LA(1); @@ -334,9 +337,9 @@ public class CMISParser extends Parser { } switch (alt1) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:298:33: whereClause + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:301:38: whereClause { - pushFollow(FOLLOW_whereClause_in_query223); + pushFollow(FOLLOW_whereClause_in_query421); whereClause4=whereClause(); state._fsp--; @@ -348,7 +351,7 @@ public class CMISParser extends Parser { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:298:46: ( orderByClause )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:301:51: ( orderByClause )? int alt2=2; int LA2_0 = input.LA(1); @@ -357,9 +360,9 @@ public class CMISParser extends Parser { } switch (alt2) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:298:46: orderByClause + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:301:51: orderByClause { - pushFollow(FOLLOW_orderByClause_in_query226); + pushFollow(FOLLOW_orderByClause_in_query424); orderByClause5=orderByClause(); state._fsp--; @@ -371,13 +374,13 @@ public class CMISParser extends Parser { } - EOF6=(Token)match(input,EOF,FOLLOW_EOF_in_query229); if (state.failed) return retval; + EOF6=(Token)match(input,EOF,FOLLOW_EOF_in_query427); if (state.failed) return retval; if ( state.backtracking==0 ) stream_EOF.add(EOF6); // AST REWRITE - // elements: fromClause, selectList, orderByClause, whereClause + // elements: fromClause, whereClause, orderByClause, selectList // token labels: // rule labels: retval // token list labels: @@ -388,22 +391,22 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 299:3: -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) + // 302:17: -> ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:299:6: ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:303:25: ^( QUERY selectList fromClause ( whereClause )? ( orderByClause )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(QUERY, "QUERY"), root_1); adaptor.addChild(root_1, stream_selectList.nextTree()); adaptor.addChild(root_1, stream_fromClause.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:299:36: ( whereClause )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:303:55: ( whereClause )? if ( stream_whereClause.hasNext() ) { adaptor.addChild(root_1, stream_whereClause.nextTree()); } stream_whereClause.reset(); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:299:49: ( orderByClause )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:303:68: ( orderByClause )? if ( stream_orderByClause.hasNext() ) { adaptor.addChild(root_1, stream_orderByClause.nextTree()); @@ -426,7 +429,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -446,7 +451,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "selectList" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:303:1: selectList : ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:306:1: selectList : ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ); public final CMISParser.selectList_return selectList() throws RecognitionException { CMISParser.selectList_return retval = new CMISParser.selectList_return(); retval.start = input.LT(1); @@ -465,39 +470,18 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleSubtreeStream stream_selectSubList=new RewriteRuleSubtreeStream(adaptor,"rule selectSubList"); + paraphrases.push("in select list"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:306:2: ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:315:9: ( STAR -> ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) ) int alt4=2; - int LA4_0 = input.LA(1); - - if ( (LA4_0==STAR) ) { - alt4=1; - } - else if ( (LA4_0==ID) ) { - alt4=2; - } - else if ( (LA4_0==DOUBLE_QUOTE) && ((strict == false))) { - alt4=2; - } - else if ( (LA4_0==SCORE) ) { - alt4=2; - } - else if ( (LA4_0==SELECT||LA4_0==AS||(LA4_0>=FROM && LA4_0<=ON)||(LA4_0>=WHERE && LA4_0<=NOT)||(LA4_0>=IN && LA4_0<=DESC)||(LA4_0>=TRUE && LA4_0<=TIMESTAMP)) && ((strict == false))) { - alt4=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 4, 0, input); - - throw nvae; - } + alt4 = dfa4.predict(input); switch (alt4) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:306:4: STAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:316:9: STAR { - STAR7=(Token)match(input,STAR,FOLLOW_STAR_in_selectList286); if (state.failed) return retval; + STAR7=(Token)match(input,STAR,FOLLOW_STAR_in_selectList526); if (state.failed) return retval; if ( state.backtracking==0 ) stream_STAR.add(STAR7); @@ -514,9 +498,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 307:3: -> ^( ALL_COLUMNS ) + // 317:17: -> ^( ALL_COLUMNS ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:307:6: ^( ALL_COLUMNS ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:318:25: ^( ALL_COLUMNS ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ALL_COLUMNS, "ALL_COLUMNS"), root_1); @@ -530,15 +514,15 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:308:5: selectSubList ( COMMA selectSubList )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:319:11: selectSubList ( COMMA selectSubList )* { - pushFollow(FOLLOW_selectSubList_in_selectList302); + pushFollow(FOLLOW_selectSubList_in_selectList584); selectSubList8=selectSubList(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_selectSubList.add(selectSubList8.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:308:19: ( COMMA selectSubList )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:319:25: ( COMMA selectSubList )* loop3: do { int alt3=2; @@ -551,12 +535,12 @@ public class CMISParser extends Parser { switch (alt3) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:308:21: COMMA selectSubList + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:319:26: COMMA selectSubList { - COMMA9=(Token)match(input,COMMA,FOLLOW_COMMA_in_selectList306); if (state.failed) return retval; + COMMA9=(Token)match(input,COMMA,FOLLOW_COMMA_in_selectList587); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA9); - pushFollow(FOLLOW_selectSubList_in_selectList308); + pushFollow(FOLLOW_selectSubList_in_selectList589); selectSubList10=selectSubList(); state._fsp--; @@ -585,9 +569,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 309:3: -> ^( COLUMNS ( selectSubList )+ ) + // 320:17: -> ^( COLUMNS ( selectSubList )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:309:6: ^( COLUMNS ( selectSubList )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:321:25: ^( COLUMNS ( selectSubList )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMNS, "COLUMNS"), root_1); @@ -619,7 +603,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -639,7 +625,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "selectSubList" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:313:1: selectSubList : ( ( valueExpression )=> valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) | multiValuedColumnReference ->); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:324:1: selectSubList : ( valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) ); public final CMISParser.selectSubList_return selectSubList() throws RecognitionException { CMISParser.selectSubList_return retval = new CMISParser.selectSubList_return(); retval.start = input.LT(1); @@ -654,36 +640,36 @@ public class CMISParser extends Parser { CMISParser.qualifier_return qualifier14 = null; - CMISParser.multiValuedColumnReference_return multiValuedColumnReference16 = null; - Object AS12_tree=null; Object DOTSTAR15_tree=null; RewriteRuleTokenStream stream_AS=new RewriteRuleTokenStream(adaptor,"token AS"); RewriteRuleTokenStream stream_DOTSTAR=new RewriteRuleTokenStream(adaptor,"token DOTSTAR"); RewriteRuleSubtreeStream stream_valueExpression=new RewriteRuleSubtreeStream(adaptor,"rule valueExpression"); - RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:2: ( ( valueExpression )=> valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) | multiValuedColumnReference ->) - int alt7=3; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:325:9: ( valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) ) + int alt7=2; alt7 = dfa7.predict(input); switch (alt7) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:4: ( valueExpression )=> valueExpression ( ( AS )? columnName )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:326:9: valueExpression ( ( AS )? columnName )? { - pushFollow(FOLLOW_valueExpression_in_selectSubList344); + pushFollow(FOLLOW_valueExpression_in_selectSubList673); valueExpression11=valueExpression(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_valueExpression.add(valueExpression11.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:40: ( ( AS )? columnName )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:326:25: ( ( AS )? columnName )? int alt6=2; int LA6_0 = input.LA(1); - if ( (LA6_0==AS||LA6_0==ID) ) { + if ( (LA6_0==AS) ) { + alt6=1; + } + else if ( (LA6_0==ID) ) { alt6=1; } else if ( (LA6_0==DOUBLE_QUOTE) && ((strict == false))) { @@ -691,9 +677,9 @@ public class CMISParser extends Parser { } switch (alt6) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:42: ( AS )? columnName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:326:26: ( AS )? columnName { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:42: ( AS )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:326:26: ( AS )? int alt5=2; int LA5_0 = input.LA(1); @@ -702,9 +688,9 @@ public class CMISParser extends Parser { } switch (alt5) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:42: AS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:326:26: AS { - AS12=(Token)match(input,AS,FOLLOW_AS_in_selectSubList348); if (state.failed) return retval; + AS12=(Token)match(input,AS,FOLLOW_AS_in_selectSubList676); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AS.add(AS12); @@ -713,7 +699,7 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_columnName_in_selectSubList351); + pushFollow(FOLLOW_columnName_in_selectSubList679); columnName13=columnName(); state._fsp--; @@ -728,7 +714,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: valueExpression, columnName + // elements: columnName, valueExpression // token labels: // rule labels: retval // token list labels: @@ -739,15 +725,15 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 315:3: -> ^( COLUMN valueExpression ( columnName )? ) + // 327:17: -> ^( COLUMN valueExpression ( columnName )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:315:6: ^( COLUMN valueExpression ( columnName )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:328:25: ^( COLUMN valueExpression ( columnName )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN, "COLUMN"), root_1); adaptor.addChild(root_1, stream_valueExpression.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:315:31: ( columnName )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:328:50: ( columnName )? if ( stream_columnName.hasNext() ) { adaptor.addChild(root_1, stream_columnName.nextTree()); @@ -763,15 +749,15 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:316:4: qualifier DOTSTAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:329:11: qualifier DOTSTAR { - pushFollow(FOLLOW_qualifier_in_selectSubList372); + pushFollow(FOLLOW_qualifier_in_selectSubList744); qualifier14=qualifier(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_qualifier.add(qualifier14.getTree()); - DOTSTAR15=(Token)match(input,DOTSTAR,FOLLOW_DOTSTAR_in_selectSubList374); if (state.failed) return retval; + DOTSTAR15=(Token)match(input,DOTSTAR,FOLLOW_DOTSTAR_in_selectSubList746); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DOTSTAR.add(DOTSTAR15); @@ -788,9 +774,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 317:3: -> ^( ALL_COLUMNS qualifier ) + // 330:17: -> ^( ALL_COLUMNS qualifier ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:317:6: ^( ALL_COLUMNS qualifier ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:331:25: ^( ALL_COLUMNS qualifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(ALL_COLUMNS, "ALL_COLUMNS"), root_1); @@ -802,37 +788,6 @@ public class CMISParser extends Parser { } - retval.tree = root_0;} - } - break; - case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:318:4: multiValuedColumnReference - { - pushFollow(FOLLOW_multiValuedColumnReference_in_selectSubList390); - multiValuedColumnReference16=multiValuedColumnReference(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference16.getTree()); - - - // AST REWRITE - // elements: - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 319:3: -> - { - root_0 = null; - } - retval.tree = root_0;} } break; @@ -863,69 +818,37 @@ public class CMISParser extends Parser { }; // $ANTLR start "valueExpression" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:322:1: valueExpression : ( columnReference -> columnReference | valueFunction -> valueFunction ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:334:1: valueExpression : ( columnReference -> columnReference | valueFunction -> valueFunction ); public final CMISParser.valueExpression_return valueExpression() throws RecognitionException { CMISParser.valueExpression_return retval = new CMISParser.valueExpression_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.columnReference_return columnReference17 = null; + CMISParser.columnReference_return columnReference16 = null; - CMISParser.valueFunction_return valueFunction18 = null; + CMISParser.valueFunction_return valueFunction17 = null; RewriteRuleSubtreeStream stream_valueFunction=new RewriteRuleSubtreeStream(adaptor,"rule valueFunction"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); + paraphrases.push("in value expression"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:325:2: ( columnReference -> columnReference | valueFunction -> valueFunction ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:343:9: ( columnReference -> columnReference | valueFunction -> valueFunction ) int alt8=2; - int LA8_0 = input.LA(1); - - if ( (LA8_0==ID) ) { - int LA8_1 = input.LA(2); - - if ( (LA8_1==EOF||(LA8_1>=COMMA && LA8_1<=AS)||LA8_1==DOT||LA8_1==FROM||LA8_1==EQUALS||(LA8_1>=NOTEQUALS && LA8_1<=GREATERTHANOREQUALS)||(LA8_1>=ID && LA8_1<=DOUBLE_QUOTE)) ) { - alt8=1; - } - else if ( (LA8_1==LPAREN) && ((strict == false))) { - alt8=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 8, 1, input); - - throw nvae; - } - } - else if ( (LA8_0==DOUBLE_QUOTE) && ((strict == false))) { - alt8=1; - } - else if ( (LA8_0==SCORE) ) { - alt8=2; - } - else if ( (LA8_0==SELECT||LA8_0==AS||(LA8_0>=FROM && LA8_0<=ON)||(LA8_0>=WHERE && LA8_0<=NOT)||(LA8_0>=IN && LA8_0<=DESC)||(LA8_0>=TRUE && LA8_0<=TIMESTAMP)) && ((strict == false))) { - alt8=2; - } - else { - if (state.backtracking>0) {state.failed=true; return retval;} - NoViableAltException nvae = - new NoViableAltException("", 8, 0, input); - - throw nvae; - } + alt8 = dfa8.predict(input); switch (alt8) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:325:4: columnReference + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:344:9: columnReference { - pushFollow(FOLLOW_columnReference_in_valueExpression435); - columnReference17=columnReference(); + pushFollow(FOLLOW_columnReference_in_valueExpression837); + columnReference16=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference17.getTree()); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference16.getTree()); // AST REWRITE @@ -940,7 +863,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 326:3: -> columnReference + // 345:17: -> columnReference { adaptor.addChild(root_0, stream_columnReference.nextTree()); @@ -950,14 +873,14 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:327:5: valueFunction + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:346:11: valueFunction { - pushFollow(FOLLOW_valueFunction_in_valueExpression448); - valueFunction18=valueFunction(); + pushFollow(FOLLOW_valueFunction_in_valueExpression869); + valueFunction17=valueFunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_valueFunction.add(valueFunction18.getTree()); + if ( state.backtracking==0 ) stream_valueFunction.add(valueFunction17.getTree()); // AST REWRITE @@ -972,7 +895,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 328:3: -> valueFunction + // 347:17: -> valueFunction { adaptor.addChild(root_0, stream_valueFunction.nextTree()); @@ -991,7 +914,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -1011,43 +936,45 @@ public class CMISParser extends Parser { }; // $ANTLR start "columnReference" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:331:1: columnReference : ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:350:1: columnReference : ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ; public final CMISParser.columnReference_return columnReference() throws RecognitionException { CMISParser.columnReference_return retval = new CMISParser.columnReference_return(); retval.start = input.LT(1); Object root_0 = null; - Token DOT20=null; - CMISParser.qualifier_return qualifier19 = null; + Token DOT19=null; + CMISParser.qualifier_return qualifier18 = null; - CMISParser.columnName_return columnName21 = null; + CMISParser.columnName_return columnName20 = null; - Object DOT20_tree=null; + Object DOT19_tree=null; RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT"); RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); + paraphrases.push("in column reference"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:334:2: ( ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:334:4: ( qualifier DOT )? columnName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:359:9: ( ( qualifier DOT )? columnName -> ^( COLUMN_REF columnName ( qualifier )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:360:9: ( qualifier DOT )? columnName { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:334:4: ( qualifier DOT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:360:9: ( qualifier DOT )? int alt9=2; alt9 = dfa9.predict(input); switch (alt9) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:334:6: qualifier DOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:360:10: qualifier DOT { - pushFollow(FOLLOW_qualifier_in_columnReference497); - qualifier19=qualifier(); + pushFollow(FOLLOW_qualifier_in_columnReference933); + qualifier18=qualifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_qualifier.add(qualifier19.getTree()); - DOT20=(Token)match(input,DOT,FOLLOW_DOT_in_columnReference499); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DOT.add(DOT20); + if ( state.backtracking==0 ) stream_qualifier.add(qualifier18.getTree()); + DOT19=(Token)match(input,DOT,FOLLOW_DOT_in_columnReference935); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOT.add(DOT19); } @@ -1055,16 +982,16 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_columnName_in_columnReference504); - columnName21=columnName(); + pushFollow(FOLLOW_columnName_in_columnReference939); + columnName20=columnName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnName.add(columnName21.getTree()); + if ( state.backtracking==0 ) stream_columnName.add(columnName20.getTree()); // AST REWRITE - // elements: qualifier, columnName + // elements: columnName, qualifier // token labels: // rule labels: retval // token list labels: @@ -1075,15 +1002,15 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 335:3: -> ^( COLUMN_REF columnName ( qualifier )? ) + // 361:17: -> ^( COLUMN_REF columnName ( qualifier )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:335:6: ^( COLUMN_REF columnName ( qualifier )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:362:25: ^( COLUMN_REF columnName ( 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_columnName.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:335:30: ( qualifier )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:362:49: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -1106,7 +1033,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -1120,220 +1049,92 @@ public class CMISParser extends Parser { } // $ANTLR end "columnReference" - public static class multiValuedColumnReference_return extends ParserRuleReturnScope { - Object tree; - public Object getTree() { return tree; } - }; - - // $ANTLR start "multiValuedColumnReference" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:342:1: multiValuedColumnReference : ( qualifier DOT )? multiValuedColumnName -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) ; - public final CMISParser.multiValuedColumnReference_return multiValuedColumnReference() throws RecognitionException { - CMISParser.multiValuedColumnReference_return retval = new CMISParser.multiValuedColumnReference_return(); - retval.start = input.LT(1); - - Object root_0 = null; - - Token DOT23=null; - CMISParser.qualifier_return qualifier22 = null; - - CMISParser.multiValuedColumnName_return multiValuedColumnName24 = null; - - - Object DOT23_tree=null; - RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT"); - RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); - RewriteRuleSubtreeStream stream_multiValuedColumnName=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnName"); - paraphrases.push("in column reference"); - try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:345:2: ( ( qualifier DOT )? multiValuedColumnName -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:345:10: ( qualifier DOT )? multiValuedColumnName - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:345:10: ( qualifier DOT )? - int alt10=2; - alt10 = dfa10.predict(input); - switch (alt10) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:345:12: qualifier DOT - { - pushFollow(FOLLOW_qualifier_in_multiValuedColumnReference566); - qualifier22=qualifier(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_qualifier.add(qualifier22.getTree()); - DOT23=(Token)match(input,DOT,FOLLOW_DOT_in_multiValuedColumnReference568); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DOT.add(DOT23); - - - } - break; - - } - - pushFollow(FOLLOW_multiValuedColumnName_in_multiValuedColumnReference574); - multiValuedColumnName24=multiValuedColumnName(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnName.add(multiValuedColumnName24.getTree()); - - - // AST REWRITE - // elements: qualifier, multiValuedColumnName - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 346:3: -> ^( COLUMN_REF multiValuedColumnName ( qualifier )? ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:346:6: ^( COLUMN_REF multiValuedColumnName ( 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_multiValuedColumnName.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:346:41: ( qualifier )? - if ( stream_qualifier.hasNext() ) { - adaptor.addChild(root_1, stream_qualifier.nextTree()); - - } - stream_qualifier.reset(); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;} - } - - retval.stop = input.LT(-1); - - if ( state.backtracking==0 ) { - - retval.tree = (Object)adaptor.rulePostProcessing(root_0); - adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); - } - if ( state.backtracking==0 ) { - paraphrases.pop(); - } - } - - catch(RecognitionException e) - { - throw new CMISQueryException(getErrorString(e), e); - } - finally { - } - return retval; - } - // $ANTLR end "multiValuedColumnReference" - public static class valueFunction_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; // $ANTLR start "valueFunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:349:1: valueFunction : (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:365:1: valueFunction : (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ); public final CMISParser.valueFunction_return valueFunction() throws RecognitionException { CMISParser.valueFunction_return retval = new CMISParser.valueFunction_return(); retval.start = input.LT(1); Object root_0 = null; - Token LPAREN25=null; - Token RPAREN27=null; - Token LPAREN28=null; - Token RPAREN30=null; + Token LPAREN21=null; + Token RPAREN23=null; + Token LPAREN24=null; + Token RPAREN26=null; CMISParser.cmisFunction_return cmisFunctionName = null; CMISParser.keyWordOrId_return functionName = null; - CMISParser.functionArgument_return functionArgument26 = null; + CMISParser.functionArgument_return functionArgument22 = null; - CMISParser.functionArgument_return functionArgument29 = null; + CMISParser.functionArgument_return functionArgument25 = null; - Object LPAREN25_tree=null; - Object RPAREN27_tree=null; - Object LPAREN28_tree=null; - Object RPAREN30_tree=null; + Object LPAREN21_tree=null; + Object RPAREN23_tree=null; + Object LPAREN24_tree=null; + Object RPAREN26_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_cmisFunction=new RewriteRuleSubtreeStream(adaptor,"rule cmisFunction"); RewriteRuleSubtreeStream stream_keyWordOrId=new RewriteRuleSubtreeStream(adaptor,"rule keyWordOrId"); RewriteRuleSubtreeStream stream_functionArgument=new RewriteRuleSubtreeStream(adaptor,"rule functionArgument"); + paraphrases.push("in function"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:352:9: (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ) - int alt13=2; - alt13 = dfa13.predict(input); - switch (alt13) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:374:9: (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) ) + int alt12=2; + alt12 = dfa12.predict(input); + switch (alt12) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:352:17: cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:375:9: cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN { - pushFollow(FOLLOW_cmisFunction_in_valueFunction640); + pushFollow(FOLLOW_cmisFunction_in_valueFunction1035); cmisFunctionName=cmisFunction(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_cmisFunction.add(cmisFunctionName.getTree()); - LPAREN25=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_valueFunction642); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN25); + LPAREN21=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_valueFunction1037); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN21); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:352:54: ( functionArgument )* - loop11: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:375:46: ( functionArgument )* + loop10: do { - int alt11=2; - int LA11_0 = input.LA(1); - - if ( (LA11_0==ID) ) { - alt11=1; - } - else if ( (LA11_0==DOUBLE_QUOTE) && ((strict == false))) { - alt11=1; - } - else if ( (LA11_0==QUOTED_STRING||(LA11_0>=FLOATING_POINT_LITERAL && LA11_0<=TIMESTAMP)) ) { - alt11=1; - } - else if ( (LA11_0==COLON) && ((strict == false))) { - alt11=1; - } - - - switch (alt11) { + int alt10=2; + alt10 = dfa10.predict(input); + switch (alt10) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:352:54: functionArgument + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:375:46: functionArgument { - pushFollow(FOLLOW_functionArgument_in_valueFunction644); - functionArgument26=functionArgument(); + pushFollow(FOLLOW_functionArgument_in_valueFunction1039); + functionArgument22=functionArgument(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_functionArgument.add(functionArgument26.getTree()); + if ( state.backtracking==0 ) stream_functionArgument.add(functionArgument22.getTree()); } break; default : - break loop11; + break loop10; } } while (true); - RPAREN27=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_valueFunction647); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN27); + RPAREN23=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_valueFunction1042); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN23); // AST REWRITE - // elements: LPAREN, cmisFunctionName, functionArgument, RPAREN + // elements: RPAREN, functionArgument, LPAREN, cmisFunctionName // token labels: // rule labels: retval, cmisFunctionName // token list labels: @@ -1345,16 +1146,16 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_cmisFunctionName=new RewriteRuleSubtreeStream(adaptor,"rule cmisFunctionName",cmisFunctionName!=null?cmisFunctionName.tree:null); root_0 = (Object)adaptor.nil(); - // 353:3: -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) + // 376:17: -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:353:6: ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:377:25: ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION, "FUNCTION"), root_1); adaptor.addChild(root_1, stream_cmisFunctionName.nextTree()); adaptor.addChild(root_1, stream_LPAREN.nextNode()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:353:42: ( functionArgument )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:377:61: ( functionArgument )* while ( stream_functionArgument.hasNext() ) { adaptor.addChild(root_1, stream_functionArgument.nextTree()); @@ -1371,67 +1172,52 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:4: {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:378:11: {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN { if ( !((strict == false)) ) { if (state.backtracking>0) {state.failed=true; return retval;} throw new FailedPredicateException(input, "valueFunction", "strict == false"); } - pushFollow(FOLLOW_keyWordOrId_in_valueFunction675); + pushFollow(FOLLOW_keyWordOrId_in_valueFunction1115); functionName=keyWordOrId(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_keyWordOrId.add(functionName.getTree()); - LPAREN28=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_valueFunction677); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN28); + LPAREN24=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_valueFunction1117); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN24); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:57: ( functionArgument )* - loop12: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:378:64: ( functionArgument )* + loop11: do { - int alt12=2; - int LA12_0 = input.LA(1); - - if ( (LA12_0==ID) ) { - alt12=1; - } - else if ( (LA12_0==DOUBLE_QUOTE) && ((strict == false))) { - alt12=1; - } - else if ( (LA12_0==QUOTED_STRING||(LA12_0>=FLOATING_POINT_LITERAL && LA12_0<=TIMESTAMP)) ) { - alt12=1; - } - else if ( (LA12_0==COLON) && ((strict == false))) { - alt12=1; - } - - - switch (alt12) { + int alt11=2; + alt11 = dfa11.predict(input); + switch (alt11) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:354:57: functionArgument + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:378:64: functionArgument { - pushFollow(FOLLOW_functionArgument_in_valueFunction679); - functionArgument29=functionArgument(); + pushFollow(FOLLOW_functionArgument_in_valueFunction1119); + functionArgument25=functionArgument(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_functionArgument.add(functionArgument29.getTree()); + if ( state.backtracking==0 ) stream_functionArgument.add(functionArgument25.getTree()); } break; default : - break loop12; + break loop11; } } while (true); - RPAREN30=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_valueFunction682); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN30); + RPAREN26=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_valueFunction1122); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN26); // AST REWRITE - // elements: LPAREN, functionArgument, RPAREN, functionName + // elements: functionArgument, functionName, RPAREN, LPAREN // token labels: // rule labels: retval, functionName // token list labels: @@ -1443,16 +1229,16 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_functionName=new RewriteRuleSubtreeStream(adaptor,"rule functionName",functionName!=null?functionName.tree:null); root_0 = (Object)adaptor.nil(); - // 355:3: -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) + // 379:17: -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:355:6: ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:380:25: ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUNCTION, "FUNCTION"), root_1); adaptor.addChild(root_1, stream_functionName.nextTree()); adaptor.addChild(root_1, stream_LPAREN.nextNode()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:355:38: ( functionArgument )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:380:57: ( functionArgument )* while ( stream_functionArgument.hasNext() ) { adaptor.addChild(root_1, stream_functionArgument.nextTree()); @@ -1478,7 +1264,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -1498,54 +1286,54 @@ public class CMISParser extends Parser { }; // $ANTLR start "functionArgument" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:358:1: functionArgument : ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:383:1: functionArgument : ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ); public final CMISParser.functionArgument_return functionArgument() throws RecognitionException { CMISParser.functionArgument_return retval = new CMISParser.functionArgument_return(); retval.start = input.LT(1); Object root_0 = null; - Token DOT32=null; - CMISParser.qualifier_return qualifier31 = null; + Token DOT28=null; + CMISParser.qualifier_return qualifier27 = null; - CMISParser.columnName_return columnName33 = null; + CMISParser.columnName_return columnName29 = null; - CMISParser.identifier_return identifier34 = null; + CMISParser.identifier_return identifier30 = null; - CMISParser.literalOrParameterName_return literalOrParameterName35 = null; + CMISParser.literalOrParameterName_return literalOrParameterName31 = null; - Object DOT32_tree=null; + Object DOT28_tree=null; RewriteRuleTokenStream stream_DOT=new RewriteRuleTokenStream(adaptor,"token DOT"); RewriteRuleSubtreeStream stream_columnName=new RewriteRuleSubtreeStream(adaptor,"rule columnName"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:359:5: ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ) - int alt14=3; - alt14 = dfa14.predict(input); - switch (alt14) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:384:9: ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName ) + int alt13=3; + alt13 = dfa13.predict(input); + switch (alt13) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:359:9: qualifier DOT columnName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:385:9: qualifier DOT columnName { - pushFollow(FOLLOW_qualifier_in_functionArgument717); - qualifier31=qualifier(); + pushFollow(FOLLOW_qualifier_in_functionArgument1211); + qualifier27=qualifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_qualifier.add(qualifier31.getTree()); - DOT32=(Token)match(input,DOT,FOLLOW_DOT_in_functionArgument719); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DOT.add(DOT32); + if ( state.backtracking==0 ) stream_qualifier.add(qualifier27.getTree()); + DOT28=(Token)match(input,DOT,FOLLOW_DOT_in_functionArgument1213); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOT.add(DOT28); - pushFollow(FOLLOW_columnName_in_functionArgument721); - columnName33=columnName(); + pushFollow(FOLLOW_columnName_in_functionArgument1215); + columnName29=columnName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnName.add(columnName33.getTree()); + if ( state.backtracking==0 ) stream_columnName.add(columnName29.getTree()); // AST REWRITE - // elements: qualifier, columnName + // elements: columnName, qualifier // token labels: // rule labels: retval // token list labels: @@ -1556,9 +1344,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 360:5: -> ^( COLUMN_REF columnName qualifier ) + // 386:17: -> ^( COLUMN_REF columnName qualifier ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:360:8: ^( COLUMN_REF columnName qualifier ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:387:25: ^( COLUMN_REF columnName qualifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(COLUMN_REF, "COLUMN_REF"), root_1); @@ -1575,30 +1363,30 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:361:9: identifier + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:11: identifier { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_identifier_in_functionArgument745); - identifier34=identifier(); + pushFollow(FOLLOW_identifier_in_functionArgument1277); + identifier30=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, identifier34.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, identifier30.getTree()); } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:362:9: literalOrParameterName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:389:11: literalOrParameterName { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_literalOrParameterName_in_functionArgument755); - literalOrParameterName35=literalOrParameterName(); + pushFollow(FOLLOW_literalOrParameterName_in_functionArgument1289); + literalOrParameterName31=literalOrParameterName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, literalOrParameterName35.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, literalOrParameterName31.getTree()); } break; @@ -1629,34 +1417,34 @@ public class CMISParser extends Parser { }; // $ANTLR start "qualifier" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:365:1: qualifier : ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:392:1: qualifier : ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ); public final CMISParser.qualifier_return qualifier() throws RecognitionException { CMISParser.qualifier_return retval = new CMISParser.qualifier_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.tableName_return tableName36 = null; + CMISParser.tableName_return tableName32 = null; - CMISParser.correlationName_return correlationName37 = null; + CMISParser.correlationName_return correlationName33 = null; RewriteRuleSubtreeStream stream_correlationName=new RewriteRuleSubtreeStream(adaptor,"rule correlationName"); RewriteRuleSubtreeStream stream_tableName=new RewriteRuleSubtreeStream(adaptor,"rule tableName"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:366:2: ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ) - int alt15=2; - alt15 = dfa15.predict(input); - switch (alt15) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:393:9: ( ( tableName )=> tableName -> tableName | correlationName -> correlationName ) + int alt14=2; + alt14 = dfa14.predict(input); + switch (alt14) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:366:4: ( tableName )=> tableName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:394:9: ( tableName )=> tableName { - pushFollow(FOLLOW_tableName_in_qualifier776); - tableName36=tableName(); + pushFollow(FOLLOW_tableName_in_qualifier1328); + tableName32=tableName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_tableName.add(tableName36.getTree()); + if ( state.backtracking==0 ) stream_tableName.add(tableName32.getTree()); // AST REWRITE @@ -1671,7 +1459,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 367:3: -> tableName + // 395:17: -> tableName { adaptor.addChild(root_0, stream_tableName.nextTree()); @@ -1681,14 +1469,14 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:368:5: correlationName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:396:11: correlationName { - pushFollow(FOLLOW_correlationName_in_qualifier788); - correlationName37=correlationName(); + pushFollow(FOLLOW_correlationName_in_qualifier1360); + correlationName33=correlationName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_correlationName.add(correlationName37.getTree()); + if ( state.backtracking==0 ) stream_correlationName.add(correlationName33.getTree()); // AST REWRITE @@ -1703,7 +1491,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 369:3: -> correlationName + // 397:17: -> correlationName { adaptor.addChild(root_0, stream_correlationName.nextTree()); @@ -1739,34 +1527,36 @@ public class CMISParser extends Parser { }; // $ANTLR start "fromClause" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:372:1: fromClause : FROM tableReference -> tableReference ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:400:1: fromClause : FROM tableReference -> tableReference ; public final CMISParser.fromClause_return fromClause() throws RecognitionException { CMISParser.fromClause_return retval = new CMISParser.fromClause_return(); retval.start = input.LT(1); Object root_0 = null; - Token FROM38=null; - CMISParser.tableReference_return tableReference39 = null; + Token FROM34=null; + CMISParser.tableReference_return tableReference35 = null; - Object FROM38_tree=null; + Object FROM34_tree=null; RewriteRuleTokenStream stream_FROM=new RewriteRuleTokenStream(adaptor,"token FROM"); RewriteRuleSubtreeStream stream_tableReference=new RewriteRuleSubtreeStream(adaptor,"rule tableReference"); - paraphrases.push("in from"); - try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:375:2: ( FROM tableReference -> tableReference ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:375:4: FROM tableReference - { - FROM38=(Token)match(input,FROM,FOLLOW_FROM_in_fromClause833); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_FROM.add(FROM38); - pushFollow(FOLLOW_tableReference_in_fromClause835); - tableReference39=tableReference(); + paraphrases.push("in fromClause"); + + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:409:9: ( FROM tableReference -> tableReference ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:410:9: FROM tableReference + { + FROM34=(Token)match(input,FROM,FOLLOW_FROM_in_fromClause1423); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_FROM.add(FROM34); + + pushFollow(FOLLOW_tableReference_in_fromClause1425); + tableReference35=tableReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_tableReference.add(tableReference39.getTree()); + if ( state.backtracking==0 ) stream_tableReference.add(tableReference35.getTree()); // AST REWRITE @@ -1781,7 +1571,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 376:3: -> tableReference + // 411:17: -> tableReference { adaptor.addChild(root_0, stream_tableReference.nextTree()); @@ -1798,7 +1588,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -1818,57 +1610,60 @@ public class CMISParser extends Parser { }; // $ANTLR start "tableReference" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:379:1: tableReference : singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:414:1: tableReference : singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ; public final CMISParser.tableReference_return tableReference() throws RecognitionException { CMISParser.tableReference_return retval = new CMISParser.tableReference_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.singleTable_return singleTable40 = null; + CMISParser.singleTable_return singleTable36 = null; - CMISParser.joinedTable_return joinedTable41 = null; + CMISParser.joinedTable_return joinedTable37 = null; RewriteRuleSubtreeStream stream_singleTable=new RewriteRuleSubtreeStream(adaptor,"rule singleTable"); RewriteRuleSubtreeStream stream_joinedTable=new RewriteRuleSubtreeStream(adaptor,"rule joinedTable"); + + paraphrases.push("in tableReference"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:380:2: ( singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:380:4: singleTable ( joinedTable )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:423:9: ( singleTable ( joinedTable )* -> ^( SOURCE singleTable ( joinedTable )* ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:424:9: singleTable ( joinedTable )* { - pushFollow(FOLLOW_singleTable_in_tableReference856); - singleTable40=singleTable(); + pushFollow(FOLLOW_singleTable_in_tableReference1488); + singleTable36=singleTable(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_singleTable.add(singleTable40.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:380:16: ( joinedTable )* - loop16: + if ( state.backtracking==0 ) stream_singleTable.add(singleTable36.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:424:21: ( joinedTable )* + loop15: do { - int alt16=2; - int LA16_0 = input.LA(1); + int alt15=2; + int LA15_0 = input.LA(1); - if ( ((LA16_0>=JOIN && LA16_0<=LEFT)) ) { - alt16=1; + if ( ((LA15_0>=JOIN && LA15_0<=LEFT)) ) { + alt15=1; } - switch (alt16) { + switch (alt15) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:380:16: joinedTable + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:424:21: joinedTable { - pushFollow(FOLLOW_joinedTable_in_tableReference858); - joinedTable41=joinedTable(); + pushFollow(FOLLOW_joinedTable_in_tableReference1490); + joinedTable37=joinedTable(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_joinedTable.add(joinedTable41.getTree()); + if ( state.backtracking==0 ) stream_joinedTable.add(joinedTable37.getTree()); } break; default : - break loop16; + break loop15; } } while (true); @@ -1886,15 +1681,15 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 381:3: -> ^( SOURCE singleTable ( joinedTable )* ) + // 425:17: -> ^( SOURCE singleTable ( joinedTable )* ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:381:6: ^( SOURCE singleTable ( joinedTable )* ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:426:25: ^( SOURCE singleTable ( joinedTable )* ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SOURCE, "SOURCE"), root_1); adaptor.addChild(root_1, stream_singleTable.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:381:27: ( joinedTable )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:426:46: ( joinedTable )* while ( stream_joinedTable.hasNext() ) { adaptor.addChild(root_1, stream_joinedTable.nextTree()); @@ -1916,6 +1711,11 @@ public class CMISParser extends Parser { retval.tree = (Object)adaptor.rulePostProcessing(root_0); adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } + if ( state.backtracking==0 ) { + + paraphrases.pop(); + + } } catch(RecognitionException e) @@ -1934,113 +1734,58 @@ public class CMISParser extends Parser { }; // $ANTLR start "singleTable" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:387:1: singleTable : ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) | LPAREN joinedTables RPAREN -> ^( TABLE joinedTables ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:433:1: singleTable : ( simpleTable -> simpleTable | complexTable -> ^( TABLE complexTable ) ); public final CMISParser.singleTable_return singleTable() throws RecognitionException { CMISParser.singleTable_return retval = new CMISParser.singleTable_return(); retval.start = input.LT(1); Object root_0 = null; - Token AS43=null; - Token LPAREN45=null; - Token RPAREN47=null; - CMISParser.tableName_return tableName42 = null; + CMISParser.simpleTable_return simpleTable38 = null; - CMISParser.correlationName_return correlationName44 = null; - - CMISParser.joinedTables_return joinedTables46 = null; + CMISParser.complexTable_return complexTable39 = null; - Object AS43_tree=null; - Object LPAREN45_tree=null; - Object RPAREN47_tree=null; - RewriteRuleTokenStream stream_AS=new RewriteRuleTokenStream(adaptor,"token AS"); - RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); - RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); - RewriteRuleSubtreeStream stream_correlationName=new RewriteRuleSubtreeStream(adaptor,"rule correlationName"); - RewriteRuleSubtreeStream stream_tableName=new RewriteRuleSubtreeStream(adaptor,"rule tableName"); - RewriteRuleSubtreeStream stream_joinedTables=new RewriteRuleSubtreeStream(adaptor,"rule joinedTables"); + RewriteRuleSubtreeStream stream_simpleTable=new RewriteRuleSubtreeStream(adaptor,"rule simpleTable"); + RewriteRuleSubtreeStream stream_complexTable=new RewriteRuleSubtreeStream(adaptor,"rule complexTable"); + + paraphrases.push("in singleTable"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:2: ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) | LPAREN joinedTables RPAREN -> ^( TABLE joinedTables ) ) - int alt19=2; - int LA19_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:442:9: ( simpleTable -> simpleTable | complexTable -> ^( TABLE complexTable ) ) + int alt16=2; + int LA16_0 = input.LA(1); - if ( (LA19_0==ID) ) { - alt19=1; + if ( (LA16_0==ID) ) { + alt16=1; } - else if ( (LA19_0==DOUBLE_QUOTE) && ((strict == false))) { - alt19=1; + else if ( (LA16_0==DOUBLE_QUOTE) && ((strict == false))) { + alt16=1; } - else if ( (LA19_0==LPAREN) ) { - alt19=2; + else if ( (LA16_0==LPAREN) ) { + alt16=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 19, 0, input); + new NoViableAltException("", 16, 0, input); throw nvae; } - switch (alt19) { + switch (alt16) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:4: tableName ( ( AS )? correlationName )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:443:9: simpleTable { - pushFollow(FOLLOW_tableName_in_singleTable886); - tableName42=tableName(); + pushFollow(FOLLOW_simpleTable_in_singleTable1588); + simpleTable38=simpleTable(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_tableName.add(tableName42.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:14: ( ( AS )? correlationName )? - int alt18=2; - int LA18_0 = input.LA(1); - - if ( (LA18_0==AS||LA18_0==ID) ) { - alt18=1; - } - else if ( (LA18_0==DOUBLE_QUOTE) && ((strict == false))) { - alt18=1; - } - switch (alt18) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:16: ( AS )? correlationName - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:16: ( AS )? - int alt17=2; - int LA17_0 = input.LA(1); - - if ( (LA17_0==AS) ) { - alt17=1; - } - switch (alt17) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:388:16: AS - { - AS43=(Token)match(input,AS,FOLLOW_AS_in_singleTable890); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_AS.add(AS43); - - - } - break; - - } - - pushFollow(FOLLOW_correlationName_in_singleTable893); - correlationName44=correlationName(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_correlationName.add(correlationName44.getTree()); - - } - break; - - } - + if ( state.backtracking==0 ) stream_simpleTable.add(simpleTable38.getTree()); // AST REWRITE - // elements: correlationName, tableName + // elements: simpleTable // token labels: // rule labels: retval // token list labels: @@ -2051,23 +1796,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 389:3: -> ^( TABLE_REF tableName ( correlationName )? ) + // 444:17: -> simpleTable { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:389:6: ^( TABLE_REF tableName ( correlationName )? ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TABLE_REF, "TABLE_REF"), root_1); - - adaptor.addChild(root_1, stream_tableName.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:389:28: ( correlationName )? - if ( stream_correlationName.hasNext() ) { - adaptor.addChild(root_1, stream_correlationName.nextTree()); - - } - stream_correlationName.reset(); - - adaptor.addChild(root_0, root_1); - } + adaptor.addChild(root_0, stream_simpleTable.nextTree()); } @@ -2075,24 +1806,18 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:390:4: LPAREN joinedTables RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:445:11: complexTable { - LPAREN45=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_singleTable914); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN45); - - pushFollow(FOLLOW_joinedTables_in_singleTable916); - joinedTables46=joinedTables(); + pushFollow(FOLLOW_complexTable_in_singleTable1620); + complexTable39=complexTable(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_joinedTables.add(joinedTables46.getTree()); - RPAREN47=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_singleTable918); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN47); - + if ( state.backtracking==0 ) stream_complexTable.add(complexTable39.getTree()); // AST REWRITE - // elements: joinedTables + // elements: complexTable // token labels: // rule labels: retval // token list labels: @@ -2103,14 +1828,14 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 391:3: -> ^( TABLE joinedTables ) + // 446:17: -> ^( TABLE complexTable ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:391:6: ^( TABLE joinedTables ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:447:25: ^( TABLE complexTable ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TABLE, "TABLE"), root_1); - adaptor.addChild(root_1, stream_joinedTables.nextTree()); + adaptor.addChild(root_1, stream_complexTable.nextTree()); adaptor.addChild(root_0, root_1); } @@ -2129,6 +1854,11 @@ public class CMISParser extends Parser { retval.tree = (Object)adaptor.rulePostProcessing(root_0); adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } + if ( state.backtracking==0 ) { + + paraphrases.pop(); + + } } catch(RecognitionException e) @@ -2141,79 +1871,85 @@ public class CMISParser extends Parser { } // $ANTLR end "singleTable" - public static class joinedTable_return extends ParserRuleReturnScope { + public static class simpleTable_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; - // $ANTLR start "joinedTable" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:394:1: joinedTable : ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ; - public final CMISParser.joinedTable_return joinedTable() throws RecognitionException { - CMISParser.joinedTable_return retval = new CMISParser.joinedTable_return(); + // $ANTLR start "simpleTable" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:450:1: simpleTable : tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) ; + public final CMISParser.simpleTable_return simpleTable() throws RecognitionException { + CMISParser.simpleTable_return retval = new CMISParser.simpleTable_return(); retval.start = input.LT(1); Object root_0 = null; - Token JOIN49=null; - CMISParser.joinType_return joinType48 = null; + Token AS41=null; + CMISParser.tableName_return tableName40 = null; - CMISParser.tableReference_return tableReference50 = null; - - CMISParser.joinSpecification_return joinSpecification51 = null; + CMISParser.correlationName_return correlationName42 = null; - Object JOIN49_tree=null; - RewriteRuleTokenStream stream_JOIN=new RewriteRuleTokenStream(adaptor,"token JOIN"); - RewriteRuleSubtreeStream stream_tableReference=new RewriteRuleSubtreeStream(adaptor,"rule tableReference"); - RewriteRuleSubtreeStream stream_joinType=new RewriteRuleSubtreeStream(adaptor,"rule joinType"); - RewriteRuleSubtreeStream stream_joinSpecification=new RewriteRuleSubtreeStream(adaptor,"rule joinSpecification"); - paraphrases.push("in join"); + Object AS41_tree=null; + RewriteRuleTokenStream stream_AS=new RewriteRuleTokenStream(adaptor,"token AS"); + RewriteRuleSubtreeStream stream_correlationName=new RewriteRuleSubtreeStream(adaptor,"rule correlationName"); + RewriteRuleSubtreeStream stream_tableName=new RewriteRuleSubtreeStream(adaptor,"rule tableName"); + + paraphrases.push("in simpleTable"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:397:2: ( ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:397:4: ( joinType )? JOIN tableReference joinSpecification + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:459:9: ( tableName ( ( AS )? correlationName )? -> ^( TABLE_REF tableName ( correlationName )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:460:9: tableName ( ( AS )? correlationName )? { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:397:4: ( joinType )? - int alt20=2; - int LA20_0 = input.LA(1); + pushFollow(FOLLOW_tableName_in_simpleTable1711); + tableName40=tableName(); - if ( ((LA20_0>=INNER && LA20_0<=LEFT)) ) { - alt20=1; - } - switch (alt20) { + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_tableName.add(tableName40.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:460:19: ( ( AS )? correlationName )? + int alt18=2; + alt18 = dfa18.predict(input); + switch (alt18) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:397:4: joinType + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:460:20: ( AS )? correlationName { - pushFollow(FOLLOW_joinType_in_joinedTable966); - joinType48=joinType(); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:460:20: ( AS )? + int alt17=2; + int LA17_0 = input.LA(1); + + if ( (LA17_0==AS) ) { + alt17=1; + } + switch (alt17) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:460:20: AS + { + AS41=(Token)match(input,AS,FOLLOW_AS_in_simpleTable1714); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_AS.add(AS41); + + + } + break; + + } + + pushFollow(FOLLOW_correlationName_in_simpleTable1717); + correlationName42=correlationName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_joinType.add(joinType48.getTree()); + if ( state.backtracking==0 ) stream_correlationName.add(correlationName42.getTree()); } break; } - JOIN49=(Token)match(input,JOIN,FOLLOW_JOIN_in_joinedTable969); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_JOIN.add(JOIN49); - - pushFollow(FOLLOW_tableReference_in_joinedTable971); - tableReference50=tableReference(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_tableReference.add(tableReference50.getTree()); - pushFollow(FOLLOW_joinSpecification_in_joinedTable973); - joinSpecification51=joinSpecification(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_joinSpecification.add(joinSpecification51.getTree()); // AST REWRITE - // elements: JOIN, joinSpecification, joinType, tableReference + // elements: correlationName, tableName // token labels: // rule labels: retval // token list labels: @@ -2224,15 +1960,147 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 398:3: -> ^( JOIN tableReference ( joinType )? joinSpecification ) + // 461:17: -> ^( TABLE_REF tableName ( correlationName )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:398:6: ^( JOIN tableReference ( joinType )? joinSpecification ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:462:25: ^( TABLE_REF tableName ( correlationName )? ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TABLE_REF, "TABLE_REF"), root_1); + + adaptor.addChild(root_1, stream_tableName.nextTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:462:47: ( correlationName )? + if ( stream_correlationName.hasNext() ) { + adaptor.addChild(root_1, stream_correlationName.nextTree()); + + } + stream_correlationName.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + retval.tree = (Object)adaptor.rulePostProcessing(root_0); + adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); + } + if ( state.backtracking==0 ) { + + paraphrases.pop(); + + } + } + + catch(RecognitionException e) + { + throw new CMISQueryException(getErrorString(e), e); + } + finally { + } + return retval; + } + // $ANTLR end "simpleTable" + + public static class joinedTable_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "joinedTable" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:465:1: joinedTable : ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ; + public final CMISParser.joinedTable_return joinedTable() throws RecognitionException { + CMISParser.joinedTable_return retval = new CMISParser.joinedTable_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + Token JOIN44=null; + CMISParser.joinType_return joinType43 = null; + + CMISParser.tableReference_return tableReference45 = null; + + CMISParser.joinSpecification_return joinSpecification46 = null; + + + Object JOIN44_tree=null; + RewriteRuleTokenStream stream_JOIN=new RewriteRuleTokenStream(adaptor,"token JOIN"); + RewriteRuleSubtreeStream stream_tableReference=new RewriteRuleSubtreeStream(adaptor,"rule tableReference"); + RewriteRuleSubtreeStream stream_joinType=new RewriteRuleSubtreeStream(adaptor,"rule joinType"); + RewriteRuleSubtreeStream stream_joinSpecification=new RewriteRuleSubtreeStream(adaptor,"rule joinSpecification"); + + paraphrases.push("in joinedTable"); + + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:474:9: ( ( joinType )? JOIN tableReference joinSpecification -> ^( JOIN tableReference ( joinType )? joinSpecification ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:475:9: ( joinType )? JOIN tableReference joinSpecification + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:475:9: ( joinType )? + int alt19=2; + int LA19_0 = input.LA(1); + + if ( ((LA19_0>=INNER && LA19_0<=LEFT)) ) { + alt19=1; + } + switch (alt19) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:475:9: joinType + { + pushFollow(FOLLOW_joinType_in_joinedTable1813); + joinType43=joinType(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_joinType.add(joinType43.getTree()); + + } + break; + + } + + JOIN44=(Token)match(input,JOIN,FOLLOW_JOIN_in_joinedTable1816); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_JOIN.add(JOIN44); + + pushFollow(FOLLOW_tableReference_in_joinedTable1818); + tableReference45=tableReference(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_tableReference.add(tableReference45.getTree()); + pushFollow(FOLLOW_joinSpecification_in_joinedTable1820); + joinSpecification46=joinSpecification(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_joinSpecification.add(joinSpecification46.getTree()); + + + // AST REWRITE + // elements: JOIN, tableReference, joinType, joinSpecification + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 476:17: -> ^( JOIN tableReference ( joinType )? joinSpecification ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:477:25: ^( JOIN tableReference ( joinType )? joinSpecification ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_JOIN.nextNode(), root_1); adaptor.addChild(root_1, stream_tableReference.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:398:28: ( joinType )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:477:47: ( joinType )? if ( stream_joinType.hasNext() ) { adaptor.addChild(root_1, stream_joinType.nextTree()); @@ -2256,7 +2124,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -2270,111 +2140,202 @@ public class CMISParser extends Parser { } // $ANTLR end "joinedTable" - public static class joinedTables_return extends ParserRuleReturnScope { + public static class complexTable_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; - // $ANTLR start "joinedTables" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:402:1: joinedTables : singleTable ( joinedTable )+ -> ^( SOURCE singleTable ( joinedTable )+ ) ; - public final CMISParser.joinedTables_return joinedTables() throws RecognitionException { - CMISParser.joinedTables_return retval = new CMISParser.joinedTables_return(); + // $ANTLR start "complexTable" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:480:1: complexTable : ( ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN -> ^( SOURCE singleTable ( joinedTable )+ ) | LPAREN complexTable RPAREN -> complexTable ); + public final CMISParser.complexTable_return complexTable() throws RecognitionException { + CMISParser.complexTable_return retval = new CMISParser.complexTable_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.singleTable_return singleTable52 = null; + Token LPAREN47=null; + Token RPAREN50=null; + Token LPAREN51=null; + Token RPAREN53=null; + CMISParser.singleTable_return singleTable48 = null; - CMISParser.joinedTable_return joinedTable53 = null; + CMISParser.joinedTable_return joinedTable49 = null; + + CMISParser.complexTable_return complexTable52 = null; + Object LPAREN47_tree=null; + Object RPAREN50_tree=null; + Object LPAREN51_tree=null; + Object RPAREN53_tree=null; + RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); + RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_singleTable=new RewriteRuleSubtreeStream(adaptor,"rule singleTable"); RewriteRuleSubtreeStream stream_joinedTable=new RewriteRuleSubtreeStream(adaptor,"rule joinedTable"); + RewriteRuleSubtreeStream stream_complexTable=new RewriteRuleSubtreeStream(adaptor,"rule complexTable"); + + paraphrases.push("in complexTable"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:403:2: ( singleTable ( joinedTable )+ -> ^( SOURCE singleTable ( joinedTable )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:403:4: singleTable ( joinedTable )+ - { - pushFollow(FOLLOW_singleTable_in_joinedTables1001); - singleTable52=singleTable(); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:489:9: ( ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN -> ^( SOURCE singleTable ( joinedTable )+ ) | LPAREN complexTable RPAREN -> complexTable ) + int alt21=2; + int LA21_0 = input.LA(1); - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_singleTable.add(singleTable52.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:403:16: ( joinedTable )+ - int cnt21=0; - loop21: - do { - int alt21=2; - int LA21_0 = input.LA(1); + if ( (LA21_0==LPAREN) ) { + int LA21_1 = input.LA(2); - if ( ((LA21_0>=JOIN && LA21_0<=LEFT)) ) { + if ( (synpred2_CMIS()) ) { alt21=1; } - - - switch (alt21) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:403:16: joinedTable - { - pushFollow(FOLLOW_joinedTable_in_joinedTables1003); - joinedTable53=joinedTable(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_joinedTable.add(joinedTable53.getTree()); - - } - break; - - default : - if ( cnt21 >= 1 ) break loop21; - if (state.backtracking>0) {state.failed=true; return retval;} - EarlyExitException eee = - new EarlyExitException(21, input); - throw eee; + else if ( (true) ) { + alt21=2; } - cnt21++; - } while (true); + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 21, 1, input); - - - // AST REWRITE - // elements: joinedTable, singleTable - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 404:3: -> ^( SOURCE singleTable ( joinedTable )+ ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:404:6: ^( SOURCE singleTable ( joinedTable )+ ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SOURCE, "SOURCE"), root_1); - - adaptor.addChild(root_1, stream_singleTable.nextTree()); - if ( !(stream_joinedTable.hasNext()) ) { - throw new RewriteEarlyExitException(); + throw nvae; } - while ( stream_joinedTable.hasNext() ) { - adaptor.addChild(root_1, stream_joinedTable.nextTree()); + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 21, 0, input); - } - stream_joinedTable.reset(); + throw nvae; + } + switch (alt21) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:9: ( LPAREN singleTable ( joinedTable )+ RPAREN )=> LPAREN singleTable ( joinedTable )+ RPAREN + { + LPAREN47=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_complexTable1929); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN47); - adaptor.addChild(root_0, root_1); - } + pushFollow(FOLLOW_singleTable_in_complexTable1931); + singleTable48=singleTable(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_singleTable.add(singleTable48.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:72: ( joinedTable )+ + int cnt20=0; + loop20: + do { + int alt20=2; + int LA20_0 = input.LA(1); + + if ( ((LA20_0>=JOIN && LA20_0<=LEFT)) ) { + alt20=1; + } + + + switch (alt20) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:72: joinedTable + { + pushFollow(FOLLOW_joinedTable_in_complexTable1933); + joinedTable49=joinedTable(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_joinedTable.add(joinedTable49.getTree()); + + } + break; + + default : + if ( cnt20 >= 1 ) break loop20; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(20, input); + throw eee; + } + cnt20++; + } while (true); + + RPAREN50=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_complexTable1936); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN50); + + + + // AST REWRITE + // elements: joinedTable, singleTable + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 491:17: -> ^( SOURCE singleTable ( joinedTable )+ ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:492:25: ^( SOURCE singleTable ( joinedTable )+ ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SOURCE, "SOURCE"), root_1); + + adaptor.addChild(root_1, stream_singleTable.nextTree()); + if ( !(stream_joinedTable.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_joinedTable.hasNext() ) { + adaptor.addChild(root_1, stream_joinedTable.nextTree()); + + } + stream_joinedTable.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:493:11: LPAREN complexTable RPAREN + { + LPAREN51=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_complexTable1999); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN51); + + pushFollow(FOLLOW_complexTable_in_complexTable2001); + complexTable52=complexTable(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_complexTable.add(complexTable52.getTree()); + RPAREN53=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_complexTable2003); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN53); + + + + // AST REWRITE + // elements: complexTable + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 494:17: -> complexTable + { + adaptor.addChild(root_0, stream_complexTable.nextTree()); + + } + + retval.tree = root_0;} + } + break; } - - retval.tree = root_0;} - } - retval.stop = input.LT(-1); if ( state.backtracking==0 ) { @@ -2382,6 +2343,11 @@ public class CMISParser extends Parser { retval.tree = (Object)adaptor.rulePostProcessing(root_0); adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } + if ( state.backtracking==0 ) { + + paraphrases.pop(); + + } } catch(RecognitionException e) @@ -2392,7 +2358,7 @@ public class CMISParser extends Parser { } return retval; } - // $ANTLR end "joinedTables" + // $ANTLR end "complexTable" public static class joinType_return extends ParserRuleReturnScope { Object tree; @@ -2400,7 +2366,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "joinType" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:407:1: joinType : ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:497:1: joinType : ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ); public final CMISParser.joinType_return joinType() throws RecognitionException { CMISParser.joinType_return retval = new CMISParser.joinType_return(); retval.start = input.LT(1); @@ -2419,7 +2385,7 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_LEFT=new RewriteRuleTokenStream(adaptor,"token LEFT"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:408:2: ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:498:9: ( INNER -> INNER | LEFT ( OUTER )? -> LEFT ) int alt23=2; int LA23_0 = input.LA(1); @@ -2438,9 +2404,9 @@ public class CMISParser extends Parser { } switch (alt23) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:408:4: INNER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:499:9: INNER { - INNER54=(Token)match(input,INNER,FOLLOW_INNER_in_joinType1030); if (state.failed) return retval; + INNER54=(Token)match(input,INNER,FOLLOW_INNER_in_joinType2056); if (state.failed) return retval; if ( state.backtracking==0 ) stream_INNER.add(INNER54); @@ -2457,7 +2423,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 409:3: -> INNER + // 500:17: -> INNER { adaptor.addChild(root_0, stream_INNER.nextNode()); @@ -2467,12 +2433,12 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:410:5: LEFT ( OUTER )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:501:11: LEFT ( OUTER )? { - LEFT55=(Token)match(input,LEFT,FOLLOW_LEFT_in_joinType1042); if (state.failed) return retval; + LEFT55=(Token)match(input,LEFT,FOLLOW_LEFT_in_joinType2088); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LEFT.add(LEFT55); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:410:10: ( OUTER )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:501:16: ( OUTER )? int alt22=2; int LA22_0 = input.LA(1); @@ -2481,9 +2447,9 @@ public class CMISParser extends Parser { } switch (alt22) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:410:10: OUTER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:501:16: OUTER { - OUTER56=(Token)match(input,OUTER,FOLLOW_OUTER_in_joinType1044); if (state.failed) return retval; + OUTER56=(Token)match(input,OUTER,FOLLOW_OUTER_in_joinType2090); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OUTER.add(OUTER56); @@ -2506,7 +2472,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 411:3: -> LEFT + // 502:17: -> LEFT { adaptor.addChild(root_0, stream_LEFT.nextNode()); @@ -2542,7 +2508,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "joinSpecification" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:414:1: joinSpecification : ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:505:1: joinSpecification : ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ; public final CMISParser.joinSpecification_return joinSpecification() throws RecognitionException { CMISParser.joinSpecification_return retval = new CMISParser.joinSpecification_return(); retval.start = input.LT(1); @@ -2561,24 +2527,26 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_ON=new RewriteRuleTokenStream(adaptor,"token ON"); RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); + paraphrases.push("in join condition"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:417:2: ( ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:417:4: ON lhs= columnReference EQUALS rhs= columnReference + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:514:9: ( ON lhs= columnReference EQUALS rhs= columnReference -> ^( ON $lhs EQUALS $rhs) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:515:9: ON lhs= columnReference EQUALS rhs= columnReference { - ON57=(Token)match(input,ON,FOLLOW_ON_in_joinSpecification1090); if (state.failed) return retval; + ON57=(Token)match(input,ON,FOLLOW_ON_in_joinSpecification2154); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ON.add(ON57); - pushFollow(FOLLOW_columnReference_in_joinSpecification1094); + pushFollow(FOLLOW_columnReference_in_joinSpecification2158); lhs=columnReference(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(lhs.getTree()); - EQUALS58=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_joinSpecification1096); if (state.failed) return retval; + EQUALS58=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_joinSpecification2160); if (state.failed) return retval; if ( state.backtracking==0 ) stream_EQUALS.add(EQUALS58); - pushFollow(FOLLOW_columnReference_in_joinSpecification1100); + pushFollow(FOLLOW_columnReference_in_joinSpecification2164); rhs=columnReference(); state._fsp--; @@ -2587,7 +2555,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: lhs, EQUALS, rhs, ON + // elements: rhs, EQUALS, lhs, ON // token labels: // rule labels: retval, rhs, lhs // token list labels: @@ -2600,9 +2568,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_lhs=new RewriteRuleSubtreeStream(adaptor,"rule lhs",lhs!=null?lhs.tree:null); root_0 = (Object)adaptor.nil(); - // 418:3: -> ^( ON $lhs EQUALS $rhs) + // 516:17: -> ^( ON $lhs EQUALS $rhs) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:418:6: ^( ON $lhs EQUALS $rhs) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:517:25: ^( ON $lhs EQUALS $rhs) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_ON.nextNode(), root_1); @@ -2627,7 +2595,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -2647,7 +2617,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "whereClause" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:425:1: whereClause : WHERE searchOrCondition -> searchOrCondition ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:524:1: whereClause : WHERE searchOrCondition -> searchOrCondition ; public final CMISParser.whereClause_return whereClause() throws RecognitionException { CMISParser.whereClause_return retval = new CMISParser.whereClause_return(); retval.start = input.LT(1); @@ -2661,15 +2631,17 @@ public class CMISParser extends Parser { Object WHERE59_tree=null; RewriteRuleTokenStream stream_WHERE=new RewriteRuleTokenStream(adaptor,"token WHERE"); RewriteRuleSubtreeStream stream_searchOrCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchOrCondition"); + paraphrases.push("in where"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:428:2: ( WHERE searchOrCondition -> searchOrCondition ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:428:4: WHERE searchOrCondition + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:533:9: ( WHERE searchOrCondition -> searchOrCondition ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:534:9: WHERE searchOrCondition { - WHERE59=(Token)match(input,WHERE,FOLLOW_WHERE_in_whereClause1159); if (state.failed) return retval; + WHERE59=(Token)match(input,WHERE,FOLLOW_WHERE_in_whereClause2264); if (state.failed) return retval; if ( state.backtracking==0 ) stream_WHERE.add(WHERE59); - pushFollow(FOLLOW_searchOrCondition_in_whereClause1161); + pushFollow(FOLLOW_searchOrCondition_in_whereClause2266); searchOrCondition60=searchOrCondition(); state._fsp--; @@ -2689,7 +2661,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 429:3: -> searchOrCondition + // 535:17: -> searchOrCondition { adaptor.addChild(root_0, stream_searchOrCondition.nextTree()); @@ -2706,7 +2678,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -2726,7 +2700,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchOrCondition" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:432:1: searchOrCondition : searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:538:1: searchOrCondition : searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ; public final CMISParser.searchOrCondition_return searchOrCondition() throws RecognitionException { CMISParser.searchOrCondition_return retval = new CMISParser.searchOrCondition_return(); retval.start = input.LT(1); @@ -2743,16 +2717,16 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_OR=new RewriteRuleTokenStream(adaptor,"token OR"); RewriteRuleSubtreeStream stream_searchAndCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchAndCondition"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:436:2: ( searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:436:4: searchAndCondition ( OR searchAndCondition )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:542:9: ( searchAndCondition ( OR searchAndCondition )* -> ^( DISJUNCTION ( searchAndCondition )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:543:9: searchAndCondition ( OR searchAndCondition )* { - pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition1181); + pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition2321); searchAndCondition61=searchAndCondition(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchAndCondition.add(searchAndCondition61.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:436:23: ( OR searchAndCondition )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:543:28: ( OR searchAndCondition )* loop24: do { int alt24=2; @@ -2765,12 +2739,12 @@ public class CMISParser extends Parser { switch (alt24) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:436:24: OR searchAndCondition + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:543:29: OR searchAndCondition { - OR62=(Token)match(input,OR,FOLLOW_OR_in_searchOrCondition1184); if (state.failed) return retval; + OR62=(Token)match(input,OR,FOLLOW_OR_in_searchOrCondition2324); if (state.failed) return retval; if ( state.backtracking==0 ) stream_OR.add(OR62); - pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition1186); + pushFollow(FOLLOW_searchAndCondition_in_searchOrCondition2326); searchAndCondition63=searchAndCondition(); state._fsp--; @@ -2799,9 +2773,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 437:3: -> ^( DISJUNCTION ( searchAndCondition )+ ) + // 544:17: -> ^( DISJUNCTION ( searchAndCondition )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:437:6: ^( DISJUNCTION ( searchAndCondition )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:545:25: ^( DISJUNCTION ( searchAndCondition )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); @@ -2848,7 +2822,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchAndCondition" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:441:1: searchAndCondition : searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:548:1: searchAndCondition : searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ; public final CMISParser.searchAndCondition_return searchAndCondition() throws RecognitionException { CMISParser.searchAndCondition_return retval = new CMISParser.searchAndCondition_return(); retval.start = input.LT(1); @@ -2865,16 +2839,16 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_AND=new RewriteRuleTokenStream(adaptor,"token AND"); RewriteRuleSubtreeStream stream_searchNotCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchNotCondition"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:445:2: ( searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:445:4: searchNotCondition ( AND searchNotCondition )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:552:9: ( searchNotCondition ( AND searchNotCondition )* -> ^( CONJUNCTION ( searchNotCondition )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:9: searchNotCondition ( AND searchNotCondition )* { - pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition1214); + pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition2412); searchNotCondition64=searchNotCondition(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchNotCondition.add(searchNotCondition64.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:445:23: ( AND searchNotCondition )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:28: ( AND searchNotCondition )* loop25: do { int alt25=2; @@ -2887,12 +2861,12 @@ public class CMISParser extends Parser { switch (alt25) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:445:24: AND searchNotCondition + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:29: AND searchNotCondition { - AND65=(Token)match(input,AND,FOLLOW_AND_in_searchAndCondition1217); if (state.failed) return retval; + AND65=(Token)match(input,AND,FOLLOW_AND_in_searchAndCondition2415); if (state.failed) return retval; if ( state.backtracking==0 ) stream_AND.add(AND65); - pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition1219); + pushFollow(FOLLOW_searchNotCondition_in_searchAndCondition2417); searchNotCondition66=searchNotCondition(); state._fsp--; @@ -2921,9 +2895,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 446:3: -> ^( CONJUNCTION ( searchNotCondition )+ ) + // 554:17: -> ^( CONJUNCTION ( searchNotCondition )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:446:6: ^( CONJUNCTION ( searchNotCondition )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:555:25: ^( CONJUNCTION ( searchNotCondition )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); @@ -2970,7 +2944,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchNotCondition" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:449:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:558:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ); public final CMISParser.searchNotCondition_return searchNotCondition() throws RecognitionException { CMISParser.searchNotCondition_return retval = new CMISParser.searchNotCondition_return(); retval.start = input.LT(1); @@ -2987,17 +2961,17 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT"); RewriteRuleSubtreeStream stream_searchTest=new RewriteRuleSubtreeStream(adaptor,"rule searchTest"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:450:2: ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:559:9: ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest ) int alt26=2; alt26 = dfa26.predict(input); switch (alt26) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:450:4: NOT searchTest + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:560:9: NOT searchTest { - NOT67=(Token)match(input,NOT,FOLLOW_NOT_in_searchNotCondition1246); if (state.failed) return retval; + NOT67=(Token)match(input,NOT,FOLLOW_NOT_in_searchNotCondition2501); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT67); - pushFollow(FOLLOW_searchTest_in_searchNotCondition1248); + pushFollow(FOLLOW_searchTest_in_searchNotCondition2503); searchTest68=searchTest(); state._fsp--; @@ -3017,9 +2991,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 451:3: -> ^( NEGATION searchTest ) + // 561:17: -> ^( NEGATION searchTest ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:451:6: ^( NEGATION searchTest ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:562:25: ^( NEGATION searchTest ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NEGATION, "NEGATION"), root_1); @@ -3035,9 +3009,9 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:452:4: searchTest + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:563:11: searchTest { - pushFollow(FOLLOW_searchTest_in_searchNotCondition1263); + pushFollow(FOLLOW_searchTest_in_searchNotCondition2563); searchTest69=searchTest(); state._fsp--; @@ -3057,7 +3031,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 453:3: -> searchTest + // 564:17: -> searchTest { adaptor.addChild(root_0, stream_searchTest.nextTree()); @@ -3093,7 +3067,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "searchTest" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:456:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:567:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ); public final CMISParser.searchTest_return searchTest() throws RecognitionException { CMISParser.searchTest_return retval = new CMISParser.searchTest_return(); retval.start = input.LT(1); @@ -3114,14 +3088,14 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_predicate=new RewriteRuleSubtreeStream(adaptor,"rule predicate"); RewriteRuleSubtreeStream stream_searchOrCondition=new RewriteRuleSubtreeStream(adaptor,"rule searchOrCondition"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:457:2: ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:568:9: ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition ) int alt27=2; alt27 = dfa27.predict(input); switch (alt27) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:457:4: predicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:569:9: predicate { - pushFollow(FOLLOW_predicate_in_searchTest1281); + pushFollow(FOLLOW_predicate_in_searchTest2616); predicate70=predicate(); state._fsp--; @@ -3141,7 +3115,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 458:3: -> predicate + // 570:17: -> predicate { adaptor.addChild(root_0, stream_predicate.nextTree()); @@ -3151,18 +3125,18 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:459:4: LPAREN searchOrCondition RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:571:11: LPAREN searchOrCondition RPAREN { - LPAREN71=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_searchTest1292); if (state.failed) return retval; + LPAREN71=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_searchTest2648); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN71); - pushFollow(FOLLOW_searchOrCondition_in_searchTest1294); + pushFollow(FOLLOW_searchOrCondition_in_searchTest2650); searchOrCondition72=searchOrCondition(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_searchOrCondition.add(searchOrCondition72.getTree()); - RPAREN73=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_searchTest1296); if (state.failed) return retval; + RPAREN73=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_searchTest2652); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN73); @@ -3179,7 +3153,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 460:3: -> searchOrCondition + // 572:17: -> searchOrCondition { adaptor.addChild(root_0, stream_searchOrCondition.nextTree()); @@ -3215,7 +3189,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "predicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:463:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:575:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ); public final CMISParser.predicate_return predicate() throws RecognitionException { CMISParser.predicate_return retval = new CMISParser.predicate_return(); retval.start = input.LT(1); @@ -3241,16 +3215,16 @@ public class CMISParser extends Parser { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:464:2: ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:576:9: ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate ) int alt28=8; alt28 = dfa28.predict(input); switch (alt28) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:464:4: comparisonPredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:577:9: comparisonPredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_comparisonPredicate_in_predicate1313); + pushFollow(FOLLOW_comparisonPredicate_in_predicate2705); comparisonPredicate74=comparisonPredicate(); state._fsp--; @@ -3260,11 +3234,11 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:465:4: inPredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:578:11: inPredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_inPredicate_in_predicate1318); + pushFollow(FOLLOW_inPredicate_in_predicate2717); inPredicate75=inPredicate(); state._fsp--; @@ -3274,11 +3248,11 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:466:4: likePredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:579:11: likePredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_likePredicate_in_predicate1323); + pushFollow(FOLLOW_likePredicate_in_predicate2729); likePredicate76=likePredicate(); state._fsp--; @@ -3288,11 +3262,11 @@ public class CMISParser extends Parser { } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:467:4: nullPredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:580:11: nullPredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_nullPredicate_in_predicate1328); + pushFollow(FOLLOW_nullPredicate_in_predicate2741); nullPredicate77=nullPredicate(); state._fsp--; @@ -3302,11 +3276,11 @@ public class CMISParser extends Parser { } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:468:10: quantifiedComparisonPredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:581:11: quantifiedComparisonPredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_quantifiedComparisonPredicate_in_predicate1339); + pushFollow(FOLLOW_quantifiedComparisonPredicate_in_predicate2753); quantifiedComparisonPredicate78=quantifiedComparisonPredicate(); state._fsp--; @@ -3316,11 +3290,11 @@ public class CMISParser extends Parser { } break; case 6 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:469:4: quantifiedInPredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:582:11: quantifiedInPredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_quantifiedInPredicate_in_predicate1344); + pushFollow(FOLLOW_quantifiedInPredicate_in_predicate2765); quantifiedInPredicate79=quantifiedInPredicate(); state._fsp--; @@ -3330,11 +3304,11 @@ public class CMISParser extends Parser { } break; case 7 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:470:4: textSearchPredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:583:11: textSearchPredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_textSearchPredicate_in_predicate1349); + pushFollow(FOLLOW_textSearchPredicate_in_predicate2777); textSearchPredicate80=textSearchPredicate(); state._fsp--; @@ -3344,11 +3318,11 @@ public class CMISParser extends Parser { } break; case 8 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:471:4: folderPredicate + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:584:11: folderPredicate { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_folderPredicate_in_predicate1354); + pushFollow(FOLLOW_folderPredicate_in_predicate2789); folderPredicate81=folderPredicate(); state._fsp--; @@ -3384,7 +3358,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "comparisonPredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:474:1: comparisonPredicate : valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:587:1: comparisonPredicate : valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) ; public final CMISParser.comparisonPredicate_return comparisonPredicate() throws RecognitionException { CMISParser.comparisonPredicate_return retval = new CMISParser.comparisonPredicate_return(); retval.start = input.LT(1); @@ -3402,22 +3376,22 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_compOp=new RewriteRuleSubtreeStream(adaptor,"rule compOp"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:475:2: ( valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:475:4: valueExpression compOp literalOrParameterName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:588:9: ( valueExpression compOp literalOrParameterName -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:589:9: valueExpression compOp literalOrParameterName { - pushFollow(FOLLOW_valueExpression_in_comparisonPredicate1366); + pushFollow(FOLLOW_valueExpression_in_comparisonPredicate2822); valueExpression82=valueExpression(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_valueExpression.add(valueExpression82.getTree()); - pushFollow(FOLLOW_compOp_in_comparisonPredicate1368); + pushFollow(FOLLOW_compOp_in_comparisonPredicate2824); compOp83=compOp(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_compOp.add(compOp83.getTree()); - pushFollow(FOLLOW_literalOrParameterName_in_comparisonPredicate1370); + pushFollow(FOLLOW_literalOrParameterName_in_comparisonPredicate2826); literalOrParameterName84=literalOrParameterName(); state._fsp--; @@ -3426,7 +3400,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: literalOrParameterName, valueExpression, compOp + // elements: literalOrParameterName, compOp, valueExpression // token labels: // rule labels: retval // token list labels: @@ -3437,14 +3411,14 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 476:3: -> ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) + // 590:17: -> ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:476:6: ^( PRED_COMPARISON ANY valueExpression compOp literalOrParameterName ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:591:25: ^( PRED_COMPARISON SINGLE_VALUED_PROPERTY valueExpression compOp literalOrParameterName ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_COMPARISON, "PRED_COMPARISON"), root_1); - adaptor.addChild(root_1, (Object)adaptor.create(ANY, "ANY")); + adaptor.addChild(root_1, (Object)adaptor.create(SINGLE_VALUED_PROPERTY, "SINGLE_VALUED_PROPERTY")); adaptor.addChild(root_1, stream_valueExpression.nextTree()); adaptor.addChild(root_1, stream_compOp.nextTree()); adaptor.addChild(root_1, stream_literalOrParameterName.nextTree()); @@ -3482,7 +3456,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "compOp" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:479:1: compOp : ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:594:1: compOp : ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ); public final CMISParser.compOp_return compOp() throws RecognitionException { CMISParser.compOp_return retval = new CMISParser.compOp_return(); retval.start = input.LT(1); @@ -3494,8 +3468,8 @@ public class CMISParser extends Parser { Object set85_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:480:2: ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:595:9: ( EQUALS | NOTEQUALS | LESSTHAN | GREATERTHAN | LESSTHANOREQUALS | GREATERTHANOREQUALS ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g: { root_0 = (Object)adaptor.nil(); @@ -3539,7 +3513,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "literalOrParameterName" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:488:1: literalOrParameterName : ( literal | {...}? => parameterName ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:604:1: literalOrParameterName : ( literal | {...}? => parameterName ); public final CMISParser.literalOrParameterName_return literalOrParameterName() throws RecognitionException { CMISParser.literalOrParameterName_return retval = new CMISParser.literalOrParameterName_return(); retval.start = input.LT(1); @@ -3553,11 +3527,26 @@ public class CMISParser extends Parser { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:489:2: ( literal | {...}? => parameterName ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:605:9: ( literal | {...}? => parameterName ) int alt29=2; int LA29_0 = input.LA(1); - if ( (LA29_0==QUOTED_STRING||(LA29_0>=FLOATING_POINT_LITERAL && LA29_0<=TIMESTAMP)) ) { + if ( (LA29_0==FLOATING_POINT_LITERAL) ) { + alt29=1; + } + else if ( (LA29_0==DECIMAL_INTEGER_LITERAL) ) { + alt29=1; + } + else if ( (LA29_0==QUOTED_STRING) ) { + alt29=1; + } + else if ( (LA29_0==TRUE) ) { + alt29=1; + } + else if ( (LA29_0==FALSE) ) { + alt29=1; + } + else if ( (LA29_0==TIMESTAMP) ) { alt29=1; } else if ( (LA29_0==COLON) && ((strict == false))) { @@ -3572,11 +3561,11 @@ public class CMISParser extends Parser { } switch (alt29) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:489:4: literal + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:606:9: literal { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_literal_in_literalOrParameterName1436); + pushFollow(FOLLOW_literal_in_literalOrParameterName3006); literal86=literal(); state._fsp--; @@ -3586,7 +3575,7 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:4: {...}? => parameterName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:607:11: {...}? => parameterName { root_0 = (Object)adaptor.nil(); @@ -3594,7 +3583,7 @@ public class CMISParser extends Parser { if (state.backtracking>0) {state.failed=true; return retval;} throw new FailedPredicateException(input, "literalOrParameterName", "strict == false"); } - pushFollow(FOLLOW_parameterName_in_literalOrParameterName1444); + pushFollow(FOLLOW_parameterName_in_literalOrParameterName3021); parameterName87=parameterName(); state._fsp--; @@ -3630,7 +3619,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "literal" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:493:1: literal : ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:610:1: literal : ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ); public final CMISParser.literal_return literal() throws RecognitionException { CMISParser.literal_return retval = new CMISParser.literal_return(); retval.start = input.LT(1); @@ -3648,7 +3637,7 @@ public class CMISParser extends Parser { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:494:2: ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:611:9: ( signedNumericLiteral | characterStringLiteral | booleanLiteral | datetimeLiteral ) int alt30=4; switch ( input.LA(1) ) { case FLOATING_POINT_LITERAL: @@ -3683,11 +3672,11 @@ public class CMISParser extends Parser { switch (alt30) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:494:4: signedNumericLiteral + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:612:9: signedNumericLiteral { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_signedNumericLiteral_in_literal1457); + pushFollow(FOLLOW_signedNumericLiteral_in_literal3054); signedNumericLiteral88=signedNumericLiteral(); state._fsp--; @@ -3697,11 +3686,11 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:495:4: characterStringLiteral + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:613:11: characterStringLiteral { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_characterStringLiteral_in_literal1462); + pushFollow(FOLLOW_characterStringLiteral_in_literal3066); characterStringLiteral89=characterStringLiteral(); state._fsp--; @@ -3711,11 +3700,11 @@ public class CMISParser extends Parser { } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:496:4: booleanLiteral + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:614:11: booleanLiteral { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_booleanLiteral_in_literal1467); + pushFollow(FOLLOW_booleanLiteral_in_literal3078); booleanLiteral90=booleanLiteral(); state._fsp--; @@ -3725,11 +3714,11 @@ public class CMISParser extends Parser { } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:497:4: datetimeLiteral + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:615:11: datetimeLiteral { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_datetimeLiteral_in_literal1472); + pushFollow(FOLLOW_datetimeLiteral_in_literal3090); datetimeLiteral91=datetimeLiteral(); state._fsp--; @@ -3765,7 +3754,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "inPredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:500:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:618:1: inPredicate : columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) ; public final CMISParser.inPredicate_return inPredicate() throws RecognitionException { CMISParser.inPredicate_return retval = new CMISParser.inPredicate_return(); retval.start = input.LT(1); @@ -3792,16 +3781,16 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:501:2: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:501:4: columnReference ( NOT )? IN LPAREN inValueList RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:619:9: ( columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:620:9: columnReference ( NOT )? IN LPAREN inValueList RPAREN { - pushFollow(FOLLOW_columnReference_in_inPredicate1484); + pushFollow(FOLLOW_columnReference_in_inPredicate3123); columnReference92=columnReference(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference92.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:501:20: ( NOT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:620:25: ( NOT )? int alt31=2; int LA31_0 = input.LA(1); @@ -3810,9 +3799,9 @@ public class CMISParser extends Parser { } switch (alt31) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:501:20: NOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:620:25: NOT { - NOT93=(Token)match(input,NOT,FOLLOW_NOT_in_inPredicate1486); if (state.failed) return retval; + NOT93=(Token)match(input,NOT,FOLLOW_NOT_in_inPredicate3125); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT93); @@ -3821,25 +3810,25 @@ public class CMISParser extends Parser { } - IN94=(Token)match(input,IN,FOLLOW_IN_in_inPredicate1489); if (state.failed) return retval; + IN94=(Token)match(input,IN,FOLLOW_IN_in_inPredicate3128); if (state.failed) return retval; if ( state.backtracking==0 ) stream_IN.add(IN94); - LPAREN95=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_inPredicate1491); if (state.failed) return retval; + LPAREN95=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_inPredicate3130); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN95); - pushFollow(FOLLOW_inValueList_in_inPredicate1493); + pushFollow(FOLLOW_inValueList_in_inPredicate3132); inValueList96=inValueList(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_inValueList.add(inValueList96.getTree()); - RPAREN97=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_inPredicate1495); if (state.failed) return retval; + RPAREN97=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_inPredicate3134); if (state.failed) return retval; if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN97); // AST REWRITE - // elements: inValueList, columnReference, NOT + // elements: columnReference, NOT, inValueList // token labels: // rule labels: retval // token list labels: @@ -3850,17 +3839,17 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 502:3: -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) + // 621:17: -> ^( PRED_IN SINGLE_VALUED_PROPERTY columnReference inValueList ( NOT )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:502:6: ^( PRED_IN ANY columnReference inValueList ( NOT )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:622:25: ^( PRED_IN SINGLE_VALUED_PROPERTY 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, (Object)adaptor.create(SINGLE_VALUED_PROPERTY, "SINGLE_VALUED_PROPERTY")); adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_inValueList.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:502:48: ( NOT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:622:86: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -3900,7 +3889,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "inValueList" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:505:1: inValueList : literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:625:1: inValueList : literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ; public final CMISParser.inValueList_return inValueList() throws RecognitionException { CMISParser.inValueList_return retval = new CMISParser.inValueList_return(); retval.start = input.LT(1); @@ -3917,16 +3906,16 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:506:2: ( literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:506:4: literalOrParameterName ( COMMA literalOrParameterName )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:626:9: ( literalOrParameterName ( COMMA literalOrParameterName )* -> ^( LIST ( literalOrParameterName )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:627:9: literalOrParameterName ( COMMA literalOrParameterName )* { - pushFollow(FOLLOW_literalOrParameterName_in_inValueList1524); + pushFollow(FOLLOW_literalOrParameterName_in_inValueList3222); literalOrParameterName98=literalOrParameterName(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_literalOrParameterName.add(literalOrParameterName98.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:506:27: ( COMMA literalOrParameterName )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:627:32: ( COMMA literalOrParameterName )* loop32: do { int alt32=2; @@ -3939,12 +3928,12 @@ public class CMISParser extends Parser { switch (alt32) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:506:28: COMMA literalOrParameterName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:627:33: COMMA literalOrParameterName { - COMMA99=(Token)match(input,COMMA,FOLLOW_COMMA_in_inValueList1527); if (state.failed) return retval; + COMMA99=(Token)match(input,COMMA,FOLLOW_COMMA_in_inValueList3225); if (state.failed) return retval; if ( state.backtracking==0 ) stream_COMMA.add(COMMA99); - pushFollow(FOLLOW_literalOrParameterName_in_inValueList1529); + pushFollow(FOLLOW_literalOrParameterName_in_inValueList3227); literalOrParameterName100=literalOrParameterName(); state._fsp--; @@ -3973,9 +3962,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 507:3: -> ^( LIST ( literalOrParameterName )+ ) + // 628:17: -> ^( LIST ( literalOrParameterName )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:507:6: ^( LIST ( literalOrParameterName )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:629:25: ^( LIST ( literalOrParameterName )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(LIST, "LIST"), root_1); @@ -4022,7 +4011,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "likePredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:510:1: likePredicate : columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:632: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); @@ -4043,16 +4032,16 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:511:2: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:511:4: columnReference ( NOT )? LIKE characterStringLiteral + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:633:9: ( columnReference ( NOT )? LIKE characterStringLiteral -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:634:9: columnReference ( NOT )? LIKE characterStringLiteral { - pushFollow(FOLLOW_columnReference_in_likePredicate1555); + pushFollow(FOLLOW_columnReference_in_likePredicate3311); columnReference101=columnReference(); state._fsp--; if (state.failed) return retval; if ( state.backtracking==0 ) stream_columnReference.add(columnReference101.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:511:20: ( NOT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:634:25: ( NOT )? int alt33=2; int LA33_0 = input.LA(1); @@ -4061,9 +4050,9 @@ public class CMISParser extends Parser { } switch (alt33) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:511:20: NOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:634:25: NOT { - NOT102=(Token)match(input,NOT,FOLLOW_NOT_in_likePredicate1557); if (state.failed) return retval; + NOT102=(Token)match(input,NOT,FOLLOW_NOT_in_likePredicate3313); if (state.failed) return retval; if ( state.backtracking==0 ) stream_NOT.add(NOT102); @@ -4072,10 +4061,10 @@ public class CMISParser extends Parser { } - LIKE103=(Token)match(input,LIKE,FOLLOW_LIKE_in_likePredicate1560); if (state.failed) return retval; + LIKE103=(Token)match(input,LIKE,FOLLOW_LIKE_in_likePredicate3316); if (state.failed) return retval; if ( state.backtracking==0 ) stream_LIKE.add(LIKE103); - pushFollow(FOLLOW_characterStringLiteral_in_likePredicate1562); + pushFollow(FOLLOW_characterStringLiteral_in_likePredicate3318); characterStringLiteral104=characterStringLiteral(); state._fsp--; @@ -4084,7 +4073,7 @@ public class CMISParser extends Parser { // AST REWRITE - // elements: characterStringLiteral, columnReference, NOT + // elements: NOT, columnReference, characterStringLiteral // token labels: // rule labels: retval // token list labels: @@ -4095,16 +4084,16 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 512:3: -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) + // 635:17: -> ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:512:6: ^( PRED_LIKE columnReference characterStringLiteral ( NOT )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:636:25: ^( 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()); adaptor.addChild(root_1, stream_characterStringLiteral.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:512:57: ( NOT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:636:76: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4144,81 +4133,51 @@ public class CMISParser extends Parser { }; // $ANTLR start "nullPredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:515:1: nullPredicate : ( ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NULL -> ^( PRED_EXISTS columnReference NOT ) | ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL -> ^( PRED_EXISTS columnReference ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:639:1: nullPredicate : ( columnReference IS NULL -> ^( PRED_EXISTS columnReference NOT ) | columnReference IS NOT NULL -> ^( PRED_EXISTS columnReference ) ); public final CMISParser.nullPredicate_return nullPredicate() throws RecognitionException { CMISParser.nullPredicate_return retval = new CMISParser.nullPredicate_return(); retval.start = input.LT(1); Object root_0 = null; - Token IS107=null; - Token NULL108=null; - Token IS111=null; - Token NOT112=null; - Token NULL113=null; + Token IS106=null; + Token NULL107=null; + Token IS109=null; + Token NOT110=null; + Token NULL111=null; CMISParser.columnReference_return columnReference105 = null; - CMISParser.multiValuedColumnReference_return multiValuedColumnReference106 = null; - - CMISParser.columnReference_return columnReference109 = null; - - CMISParser.multiValuedColumnReference_return multiValuedColumnReference110 = null; + CMISParser.columnReference_return columnReference108 = null; - Object IS107_tree=null; - Object NULL108_tree=null; - Object IS111_tree=null; - Object NOT112_tree=null; - Object NULL113_tree=null; + Object IS106_tree=null; + Object NULL107_tree=null; + Object IS109_tree=null; + Object NOT110_tree=null; + Object NULL111_tree=null; RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT"); RewriteRuleTokenStream stream_IS=new RewriteRuleTokenStream(adaptor,"token IS"); RewriteRuleTokenStream stream_NULL=new RewriteRuleTokenStream(adaptor,"token NULL"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); - RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:516:2: ( ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NULL -> ^( PRED_EXISTS columnReference NOT ) | ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL -> ^( PRED_EXISTS columnReference ) ) - int alt36=2; - alt36 = dfa36.predict(input); - switch (alt36) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:640:9: ( columnReference IS NULL -> ^( PRED_EXISTS columnReference NOT ) | columnReference IS NOT NULL -> ^( PRED_EXISTS columnReference ) ) + int alt34=2; + alt34 = dfa34.predict(input); + switch (alt34) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:516:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NULL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:641:9: columnReference IS NULL { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:516:4: ( ( columnReference )=> columnReference | multiValuedColumnReference ) - int alt34=2; - alt34 = dfa34.predict(input); - switch (alt34) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:516:6: ( columnReference )=> columnReference - { - pushFollow(FOLLOW_columnReference_in_nullPredicate1596); - columnReference105=columnReference(); + pushFollow(FOLLOW_columnReference_in_nullPredicate3404); + columnReference105=columnReference(); - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference105.getTree()); + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_columnReference.add(columnReference105.getTree()); + IS106=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate3406); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IS.add(IS106); - } - break; - case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:516:44: multiValuedColumnReference - { - pushFollow(FOLLOW_multiValuedColumnReference_in_nullPredicate1600); - multiValuedColumnReference106=multiValuedColumnReference(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference106.getTree()); - - } - break; - - } - - IS107=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate1603); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_IS.add(IS107); - - NULL108=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate1605); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_NULL.add(NULL108); + NULL107=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate3408); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NULL.add(NULL107); @@ -4234,9 +4193,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 517:3: -> ^( PRED_EXISTS columnReference NOT ) + // 642:17: -> ^( PRED_EXISTS columnReference NOT ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:517:6: ^( PRED_EXISTS columnReference NOT ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:643:25: ^( PRED_EXISTS columnReference NOT ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_EXISTS, "PRED_EXISTS"), root_1); @@ -4253,47 +4212,22 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:9: ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:644:11: columnReference IS NOT NULL { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:9: ( ( columnReference )=> columnReference | multiValuedColumnReference ) - int alt35=2; - alt35 = dfa35.predict(input); - switch (alt35) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:11: ( columnReference )=> columnReference - { - pushFollow(FOLLOW_columnReference_in_nullPredicate1634); - columnReference109=columnReference(); + pushFollow(FOLLOW_columnReference_in_nullPredicate3470); + columnReference108=columnReference(); - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference109.getTree()); + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_columnReference.add(columnReference108.getTree()); + IS109=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate3472); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IS.add(IS109); - } - break; - case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:49: multiValuedColumnReference - { - pushFollow(FOLLOW_multiValuedColumnReference_in_nullPredicate1638); - multiValuedColumnReference110=multiValuedColumnReference(); + NOT110=(Token)match(input,NOT,FOLLOW_NOT_in_nullPredicate3474); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NOT.add(NOT110); - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference110.getTree()); - - } - break; - - } - - IS111=(Token)match(input,IS,FOLLOW_IS_in_nullPredicate1641); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_IS.add(IS111); - - NOT112=(Token)match(input,NOT,FOLLOW_NOT_in_nullPredicate1643); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_NOT.add(NOT112); - - NULL113=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate1645); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_NULL.add(NULL113); + NULL111=(Token)match(input,NULL,FOLLOW_NULL_in_nullPredicate3476); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NULL.add(NULL111); @@ -4309,9 +4243,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 519:9: -> ^( PRED_EXISTS columnReference ) + // 645:17: -> ^( PRED_EXISTS columnReference ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:519:12: ^( PRED_EXISTS columnReference ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:646:25: ^( PRED_EXISTS columnReference ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_EXISTS, "PRED_EXISTS"), root_1); @@ -4353,55 +4287,55 @@ public class CMISParser extends Parser { }; // $ANTLR start "quantifiedComparisonPredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:522:1: quantifiedComparisonPredicate : literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:649:1: quantifiedComparisonPredicate : literalOrParameterName compOp ANY columnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) ; public final CMISParser.quantifiedComparisonPredicate_return quantifiedComparisonPredicate() throws RecognitionException { CMISParser.quantifiedComparisonPredicate_return retval = new CMISParser.quantifiedComparisonPredicate_return(); retval.start = input.LT(1); Object root_0 = null; - Token ANY116=null; - CMISParser.literalOrParameterName_return literalOrParameterName114 = null; + Token ANY114=null; + CMISParser.literalOrParameterName_return literalOrParameterName112 = null; - CMISParser.compOp_return compOp115 = null; + CMISParser.compOp_return compOp113 = null; - CMISParser.multiValuedColumnReference_return multiValuedColumnReference117 = null; + CMISParser.columnReference_return columnReference115 = null; - Object ANY116_tree=null; + Object ANY114_tree=null; RewriteRuleTokenStream stream_ANY=new RewriteRuleTokenStream(adaptor,"token ANY"); + RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_compOp=new RewriteRuleSubtreeStream(adaptor,"rule compOp"); RewriteRuleSubtreeStream stream_literalOrParameterName=new RewriteRuleSubtreeStream(adaptor,"rule literalOrParameterName"); - RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:523:2: ( literalOrParameterName compOp ANY multiValuedColumnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:523:4: literalOrParameterName compOp ANY multiValuedColumnReference + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:650:9: ( literalOrParameterName compOp ANY columnReference -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:651:9: literalOrParameterName compOp ANY columnReference { - pushFollow(FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate1673); - literalOrParameterName114=literalOrParameterName(); + pushFollow(FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate3557); + literalOrParameterName112=literalOrParameterName(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_literalOrParameterName.add(literalOrParameterName114.getTree()); - pushFollow(FOLLOW_compOp_in_quantifiedComparisonPredicate1675); - compOp115=compOp(); + if ( state.backtracking==0 ) stream_literalOrParameterName.add(literalOrParameterName112.getTree()); + pushFollow(FOLLOW_compOp_in_quantifiedComparisonPredicate3559); + compOp113=compOp(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_compOp.add(compOp115.getTree()); - ANY116=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedComparisonPredicate1677); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ANY.add(ANY116); + if ( state.backtracking==0 ) stream_compOp.add(compOp113.getTree()); + ANY114=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedComparisonPredicate3561); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ANY.add(ANY114); - pushFollow(FOLLOW_multiValuedColumnReference_in_quantifiedComparisonPredicate1679); - multiValuedColumnReference117=multiValuedColumnReference(); + pushFollow(FOLLOW_columnReference_in_quantifiedComparisonPredicate3563); + columnReference115=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference117.getTree()); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference115.getTree()); // AST REWRITE - // elements: literalOrParameterName, compOp, multiValuedColumnReference, ANY + // elements: compOp, columnReference, ANY, literalOrParameterName // token labels: // rule labels: retval // token list labels: @@ -4412,9 +4346,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 524:2: -> ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) + // 652:17: -> ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:524:5: ^( PRED_COMPARISON ANY literalOrParameterName compOp multiValuedColumnReference ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:653:25: ^( PRED_COMPARISON ANY literalOrParameterName compOp columnReference ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_COMPARISON, "PRED_COMPARISON"), root_1); @@ -4422,7 +4356,7 @@ public class CMISParser extends Parser { adaptor.addChild(root_1, stream_ANY.nextNode()); adaptor.addChild(root_1, stream_literalOrParameterName.nextTree()); adaptor.addChild(root_1, stream_compOp.nextTree()); - adaptor.addChild(root_1, stream_multiValuedColumnReference.nextTree()); + adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_0, root_1); } @@ -4457,61 +4391,61 @@ public class CMISParser extends Parser { }; // $ANTLR start "quantifiedInPredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:528:1: quantifiedInPredicate : ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:656:1: quantifiedInPredicate : ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ; public final CMISParser.quantifiedInPredicate_return quantifiedInPredicate() throws RecognitionException { CMISParser.quantifiedInPredicate_return retval = new CMISParser.quantifiedInPredicate_return(); retval.start = input.LT(1); Object root_0 = null; - Token ANY118=null; - Token NOT120=null; - Token IN121=null; - Token LPAREN122=null; - Token RPAREN124=null; - CMISParser.multiValuedColumnReference_return multiValuedColumnReference119 = null; + Token ANY116=null; + Token NOT118=null; + Token IN119=null; + Token LPAREN120=null; + Token RPAREN122=null; + CMISParser.columnReference_return columnReference117 = null; - CMISParser.inValueList_return inValueList123 = null; + CMISParser.inValueList_return inValueList121 = null; - Object ANY118_tree=null; - Object NOT120_tree=null; - Object IN121_tree=null; - Object LPAREN122_tree=null; - Object RPAREN124_tree=null; + Object ANY116_tree=null; + Object NOT118_tree=null; + Object IN119_tree=null; + Object LPAREN120_tree=null; + Object RPAREN122_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_ANY=new RewriteRuleTokenStream(adaptor,"token ANY"); RewriteRuleTokenStream stream_IN=new RewriteRuleTokenStream(adaptor,"token IN"); RewriteRuleTokenStream stream_NOT=new RewriteRuleTokenStream(adaptor,"token NOT"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); - RewriteRuleSubtreeStream stream_multiValuedColumnReference=new RewriteRuleSubtreeStream(adaptor,"rule multiValuedColumnReference"); + RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); RewriteRuleSubtreeStream stream_inValueList=new RewriteRuleSubtreeStream(adaptor,"rule inValueList"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:529:2: ( ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:529:4: ANY multiValuedColumnReference ( NOT )? IN LPAREN inValueList RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:657:9: ( ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:658:9: ANY columnReference ( NOT )? IN LPAREN inValueList RPAREN { - ANY118=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedInPredicate1708); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ANY.add(ANY118); + ANY116=(Token)match(input,ANY,FOLLOW_ANY_in_quantifiedInPredicate3650); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ANY.add(ANY116); - pushFollow(FOLLOW_multiValuedColumnReference_in_quantifiedInPredicate1710); - multiValuedColumnReference119=multiValuedColumnReference(); + pushFollow(FOLLOW_columnReference_in_quantifiedInPredicate3652); + columnReference117=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_multiValuedColumnReference.add(multiValuedColumnReference119.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:529:35: ( NOT )? - int alt37=2; - int LA37_0 = input.LA(1); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference117.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:658:29: ( NOT )? + int alt35=2; + int LA35_0 = input.LA(1); - if ( (LA37_0==NOT) ) { - alt37=1; + if ( (LA35_0==NOT) ) { + alt35=1; } - switch (alt37) { + switch (alt35) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:529:35: NOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:658:29: NOT { - NOT120=(Token)match(input,NOT,FOLLOW_NOT_in_quantifiedInPredicate1712); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_NOT.add(NOT120); + NOT118=(Token)match(input,NOT,FOLLOW_NOT_in_quantifiedInPredicate3654); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_NOT.add(NOT118); } @@ -4519,25 +4453,25 @@ public class CMISParser extends Parser { } - IN121=(Token)match(input,IN,FOLLOW_IN_in_quantifiedInPredicate1715); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_IN.add(IN121); + IN119=(Token)match(input,IN,FOLLOW_IN_in_quantifiedInPredicate3657); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IN.add(IN119); - LPAREN122=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_quantifiedInPredicate1718); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN122); + LPAREN120=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_quantifiedInPredicate3659); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN120); - pushFollow(FOLLOW_inValueList_in_quantifiedInPredicate1720); - inValueList123=inValueList(); + pushFollow(FOLLOW_inValueList_in_quantifiedInPredicate3661); + inValueList121=inValueList(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_inValueList.add(inValueList123.getTree()); - RPAREN124=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_quantifiedInPredicate1722); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN124); + if ( state.backtracking==0 ) stream_inValueList.add(inValueList121.getTree()); + RPAREN122=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_quantifiedInPredicate3663); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN122); // AST REWRITE - // elements: inValueList, ANY, multiValuedColumnReference, NOT + // elements: NOT, columnReference, ANY, inValueList // token labels: // rule labels: retval // token list labels: @@ -4548,17 +4482,17 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 530:3: -> ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) + // 659:17: -> ^( PRED_IN ANY columnReference inValueList ( NOT )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:530:6: ^( PRED_IN ANY multiValuedColumnReference inValueList ( NOT )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:660:25: ^( 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, stream_ANY.nextNode()); - adaptor.addChild(root_1, stream_multiValuedColumnReference.nextTree()); + adaptor.addChild(root_1, stream_columnReference.nextTree()); adaptor.addChild(root_1, stream_inValueList.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:530:59: ( NOT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:660:67: ( NOT )? if ( stream_NOT.hasNext() ) { adaptor.addChild(root_1, stream_NOT.nextNode()); @@ -4598,26 +4532,26 @@ public class CMISParser extends Parser { }; // $ANTLR start "textSearchPredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:533:1: textSearchPredicate : CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:663:1: textSearchPredicate : CONTAINS LPAREN ( qualifier 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); Object root_0 = null; - Token CONTAINS125=null; - Token LPAREN126=null; - Token COMMA128=null; - Token RPAREN130=null; - CMISParser.qualifier_return qualifier127 = null; + Token CONTAINS123=null; + Token LPAREN124=null; + Token COMMA126=null; + Token RPAREN128=null; + CMISParser.qualifier_return qualifier125 = null; - CMISParser.textSearchExpression_return textSearchExpression129 = null; + CMISParser.textSearchExpression_return textSearchExpression127 = null; - Object CONTAINS125_tree=null; - Object LPAREN126_tree=null; - Object COMMA128_tree=null; - Object RPAREN130_tree=null; + Object CONTAINS123_tree=null; + Object LPAREN124_tree=null; + Object COMMA126_tree=null; + Object RPAREN128_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_CONTAINS=new RewriteRuleTokenStream(adaptor,"token CONTAINS"); @@ -4625,37 +4559,37 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_textSearchExpression=new RewriteRuleSubtreeStream(adaptor,"rule textSearchExpression"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:534:2: ( CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:534:4: CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:664:9: ( CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN -> ^( PRED_FTS textSearchExpression ( qualifier )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:665:9: CONTAINS LPAREN ( qualifier COMMA )? textSearchExpression RPAREN { - CONTAINS125=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_textSearchPredicate1751); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_CONTAINS.add(CONTAINS125); + CONTAINS123=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_textSearchPredicate3751); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_CONTAINS.add(CONTAINS123); - LPAREN126=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_textSearchPredicate1753); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN126); + LPAREN124=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_textSearchPredicate3753); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN124); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:534:20: ( qualifier COMMA )? - int alt38=2; - int LA38_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:665:25: ( qualifier COMMA )? + int alt36=2; + int LA36_0 = input.LA(1); - if ( (LA38_0==ID) ) { - alt38=1; + if ( (LA36_0==ID) ) { + alt36=1; } - else if ( (LA38_0==DOUBLE_QUOTE) && ((strict == false))) { - alt38=1; + else if ( (LA36_0==DOUBLE_QUOTE) && ((strict == false))) { + alt36=1; } - switch (alt38) { + switch (alt36) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:534:21: qualifier COMMA + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:665:26: qualifier COMMA { - pushFollow(FOLLOW_qualifier_in_textSearchPredicate1756); - qualifier127=qualifier(); + pushFollow(FOLLOW_qualifier_in_textSearchPredicate3756); + qualifier125=qualifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_qualifier.add(qualifier127.getTree()); - COMMA128=(Token)match(input,COMMA,FOLLOW_COMMA_in_textSearchPredicate1758); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA128); + if ( state.backtracking==0 ) stream_qualifier.add(qualifier125.getTree()); + COMMA126=(Token)match(input,COMMA,FOLLOW_COMMA_in_textSearchPredicate3758); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA126); } @@ -4663,19 +4597,19 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_textSearchExpression_in_textSearchPredicate1762); - textSearchExpression129=textSearchExpression(); + pushFollow(FOLLOW_textSearchExpression_in_textSearchPredicate3762); + textSearchExpression127=textSearchExpression(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_textSearchExpression.add(textSearchExpression129.getTree()); - RPAREN130=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_textSearchPredicate1764); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN130); + if ( state.backtracking==0 ) stream_textSearchExpression.add(textSearchExpression127.getTree()); + RPAREN128=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_textSearchPredicate3764); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN128); // AST REWRITE - // elements: qualifier, textSearchExpression + // elements: textSearchExpression, qualifier // token labels: // rule labels: retval // token list labels: @@ -4686,15 +4620,15 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 535:3: -> ^( PRED_FTS textSearchExpression ( qualifier )? ) + // 666:17: -> ^( PRED_FTS textSearchExpression ( qualifier )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:535:6: ^( PRED_FTS textSearchExpression ( qualifier )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:667:25: ^( 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()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:535:38: ( qualifier )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:667:57: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_1, stream_qualifier.nextTree()); @@ -4734,51 +4668,94 @@ public class CMISParser extends Parser { }; // $ANTLR start "folderPredicate" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:538:1: folderPredicate : ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:670:1: folderPredicate : ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ); public final CMISParser.folderPredicate_return folderPredicate() throws RecognitionException { CMISParser.folderPredicate_return retval = new CMISParser.folderPredicate_return(); retval.start = input.LT(1); Object root_0 = null; - Token IN_FOLDER131=null; - Token IN_TREE133=null; + Token IN_FOLDER129=null; + Token IN_TREE131=null; + CMISParser.folderPredicateArgs_return folderPredicateArgs130 = null; + CMISParser.folderPredicateArgs_return folderPredicateArgs132 = null; - CMISParser.folderPredicateArgs_return folderPredicateArgs134 = null; - - Object IN_FOLDER131_tree=null; - Object IN_TREE133_tree=null; + Object IN_FOLDER129_tree=null; + Object IN_TREE131_tree=null; RewriteRuleTokenStream stream_IN_TREE=new RewriteRuleTokenStream(adaptor,"token IN_TREE"); RewriteRuleTokenStream stream_IN_FOLDER=new RewriteRuleTokenStream(adaptor,"token IN_FOLDER"); RewriteRuleSubtreeStream stream_folderPredicateArgs=new RewriteRuleSubtreeStream(adaptor,"rule folderPredicateArgs"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:539:2: ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ) - int alt39=2; - int LA39_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:671:9: ( IN_FOLDER folderPredicateArgs -> ^( PRED_CHILD folderPredicateArgs ) | IN_TREE folderPredicateArgs -> ^( PRED_DESCENDANT folderPredicateArgs ) ) + int alt37=2; + int LA37_0 = input.LA(1); - if ( (LA39_0==IN_FOLDER) ) { - alt39=1; + if ( (LA37_0==IN_FOLDER) ) { + alt37=1; } - else if ( (LA39_0==IN_TREE) ) { - alt39=2; + else if ( (LA37_0==IN_TREE) ) { + alt37=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 39, 0, input); + new NoViableAltException("", 37, 0, input); throw nvae; } - switch (alt39) { + switch (alt37) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:539:4: IN_FOLDER folderPredicateArgs + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:672:9: IN_FOLDER folderPredicateArgs { - IN_FOLDER131=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_folderPredicate1789); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_IN_FOLDER.add(IN_FOLDER131); + IN_FOLDER129=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_folderPredicate3848); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IN_FOLDER.add(IN_FOLDER129); - pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1792); + pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate3850); + folderPredicateArgs130=folderPredicateArgs(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_folderPredicateArgs.add(folderPredicateArgs130.getTree()); + + + // AST REWRITE + // elements: folderPredicateArgs + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 673:17: -> ^( PRED_CHILD folderPredicateArgs ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:674:25: ^( PRED_CHILD folderPredicateArgs ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_CHILD, "PRED_CHILD"), root_1); + + adaptor.addChild(root_1, stream_folderPredicateArgs.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:675:11: IN_TREE folderPredicateArgs + { + IN_TREE131=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_folderPredicate3910); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_IN_TREE.add(IN_TREE131); + + pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate3912); folderPredicateArgs132=folderPredicateArgs(); state._fsp--; @@ -4798,52 +4775,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 540:3: -> ^( PRED_CHILD folderPredicateArgs ) + // 676:17: -> ^( PRED_DESCENDANT folderPredicateArgs ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:540:6: ^( PRED_CHILD folderPredicateArgs ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_CHILD, "PRED_CHILD"), root_1); - - adaptor.addChild(root_1, stream_folderPredicateArgs.nextTree()); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;} - } - break; - case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:541:10: IN_TREE folderPredicateArgs - { - IN_TREE133=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_folderPredicate1813); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_IN_TREE.add(IN_TREE133); - - pushFollow(FOLLOW_folderPredicateArgs_in_folderPredicate1815); - folderPredicateArgs134=folderPredicateArgs(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_folderPredicateArgs.add(folderPredicateArgs134.getTree()); - - - // AST REWRITE - // elements: folderPredicateArgs - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 542:3: -> ^( PRED_DESCENDANT folderPredicateArgs ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:542:6: ^( PRED_DESCENDANT folderPredicateArgs ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:677:25: ^( PRED_DESCENDANT folderPredicateArgs ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PRED_DESCENDANT, "PRED_DESCENDANT"), root_1); @@ -4885,58 +4819,58 @@ public class CMISParser extends Parser { }; // $ANTLR start "folderPredicateArgs" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:545:1: folderPredicateArgs : LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:680:1: folderPredicateArgs : LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ; public final CMISParser.folderPredicateArgs_return folderPredicateArgs() throws RecognitionException { CMISParser.folderPredicateArgs_return retval = new CMISParser.folderPredicateArgs_return(); retval.start = input.LT(1); Object root_0 = null; - Token LPAREN135=null; - Token COMMA137=null; - Token RPAREN139=null; - CMISParser.qualifier_return qualifier136 = null; + Token LPAREN133=null; + Token COMMA135=null; + Token RPAREN137=null; + CMISParser.qualifier_return qualifier134 = null; - CMISParser.folderId_return folderId138 = null; + CMISParser.folderId_return folderId136 = null; - Object LPAREN135_tree=null; - Object COMMA137_tree=null; - Object RPAREN139_tree=null; + Object LPAREN133_tree=null; + Object COMMA135_tree=null; + Object RPAREN137_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_qualifier=new RewriteRuleSubtreeStream(adaptor,"rule qualifier"); RewriteRuleSubtreeStream stream_folderId=new RewriteRuleSubtreeStream(adaptor,"rule folderId"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:546:2: ( LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:546:4: LPAREN ( qualifier COMMA )? folderId RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:681:9: ( LPAREN ( qualifier COMMA )? folderId RPAREN -> folderId ( qualifier )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:682:9: LPAREN ( qualifier COMMA )? folderId RPAREN { - LPAREN135=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_folderPredicateArgs1837); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN135); + LPAREN133=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_folderPredicateArgs3993); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN133); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:546:11: ( qualifier COMMA )? - int alt40=2; - int LA40_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:682:16: ( qualifier COMMA )? + int alt38=2; + int LA38_0 = input.LA(1); - if ( (LA40_0==ID) ) { - alt40=1; + if ( (LA38_0==ID) ) { + alt38=1; } - else if ( (LA40_0==DOUBLE_QUOTE) && ((strict == false))) { - alt40=1; + else if ( (LA38_0==DOUBLE_QUOTE) && ((strict == false))) { + alt38=1; } - switch (alt40) { + switch (alt38) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:546:12: qualifier COMMA + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:682:17: qualifier COMMA { - pushFollow(FOLLOW_qualifier_in_folderPredicateArgs1840); - qualifier136=qualifier(); + pushFollow(FOLLOW_qualifier_in_folderPredicateArgs3996); + qualifier134=qualifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_qualifier.add(qualifier136.getTree()); - COMMA137=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs1842); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA137); + if ( state.backtracking==0 ) stream_qualifier.add(qualifier134.getTree()); + COMMA135=(Token)match(input,COMMA,FOLLOW_COMMA_in_folderPredicateArgs3998); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA135); } @@ -4944,14 +4878,14 @@ public class CMISParser extends Parser { } - pushFollow(FOLLOW_folderId_in_folderPredicateArgs1846); - folderId138=folderId(); + pushFollow(FOLLOW_folderId_in_folderPredicateArgs4002); + folderId136=folderId(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_folderId.add(folderId138.getTree()); - RPAREN139=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_folderPredicateArgs1848); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN139); + if ( state.backtracking==0 ) stream_folderId.add(folderId136.getTree()); + RPAREN137=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_folderPredicateArgs4004); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN137); @@ -4967,10 +4901,10 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 547:3: -> folderId ( qualifier )? + // 683:17: -> folderId ( qualifier )? { adaptor.addChild(root_0, stream_folderId.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:547:15: ( qualifier )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:683:29: ( qualifier )? if ( stream_qualifier.hasNext() ) { adaptor.addChild(root_0, stream_qualifier.nextTree()); @@ -5007,75 +4941,77 @@ public class CMISParser extends Parser { }; // $ANTLR start "orderByClause" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:550:1: orderByClause : ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:686:1: orderByClause : ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ; public final CMISParser.orderByClause_return orderByClause() throws RecognitionException { CMISParser.orderByClause_return retval = new CMISParser.orderByClause_return(); retval.start = input.LT(1); Object root_0 = null; - Token ORDER140=null; - Token BY141=null; - Token COMMA143=null; + Token ORDER138=null; + Token BY139=null; + Token COMMA141=null; + CMISParser.sortSpecification_return sortSpecification140 = null; + CMISParser.sortSpecification_return sortSpecification142 = null; - CMISParser.sortSpecification_return sortSpecification144 = null; - - Object ORDER140_tree=null; - Object BY141_tree=null; - Object COMMA143_tree=null; + Object ORDER138_tree=null; + Object BY139_tree=null; + Object COMMA141_tree=null; RewriteRuleTokenStream stream_BY=new RewriteRuleTokenStream(adaptor,"token BY"); RewriteRuleTokenStream stream_ORDER=new RewriteRuleTokenStream(adaptor,"token ORDER"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleSubtreeStream stream_sortSpecification=new RewriteRuleSubtreeStream(adaptor,"rule sortSpecification"); + paraphrases.push("in order by"); + try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:2: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:4: ORDER BY sortSpecification ( COMMA sortSpecification )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:695:9: ( ORDER BY sortSpecification ( COMMA sortSpecification )* -> ^( ORDER ( sortSpecification )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:696:9: ORDER BY sortSpecification ( COMMA sortSpecification )* { - ORDER140=(Token)match(input,ORDER,FOLLOW_ORDER_in_orderByClause1887); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ORDER.add(ORDER140); + ORDER138=(Token)match(input,ORDER,FOLLOW_ORDER_in_orderByClause4070); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ORDER.add(ORDER138); - BY141=(Token)match(input,BY,FOLLOW_BY_in_orderByClause1889); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_BY.add(BY141); + BY139=(Token)match(input,BY,FOLLOW_BY_in_orderByClause4072); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BY.add(BY139); - pushFollow(FOLLOW_sortSpecification_in_orderByClause1891); - sortSpecification142=sortSpecification(); + pushFollow(FOLLOW_sortSpecification_in_orderByClause4074); + sortSpecification140=sortSpecification(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification142.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:31: ( COMMA sortSpecification )* - loop41: + if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification140.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:696:36: ( COMMA sortSpecification )* + loop39: do { - int alt41=2; - int LA41_0 = input.LA(1); + int alt39=2; + int LA39_0 = input.LA(1); - if ( (LA41_0==COMMA) ) { - alt41=1; + if ( (LA39_0==COMMA) ) { + alt39=1; } - switch (alt41) { + switch (alt39) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:553:33: COMMA sortSpecification + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:696:37: COMMA sortSpecification { - COMMA143=(Token)match(input,COMMA,FOLLOW_COMMA_in_orderByClause1895); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA143); + COMMA141=(Token)match(input,COMMA,FOLLOW_COMMA_in_orderByClause4077); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA141); - pushFollow(FOLLOW_sortSpecification_in_orderByClause1897); - sortSpecification144=sortSpecification(); + pushFollow(FOLLOW_sortSpecification_in_orderByClause4079); + sortSpecification142=sortSpecification(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification144.getTree()); + if ( state.backtracking==0 ) stream_sortSpecification.add(sortSpecification142.getTree()); } break; default : - break loop41; + break loop39; } } while (true); @@ -5093,9 +5029,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 554:3: -> ^( ORDER ( sortSpecification )+ ) + // 697:17: -> ^( ORDER ( sortSpecification )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:554:6: ^( ORDER ( sortSpecification )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:698:25: ^( ORDER ( sortSpecification )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_ORDER.nextNode(), root_1); @@ -5125,7 +5061,9 @@ public class CMISParser extends Parser { adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); } if ( state.backtracking==0 ) { + paraphrases.pop(); + } } @@ -5145,7 +5083,7 @@ public class CMISParser extends Parser { }; // $ANTLR start "sortSpecification" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:557:1: sortSpecification : ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:701: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); @@ -5153,9 +5091,9 @@ public class CMISParser extends Parser { Object root_0 = null; Token by=null; - CMISParser.columnReference_return columnReference145 = null; + CMISParser.columnReference_return columnReference143 = null; - CMISParser.columnReference_return columnReference146 = null; + CMISParser.columnReference_return columnReference144 = null; Object by_tree=null; @@ -5163,19 +5101,19 @@ public class CMISParser extends Parser { RewriteRuleTokenStream stream_DESC=new RewriteRuleTokenStream(adaptor,"token DESC"); RewriteRuleSubtreeStream stream_columnReference=new RewriteRuleSubtreeStream(adaptor,"rule columnReference"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:558:2: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) - int alt43=2; - alt43 = dfa43.predict(input); - switch (alt43) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:702:9: ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) ) + int alt41=2; + alt41 = dfa41.predict(input); + switch (alt41) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:558:4: columnReference + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:703:9: columnReference { - pushFollow(FOLLOW_columnReference_in_sortSpecification1923); - columnReference145=columnReference(); + pushFollow(FOLLOW_columnReference_in_sortSpecification4163); + columnReference143=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference145.getTree()); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference143.getTree()); // AST REWRITE @@ -5190,9 +5128,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 559:3: -> ^( SORT_SPECIFICATION columnReference ASC ) + // 704:17: -> ^( SORT_SPECIFICATION columnReference ASC ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:559:6: ^( SORT_SPECIFICATION columnReference ASC ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:705:25: ^( SORT_SPECIFICATION columnReference ASC ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); @@ -5209,45 +5147,45 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:560:4: columnReference (by= ASC | by= DESC ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:706:11: columnReference (by= ASC | by= DESC ) { - pushFollow(FOLLOW_columnReference_in_sortSpecification1941); - columnReference146=columnReference(); + pushFollow(FOLLOW_columnReference_in_sortSpecification4225); + columnReference144=columnReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_columnReference.add(columnReference146.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:560:20: (by= ASC | by= DESC ) - int alt42=2; - int LA42_0 = input.LA(1); + if ( state.backtracking==0 ) stream_columnReference.add(columnReference144.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:707:9: (by= ASC | by= DESC ) + int alt40=2; + int LA40_0 = input.LA(1); - if ( (LA42_0==ASC) ) { - alt42=1; + if ( (LA40_0==ASC) ) { + alt40=1; } - else if ( (LA42_0==DESC) ) { - alt42=2; + else if ( (LA40_0==DESC) ) { + alt40=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 42, 0, input); + new NoViableAltException("", 40, 0, input); throw nvae; } - switch (alt42) { + switch (alt40) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:560:22: by= ASC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:708:17: by= ASC { - by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification1947); if (state.failed) return retval; + by=(Token)match(input,ASC,FOLLOW_ASC_in_sortSpecification4255); if (state.failed) return retval; if ( state.backtracking==0 ) stream_ASC.add(by); } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:560:31: by= DESC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:709:19: by= DESC { - by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification1953); if (state.failed) return retval; + by=(Token)match(input,DESC,FOLLOW_DESC_in_sortSpecification4277); if (state.failed) return retval; if ( state.backtracking==0 ) stream_DESC.add(by); @@ -5271,9 +5209,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 561:3: -> ^( SORT_SPECIFICATION columnReference $by) + // 711:17: -> ^( SORT_SPECIFICATION columnReference $by) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:561:6: ^( SORT_SPECIFICATION columnReference $by) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:712:25: ^( SORT_SPECIFICATION columnReference $by) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SORT_SPECIFICATION, "SORT_SPECIFICATION"), root_1); @@ -5316,29 +5254,29 @@ public class CMISParser extends Parser { }; // $ANTLR start "correlationName" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:564:1: correlationName : identifier ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:715:1: correlationName : identifier ; public final CMISParser.correlationName_return correlationName() throws RecognitionException { CMISParser.correlationName_return retval = new CMISParser.correlationName_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.identifier_return identifier147 = null; + CMISParser.identifier_return identifier145 = null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:565:2: ( identifier ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:565:4: identifier + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:716:9: ( identifier ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:717:9: identifier { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_identifier_in_correlationName1980); - identifier147=identifier(); + pushFollow(FOLLOW_identifier_in_correlationName4371); + identifier145=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, identifier147.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, identifier145.getTree()); } @@ -5367,27 +5305,27 @@ public class CMISParser extends Parser { }; // $ANTLR start "tableName" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:572:1: tableName : identifier -> identifier ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:725:1: tableName : identifier -> identifier ; public final CMISParser.tableName_return tableName() throws RecognitionException { CMISParser.tableName_return retval = new CMISParser.tableName_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.identifier_return identifier148 = null; + CMISParser.identifier_return identifier146 = null; RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:573:2: ( identifier -> identifier ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:573:4: identifier + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:726:9: ( identifier -> identifier ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:727:9: identifier { - pushFollow(FOLLOW_identifier_in_tableName1994); - identifier148=identifier(); + pushFollow(FOLLOW_identifier_in_tableName4407); + identifier146=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier148.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier146.getTree()); // AST REWRITE @@ -5402,7 +5340,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 574:3: -> identifier + // 728:17: -> identifier { adaptor.addChild(root_0, stream_identifier.nextTree()); @@ -5436,27 +5374,27 @@ public class CMISParser extends Parser { }; // $ANTLR start "columnName" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:577:1: columnName : identifier -> identifier ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:731:1: columnName : identifier -> identifier ; public final CMISParser.columnName_return columnName() throws RecognitionException { CMISParser.columnName_return retval = new CMISParser.columnName_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.identifier_return identifier149 = null; + CMISParser.identifier_return identifier147 = null; RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:578:2: ( identifier -> identifier ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:578:4: identifier + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:732:9: ( identifier -> identifier ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:733:9: identifier { - pushFollow(FOLLOW_identifier_in_columnName2012); - identifier149=identifier(); + pushFollow(FOLLOW_identifier_in_columnName4460); + identifier147=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier149.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier147.getTree()); // AST REWRITE @@ -5471,7 +5409,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 579:3: -> identifier + // 734:17: -> identifier { adaptor.addChild(root_0, stream_identifier.nextTree()); @@ -5499,108 +5437,39 @@ public class CMISParser extends Parser { } // $ANTLR end "columnName" - public static class multiValuedColumnName_return extends ParserRuleReturnScope { - Object tree; - public Object getTree() { return tree; } - }; - - // $ANTLR start "multiValuedColumnName" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:582:1: multiValuedColumnName : identifier -> identifier ; - public final CMISParser.multiValuedColumnName_return multiValuedColumnName() throws RecognitionException { - CMISParser.multiValuedColumnName_return retval = new CMISParser.multiValuedColumnName_return(); - retval.start = input.LT(1); - - Object root_0 = null; - - CMISParser.identifier_return identifier150 = null; - - - RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); - try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:583:2: ( identifier -> identifier ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:583:4: identifier - { - pushFollow(FOLLOW_identifier_in_multiValuedColumnName2031); - identifier150=identifier(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier150.getTree()); - - - // AST REWRITE - // elements: identifier - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 584:3: -> identifier - { - adaptor.addChild(root_0, stream_identifier.nextTree()); - - } - - retval.tree = root_0;} - } - - retval.stop = input.LT(-1); - - if ( state.backtracking==0 ) { - - retval.tree = (Object)adaptor.rulePostProcessing(root_0); - adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop); - } - } - - catch(RecognitionException e) - { - throw new CMISQueryException(getErrorString(e), e); - } - finally { - } - return retval; - } - // $ANTLR end "multiValuedColumnName" - public static class parameterName_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; // $ANTLR start "parameterName" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:587:1: parameterName : COLON identifier -> ^( PARAMETER identifier ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:737:1: parameterName : COLON identifier -> ^( PARAMETER identifier ) ; public final CMISParser.parameterName_return parameterName() throws RecognitionException { CMISParser.parameterName_return retval = new CMISParser.parameterName_return(); retval.start = input.LT(1); Object root_0 = null; - Token COLON151=null; - CMISParser.identifier_return identifier152 = null; + Token COLON148=null; + CMISParser.identifier_return identifier149 = null; - Object COLON151_tree=null; + Object COLON148_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:588:2: ( COLON identifier -> ^( PARAMETER identifier ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:588:4: COLON identifier + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:738:9: ( COLON identifier -> ^( PARAMETER identifier ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:739:9: COLON identifier { - COLON151=(Token)match(input,COLON,FOLLOW_COLON_in_parameterName2049); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COLON.add(COLON151); + COLON148=(Token)match(input,COLON,FOLLOW_COLON_in_parameterName4513); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COLON.add(COLON148); - pushFollow(FOLLOW_identifier_in_parameterName2051); - identifier152=identifier(); + pushFollow(FOLLOW_identifier_in_parameterName4515); + identifier149=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier152.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier149.getTree()); // AST REWRITE @@ -5615,9 +5484,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 589:3: -> ^( PARAMETER identifier ) + // 740:17: -> ^( PARAMETER identifier ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:589:6: ^( PARAMETER identifier ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:741:25: ^( PARAMETER identifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PARAMETER, "PARAMETER"), root_1); @@ -5657,27 +5526,27 @@ public class CMISParser extends Parser { }; // $ANTLR start "folderId" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:592:1: folderId : characterStringLiteral -> characterStringLiteral ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:744:1: folderId : characterStringLiteral -> characterStringLiteral ; public final CMISParser.folderId_return folderId() throws RecognitionException { CMISParser.folderId_return retval = new CMISParser.folderId_return(); retval.start = input.LT(1); Object root_0 = null; - CMISParser.characterStringLiteral_return characterStringLiteral153 = null; + CMISParser.characterStringLiteral_return characterStringLiteral150 = null; RewriteRuleSubtreeStream stream_characterStringLiteral=new RewriteRuleSubtreeStream(adaptor,"rule characterStringLiteral"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:593:3: ( characterStringLiteral -> characterStringLiteral ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:593:5: characterStringLiteral + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:745:9: ( characterStringLiteral -> characterStringLiteral ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:746:9: characterStringLiteral { - pushFollow(FOLLOW_characterStringLiteral_in_folderId2074); - characterStringLiteral153=characterStringLiteral(); + pushFollow(FOLLOW_characterStringLiteral_in_folderId4596); + characterStringLiteral150=characterStringLiteral(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_characterStringLiteral.add(characterStringLiteral153.getTree()); + if ( state.backtracking==0 ) stream_characterStringLiteral.add(characterStringLiteral150.getTree()); // AST REWRITE @@ -5692,7 +5561,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 594:4: -> characterStringLiteral + // 747:17: -> characterStringLiteral { adaptor.addChild(root_0, stream_characterStringLiteral.nextTree()); @@ -5726,27 +5595,27 @@ public class CMISParser extends Parser { }; // $ANTLR start "textSearchExpression" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:597:1: textSearchExpression : QUOTED_STRING ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:750:1: textSearchExpression : QUOTED_STRING ; public final CMISParser.textSearchExpression_return textSearchExpression() throws RecognitionException { CMISParser.textSearchExpression_return retval = new CMISParser.textSearchExpression_return(); retval.start = input.LT(1); Object root_0 = null; - Token QUOTED_STRING154=null; + Token QUOTED_STRING151=null; - Object QUOTED_STRING154_tree=null; + Object QUOTED_STRING151_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:598:2: ( QUOTED_STRING ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:598:4: QUOTED_STRING + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:751:9: ( QUOTED_STRING ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:752:9: QUOTED_STRING { root_0 = (Object)adaptor.nil(); - QUOTED_STRING154=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_textSearchExpression2095); if (state.failed) return retval; + QUOTED_STRING151=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_textSearchExpression4649); if (state.failed) return retval; if ( state.backtracking==0 ) { - QUOTED_STRING154_tree = (Object)adaptor.create(QUOTED_STRING154); - adaptor.addChild(root_0, QUOTED_STRING154_tree); + QUOTED_STRING151_tree = (Object)adaptor.create(QUOTED_STRING151); + adaptor.addChild(root_0, QUOTED_STRING151_tree); } } @@ -5776,49 +5645,49 @@ public class CMISParser extends Parser { }; // $ANTLR start "identifier" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:601:1: identifier : ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:755:1: identifier : ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ); public final CMISParser.identifier_return identifier() throws RecognitionException { CMISParser.identifier_return retval = new CMISParser.identifier_return(); retval.start = input.LT(1); Object root_0 = null; - Token ID155=null; - Token DOUBLE_QUOTE156=null; - Token DOUBLE_QUOTE158=null; - CMISParser.keyWordOrId_return keyWordOrId157 = null; + Token ID152=null; + Token DOUBLE_QUOTE153=null; + Token DOUBLE_QUOTE155=null; + CMISParser.keyWordOrId_return keyWordOrId154 = null; - Object ID155_tree=null; - Object DOUBLE_QUOTE156_tree=null; - Object DOUBLE_QUOTE158_tree=null; + Object ID152_tree=null; + Object DOUBLE_QUOTE153_tree=null; + Object DOUBLE_QUOTE155_tree=null; RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); RewriteRuleTokenStream stream_DOUBLE_QUOTE=new RewriteRuleTokenStream(adaptor,"token DOUBLE_QUOTE"); RewriteRuleSubtreeStream stream_keyWordOrId=new RewriteRuleSubtreeStream(adaptor,"rule keyWordOrId"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:602:2: ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ) - int alt44=2; - int LA44_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:756:9: ( ID -> ID | {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE -> ^( keyWordOrId ) ) + int alt42=2; + int LA42_0 = input.LA(1); - if ( (LA44_0==ID) ) { - alt44=1; + if ( (LA42_0==ID) ) { + alt42=1; } - else if ( (LA44_0==DOUBLE_QUOTE) && ((strict == false))) { - alt44=2; + else if ( (LA42_0==DOUBLE_QUOTE) && ((strict == false))) { + alt42=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 44, 0, input); + new NoViableAltException("", 42, 0, input); throw nvae; } - switch (alt44) { + switch (alt42) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:602:4: ID + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:757:9: ID { - ID155=(Token)match(input,ID,FOLLOW_ID_in_identifier2107); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ID.add(ID155); + ID152=(Token)match(input,ID,FOLLOW_ID_in_identifier4682); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ID.add(ID152); @@ -5834,7 +5703,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 603:3: -> ID + // 758:17: -> ID { adaptor.addChild(root_0, stream_ID.nextNode()); @@ -5844,23 +5713,23 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:604:4: {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:759:11: {...}? => DOUBLE_QUOTE keyWordOrId DOUBLE_QUOTE { if ( !((strict == false)) ) { if (state.backtracking>0) {state.failed=true; return retval;} throw new FailedPredicateException(input, "identifier", "strict == false"); } - DOUBLE_QUOTE156=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier2122); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE156); + DOUBLE_QUOTE153=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier4717); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE153); - pushFollow(FOLLOW_keyWordOrId_in_identifier2124); - keyWordOrId157=keyWordOrId(); + pushFollow(FOLLOW_keyWordOrId_in_identifier4719); + keyWordOrId154=keyWordOrId(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_keyWordOrId.add(keyWordOrId157.getTree()); - DOUBLE_QUOTE158=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier2126); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE158); + if ( state.backtracking==0 ) stream_keyWordOrId.add(keyWordOrId154.getTree()); + DOUBLE_QUOTE155=(Token)match(input,DOUBLE_QUOTE,FOLLOW_DOUBLE_QUOTE_in_identifier4721); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOUBLE_QUOTE.add(DOUBLE_QUOTE155); @@ -5876,9 +5745,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 605:3: -> ^( keyWordOrId ) + // 760:17: -> ^( keyWordOrId ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:605:6: ^( keyWordOrId ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:761:25: ^( keyWordOrId ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot(stream_keyWordOrId.nextNode(), root_1); @@ -5918,44 +5787,44 @@ public class CMISParser extends Parser { }; // $ANTLR start "signedNumericLiteral" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:608:1: signedNumericLiteral : ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:764:1: signedNumericLiteral : ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ); public final CMISParser.signedNumericLiteral_return signedNumericLiteral() throws RecognitionException { CMISParser.signedNumericLiteral_return retval = new CMISParser.signedNumericLiteral_return(); retval.start = input.LT(1); Object root_0 = null; - Token FLOATING_POINT_LITERAL159=null; - CMISParser.integerLiteral_return integerLiteral160 = null; + Token FLOATING_POINT_LITERAL156=null; + CMISParser.integerLiteral_return integerLiteral157 = null; - Object FLOATING_POINT_LITERAL159_tree=null; + Object FLOATING_POINT_LITERAL156_tree=null; RewriteRuleTokenStream stream_FLOATING_POINT_LITERAL=new RewriteRuleTokenStream(adaptor,"token FLOATING_POINT_LITERAL"); RewriteRuleSubtreeStream stream_integerLiteral=new RewriteRuleSubtreeStream(adaptor,"rule integerLiteral"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:609:2: ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ) - int alt45=2; - int LA45_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:765:9: ( FLOATING_POINT_LITERAL -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) | integerLiteral -> integerLiteral ) + int alt43=2; + int LA43_0 = input.LA(1); - if ( (LA45_0==FLOATING_POINT_LITERAL) ) { - alt45=1; + if ( (LA43_0==FLOATING_POINT_LITERAL) ) { + alt43=1; } - else if ( (LA45_0==DECIMAL_INTEGER_LITERAL) ) { - alt45=2; + else if ( (LA43_0==DECIMAL_INTEGER_LITERAL) ) { + alt43=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 45, 0, input); + new NoViableAltException("", 43, 0, input); throw nvae; } - switch (alt45) { + switch (alt43) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:609:4: FLOATING_POINT_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:766:9: FLOATING_POINT_LITERAL { - FLOATING_POINT_LITERAL159=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral2145); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_FLOATING_POINT_LITERAL.add(FLOATING_POINT_LITERAL159); + FLOATING_POINT_LITERAL156=(Token)match(input,FLOATING_POINT_LITERAL,FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral4800); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_FLOATING_POINT_LITERAL.add(FLOATING_POINT_LITERAL156); @@ -5971,9 +5840,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 610:3: -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) + // 767:17: -> ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:610:6: ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:768:25: ^( NUMERIC_LITERAL FLOATING_POINT_LITERAL ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NUMERIC_LITERAL, "NUMERIC_LITERAL"), root_1); @@ -5989,14 +5858,14 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:611:4: integerLiteral + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:769:11: integerLiteral { - pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral2160); - integerLiteral160=integerLiteral(); + pushFollow(FOLLOW_integerLiteral_in_signedNumericLiteral4860); + integerLiteral157=integerLiteral(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_integerLiteral.add(integerLiteral160.getTree()); + if ( state.backtracking==0 ) stream_integerLiteral.add(integerLiteral157.getTree()); // AST REWRITE @@ -6011,7 +5880,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 612:3: -> integerLiteral + // 770:17: -> integerLiteral { adaptor.addChild(root_0, stream_integerLiteral.nextTree()); @@ -6047,24 +5916,24 @@ public class CMISParser extends Parser { }; // $ANTLR start "integerLiteral" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:615:1: integerLiteral : DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:773:1: integerLiteral : DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ; public final CMISParser.integerLiteral_return integerLiteral() throws RecognitionException { CMISParser.integerLiteral_return retval = new CMISParser.integerLiteral_return(); retval.start = input.LT(1); Object root_0 = null; - Token DECIMAL_INTEGER_LITERAL161=null; + Token DECIMAL_INTEGER_LITERAL158=null; - Object DECIMAL_INTEGER_LITERAL161_tree=null; + Object DECIMAL_INTEGER_LITERAL158_tree=null; RewriteRuleTokenStream stream_DECIMAL_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_INTEGER_LITERAL"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:616:2: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:616:4: DECIMAL_INTEGER_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:774:9: ( DECIMAL_INTEGER_LITERAL -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:775:9: DECIMAL_INTEGER_LITERAL { - DECIMAL_INTEGER_LITERAL161=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral2179); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL161); + DECIMAL_INTEGER_LITERAL158=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral4913); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL158); @@ -6080,9 +5949,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 617:3: -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) + // 776:17: -> ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:617:6: ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:777:25: ^( NUMERIC_LITERAL DECIMAL_INTEGER_LITERAL ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NUMERIC_LITERAL, "NUMERIC_LITERAL"), root_1); @@ -6122,45 +5991,45 @@ public class CMISParser extends Parser { }; // $ANTLR start "booleanLiteral" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:620:1: booleanLiteral : ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:780:1: booleanLiteral : ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ); public final CMISParser.booleanLiteral_return booleanLiteral() throws RecognitionException { CMISParser.booleanLiteral_return retval = new CMISParser.booleanLiteral_return(); retval.start = input.LT(1); Object root_0 = null; - Token TRUE162=null; - Token FALSE163=null; + Token TRUE159=null; + Token FALSE160=null; - Object TRUE162_tree=null; - Object FALSE163_tree=null; + Object TRUE159_tree=null; + Object FALSE160_tree=null; RewriteRuleTokenStream stream_FALSE=new RewriteRuleTokenStream(adaptor,"token FALSE"); RewriteRuleTokenStream stream_TRUE=new RewriteRuleTokenStream(adaptor,"token TRUE"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:3: ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ) - int alt46=2; - int LA46_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:781:9: ( TRUE -> ^( BOOLEAN_LITERAL TRUE ) | FALSE -> ^( BOOLEAN_LITERAL FALSE ) ) + int alt44=2; + int LA44_0 = input.LA(1); - if ( (LA46_0==TRUE) ) { - alt46=1; + if ( (LA44_0==TRUE) ) { + alt44=1; } - else if ( (LA46_0==FALSE) ) { - alt46=2; + else if ( (LA44_0==FALSE) ) { + alt44=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 46, 0, input); + new NoViableAltException("", 44, 0, input); throw nvae; } - switch (alt46) { + switch (alt44) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:621:5: TRUE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:782:9: TRUE { - TRUE162=(Token)match(input,TRUE,FOLLOW_TRUE_in_booleanLiteral2203); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_TRUE.add(TRUE162); + TRUE159=(Token)match(input,TRUE,FOLLOW_TRUE_in_booleanLiteral4994); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TRUE.add(TRUE159); @@ -6176,9 +6045,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 622:3: -> ^( BOOLEAN_LITERAL TRUE ) + // 783:17: -> ^( BOOLEAN_LITERAL TRUE ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:622:7: ^( BOOLEAN_LITERAL TRUE ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:784:25: ^( BOOLEAN_LITERAL TRUE ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOOLEAN_LITERAL, "BOOLEAN_LITERAL"), root_1); @@ -6194,10 +6063,10 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:623:5: FALSE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:785:11: FALSE { - FALSE163=(Token)match(input,FALSE,FOLLOW_FALSE_in_booleanLiteral2221); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_FALSE.add(FALSE163); + FALSE160=(Token)match(input,FALSE,FOLLOW_FALSE_in_booleanLiteral5054); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_FALSE.add(FALSE160); @@ -6213,9 +6082,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 624:3: -> ^( BOOLEAN_LITERAL FALSE ) + // 786:17: -> ^( BOOLEAN_LITERAL FALSE ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:624:7: ^( BOOLEAN_LITERAL FALSE ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:787:25: ^( BOOLEAN_LITERAL FALSE ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOOLEAN_LITERAL, "BOOLEAN_LITERAL"), root_1); @@ -6257,30 +6126,30 @@ public class CMISParser extends Parser { }; // $ANTLR start "datetimeLiteral" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:627:1: datetimeLiteral : TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:790:1: datetimeLiteral : TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ; public final CMISParser.datetimeLiteral_return datetimeLiteral() throws RecognitionException { CMISParser.datetimeLiteral_return retval = new CMISParser.datetimeLiteral_return(); retval.start = input.LT(1); Object root_0 = null; - Token TIMESTAMP164=null; - Token QUOTED_STRING165=null; + Token TIMESTAMP161=null; + Token QUOTED_STRING162=null; - Object TIMESTAMP164_tree=null; - Object QUOTED_STRING165_tree=null; + Object TIMESTAMP161_tree=null; + Object QUOTED_STRING162_tree=null; RewriteRuleTokenStream stream_QUOTED_STRING=new RewriteRuleTokenStream(adaptor,"token QUOTED_STRING"); RewriteRuleTokenStream stream_TIMESTAMP=new RewriteRuleTokenStream(adaptor,"token TIMESTAMP"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:3: ( TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:628:5: TIMESTAMP QUOTED_STRING + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:791:9: ( TIMESTAMP QUOTED_STRING -> ^( DATETIME_LITERAL QUOTED_STRING ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:792:9: TIMESTAMP QUOTED_STRING { - TIMESTAMP164=(Token)match(input,TIMESTAMP,FOLLOW_TIMESTAMP_in_datetimeLiteral2246); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_TIMESTAMP.add(TIMESTAMP164); + TIMESTAMP161=(Token)match(input,TIMESTAMP,FOLLOW_TIMESTAMP_in_datetimeLiteral5135); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TIMESTAMP.add(TIMESTAMP161); - QUOTED_STRING165=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_datetimeLiteral2248); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING165); + QUOTED_STRING162=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_datetimeLiteral5137); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING162); @@ -6296,9 +6165,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 629:3: -> ^( DATETIME_LITERAL QUOTED_STRING ) + // 793:17: -> ^( DATETIME_LITERAL QUOTED_STRING ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:629:6: ^( DATETIME_LITERAL QUOTED_STRING ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:794:25: ^( DATETIME_LITERAL QUOTED_STRING ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DATETIME_LITERAL, "DATETIME_LITERAL"), root_1); @@ -6338,24 +6207,24 @@ public class CMISParser extends Parser { }; // $ANTLR start "characterStringLiteral" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:632:1: characterStringLiteral : QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:797:1: characterStringLiteral : QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ; public final CMISParser.characterStringLiteral_return characterStringLiteral() throws RecognitionException { CMISParser.characterStringLiteral_return retval = new CMISParser.characterStringLiteral_return(); retval.start = input.LT(1); Object root_0 = null; - Token QUOTED_STRING166=null; + Token QUOTED_STRING163=null; - Object QUOTED_STRING166_tree=null; + Object QUOTED_STRING163_tree=null; RewriteRuleTokenStream stream_QUOTED_STRING=new RewriteRuleTokenStream(adaptor,"token QUOTED_STRING"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:633:2: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:633:4: QUOTED_STRING + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:798:9: ( QUOTED_STRING -> ^( STRING_LITERAL QUOTED_STRING ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:799:9: QUOTED_STRING { - QUOTED_STRING166=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_characterStringLiteral2271); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING166); + QUOTED_STRING163=(Token)match(input,QUOTED_STRING,FOLLOW_QUOTED_STRING_in_characterStringLiteral5218); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_QUOTED_STRING.add(QUOTED_STRING163); @@ -6371,9 +6240,9 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 634:3: -> ^( STRING_LITERAL QUOTED_STRING ) + // 800:17: -> ^( STRING_LITERAL QUOTED_STRING ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:634:6: ^( STRING_LITERAL QUOTED_STRING ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:801:25: ^( STRING_LITERAL QUOTED_STRING ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(STRING_LITERAL, "STRING_LITERAL"), root_1); @@ -6413,586 +6282,586 @@ public class CMISParser extends Parser { }; // $ANTLR start "keyWord" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:638:1: keyWord : ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:804:1: keyWord : ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ); public final CMISParser.keyWord_return keyWord() throws RecognitionException { CMISParser.keyWord_return retval = new CMISParser.keyWord_return(); retval.start = input.LT(1); Object root_0 = null; - Token SELECT167=null; - Token AS168=null; - Token FROM169=null; - Token JOIN170=null; - Token INNER171=null; - Token LEFT172=null; - Token OUTER173=null; - Token ON174=null; - Token WHERE175=null; - Token OR176=null; - Token AND177=null; - Token NOT178=null; - Token IN179=null; - Token LIKE180=null; - Token IS181=null; - Token NULL182=null; - Token ANY183=null; - Token CONTAINS184=null; - Token IN_FOLDER185=null; - Token IN_TREE186=null; - Token ORDER187=null; - Token BY188=null; - Token ASC189=null; - Token DESC190=null; - Token TIMESTAMP191=null; - Token TRUE192=null; - Token FALSE193=null; - CMISParser.cmisFunction_return cmisFunction194 = null; + Token SELECT164=null; + Token AS165=null; + Token FROM166=null; + Token JOIN167=null; + Token INNER168=null; + Token LEFT169=null; + Token OUTER170=null; + Token ON171=null; + Token WHERE172=null; + Token OR173=null; + Token AND174=null; + Token NOT175=null; + Token IN176=null; + Token LIKE177=null; + Token IS178=null; + Token NULL179=null; + Token ANY180=null; + Token CONTAINS181=null; + Token IN_FOLDER182=null; + Token IN_TREE183=null; + Token ORDER184=null; + Token BY185=null; + Token ASC186=null; + Token DESC187=null; + Token TIMESTAMP188=null; + Token TRUE189=null; + Token FALSE190=null; + CMISParser.cmisFunction_return cmisFunction191 = null; - Object SELECT167_tree=null; - Object AS168_tree=null; - Object FROM169_tree=null; - Object JOIN170_tree=null; - Object INNER171_tree=null; - Object LEFT172_tree=null; - Object OUTER173_tree=null; - Object ON174_tree=null; - Object WHERE175_tree=null; - Object OR176_tree=null; - Object AND177_tree=null; - Object NOT178_tree=null; - Object IN179_tree=null; - Object LIKE180_tree=null; - Object IS181_tree=null; - Object NULL182_tree=null; - Object ANY183_tree=null; - Object CONTAINS184_tree=null; - Object IN_FOLDER185_tree=null; - Object IN_TREE186_tree=null; - Object ORDER187_tree=null; - Object BY188_tree=null; - Object ASC189_tree=null; - Object DESC190_tree=null; - Object TIMESTAMP191_tree=null; - Object TRUE192_tree=null; - Object FALSE193_tree=null; + Object SELECT164_tree=null; + Object AS165_tree=null; + Object FROM166_tree=null; + Object JOIN167_tree=null; + Object INNER168_tree=null; + Object LEFT169_tree=null; + Object OUTER170_tree=null; + Object ON171_tree=null; + Object WHERE172_tree=null; + Object OR173_tree=null; + Object AND174_tree=null; + Object NOT175_tree=null; + Object IN176_tree=null; + Object LIKE177_tree=null; + Object IS178_tree=null; + Object NULL179_tree=null; + Object ANY180_tree=null; + Object CONTAINS181_tree=null; + Object IN_FOLDER182_tree=null; + Object IN_TREE183_tree=null; + Object ORDER184_tree=null; + Object BY185_tree=null; + Object ASC186_tree=null; + Object DESC187_tree=null; + Object TIMESTAMP188_tree=null; + Object TRUE189_tree=null; + Object FALSE190_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:639:3: ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ) - int alt47=28; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:805:9: ( SELECT | AS | FROM | JOIN | INNER | LEFT | OUTER | ON | WHERE | OR | AND | NOT | IN | LIKE | IS | NULL | ANY | CONTAINS | IN_FOLDER | IN_TREE | ORDER | BY | ASC | DESC | TIMESTAMP | TRUE | FALSE | cmisFunction ) + int alt45=28; switch ( input.LA(1) ) { case SELECT: { - alt47=1; + alt45=1; } break; case AS: { - alt47=2; + alt45=2; } break; case FROM: { - alt47=3; + alt45=3; } break; case JOIN: { - alt47=4; + alt45=4; } break; case INNER: { - alt47=5; + alt45=5; } break; case LEFT: { - alt47=6; + alt45=6; } break; case OUTER: { - alt47=7; + alt45=7; } break; case ON: { - alt47=8; + alt45=8; } break; case WHERE: { - alt47=9; + alt45=9; } break; case OR: { - alt47=10; + alt45=10; } break; case AND: { - alt47=11; + alt45=11; } break; case NOT: { - alt47=12; + alt45=12; } break; case IN: { - alt47=13; + alt45=13; } break; case LIKE: { - alt47=14; + alt45=14; } break; case IS: { - alt47=15; + alt45=15; } break; case NULL: { - alt47=16; + alt45=16; } break; case ANY: { - alt47=17; + alt45=17; } break; case CONTAINS: { - alt47=18; + alt45=18; } break; case IN_FOLDER: { - alt47=19; + alt45=19; } break; case IN_TREE: { - alt47=20; + alt45=20; } break; case ORDER: { - alt47=21; + alt45=21; } break; case BY: { - alt47=22; + alt45=22; } break; case ASC: { - alt47=23; + alt45=23; } break; case DESC: { - alt47=24; + alt45=24; } break; case TIMESTAMP: { - alt47=25; + alt45=25; } break; case TRUE: { - alt47=26; + alt45=26; } break; case FALSE: { - alt47=27; + alt45=27; } break; case SCORE: { - alt47=28; + alt45=28; } break; default: if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 47, 0, input); + new NoViableAltException("", 45, 0, input); throw nvae; } - switch (alt47) { + switch (alt45) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:639:5: SELECT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:806:9: SELECT { root_0 = (Object)adaptor.nil(); - SELECT167=(Token)match(input,SELECT,FOLLOW_SELECT_in_keyWord2297); if (state.failed) return retval; + SELECT164=(Token)match(input,SELECT,FOLLOW_SELECT_in_keyWord5299); if (state.failed) return retval; if ( state.backtracking==0 ) { - SELECT167_tree = (Object)adaptor.create(SELECT167); - adaptor.addChild(root_0, SELECT167_tree); + SELECT164_tree = (Object)adaptor.create(SELECT164); + adaptor.addChild(root_0, SELECT164_tree); } } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:640:4: AS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:807:11: AS { root_0 = (Object)adaptor.nil(); - AS168=(Token)match(input,AS,FOLLOW_AS_in_keyWord2302); if (state.failed) return retval; + AS165=(Token)match(input,AS,FOLLOW_AS_in_keyWord5311); if (state.failed) return retval; if ( state.backtracking==0 ) { - AS168_tree = (Object)adaptor.create(AS168); - adaptor.addChild(root_0, AS168_tree); + AS165_tree = (Object)adaptor.create(AS165); + adaptor.addChild(root_0, AS165_tree); } } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:641:4: FROM + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:808:11: FROM { root_0 = (Object)adaptor.nil(); - FROM169=(Token)match(input,FROM,FOLLOW_FROM_in_keyWord2307); if (state.failed) return retval; + FROM166=(Token)match(input,FROM,FOLLOW_FROM_in_keyWord5323); if (state.failed) return retval; if ( state.backtracking==0 ) { - FROM169_tree = (Object)adaptor.create(FROM169); - adaptor.addChild(root_0, FROM169_tree); + FROM166_tree = (Object)adaptor.create(FROM166); + adaptor.addChild(root_0, FROM166_tree); } } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:642:4: JOIN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:809:11: JOIN { root_0 = (Object)adaptor.nil(); - JOIN170=(Token)match(input,JOIN,FOLLOW_JOIN_in_keyWord2313); if (state.failed) return retval; + JOIN167=(Token)match(input,JOIN,FOLLOW_JOIN_in_keyWord5335); if (state.failed) return retval; if ( state.backtracking==0 ) { - JOIN170_tree = (Object)adaptor.create(JOIN170); - adaptor.addChild(root_0, JOIN170_tree); + JOIN167_tree = (Object)adaptor.create(JOIN167); + adaptor.addChild(root_0, JOIN167_tree); } } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:643:4: INNER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:810:11: INNER { root_0 = (Object)adaptor.nil(); - INNER171=(Token)match(input,INNER,FOLLOW_INNER_in_keyWord2319); if (state.failed) return retval; + INNER168=(Token)match(input,INNER,FOLLOW_INNER_in_keyWord5347); if (state.failed) return retval; if ( state.backtracking==0 ) { - INNER171_tree = (Object)adaptor.create(INNER171); - adaptor.addChild(root_0, INNER171_tree); + INNER168_tree = (Object)adaptor.create(INNER168); + adaptor.addChild(root_0, INNER168_tree); } } break; case 6 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:644:4: LEFT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:811:11: LEFT { root_0 = (Object)adaptor.nil(); - LEFT172=(Token)match(input,LEFT,FOLLOW_LEFT_in_keyWord2325); if (state.failed) return retval; + LEFT169=(Token)match(input,LEFT,FOLLOW_LEFT_in_keyWord5359); if (state.failed) return retval; if ( state.backtracking==0 ) { - LEFT172_tree = (Object)adaptor.create(LEFT172); - adaptor.addChild(root_0, LEFT172_tree); + LEFT169_tree = (Object)adaptor.create(LEFT169); + adaptor.addChild(root_0, LEFT169_tree); } } break; case 7 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:645:4: OUTER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:812:11: OUTER { root_0 = (Object)adaptor.nil(); - OUTER173=(Token)match(input,OUTER,FOLLOW_OUTER_in_keyWord2331); if (state.failed) return retval; + OUTER170=(Token)match(input,OUTER,FOLLOW_OUTER_in_keyWord5371); if (state.failed) return retval; if ( state.backtracking==0 ) { - OUTER173_tree = (Object)adaptor.create(OUTER173); - adaptor.addChild(root_0, OUTER173_tree); + OUTER170_tree = (Object)adaptor.create(OUTER170); + adaptor.addChild(root_0, OUTER170_tree); } } break; case 8 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:646:4: ON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:813:11: ON { root_0 = (Object)adaptor.nil(); - ON174=(Token)match(input,ON,FOLLOW_ON_in_keyWord2337); if (state.failed) return retval; + ON171=(Token)match(input,ON,FOLLOW_ON_in_keyWord5383); if (state.failed) return retval; if ( state.backtracking==0 ) { - ON174_tree = (Object)adaptor.create(ON174); - adaptor.addChild(root_0, ON174_tree); + ON171_tree = (Object)adaptor.create(ON171); + adaptor.addChild(root_0, ON171_tree); } } break; case 9 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:647:4: WHERE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:814:11: WHERE { root_0 = (Object)adaptor.nil(); - WHERE175=(Token)match(input,WHERE,FOLLOW_WHERE_in_keyWord2343); if (state.failed) return retval; + WHERE172=(Token)match(input,WHERE,FOLLOW_WHERE_in_keyWord5395); if (state.failed) return retval; if ( state.backtracking==0 ) { - WHERE175_tree = (Object)adaptor.create(WHERE175); - adaptor.addChild(root_0, WHERE175_tree); + WHERE172_tree = (Object)adaptor.create(WHERE172); + adaptor.addChild(root_0, WHERE172_tree); } } break; case 10 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:648:4: OR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:815:11: OR { root_0 = (Object)adaptor.nil(); - OR176=(Token)match(input,OR,FOLLOW_OR_in_keyWord2349); if (state.failed) return retval; + OR173=(Token)match(input,OR,FOLLOW_OR_in_keyWord5407); if (state.failed) return retval; if ( state.backtracking==0 ) { - OR176_tree = (Object)adaptor.create(OR176); - adaptor.addChild(root_0, OR176_tree); + OR173_tree = (Object)adaptor.create(OR173); + adaptor.addChild(root_0, OR173_tree); } } break; case 11 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:649:4: AND + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:816:11: AND { root_0 = (Object)adaptor.nil(); - AND177=(Token)match(input,AND,FOLLOW_AND_in_keyWord2355); if (state.failed) return retval; + AND174=(Token)match(input,AND,FOLLOW_AND_in_keyWord5419); if (state.failed) return retval; if ( state.backtracking==0 ) { - AND177_tree = (Object)adaptor.create(AND177); - adaptor.addChild(root_0, AND177_tree); + AND174_tree = (Object)adaptor.create(AND174); + adaptor.addChild(root_0, AND174_tree); } } break; case 12 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:650:4: NOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:817:11: NOT { root_0 = (Object)adaptor.nil(); - NOT178=(Token)match(input,NOT,FOLLOW_NOT_in_keyWord2361); if (state.failed) return retval; + NOT175=(Token)match(input,NOT,FOLLOW_NOT_in_keyWord5431); if (state.failed) return retval; if ( state.backtracking==0 ) { - NOT178_tree = (Object)adaptor.create(NOT178); - adaptor.addChild(root_0, NOT178_tree); + NOT175_tree = (Object)adaptor.create(NOT175); + adaptor.addChild(root_0, NOT175_tree); } } break; case 13 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:651:4: IN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:818:11: IN { root_0 = (Object)adaptor.nil(); - IN179=(Token)match(input,IN,FOLLOW_IN_in_keyWord2367); if (state.failed) return retval; + IN176=(Token)match(input,IN,FOLLOW_IN_in_keyWord5443); if (state.failed) return retval; if ( state.backtracking==0 ) { - IN179_tree = (Object)adaptor.create(IN179); - adaptor.addChild(root_0, IN179_tree); + IN176_tree = (Object)adaptor.create(IN176); + adaptor.addChild(root_0, IN176_tree); } } break; case 14 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:652:4: LIKE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:819:11: LIKE { root_0 = (Object)adaptor.nil(); - LIKE180=(Token)match(input,LIKE,FOLLOW_LIKE_in_keyWord2373); if (state.failed) return retval; + LIKE177=(Token)match(input,LIKE,FOLLOW_LIKE_in_keyWord5455); if (state.failed) return retval; if ( state.backtracking==0 ) { - LIKE180_tree = (Object)adaptor.create(LIKE180); - adaptor.addChild(root_0, LIKE180_tree); + LIKE177_tree = (Object)adaptor.create(LIKE177); + adaptor.addChild(root_0, LIKE177_tree); } } break; case 15 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:653:4: IS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:820:11: IS { root_0 = (Object)adaptor.nil(); - IS181=(Token)match(input,IS,FOLLOW_IS_in_keyWord2379); if (state.failed) return retval; + IS178=(Token)match(input,IS,FOLLOW_IS_in_keyWord5467); if (state.failed) return retval; if ( state.backtracking==0 ) { - IS181_tree = (Object)adaptor.create(IS181); - adaptor.addChild(root_0, IS181_tree); + IS178_tree = (Object)adaptor.create(IS178); + adaptor.addChild(root_0, IS178_tree); } } break; case 16 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:654:4: NULL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:821:11: NULL { root_0 = (Object)adaptor.nil(); - NULL182=(Token)match(input,NULL,FOLLOW_NULL_in_keyWord2385); if (state.failed) return retval; + NULL179=(Token)match(input,NULL,FOLLOW_NULL_in_keyWord5479); if (state.failed) return retval; if ( state.backtracking==0 ) { - NULL182_tree = (Object)adaptor.create(NULL182); - adaptor.addChild(root_0, NULL182_tree); + NULL179_tree = (Object)adaptor.create(NULL179); + adaptor.addChild(root_0, NULL179_tree); } } break; case 17 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:655:4: ANY + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:822:11: ANY { root_0 = (Object)adaptor.nil(); - ANY183=(Token)match(input,ANY,FOLLOW_ANY_in_keyWord2391); if (state.failed) return retval; + ANY180=(Token)match(input,ANY,FOLLOW_ANY_in_keyWord5491); if (state.failed) return retval; if ( state.backtracking==0 ) { - ANY183_tree = (Object)adaptor.create(ANY183); - adaptor.addChild(root_0, ANY183_tree); + ANY180_tree = (Object)adaptor.create(ANY180); + adaptor.addChild(root_0, ANY180_tree); } } break; case 18 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:656:4: CONTAINS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:823:11: CONTAINS { root_0 = (Object)adaptor.nil(); - CONTAINS184=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_keyWord2397); if (state.failed) return retval; + CONTAINS181=(Token)match(input,CONTAINS,FOLLOW_CONTAINS_in_keyWord5503); if (state.failed) return retval; if ( state.backtracking==0 ) { - CONTAINS184_tree = (Object)adaptor.create(CONTAINS184); - adaptor.addChild(root_0, CONTAINS184_tree); + CONTAINS181_tree = (Object)adaptor.create(CONTAINS181); + adaptor.addChild(root_0, CONTAINS181_tree); } } break; case 19 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:657:4: IN_FOLDER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:824:11: IN_FOLDER { root_0 = (Object)adaptor.nil(); - IN_FOLDER185=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_keyWord2404); if (state.failed) return retval; + IN_FOLDER182=(Token)match(input,IN_FOLDER,FOLLOW_IN_FOLDER_in_keyWord5515); if (state.failed) return retval; if ( state.backtracking==0 ) { - IN_FOLDER185_tree = (Object)adaptor.create(IN_FOLDER185); - adaptor.addChild(root_0, IN_FOLDER185_tree); + IN_FOLDER182_tree = (Object)adaptor.create(IN_FOLDER182); + adaptor.addChild(root_0, IN_FOLDER182_tree); } } break; case 20 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:658:4: IN_TREE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:825:11: IN_TREE { root_0 = (Object)adaptor.nil(); - IN_TREE186=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_keyWord2410); if (state.failed) return retval; + IN_TREE183=(Token)match(input,IN_TREE,FOLLOW_IN_TREE_in_keyWord5527); if (state.failed) return retval; if ( state.backtracking==0 ) { - IN_TREE186_tree = (Object)adaptor.create(IN_TREE186); - adaptor.addChild(root_0, IN_TREE186_tree); + IN_TREE183_tree = (Object)adaptor.create(IN_TREE183); + adaptor.addChild(root_0, IN_TREE183_tree); } } break; case 21 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:659:4: ORDER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:826:11: ORDER { root_0 = (Object)adaptor.nil(); - ORDER187=(Token)match(input,ORDER,FOLLOW_ORDER_in_keyWord2416); if (state.failed) return retval; + ORDER184=(Token)match(input,ORDER,FOLLOW_ORDER_in_keyWord5539); if (state.failed) return retval; if ( state.backtracking==0 ) { - ORDER187_tree = (Object)adaptor.create(ORDER187); - adaptor.addChild(root_0, ORDER187_tree); + ORDER184_tree = (Object)adaptor.create(ORDER184); + adaptor.addChild(root_0, ORDER184_tree); } } break; case 22 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:660:4: BY + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:827:11: BY { root_0 = (Object)adaptor.nil(); - BY188=(Token)match(input,BY,FOLLOW_BY_in_keyWord2421); if (state.failed) return retval; + BY185=(Token)match(input,BY,FOLLOW_BY_in_keyWord5551); if (state.failed) return retval; if ( state.backtracking==0 ) { - BY188_tree = (Object)adaptor.create(BY188); - adaptor.addChild(root_0, BY188_tree); + BY185_tree = (Object)adaptor.create(BY185); + adaptor.addChild(root_0, BY185_tree); } } break; case 23 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:661:4: ASC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:828:11: ASC { root_0 = (Object)adaptor.nil(); - ASC189=(Token)match(input,ASC,FOLLOW_ASC_in_keyWord2427); if (state.failed) return retval; + ASC186=(Token)match(input,ASC,FOLLOW_ASC_in_keyWord5563); if (state.failed) return retval; if ( state.backtracking==0 ) { - ASC189_tree = (Object)adaptor.create(ASC189); - adaptor.addChild(root_0, ASC189_tree); + ASC186_tree = (Object)adaptor.create(ASC186); + adaptor.addChild(root_0, ASC186_tree); } } break; case 24 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:662:4: DESC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:829:11: DESC { root_0 = (Object)adaptor.nil(); - DESC190=(Token)match(input,DESC,FOLLOW_DESC_in_keyWord2433); if (state.failed) return retval; + DESC187=(Token)match(input,DESC,FOLLOW_DESC_in_keyWord5575); if (state.failed) return retval; if ( state.backtracking==0 ) { - DESC190_tree = (Object)adaptor.create(DESC190); - adaptor.addChild(root_0, DESC190_tree); + DESC187_tree = (Object)adaptor.create(DESC187); + adaptor.addChild(root_0, DESC187_tree); } } break; case 25 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:663:4: TIMESTAMP + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:830:11: TIMESTAMP { root_0 = (Object)adaptor.nil(); - TIMESTAMP191=(Token)match(input,TIMESTAMP,FOLLOW_TIMESTAMP_in_keyWord2438); if (state.failed) return retval; + TIMESTAMP188=(Token)match(input,TIMESTAMP,FOLLOW_TIMESTAMP_in_keyWord5587); if (state.failed) return retval; if ( state.backtracking==0 ) { - TIMESTAMP191_tree = (Object)adaptor.create(TIMESTAMP191); - adaptor.addChild(root_0, TIMESTAMP191_tree); + TIMESTAMP188_tree = (Object)adaptor.create(TIMESTAMP188); + adaptor.addChild(root_0, TIMESTAMP188_tree); } } break; case 26 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:664:4: TRUE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:831:11: TRUE { root_0 = (Object)adaptor.nil(); - TRUE192=(Token)match(input,TRUE,FOLLOW_TRUE_in_keyWord2443); if (state.failed) return retval; + TRUE189=(Token)match(input,TRUE,FOLLOW_TRUE_in_keyWord5599); if (state.failed) return retval; if ( state.backtracking==0 ) { - TRUE192_tree = (Object)adaptor.create(TRUE192); - adaptor.addChild(root_0, TRUE192_tree); + TRUE189_tree = (Object)adaptor.create(TRUE189); + adaptor.addChild(root_0, TRUE189_tree); } } break; case 27 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:665:4: FALSE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:832:11: FALSE { root_0 = (Object)adaptor.nil(); - FALSE193=(Token)match(input,FALSE,FOLLOW_FALSE_in_keyWord2448); if (state.failed) return retval; + FALSE190=(Token)match(input,FALSE,FOLLOW_FALSE_in_keyWord5611); if (state.failed) return retval; if ( state.backtracking==0 ) { - FALSE193_tree = (Object)adaptor.create(FALSE193); - adaptor.addChild(root_0, FALSE193_tree); + FALSE190_tree = (Object)adaptor.create(FALSE190); + adaptor.addChild(root_0, FALSE190_tree); } } break; case 28 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:666:4: cmisFunction + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:833:11: cmisFunction { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_cmisFunction_in_keyWord2453); - cmisFunction194=cmisFunction(); + pushFollow(FOLLOW_cmisFunction_in_keyWord5623); + cmisFunction191=cmisFunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, cmisFunction194.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, cmisFunction191.getTree()); } break; @@ -7023,24 +6892,24 @@ public class CMISParser extends Parser { }; // $ANTLR start "cmisFunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:669:1: cmisFunction : SCORE -> SCORE ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:836:1: cmisFunction : SCORE -> SCORE ; public final CMISParser.cmisFunction_return cmisFunction() throws RecognitionException { CMISParser.cmisFunction_return retval = new CMISParser.cmisFunction_return(); retval.start = input.LT(1); Object root_0 = null; - Token SCORE195=null; + Token SCORE192=null; - Object SCORE195_tree=null; + Object SCORE192_tree=null; RewriteRuleTokenStream stream_SCORE=new RewriteRuleTokenStream(adaptor,"token SCORE"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:669:14: ( SCORE -> SCORE ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:669:16: SCORE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:837:9: ( SCORE -> SCORE ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:838:9: SCORE { - SCORE195=(Token)match(input,SCORE,FOLLOW_SCORE_in_cmisFunction2464); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_SCORE.add(SCORE195); + SCORE192=(Token)match(input,SCORE,FOLLOW_SCORE_in_cmisFunction5656); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_SCORE.add(SCORE192); @@ -7056,7 +6925,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 670:2: -> SCORE + // 839:17: -> SCORE { adaptor.addChild(root_0, stream_SCORE.nextNode()); @@ -7090,48 +6959,48 @@ public class CMISParser extends Parser { }; // $ANTLR start "keyWordOrId" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:673:1: keyWordOrId : ( keyWord -> keyWord | ID -> ID ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:842:1: keyWordOrId : ( keyWord -> keyWord | ID -> ID ); public final CMISParser.keyWordOrId_return keyWordOrId() throws RecognitionException { CMISParser.keyWordOrId_return retval = new CMISParser.keyWordOrId_return(); retval.start = input.LT(1); Object root_0 = null; - Token ID197=null; - CMISParser.keyWord_return keyWord196 = null; + Token ID194=null; + CMISParser.keyWord_return keyWord193 = null; - Object ID197_tree=null; + Object ID194_tree=null; RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID"); RewriteRuleSubtreeStream stream_keyWord=new RewriteRuleSubtreeStream(adaptor,"rule keyWord"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:674:2: ( keyWord -> keyWord | ID -> ID ) - int alt48=2; - int LA48_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:843:9: ( keyWord -> keyWord | ID -> ID ) + int alt46=2; + int LA46_0 = input.LA(1); - if ( (LA48_0==SELECT||LA48_0==AS||(LA48_0>=FROM && LA48_0<=ON)||(LA48_0>=WHERE && LA48_0<=NOT)||(LA48_0>=IN && LA48_0<=DESC)||(LA48_0>=TRUE && LA48_0<=SCORE)) ) { - alt48=1; + if ( (LA46_0==SELECT||LA46_0==AS||(LA46_0>=FROM && LA46_0<=ON)||(LA46_0>=WHERE && LA46_0<=NOT)||(LA46_0>=IN && LA46_0<=DESC)||(LA46_0>=TRUE && LA46_0<=SCORE)) ) { + alt46=1; } - else if ( (LA48_0==ID) ) { - alt48=2; + else if ( (LA46_0==ID) ) { + alt46=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 48, 0, input); + new NoViableAltException("", 46, 0, input); throw nvae; } - switch (alt48) { + switch (alt46) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:674:4: keyWord + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:844:9: keyWord { - pushFollow(FOLLOW_keyWord_in_keyWordOrId2482); - keyWord196=keyWord(); + pushFollow(FOLLOW_keyWord_in_keyWordOrId5709); + keyWord193=keyWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_keyWord.add(keyWord196.getTree()); + if ( state.backtracking==0 ) stream_keyWord.add(keyWord193.getTree()); // AST REWRITE @@ -7146,7 +7015,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 675:3: -> keyWord + // 845:17: -> keyWord { adaptor.addChild(root_0, stream_keyWord.nextTree()); @@ -7156,10 +7025,10 @@ public class CMISParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:676:4: ID + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:846:11: ID { - ID197=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId2494); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ID.add(ID197); + ID194=(Token)match(input,ID,FOLLOW_ID_in_keyWordOrId5741); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ID.add(ID194); @@ -7175,7 +7044,7 @@ public class CMISParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 677:3: -> ID + // 847:17: -> ID { adaptor.addChild(root_0, stream_ID.nextNode()); @@ -7207,11 +7076,11 @@ public class CMISParser extends Parser { // $ANTLR start synpred1_CMIS public final void synpred1_CMIS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:4: ( valueExpression ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:314:5: valueExpression + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:394:9: ( tableName ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:394:10: tableName { - pushFollow(FOLLOW_valueExpression_in_synpred1_CMIS340); - valueExpression(); + pushFollow(FOLLOW_tableName_in_synpred1_CMIS1323); + tableName(); state._fsp--; if (state.failed) return ; @@ -7222,49 +7091,56 @@ public class CMISParser extends Parser { // $ANTLR start synpred2_CMIS public final void synpred2_CMIS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:366:4: ( tableName ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:366:5: tableName + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:9: ( LPAREN singleTable ( joinedTable )+ RPAREN ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:10: LPAREN singleTable ( joinedTable )+ RPAREN { - pushFollow(FOLLOW_tableName_in_synpred2_CMIS771); - tableName(); + match(input,LPAREN,FOLLOW_LPAREN_in_synpred2_CMIS1917); if (state.failed) return ; + pushFollow(FOLLOW_singleTable_in_synpred2_CMIS1919); + singleTable(); state._fsp--; if (state.failed) return ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:29: ( joinedTable )+ + int cnt47=0; + loop47: + do { + int alt47=2; + int LA47_0 = input.LA(1); + + if ( ((LA47_0>=JOIN && LA47_0<=LEFT)) ) { + alt47=1; + } + + + switch (alt47) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:490:29: joinedTable + { + pushFollow(FOLLOW_joinedTable_in_synpred2_CMIS1921); + joinedTable(); + + state._fsp--; + if (state.failed) return ; + + } + break; + + default : + if ( cnt47 >= 1 ) break loop47; + if (state.backtracking>0) {state.failed=true; return ;} + EarlyExitException eee = + new EarlyExitException(47, input); + throw eee; + } + cnt47++; + } while (true); + + match(input,RPAREN,FOLLOW_RPAREN_in_synpred2_CMIS1924); if (state.failed) return ; } } // $ANTLR end synpred2_CMIS - // $ANTLR start synpred3_CMIS - public final void synpred3_CMIS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:516:6: ( columnReference ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:516:7: columnReference - { - pushFollow(FOLLOW_columnReference_in_synpred3_CMIS1592); - columnReference(); - - state._fsp--; - if (state.failed) return ; - - } - } - // $ANTLR end synpred3_CMIS - - // $ANTLR start synpred4_CMIS - public final void synpred4_CMIS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:11: ( columnReference ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\CMIS.g:518:12: columnReference - { - pushFollow(FOLLOW_columnReference_in_synpred4_CMIS1630); - columnReference(); - - state._fsp--; - if (state.failed) return ; - - } - } - // $ANTLR end synpred4_CMIS - // Delegated rules public final boolean synpred2_CMIS() { @@ -7281,34 +7157,6 @@ public class CMISParser extends Parser { state.failed=false; return success; } - public final boolean synpred4_CMIS() { - state.backtracking++; - int start = input.mark(); - try { - synpred4_CMIS_fragment(); // can never throw exception - } catch (RecognitionException re) { - System.err.println("impossible: "+re); - } - boolean success = !state.failed; - input.rewind(start); - state.backtracking--; - state.failed=false; - return success; - } - public final boolean synpred3_CMIS() { - state.backtracking++; - int start = input.mark(); - try { - synpred3_CMIS_fragment(); // can never throw exception - } catch (RecognitionException re) { - System.err.println("impossible: "+re); - } - boolean success = !state.failed; - input.rewind(start); - state.backtracking--; - state.failed=false; - return success; - } public final boolean synpred1_CMIS() { state.backtracking++; int start = input.mark(); @@ -7325,45 +7173,218 @@ public class CMISParser extends Parser { } + protected DFA4 dfa4 = new DFA4(this); protected DFA7 dfa7 = new DFA7(this); + protected DFA8 dfa8 = new DFA8(this); protected DFA9 dfa9 = new DFA9(this); + protected DFA12 dfa12 = new DFA12(this); protected DFA10 dfa10 = new DFA10(this); + protected DFA11 dfa11 = new DFA11(this); protected DFA13 dfa13 = new DFA13(this); protected DFA14 dfa14 = new DFA14(this); - protected DFA15 dfa15 = new DFA15(this); + protected DFA18 dfa18 = new DFA18(this); protected DFA26 dfa26 = new DFA26(this); protected DFA27 dfa27 = new DFA27(this); protected DFA28 dfa28 = new DFA28(this); - protected DFA36 dfa36 = new DFA36(this); protected DFA34 dfa34 = new DFA34(this); - protected DFA35 dfa35 = new DFA35(this); - protected DFA43 dfa43 = new DFA43(this); + protected DFA41 dfa41 = new DFA41(this); + static final String DFA4_eotS = + "\40\uffff"; + static final String DFA4_eofS = + "\40\uffff"; + static final String DFA4_minS = + "\1\40\37\uffff"; + static final String DFA4_maxS = + "\1\115\37\uffff"; + static final String DFA4_acceptS = + "\1\uffff\1\1\36\2"; + static final String DFA4_specialS = + "\1\0\37\uffff}>"; + static final String[] DFA4_transitionS = { + "\1\5\1\1\1\uffff\1\6\4\uffff\1\7\1\10\1\11\1\12\1\13\1\14\1"+ + "\uffff\1\15\1\16\1\17\1\20\5\uffff\1\21\1\22\1\23\1\24\1\25"+ + "\1\26\1\27\1\30\1\31\1\32\1\33\1\34\2\uffff\1\2\1\3\2\uffff"+ + "\1\36\1\37\1\35\1\4", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA4_eot = DFA.unpackEncodedString(DFA4_eotS); + static final short[] DFA4_eof = DFA.unpackEncodedString(DFA4_eofS); + static final char[] DFA4_min = DFA.unpackEncodedStringToUnsignedChars(DFA4_minS); + static final char[] DFA4_max = DFA.unpackEncodedStringToUnsignedChars(DFA4_maxS); + static final short[] DFA4_accept = DFA.unpackEncodedString(DFA4_acceptS); + static final short[] DFA4_special = DFA.unpackEncodedString(DFA4_specialS); + static final short[][] DFA4_transition; + + static { + int numStates = DFA4_transitionS.length; + DFA4_transition = new short[numStates][]; + for (int i=0; i ^( ALL_COLUMNS ) | selectSubList ( COMMA selectSubList )* -> ^( COLUMNS ( selectSubList )+ ) );"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA4_0 = input.LA(1); + + + int index4_0 = input.index(); + input.rewind(); + s = -1; + if ( (LA4_0==STAR) ) {s = 1;} + + else if ( (LA4_0==ID) ) {s = 2;} + + else if ( (LA4_0==DOUBLE_QUOTE) && ((strict == false))) {s = 3;} + + else if ( (LA4_0==SCORE) ) {s = 4;} + + else if ( (LA4_0==SELECT) && ((strict == false))) {s = 5;} + + else if ( (LA4_0==AS) && ((strict == false))) {s = 6;} + + else if ( (LA4_0==FROM) && ((strict == false))) {s = 7;} + + else if ( (LA4_0==JOIN) && ((strict == false))) {s = 8;} + + else if ( (LA4_0==INNER) && ((strict == false))) {s = 9;} + + else if ( (LA4_0==LEFT) && ((strict == false))) {s = 10;} + + else if ( (LA4_0==OUTER) && ((strict == false))) {s = 11;} + + else if ( (LA4_0==ON) && ((strict == false))) {s = 12;} + + else if ( (LA4_0==WHERE) && ((strict == false))) {s = 13;} + + else if ( (LA4_0==OR) && ((strict == false))) {s = 14;} + + else if ( (LA4_0==AND) && ((strict == false))) {s = 15;} + + else if ( (LA4_0==NOT) && ((strict == false))) {s = 16;} + + else if ( (LA4_0==IN) && ((strict == false))) {s = 17;} + + else if ( (LA4_0==LIKE) && ((strict == false))) {s = 18;} + + else if ( (LA4_0==IS) && ((strict == false))) {s = 19;} + + else if ( (LA4_0==NULL) && ((strict == false))) {s = 20;} + + else if ( (LA4_0==ANY) && ((strict == false))) {s = 21;} + + else if ( (LA4_0==CONTAINS) && ((strict == false))) {s = 22;} + + else if ( (LA4_0==IN_FOLDER) && ((strict == false))) {s = 23;} + + else if ( (LA4_0==IN_TREE) && ((strict == false))) {s = 24;} + + else if ( (LA4_0==ORDER) && ((strict == false))) {s = 25;} + + else if ( (LA4_0==BY) && ((strict == false))) {s = 26;} + + else if ( (LA4_0==ASC) && ((strict == false))) {s = 27;} + + else if ( (LA4_0==DESC) && ((strict == false))) {s = 28;} + + else if ( (LA4_0==TIMESTAMP) && ((strict == false))) {s = 29;} + + else if ( (LA4_0==TRUE) && ((strict == false))) {s = 30;} + + else if ( (LA4_0==FALSE) && ((strict == false))) {s = 31;} + + + input.seek(index4_0); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 4, _s, input); + error(nvae); + throw nvae; + } + } static final String DFA7_eotS = - "\134\uffff"; + "\114\uffff"; static final String DFA7_eofS = - "\134\uffff"; + "\114\uffff"; static final String DFA7_minS = - "\1\37\1\43\1\37\36\uffff\35\106\35\43\1\uffff"; + "\1\40\1\42\1\40\44\uffff\35\107\1\42\7\uffff"; static final String DFA7_maxS = - "\1\114\1\43\1\114\36\uffff\35\106\35\43\1\uffff"; + "\1\115\1\107\1\115\44\uffff\36\107\7\uffff"; static final String DFA7_acceptS = - "\3\uffff\34\1\1\2\1\3\72\uffff\1\2"; + "\3\uffff\34\1\1\2\7\1\36\uffff\1\1\1\2\5\1"; static final String DFA7_specialS = - "\1\74\1\7\1\22\36\uffff\1\71\1\0\1\4\1\12\1\17\1\20\1\13\1\5\1"+ - "\1\1\72\1\66\1\26\1\24\1\23\1\15\1\10\1\3\1\73\1\67\1\27\1\25\1"+ - "\11\1\16\1\2\1\6\1\30\1\70\1\14\1\21\1\65\1\64\1\63\1\62\1\61\1"+ - "\60\1\57\1\56\1\55\1\54\1\53\1\52\1\51\1\50\1\47\1\46\1\45\1\44"+ - "\1\43\1\42\1\41\1\40\1\37\1\36\1\35\1\34\1\33\1\32\1\31\1\uffff}>"; + "\1\40\1\15\1\2\44\uffff\1\27\1\25\1\17\1\14\1\13\1\10\1\6\1\5\1"+ + "\1\1\36\1\34\1\31\1\30\1\24\1\22\1\11\1\12\1\16\1\0\1\3\1\7\1\32"+ + "\1\33\1\35\1\37\1\23\1\26\1\4\1\21\1\20\7\uffff}>"; static final String[] DFA7_transitionS = { "\1\4\2\uffff\1\5\4\uffff\1\6\1\7\1\10\1\11\1\12\1\13\1\uffff"+ "\1\14\1\15\1\16\1\17\5\uffff\1\20\1\21\1\22\1\23\1\24\1\25\1"+ "\26\1\27\1\30\1\31\1\32\1\33\2\uffff\1\1\1\2\2\uffff\1\35\1"+ "\36\1\34\1\3", - "\1\37", - "\1\41\2\uffff\1\42\4\uffff\1\43\1\44\1\45\1\46\1\47\1\50\1"+ - "\uffff\1\51\1\52\1\53\1\54\5\uffff\1\55\1\56\1\57\1\60\1\61"+ - "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\2\uffff\1\75\3\uffff\1\72"+ - "\1\73\1\71\1\74", + "\1\43\1\40\1\37\1\45\1\46\1\uffff\1\44\35\uffff\1\41\1\42", + "\1\47\2\uffff\1\50\4\uffff\1\51\1\52\1\53\1\54\1\55\1\56\1"+ + "\uffff\1\57\1\60\1\61\1\62\5\uffff\1\63\1\64\1\65\1\66\1\67"+ + "\1\70\1\71\1\72\1\73\1\74\1\75\1\76\2\uffff\1\103\3\uffff\1"+ + "\100\1\101\1\77\1\102", + "", + "", + "", + "", + "", + "", "", "", "", @@ -7394,64 +7415,42 @@ public class CMISParser extends Parser { "", "", "", - "\1\76", - "\1\77", - "\1\100", - "\1\101", - "\1\102", - "\1\103", "\1\104", - "\1\105", - "\1\106", - "\1\107", - "\1\110", - "\1\111", - "\1\112", - "\1\113", - "\1\114", - "\1\115", - "\1\116", - "\1\117", - "\1\120", - "\1\121", - "\1\122", - "\1\123", - "\1\124", - "\1\125", - "\1\126", - "\1\127", - "\1\130", - "\1\131", - "\1\132", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", - "\1\133", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\104", + "\1\112\1\107\1\106\1\105\2\uffff\1\113\35\uffff\1\110\1\111", + "", + "", + "", + "", + "", + "", "" }; @@ -7485,131 +7484,183 @@ public class CMISParser extends Parser { this.transition = DFA7_transition; } public String getDescription() { - return "313:1: selectSubList : ( ( valueExpression )=> valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) | multiValuedColumnReference ->);"; + return "324:1: selectSubList : ( valueExpression ( ( AS )? columnName )? -> ^( COLUMN valueExpression ( columnName )? ) | qualifier DOTSTAR -> ^( ALL_COLUMNS qualifier ) );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA7_34 = input.LA(1); - - - int index7_34 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_34==DOUBLE_QUOTE) && ((strict == false))) {s = 63;} - - - input.seek(index7_34); - if ( s>=0 ) return s; - break; - case 1 : - int LA7_41 = input.LA(1); - - - int index7_41 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_41==DOUBLE_QUOTE) && ((strict == false))) {s = 70;} - - - input.seek(index7_41); - if ( s>=0 ) return s; - break; - case 2 : - int LA7_56 = input.LA(1); - - - int index7_56 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_56==DOUBLE_QUOTE) && ((strict == false))) {s = 85;} - - - input.seek(index7_56); - if ( s>=0 ) return s; - break; - case 3 : - int LA7_49 = input.LA(1); - - - int index7_49 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_49==DOUBLE_QUOTE) && ((strict == false))) {s = 78;} - - - input.seek(index7_49); - if ( s>=0 ) return s; - break; - case 4 : - int LA7_35 = input.LA(1); - - - int index7_35 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_35==DOUBLE_QUOTE) && ((strict == false))) {s = 64;} - - - input.seek(index7_35); - if ( s>=0 ) return s; - break; - case 5 : - int LA7_40 = input.LA(1); - - - int index7_40 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_40==DOUBLE_QUOTE) && ((strict == false))) {s = 69;} - - - input.seek(index7_40); - if ( s>=0 ) return s; - break; - case 6 : int LA7_57 = input.LA(1); int index7_57 = input.index(); input.rewind(); s = -1; - if ( (LA7_57==DOUBLE_QUOTE) && ((strict == false))) {s = 86;} + if ( (LA7_57==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} input.seek(index7_57); if ( s>=0 ) return s; break; - case 7 : - int LA7_1 = input.LA(1); + case 1 : + int LA7_47 = input.LA(1); - int index7_1 = input.index(); + int index7_47 = input.index(); input.rewind(); s = -1; - if ( (LA7_1==DOTSTAR) ) {s = 31;} - - else if ( (((synpred1_CMIS()&&(strict == false))||synpred1_CMIS())) ) {s = 30;} - - else if ( (true) ) {s = 32;} + if ( (LA7_47==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} - input.seek(index7_1); + input.seek(index7_47); + if ( s>=0 ) return s; + break; + case 2 : + int LA7_2 = input.LA(1); + + + int index7_2 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_2==SELECT) && ((strict == false))) {s = 39;} + + else if ( (LA7_2==AS) && ((strict == false))) {s = 40;} + + else if ( (LA7_2==FROM) && ((strict == false))) {s = 41;} + + else if ( (LA7_2==JOIN) && ((strict == false))) {s = 42;} + + else if ( (LA7_2==INNER) && ((strict == false))) {s = 43;} + + else if ( (LA7_2==LEFT) && ((strict == false))) {s = 44;} + + else if ( (LA7_2==OUTER) && ((strict == false))) {s = 45;} + + else if ( (LA7_2==ON) && ((strict == false))) {s = 46;} + + else if ( (LA7_2==WHERE) && ((strict == false))) {s = 47;} + + else if ( (LA7_2==OR) && ((strict == false))) {s = 48;} + + else if ( (LA7_2==AND) && ((strict == false))) {s = 49;} + + else if ( (LA7_2==NOT) && ((strict == false))) {s = 50;} + + else if ( (LA7_2==IN) && ((strict == false))) {s = 51;} + + else if ( (LA7_2==LIKE) && ((strict == false))) {s = 52;} + + else if ( (LA7_2==IS) && ((strict == false))) {s = 53;} + + else if ( (LA7_2==NULL) && ((strict == false))) {s = 54;} + + else if ( (LA7_2==ANY) && ((strict == false))) {s = 55;} + + else if ( (LA7_2==CONTAINS) && ((strict == false))) {s = 56;} + + else if ( (LA7_2==IN_FOLDER) && ((strict == false))) {s = 57;} + + else if ( (LA7_2==IN_TREE) && ((strict == false))) {s = 58;} + + else if ( (LA7_2==ORDER) && ((strict == false))) {s = 59;} + + else if ( (LA7_2==BY) && ((strict == false))) {s = 60;} + + else if ( (LA7_2==ASC) && ((strict == false))) {s = 61;} + + else if ( (LA7_2==DESC) && ((strict == false))) {s = 62;} + + else if ( (LA7_2==TIMESTAMP) && ((strict == false))) {s = 63;} + + else if ( (LA7_2==TRUE) && ((strict == false))) {s = 64;} + + else if ( (LA7_2==FALSE) && ((strict == false))) {s = 65;} + + else if ( (LA7_2==SCORE) && ((strict == false))) {s = 66;} + + else if ( (LA7_2==ID) && ((strict == false))) {s = 67;} + + + input.seek(index7_2); + if ( s>=0 ) return s; + break; + case 3 : + int LA7_58 = input.LA(1); + + + int index7_58 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_58==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_58); + if ( s>=0 ) return s; + break; + case 4 : + int LA7_66 = input.LA(1); + + + int index7_66 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_66==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_66); + if ( s>=0 ) return s; + break; + case 5 : + int LA7_46 = input.LA(1); + + + int index7_46 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_46==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_46); + if ( s>=0 ) return s; + break; + case 6 : + int LA7_45 = input.LA(1); + + + int index7_45 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_45==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_45); + if ( s>=0 ) return s; + break; + case 7 : + int LA7_59 = input.LA(1); + + + int index7_59 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_59==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_59); if ( s>=0 ) return s; break; case 8 : - int LA7_48 = input.LA(1); + int LA7_44 = input.LA(1); - int index7_48 = input.index(); + int index7_44 = input.index(); input.rewind(); s = -1; - if ( (LA7_48==DOUBLE_QUOTE) && ((strict == false))) {s = 77;} + if ( (LA7_44==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} - input.seek(index7_48); + input.seek(index7_44); if ( s>=0 ) return s; break; case 9 : @@ -7619,26 +7670,208 @@ public class CMISParser extends Parser { int index7_54 = input.index(); input.rewind(); s = -1; - if ( (LA7_54==DOUBLE_QUOTE) && ((strict == false))) {s = 83;} + if ( (LA7_54==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} input.seek(index7_54); if ( s>=0 ) return s; break; case 10 : - int LA7_36 = input.LA(1); + int LA7_55 = input.LA(1); - int index7_36 = input.index(); + int index7_55 = input.index(); input.rewind(); s = -1; - if ( (LA7_36==DOUBLE_QUOTE) && ((strict == false))) {s = 65;} + if ( (LA7_55==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} - input.seek(index7_36); + input.seek(index7_55); if ( s>=0 ) return s; break; case 11 : + int LA7_43 = input.LA(1); + + + int index7_43 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_43==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_43); + if ( s>=0 ) return s; + break; + case 12 : + int LA7_42 = input.LA(1); + + + int index7_42 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_42==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_42); + if ( s>=0 ) return s; + break; + case 13 : + int LA7_1 = input.LA(1); + + + int index7_1 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_1==DOTSTAR) ) {s = 31;} + + else if ( (LA7_1==AS) ) {s = 32;} + + else if ( (LA7_1==ID) ) {s = 33;} + + else if ( (LA7_1==DOUBLE_QUOTE) ) {s = 34;} + + else if ( (LA7_1==COMMA) ) {s = 35;} + + else if ( (LA7_1==FROM) ) {s = 36;} + + else if ( (LA7_1==DOT) ) {s = 37;} + + else if ( (LA7_1==LPAREN) && ((strict == false))) {s = 38;} + + + input.seek(index7_1); + if ( s>=0 ) return s; + break; + case 14 : + int LA7_56 = input.LA(1); + + + int index7_56 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_56==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_56); + if ( s>=0 ) return s; + break; + case 15 : + int LA7_41 = input.LA(1); + + + int index7_41 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_41==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_41); + if ( s>=0 ) return s; + break; + case 16 : + int LA7_68 = input.LA(1); + + + int index7_68 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_68==DOT) && ((strict == false))) {s = 69;} + + else if ( (LA7_68==DOTSTAR) && ((strict == false))) {s = 70;} + + else if ( (LA7_68==AS) && ((strict == false))) {s = 71;} + + else if ( (LA7_68==ID) && ((strict == false))) {s = 72;} + + else if ( (LA7_68==DOUBLE_QUOTE) && ((strict == false))) {s = 73;} + + else if ( (LA7_68==COMMA) && ((strict == false))) {s = 74;} + + else if ( (LA7_68==FROM) && ((strict == false))) {s = 75;} + + + input.seek(index7_68); + if ( s>=0 ) return s; + break; + case 17 : + int LA7_67 = input.LA(1); + + + int index7_67 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_67==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_67); + if ( s>=0 ) return s; + break; + case 18 : + int LA7_53 = input.LA(1); + + + int index7_53 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_53==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_53); + if ( s>=0 ) return s; + break; + case 19 : + int LA7_64 = input.LA(1); + + + int index7_64 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_64==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_64); + if ( s>=0 ) return s; + break; + case 20 : + int LA7_52 = input.LA(1); + + + int index7_52 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_52==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_52); + if ( s>=0 ) return s; + break; + case 21 : + int LA7_40 = input.LA(1); + + + int index7_40 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_40==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_40); + if ( s>=0 ) return s; + break; + case 22 : + int LA7_65 = input.LA(1); + + + int index7_65 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_65==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_65); + if ( s>=0 ) return s; + break; + case 23 : int LA7_39 = input.LA(1); @@ -7651,803 +7884,111 @@ public class CMISParser extends Parser { input.seek(index7_39); if ( s>=0 ) return s; break; - case 12 : - int LA7_60 = input.LA(1); - - - int index7_60 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_60==DOUBLE_QUOTE) && ((strict == false))) {s = 89;} - - - input.seek(index7_60); - if ( s>=0 ) return s; - break; - case 13 : - int LA7_47 = input.LA(1); - - - int index7_47 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_47==DOUBLE_QUOTE) && ((strict == false))) {s = 76;} - - - input.seek(index7_47); - if ( s>=0 ) return s; - break; - case 14 : - int LA7_55 = input.LA(1); - - - int index7_55 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_55==DOUBLE_QUOTE) && ((strict == false))) {s = 84;} - - - input.seek(index7_55); - if ( s>=0 ) return s; - break; - case 15 : - int LA7_37 = input.LA(1); - - - int index7_37 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_37==DOUBLE_QUOTE) && ((strict == false))) {s = 66;} - - - input.seek(index7_37); - if ( s>=0 ) return s; - break; - case 16 : - int LA7_38 = input.LA(1); - - - int index7_38 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_38==DOUBLE_QUOTE) && ((strict == false))) {s = 67;} - - - input.seek(index7_38); - if ( s>=0 ) return s; - break; - case 17 : - int LA7_61 = input.LA(1); - - - int index7_61 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_61==DOUBLE_QUOTE) && ((strict == false))) {s = 90;} - - - input.seek(index7_61); - if ( s>=0 ) return s; - break; - case 18 : - int LA7_2 = input.LA(1); - - - int index7_2 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_2==SELECT) && ((strict == false))) {s = 33;} - - else if ( (LA7_2==AS) && ((strict == false))) {s = 34;} - - else if ( (LA7_2==FROM) && ((strict == false))) {s = 35;} - - else if ( (LA7_2==JOIN) && ((strict == false))) {s = 36;} - - else if ( (LA7_2==INNER) && ((strict == false))) {s = 37;} - - else if ( (LA7_2==LEFT) && ((strict == false))) {s = 38;} - - else if ( (LA7_2==OUTER) && ((strict == false))) {s = 39;} - - else if ( (LA7_2==ON) && ((strict == false))) {s = 40;} - - else if ( (LA7_2==WHERE) && ((strict == false))) {s = 41;} - - else if ( (LA7_2==OR) && ((strict == false))) {s = 42;} - - else if ( (LA7_2==AND) && ((strict == false))) {s = 43;} - - else if ( (LA7_2==NOT) && ((strict == false))) {s = 44;} - - else if ( (LA7_2==IN) && ((strict == false))) {s = 45;} - - else if ( (LA7_2==LIKE) && ((strict == false))) {s = 46;} - - else if ( (LA7_2==IS) && ((strict == false))) {s = 47;} - - else if ( (LA7_2==NULL) && ((strict == false))) {s = 48;} - - else if ( (LA7_2==ANY) && ((strict == false))) {s = 49;} - - else if ( (LA7_2==CONTAINS) && ((strict == false))) {s = 50;} - - else if ( (LA7_2==IN_FOLDER) && ((strict == false))) {s = 51;} - - else if ( (LA7_2==IN_TREE) && ((strict == false))) {s = 52;} - - else if ( (LA7_2==ORDER) && ((strict == false))) {s = 53;} - - else if ( (LA7_2==BY) && ((strict == false))) {s = 54;} - - else if ( (LA7_2==ASC) && ((strict == false))) {s = 55;} - - else if ( (LA7_2==DESC) && ((strict == false))) {s = 56;} - - else if ( (LA7_2==TIMESTAMP) && ((strict == false))) {s = 57;} - - else if ( (LA7_2==TRUE) && ((strict == false))) {s = 58;} - - else if ( (LA7_2==FALSE) && ((strict == false))) {s = 59;} - - else if ( (LA7_2==SCORE) && ((strict == false))) {s = 60;} - - else if ( (LA7_2==ID) && ((strict == false))) {s = 61;} - - - input.seek(index7_2); - if ( s>=0 ) return s; - break; - case 19 : - int LA7_46 = input.LA(1); - - - int index7_46 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_46==DOUBLE_QUOTE) && ((strict == false))) {s = 75;} - - - input.seek(index7_46); - if ( s>=0 ) return s; - break; - case 20 : - int LA7_45 = input.LA(1); - - - int index7_45 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_45==DOUBLE_QUOTE) && ((strict == false))) {s = 74;} - - - input.seek(index7_45); - if ( s>=0 ) return s; - break; - case 21 : - int LA7_53 = input.LA(1); - - - int index7_53 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_53==DOUBLE_QUOTE) && ((strict == false))) {s = 82;} - - - input.seek(index7_53); - if ( s>=0 ) return s; - break; - case 22 : - int LA7_44 = input.LA(1); - - - int index7_44 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_44==DOUBLE_QUOTE) && ((strict == false))) {s = 73;} - - - input.seek(index7_44); - if ( s>=0 ) return s; - break; - case 23 : - int LA7_52 = input.LA(1); - - - int index7_52 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_52==DOUBLE_QUOTE) && ((strict == false))) {s = 81;} - - - input.seek(index7_52); - if ( s>=0 ) return s; - break; case 24 : - int LA7_58 = input.LA(1); - - - int index7_58 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_58==DOUBLE_QUOTE) && ((strict == false))) {s = 87;} - - - input.seek(index7_58); - if ( s>=0 ) return s; - break; - case 25 : - int LA7_90 = input.LA(1); - - - int index7_90 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_90==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_90); - if ( s>=0 ) return s; - break; - case 26 : - int LA7_89 = input.LA(1); - - - int index7_89 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_89==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_89); - if ( s>=0 ) return s; - break; - case 27 : - int LA7_88 = input.LA(1); - - - int index7_88 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_88==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_88); - if ( s>=0 ) return s; - break; - case 28 : - int LA7_87 = input.LA(1); - - - int index7_87 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_87==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_87); - if ( s>=0 ) return s; - break; - case 29 : - int LA7_86 = input.LA(1); - - - int index7_86 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_86==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_86); - if ( s>=0 ) return s; - break; - case 30 : - int LA7_85 = input.LA(1); - - - int index7_85 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_85==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_85); - if ( s>=0 ) return s; - break; - case 31 : - int LA7_84 = input.LA(1); - - - int index7_84 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_84==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_84); - if ( s>=0 ) return s; - break; - case 32 : - int LA7_83 = input.LA(1); - - - int index7_83 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_83==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_83); - if ( s>=0 ) return s; - break; - case 33 : - int LA7_82 = input.LA(1); - - - int index7_82 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_82==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_82); - if ( s>=0 ) return s; - break; - case 34 : - int LA7_81 = input.LA(1); - - - int index7_81 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_81==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_81); - if ( s>=0 ) return s; - break; - case 35 : - int LA7_80 = input.LA(1); - - - int index7_80 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_80==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_80); - if ( s>=0 ) return s; - break; - case 36 : - int LA7_79 = input.LA(1); - - - int index7_79 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_79==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_79); - if ( s>=0 ) return s; - break; - case 37 : - int LA7_78 = input.LA(1); - - - int index7_78 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_78==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_78); - if ( s>=0 ) return s; - break; - case 38 : - int LA7_77 = input.LA(1); - - - int index7_77 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_77==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_77); - if ( s>=0 ) return s; - break; - case 39 : - int LA7_76 = input.LA(1); - - - int index7_76 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_76==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_76); - if ( s>=0 ) return s; - break; - case 40 : - int LA7_75 = input.LA(1); - - - int index7_75 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_75==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_75); - if ( s>=0 ) return s; - break; - case 41 : - int LA7_74 = input.LA(1); - - - int index7_74 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_74==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_74); - if ( s>=0 ) return s; - break; - case 42 : - int LA7_73 = input.LA(1); - - - int index7_73 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_73==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_73); - if ( s>=0 ) return s; - break; - case 43 : - int LA7_72 = input.LA(1); - - - int index7_72 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_72==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_72); - if ( s>=0 ) return s; - break; - case 44 : - int LA7_71 = input.LA(1); - - - int index7_71 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_71==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_71); - if ( s>=0 ) return s; - break; - case 45 : - int LA7_70 = input.LA(1); - - - int index7_70 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_70==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_70); - if ( s>=0 ) return s; - break; - case 46 : - int LA7_69 = input.LA(1); - - - int index7_69 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_69==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_69); - if ( s>=0 ) return s; - break; - case 47 : - int LA7_68 = input.LA(1); - - - int index7_68 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_68==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_68); - if ( s>=0 ) return s; - break; - case 48 : - int LA7_67 = input.LA(1); - - - int index7_67 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_67==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_67); - if ( s>=0 ) return s; - break; - case 49 : - int LA7_66 = input.LA(1); - - - int index7_66 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_66==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_66); - if ( s>=0 ) return s; - break; - case 50 : - int LA7_65 = input.LA(1); - - - int index7_65 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_65==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_65); - if ( s>=0 ) return s; - break; - case 51 : - int LA7_64 = input.LA(1); - - - int index7_64 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_64==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_64); - if ( s>=0 ) return s; - break; - case 52 : - int LA7_63 = input.LA(1); - - - int index7_63 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_63==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_63); - if ( s>=0 ) return s; - break; - case 53 : - int LA7_62 = input.LA(1); - - - int index7_62 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_62==DOTSTAR) && ((strict == false))) {s = 91;} - - else if ( (((synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false))||(synpred1_CMIS()&&(strict == false)))) ) {s = 30;} - - else if ( ((strict == false)) ) {s = 32;} - - - input.seek(index7_62); - if ( s>=0 ) return s; - break; - case 54 : - int LA7_43 = input.LA(1); - - - int index7_43 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_43==DOUBLE_QUOTE) && ((strict == false))) {s = 72;} - - - input.seek(index7_43); - if ( s>=0 ) return s; - break; - case 55 : int LA7_51 = input.LA(1); int index7_51 = input.index(); input.rewind(); s = -1; - if ( (LA7_51==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + if ( (LA7_51==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} input.seek(index7_51); if ( s>=0 ) return s; break; - case 56 : - int LA7_59 = input.LA(1); - - - int index7_59 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_59==DOUBLE_QUOTE) && ((strict == false))) {s = 88;} - - - input.seek(index7_59); - if ( s>=0 ) return s; - break; - case 57 : - int LA7_33 = input.LA(1); - - - int index7_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_33==DOUBLE_QUOTE) && ((strict == false))) {s = 62;} - - - input.seek(index7_33); - if ( s>=0 ) return s; - break; - case 58 : - int LA7_42 = input.LA(1); - - - int index7_42 = input.index(); - input.rewind(); - s = -1; - if ( (LA7_42==DOUBLE_QUOTE) && ((strict == false))) {s = 71;} - - - input.seek(index7_42); - if ( s>=0 ) return s; - break; - case 59 : + case 25 : int LA7_50 = input.LA(1); int index7_50 = input.index(); input.rewind(); s = -1; - if ( (LA7_50==DOUBLE_QUOTE) && ((strict == false))) {s = 79;} + if ( (LA7_50==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} input.seek(index7_50); if ( s>=0 ) return s; break; - case 60 : + case 26 : + int LA7_60 = input.LA(1); + + + int index7_60 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_60==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_60); + if ( s>=0 ) return s; + break; + case 27 : + int LA7_61 = input.LA(1); + + + int index7_61 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_61==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_61); + if ( s>=0 ) return s; + break; + case 28 : + int LA7_49 = input.LA(1); + + + int index7_49 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_49==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_49); + if ( s>=0 ) return s; + break; + case 29 : + int LA7_62 = input.LA(1); + + + int index7_62 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_62==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_62); + if ( s>=0 ) return s; + break; + case 30 : + int LA7_48 = input.LA(1); + + + int index7_48 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_48==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_48); + if ( s>=0 ) return s; + break; + case 31 : + int LA7_63 = input.LA(1); + + + int index7_63 = input.index(); + input.rewind(); + s = -1; + if ( (LA7_63==DOUBLE_QUOTE) && ((strict == false))) {s = 68;} + + + input.seek(index7_63); + if ( s>=0 ) return s; + break; + case 32 : int LA7_0 = input.LA(1); @@ -8458,61 +7999,61 @@ public class CMISParser extends Parser { else if ( (LA7_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} - else if ( (LA7_0==SCORE) && (((synpred1_CMIS()&&(strict == false))||synpred1_CMIS()))) {s = 3;} + else if ( (LA7_0==SCORE) ) {s = 3;} - else if ( (LA7_0==SELECT) && ((synpred1_CMIS()&&(strict == false)))) {s = 4;} + else if ( (LA7_0==SELECT) && ((strict == false))) {s = 4;} - else if ( (LA7_0==AS) && ((synpred1_CMIS()&&(strict == false)))) {s = 5;} + else if ( (LA7_0==AS) && ((strict == false))) {s = 5;} - else if ( (LA7_0==FROM) && ((synpred1_CMIS()&&(strict == false)))) {s = 6;} + else if ( (LA7_0==FROM) && ((strict == false))) {s = 6;} - else if ( (LA7_0==JOIN) && ((synpred1_CMIS()&&(strict == false)))) {s = 7;} + else if ( (LA7_0==JOIN) && ((strict == false))) {s = 7;} - else if ( (LA7_0==INNER) && ((synpred1_CMIS()&&(strict == false)))) {s = 8;} + else if ( (LA7_0==INNER) && ((strict == false))) {s = 8;} - else if ( (LA7_0==LEFT) && ((synpred1_CMIS()&&(strict == false)))) {s = 9;} + else if ( (LA7_0==LEFT) && ((strict == false))) {s = 9;} - else if ( (LA7_0==OUTER) && ((synpred1_CMIS()&&(strict == false)))) {s = 10;} + else if ( (LA7_0==OUTER) && ((strict == false))) {s = 10;} - else if ( (LA7_0==ON) && ((synpred1_CMIS()&&(strict == false)))) {s = 11;} + else if ( (LA7_0==ON) && ((strict == false))) {s = 11;} - else if ( (LA7_0==WHERE) && ((synpred1_CMIS()&&(strict == false)))) {s = 12;} + else if ( (LA7_0==WHERE) && ((strict == false))) {s = 12;} - else if ( (LA7_0==OR) && ((synpred1_CMIS()&&(strict == false)))) {s = 13;} + else if ( (LA7_0==OR) && ((strict == false))) {s = 13;} - else if ( (LA7_0==AND) && ((synpred1_CMIS()&&(strict == false)))) {s = 14;} + else if ( (LA7_0==AND) && ((strict == false))) {s = 14;} - else if ( (LA7_0==NOT) && ((synpred1_CMIS()&&(strict == false)))) {s = 15;} + else if ( (LA7_0==NOT) && ((strict == false))) {s = 15;} - else if ( (LA7_0==IN) && ((synpred1_CMIS()&&(strict == false)))) {s = 16;} + else if ( (LA7_0==IN) && ((strict == false))) {s = 16;} - else if ( (LA7_0==LIKE) && ((synpred1_CMIS()&&(strict == false)))) {s = 17;} + else if ( (LA7_0==LIKE) && ((strict == false))) {s = 17;} - else if ( (LA7_0==IS) && ((synpred1_CMIS()&&(strict == false)))) {s = 18;} + else if ( (LA7_0==IS) && ((strict == false))) {s = 18;} - else if ( (LA7_0==NULL) && ((synpred1_CMIS()&&(strict == false)))) {s = 19;} + else if ( (LA7_0==NULL) && ((strict == false))) {s = 19;} - else if ( (LA7_0==ANY) && ((synpred1_CMIS()&&(strict == false)))) {s = 20;} + else if ( (LA7_0==ANY) && ((strict == false))) {s = 20;} - else if ( (LA7_0==CONTAINS) && ((synpred1_CMIS()&&(strict == false)))) {s = 21;} + else if ( (LA7_0==CONTAINS) && ((strict == false))) {s = 21;} - else if ( (LA7_0==IN_FOLDER) && ((synpred1_CMIS()&&(strict == false)))) {s = 22;} + else if ( (LA7_0==IN_FOLDER) && ((strict == false))) {s = 22;} - else if ( (LA7_0==IN_TREE) && ((synpred1_CMIS()&&(strict == false)))) {s = 23;} + else if ( (LA7_0==IN_TREE) && ((strict == false))) {s = 23;} - else if ( (LA7_0==ORDER) && ((synpred1_CMIS()&&(strict == false)))) {s = 24;} + else if ( (LA7_0==ORDER) && ((strict == false))) {s = 24;} - else if ( (LA7_0==BY) && ((synpred1_CMIS()&&(strict == false)))) {s = 25;} + else if ( (LA7_0==BY) && ((strict == false))) {s = 25;} - else if ( (LA7_0==ASC) && ((synpred1_CMIS()&&(strict == false)))) {s = 26;} + else if ( (LA7_0==ASC) && ((strict == false))) {s = 26;} - else if ( (LA7_0==DESC) && ((synpred1_CMIS()&&(strict == false)))) {s = 27;} + else if ( (LA7_0==DESC) && ((strict == false))) {s = 27;} - else if ( (LA7_0==TIMESTAMP) && ((synpred1_CMIS()&&(strict == false)))) {s = 28;} + else if ( (LA7_0==TIMESTAMP) && ((strict == false))) {s = 28;} - else if ( (LA7_0==TRUE) && ((synpred1_CMIS()&&(strict == false)))) {s = 29;} + else if ( (LA7_0==TRUE) && ((strict == false))) {s = 29;} - else if ( (LA7_0==FALSE) && ((synpred1_CMIS()&&(strict == false)))) {s = 30;} + else if ( (LA7_0==FALSE) && ((strict == false))) {s = 30;} input.seek(index7_0); @@ -8526,61 +8067,307 @@ public class CMISParser extends Parser { throw nvae; } } + static final String DFA8_eotS = + "\47\uffff"; + static final String DFA8_eofS = + "\47\uffff"; + static final String DFA8_minS = + "\1\40\1\42\45\uffff"; + static final String DFA8_maxS = + "\1\115\1\107\45\uffff"; + static final String DFA8_acceptS = + "\2\uffff\1\1\35\2\7\1"; + static final String DFA8_specialS = + "\1\1\1\0\45\uffff}>"; + static final String[] DFA8_transitionS = { + "\1\4\2\uffff\1\5\4\uffff\1\6\1\7\1\10\1\11\1\12\1\13\1\uffff"+ + "\1\14\1\15\1\16\1\17\5\uffff\1\20\1\21\1\22\1\23\1\24\1\25\1"+ + "\26\1\27\1\30\1\31\1\32\1\33\2\uffff\1\1\1\2\2\uffff\1\35\1"+ + "\36\1\34\1\3", + "\1\44\1\41\1\uffff\1\40\1\37\1\uffff\1\45\5\uffff\1\46\4\uffff"+ + "\5\46\16\uffff\1\42\1\43", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS); + static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS); + static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS); + static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS); + static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS); + static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS); + static final short[][] DFA8_transition; + + static { + int numStates = DFA8_transitionS.length; + DFA8_transition = new short[numStates][]; + for (int i=0; i columnReference | valueFunction -> valueFunction );"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA8_1 = input.LA(1); + + + int index8_1 = input.index(); + input.rewind(); + s = -1; + if ( (LA8_1==LPAREN) && ((strict == false))) {s = 31;} + + else if ( (LA8_1==DOT) ) {s = 32;} + + else if ( (LA8_1==AS) ) {s = 33;} + + else if ( (LA8_1==ID) ) {s = 34;} + + else if ( (LA8_1==DOUBLE_QUOTE) ) {s = 35;} + + else if ( (LA8_1==COMMA) ) {s = 36;} + + else if ( (LA8_1==FROM) ) {s = 37;} + + else if ( (LA8_1==EQUALS||(LA8_1>=NOTEQUALS && LA8_1<=GREATERTHANOREQUALS)) ) {s = 38;} + + + input.seek(index8_1); + if ( s>=0 ) return s; + break; + case 1 : + int LA8_0 = input.LA(1); + + + int index8_0 = input.index(); + input.rewind(); + s = -1; + if ( (LA8_0==ID) ) {s = 1;} + + else if ( (LA8_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} + + else if ( (LA8_0==SCORE) ) {s = 3;} + + else if ( (LA8_0==SELECT) && ((strict == false))) {s = 4;} + + else if ( (LA8_0==AS) && ((strict == false))) {s = 5;} + + else if ( (LA8_0==FROM) && ((strict == false))) {s = 6;} + + else if ( (LA8_0==JOIN) && ((strict == false))) {s = 7;} + + else if ( (LA8_0==INNER) && ((strict == false))) {s = 8;} + + else if ( (LA8_0==LEFT) && ((strict == false))) {s = 9;} + + else if ( (LA8_0==OUTER) && ((strict == false))) {s = 10;} + + else if ( (LA8_0==ON) && ((strict == false))) {s = 11;} + + else if ( (LA8_0==WHERE) && ((strict == false))) {s = 12;} + + else if ( (LA8_0==OR) && ((strict == false))) {s = 13;} + + else if ( (LA8_0==AND) && ((strict == false))) {s = 14;} + + else if ( (LA8_0==NOT) && ((strict == false))) {s = 15;} + + else if ( (LA8_0==IN) && ((strict == false))) {s = 16;} + + else if ( (LA8_0==LIKE) && ((strict == false))) {s = 17;} + + else if ( (LA8_0==IS) && ((strict == false))) {s = 18;} + + else if ( (LA8_0==NULL) && ((strict == false))) {s = 19;} + + else if ( (LA8_0==ANY) && ((strict == false))) {s = 20;} + + else if ( (LA8_0==CONTAINS) && ((strict == false))) {s = 21;} + + else if ( (LA8_0==IN_FOLDER) && ((strict == false))) {s = 22;} + + else if ( (LA8_0==IN_TREE) && ((strict == false))) {s = 23;} + + else if ( (LA8_0==ORDER) && ((strict == false))) {s = 24;} + + else if ( (LA8_0==BY) && ((strict == false))) {s = 25;} + + else if ( (LA8_0==ASC) && ((strict == false))) {s = 26;} + + else if ( (LA8_0==DESC) && ((strict == false))) {s = 27;} + + else if ( (LA8_0==TIMESTAMP) && ((strict == false))) {s = 28;} + + else if ( (LA8_0==TRUE) && ((strict == false))) {s = 29;} + + else if ( (LA8_0==FALSE) && ((strict == false))) {s = 30;} + + + input.seek(index8_0); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 8, _s, input); + error(nvae); + throw nvae; + } + } static final String DFA9_eotS = - "\45\uffff"; + "\121\uffff"; static final String DFA9_eofS = - "\1\uffff\1\3\40\uffff\1\44\2\uffff"; + "\1\uffff\1\14\66\uffff\1\103\30\uffff"; static final String DFA9_minS = - "\1\105\1\41\1\37\2\uffff\35\106\1\41\2\uffff"; + "\1\106\1\42\1\40\30\uffff\35\107\1\42\30\uffff"; static final String DFA9_maxS = - "\2\106\1\114\2\uffff\36\106\2\uffff"; + "\2\107\1\115\30\uffff\36\107\30\uffff"; static final String DFA9_acceptS = - "\3\uffff\1\2\1\1\36\uffff\1\1\1\2"; + "\3\uffff\27\2\1\1\36\uffff\1\1\27\2"; static final String DFA9_specialS = - "\1\0\1\uffff\1\27\2\uffff\1\30\1\22\1\15\1\12\1\14\1\7\1\1\1\34"+ - "\1\32\1\35\1\21\1\31\1\26\1\11\1\17\1\5\1\3\1\6\1\33\1\36\1\37\1"+ - "\23\1\25\1\10\1\13\1\16\1\2\1\24\1\20\1\4\2\uffff}>"; + "\1\33\1\uffff\1\1\30\uffff\1\15\1\20\1\10\1\11\1\12\1\25\1\27\1"+ + "\22\1\21\1\23\1\34\1\37\1\35\1\30\1\32\1\2\1\3\1\0\1\6\1\4\1\5\1"+ + "\13\1\7\1\16\1\17\1\14\1\24\1\31\1\36\1\26\30\uffff}>"; static final String[] DFA9_transitionS = { "\1\1\1\2", - "\2\3\1\uffff\1\4\1\uffff\5\3\1\uffff\3\3\2\uffff\11\3\5\uffff"+ - "\1\3\1\uffff\2\3\2\uffff\2\3", - "\1\5\2\uffff\1\6\4\uffff\1\7\1\10\1\11\1\12\1\13\1\14\1\uffff"+ - "\1\15\1\16\1\17\1\20\5\uffff\1\21\1\22\1\23\1\24\1\25\1\26\1"+ - "\27\1\30\1\31\1\32\1\33\1\34\2\uffff\1\41\3\uffff\1\36\1\37"+ - "\1\35\1\40", + "\1\6\1\3\1\uffff\1\32\1\uffff\1\21\1\7\1\20\1\16\1\17\1\uffff"+ + "\1\15\1\10\1\12\1\27\1\26\1\22\5\11\1\23\1\24\1\25\5\uffff\1"+ + "\13\1\uffff\1\30\1\31\2\uffff\1\4\1\5", + "\1\33\2\uffff\1\34\4\uffff\1\35\1\36\1\37\1\40\1\41\1\42\1"+ + "\uffff\1\43\1\44\1\45\1\46\5\uffff\1\47\1\50\1\51\1\52\1\53"+ + "\1\54\1\55\1\56\1\57\1\60\1\61\1\62\2\uffff\1\67\3\uffff\1\64"+ + "\1\65\1\63\1\66", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\70", + "\1\75\1\72\1\uffff\1\71\1\uffff\1\110\1\76\1\107\1\105\1\106"+ + "\1\uffff\1\104\1\77\1\101\1\116\1\115\1\111\5\100\1\112\1\113"+ + "\1\114\5\uffff\1\102\1\uffff\1\117\1\120\2\uffff\1\73\1\74", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", "", "", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\2\44\1\uffff\1\43\1\uffff\5\44\1\uffff\3\44\2\uffff\11\44"+ - "\5\uffff\1\44\1\uffff\2\44\2\uffff\2\44", "", "" }; @@ -8615,13 +8402,466 @@ public class CMISParser extends Parser { this.transition = DFA9_transition; } public String getDescription() { - return "334:4: ( qualifier DOT )?"; + return "360:9: ( qualifier DOT )?"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : + int LA9_44 = input.LA(1); + + + int index9_44 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_44==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_44); + if ( s>=0 ) return s; + break; + case 1 : + int LA9_2 = input.LA(1); + + + int index9_2 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_2==SELECT) && ((strict == false))) {s = 27;} + + else if ( (LA9_2==AS) && ((strict == false))) {s = 28;} + + else if ( (LA9_2==FROM) && ((strict == false))) {s = 29;} + + else if ( (LA9_2==JOIN) && ((strict == false))) {s = 30;} + + else if ( (LA9_2==INNER) && ((strict == false))) {s = 31;} + + else if ( (LA9_2==LEFT) && ((strict == false))) {s = 32;} + + else if ( (LA9_2==OUTER) && ((strict == false))) {s = 33;} + + else if ( (LA9_2==ON) && ((strict == false))) {s = 34;} + + else if ( (LA9_2==WHERE) && ((strict == false))) {s = 35;} + + else if ( (LA9_2==OR) && ((strict == false))) {s = 36;} + + else if ( (LA9_2==AND) && ((strict == false))) {s = 37;} + + else if ( (LA9_2==NOT) && ((strict == false))) {s = 38;} + + else if ( (LA9_2==IN) && ((strict == false))) {s = 39;} + + else if ( (LA9_2==LIKE) && ((strict == false))) {s = 40;} + + else if ( (LA9_2==IS) && ((strict == false))) {s = 41;} + + else if ( (LA9_2==NULL) && ((strict == false))) {s = 42;} + + else if ( (LA9_2==ANY) && ((strict == false))) {s = 43;} + + else if ( (LA9_2==CONTAINS) && ((strict == false))) {s = 44;} + + else if ( (LA9_2==IN_FOLDER) && ((strict == false))) {s = 45;} + + else if ( (LA9_2==IN_TREE) && ((strict == false))) {s = 46;} + + else if ( (LA9_2==ORDER) && ((strict == false))) {s = 47;} + + else if ( (LA9_2==BY) && ((strict == false))) {s = 48;} + + else if ( (LA9_2==ASC) && ((strict == false))) {s = 49;} + + else if ( (LA9_2==DESC) && ((strict == false))) {s = 50;} + + else if ( (LA9_2==TIMESTAMP) && ((strict == false))) {s = 51;} + + else if ( (LA9_2==TRUE) && ((strict == false))) {s = 52;} + + else if ( (LA9_2==FALSE) && ((strict == false))) {s = 53;} + + else if ( (LA9_2==SCORE) && ((strict == false))) {s = 54;} + + else if ( (LA9_2==ID) && ((strict == false))) {s = 55;} + + + input.seek(index9_2); + if ( s>=0 ) return s; + break; + case 2 : + int LA9_42 = input.LA(1); + + + int index9_42 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_42==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_42); + if ( s>=0 ) return s; + break; + case 3 : + int LA9_43 = input.LA(1); + + + int index9_43 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_43==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_43); + if ( s>=0 ) return s; + break; + case 4 : + int LA9_46 = input.LA(1); + + + int index9_46 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_46==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_46); + if ( s>=0 ) return s; + break; + case 5 : + int LA9_47 = input.LA(1); + + + int index9_47 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_47==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_47); + if ( s>=0 ) return s; + break; + case 6 : + int LA9_45 = input.LA(1); + + + int index9_45 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_45==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_45); + if ( s>=0 ) return s; + break; + case 7 : + int LA9_49 = input.LA(1); + + + int index9_49 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_49==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_49); + if ( s>=0 ) return s; + break; + case 8 : + int LA9_29 = input.LA(1); + + + int index9_29 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_29==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_29); + if ( s>=0 ) return s; + break; + case 9 : + int LA9_30 = input.LA(1); + + + int index9_30 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_30==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_30); + if ( s>=0 ) return s; + break; + case 10 : + int LA9_31 = input.LA(1); + + + int index9_31 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_31==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_31); + if ( s>=0 ) return s; + break; + case 11 : + int LA9_48 = input.LA(1); + + + int index9_48 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_48==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_48); + if ( s>=0 ) return s; + break; + case 12 : + int LA9_52 = input.LA(1); + + + int index9_52 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_52==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_52); + if ( s>=0 ) return s; + break; + case 13 : + int LA9_27 = input.LA(1); + + + int index9_27 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_27==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_27); + if ( s>=0 ) return s; + break; + case 14 : + int LA9_50 = input.LA(1); + + + int index9_50 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_50==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_50); + if ( s>=0 ) return s; + break; + case 15 : + int LA9_51 = input.LA(1); + + + int index9_51 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_51==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_51); + if ( s>=0 ) return s; + break; + case 16 : + int LA9_28 = input.LA(1); + + + int index9_28 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_28==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_28); + if ( s>=0 ) return s; + break; + case 17 : + int LA9_35 = input.LA(1); + + + int index9_35 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_35==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_35); + if ( s>=0 ) return s; + break; + case 18 : + int LA9_34 = input.LA(1); + + + int index9_34 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_34==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_34); + if ( s>=0 ) return s; + break; + case 19 : + int LA9_36 = input.LA(1); + + + int index9_36 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_36==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_36); + if ( s>=0 ) return s; + break; + case 20 : + int LA9_53 = input.LA(1); + + + int index9_53 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_53==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_53); + if ( s>=0 ) return s; + break; + case 21 : + int LA9_32 = input.LA(1); + + + int index9_32 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_32==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_32); + if ( s>=0 ) return s; + break; + case 22 : + int LA9_56 = input.LA(1); + + + int index9_56 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_56==DOT) && ((strict == false))) {s = 57;} + + else if ( (LA9_56==AS) && ((strict == false))) {s = 58;} + + else if ( (LA9_56==ID) && ((strict == false))) {s = 59;} + + else if ( (LA9_56==DOUBLE_QUOTE) && ((strict == false))) {s = 60;} + + else if ( (LA9_56==COMMA) && ((strict == false))) {s = 61;} + + else if ( (LA9_56==FROM) && ((strict == false))) {s = 62;} + + else if ( (LA9_56==EQUALS) && ((strict == false))) {s = 63;} + + else if ( ((LA9_56>=NOTEQUALS && LA9_56<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 64;} + + else if ( (LA9_56==WHERE) && ((strict == false))) {s = 65;} + + else if ( (LA9_56==ORDER) && ((strict == false))) {s = 66;} + + else if ( (LA9_56==EOF) && ((strict == false))) {s = 67;} + + else if ( (LA9_56==ON) && ((strict == false))) {s = 68;} + + else if ( (LA9_56==INNER) && ((strict == false))) {s = 69;} + + else if ( (LA9_56==LEFT) && ((strict == false))) {s = 70;} + + else if ( (LA9_56==JOIN) && ((strict == false))) {s = 71;} + + else if ( (LA9_56==RPAREN) && ((strict == false))) {s = 72;} + + else if ( (LA9_56==NOT) && ((strict == false))) {s = 73;} + + else if ( (LA9_56==IN) && ((strict == false))) {s = 74;} + + else if ( (LA9_56==LIKE) && ((strict == false))) {s = 75;} + + else if ( (LA9_56==IS) && ((strict == false))) {s = 76;} + + else if ( (LA9_56==AND) && ((strict == false))) {s = 77;} + + else if ( (LA9_56==OR) && ((strict == false))) {s = 78;} + + else if ( (LA9_56==ASC) && ((strict == false))) {s = 79;} + + else if ( (LA9_56==DESC) && ((strict == false))) {s = 80;} + + + input.seek(index9_56); + if ( s>=0 ) return s; + break; + case 23 : + int LA9_33 = input.LA(1); + + + int index9_33 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_33==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_33); + if ( s>=0 ) return s; + break; + case 24 : + int LA9_40 = input.LA(1); + + + int index9_40 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_40==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_40); + if ( s>=0 ) return s; + break; + case 25 : + int LA9_54 = input.LA(1); + + + int index9_54 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_54==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_54); + if ( s>=0 ) return s; + break; + case 26 : + int LA9_41 = input.LA(1); + + + int index9_41 = input.index(); + input.rewind(); + s = -1; + if ( (LA9_41==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} + + + input.seek(index9_41); + if ( s>=0 ) return s; + break; + case 27 : int LA9_0 = input.LA(1); @@ -8636,465 +8876,56 @@ public class CMISParser extends Parser { input.seek(index9_0); if ( s>=0 ) return s; break; - case 1 : - int LA9_11 = input.LA(1); - - - int index9_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_11==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_11); - if ( s>=0 ) return s; - break; - case 2 : - int LA9_31 = input.LA(1); - - - int index9_31 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_31==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_31); - if ( s>=0 ) return s; - break; - case 3 : - int LA9_21 = input.LA(1); - - - int index9_21 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_21==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_21); - if ( s>=0 ) return s; - break; - case 4 : - int LA9_34 = input.LA(1); - - - int index9_34 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_34==DOT) && ((strict == false))) {s = 35;} - - else if ( (LA9_34==EOF||(LA9_34>=COMMA && LA9_34<=AS)||(LA9_34>=RPAREN && LA9_34<=LEFT)||(LA9_34>=ON && LA9_34<=WHERE)||(LA9_34>=NOT && LA9_34<=IS)||LA9_34==ORDER||(LA9_34>=ASC && LA9_34<=DESC)||(LA9_34>=ID && LA9_34<=DOUBLE_QUOTE)) && ((strict == false))) {s = 36;} - - - input.seek(index9_34); - if ( s>=0 ) return s; - break; - case 5 : - int LA9_20 = input.LA(1); - - - int index9_20 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_20==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_20); - if ( s>=0 ) return s; - break; - case 6 : - int LA9_22 = input.LA(1); - - - int index9_22 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_22==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_22); - if ( s>=0 ) return s; - break; - case 7 : - int LA9_10 = input.LA(1); - - - int index9_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_10==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_10); - if ( s>=0 ) return s; - break; - case 8 : - int LA9_28 = input.LA(1); - - - int index9_28 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_28==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_28); - if ( s>=0 ) return s; - break; - case 9 : - int LA9_18 = input.LA(1); - - - int index9_18 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_18==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_18); - if ( s>=0 ) return s; - break; - case 10 : - int LA9_8 = input.LA(1); - - - int index9_8 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_8==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_8); - if ( s>=0 ) return s; - break; - case 11 : - int LA9_29 = input.LA(1); - - - int index9_29 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_29==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_29); - if ( s>=0 ) return s; - break; - case 12 : - int LA9_9 = input.LA(1); - - - int index9_9 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_9==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_9); - if ( s>=0 ) return s; - break; - case 13 : - int LA9_7 = input.LA(1); - - - int index9_7 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_7==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_7); - if ( s>=0 ) return s; - break; - case 14 : - int LA9_30 = input.LA(1); - - - int index9_30 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_30==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_30); - if ( s>=0 ) return s; - break; - case 15 : - int LA9_19 = input.LA(1); - - - int index9_19 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_19==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_19); - if ( s>=0 ) return s; - break; - case 16 : - int LA9_33 = input.LA(1); - - - int index9_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_33==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_33); - if ( s>=0 ) return s; - break; - case 17 : - int LA9_15 = input.LA(1); - - - int index9_15 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_15==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_15); - if ( s>=0 ) return s; - break; - case 18 : - int LA9_6 = input.LA(1); - - - int index9_6 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_6==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_6); - if ( s>=0 ) return s; - break; - case 19 : - int LA9_26 = input.LA(1); - - - int index9_26 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_26==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_26); - if ( s>=0 ) return s; - break; - case 20 : - int LA9_32 = input.LA(1); - - - int index9_32 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_32==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_32); - if ( s>=0 ) return s; - break; - case 21 : - int LA9_27 = input.LA(1); - - - int index9_27 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_27==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_27); - if ( s>=0 ) return s; - break; - case 22 : - int LA9_17 = input.LA(1); - - - int index9_17 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_17==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_17); - if ( s>=0 ) return s; - break; - case 23 : - int LA9_2 = input.LA(1); - - - int index9_2 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_2==SELECT) && ((strict == false))) {s = 5;} - - else if ( (LA9_2==AS) && ((strict == false))) {s = 6;} - - else if ( (LA9_2==FROM) && ((strict == false))) {s = 7;} - - else if ( (LA9_2==JOIN) && ((strict == false))) {s = 8;} - - else if ( (LA9_2==INNER) && ((strict == false))) {s = 9;} - - else if ( (LA9_2==LEFT) && ((strict == false))) {s = 10;} - - else if ( (LA9_2==OUTER) && ((strict == false))) {s = 11;} - - else if ( (LA9_2==ON) && ((strict == false))) {s = 12;} - - else if ( (LA9_2==WHERE) && ((strict == false))) {s = 13;} - - else if ( (LA9_2==OR) && ((strict == false))) {s = 14;} - - else if ( (LA9_2==AND) && ((strict == false))) {s = 15;} - - else if ( (LA9_2==NOT) && ((strict == false))) {s = 16;} - - else if ( (LA9_2==IN) && ((strict == false))) {s = 17;} - - else if ( (LA9_2==LIKE) && ((strict == false))) {s = 18;} - - else if ( (LA9_2==IS) && ((strict == false))) {s = 19;} - - else if ( (LA9_2==NULL) && ((strict == false))) {s = 20;} - - else if ( (LA9_2==ANY) && ((strict == false))) {s = 21;} - - else if ( (LA9_2==CONTAINS) && ((strict == false))) {s = 22;} - - else if ( (LA9_2==IN_FOLDER) && ((strict == false))) {s = 23;} - - else if ( (LA9_2==IN_TREE) && ((strict == false))) {s = 24;} - - else if ( (LA9_2==ORDER) && ((strict == false))) {s = 25;} - - else if ( (LA9_2==BY) && ((strict == false))) {s = 26;} - - else if ( (LA9_2==ASC) && ((strict == false))) {s = 27;} - - else if ( (LA9_2==DESC) && ((strict == false))) {s = 28;} - - else if ( (LA9_2==TIMESTAMP) && ((strict == false))) {s = 29;} - - else if ( (LA9_2==TRUE) && ((strict == false))) {s = 30;} - - else if ( (LA9_2==FALSE) && ((strict == false))) {s = 31;} - - else if ( (LA9_2==SCORE) && ((strict == false))) {s = 32;} - - else if ( (LA9_2==ID) && ((strict == false))) {s = 33;} - - - input.seek(index9_2); - if ( s>=0 ) return s; - break; - case 24 : - int LA9_5 = input.LA(1); - - - int index9_5 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_5==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_5); - if ( s>=0 ) return s; - break; - case 25 : - int LA9_16 = input.LA(1); - - - int index9_16 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_16==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_16); - if ( s>=0 ) return s; - break; - case 26 : - int LA9_13 = input.LA(1); - - - int index9_13 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_13==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_13); - if ( s>=0 ) return s; - break; - case 27 : - int LA9_23 = input.LA(1); - - - int index9_23 = input.index(); - input.rewind(); - s = -1; - if ( (LA9_23==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index9_23); - if ( s>=0 ) return s; - break; case 28 : - int LA9_12 = input.LA(1); + int LA9_37 = input.LA(1); - int index9_12 = input.index(); + int index9_37 = input.index(); input.rewind(); s = -1; - if ( (LA9_12==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA9_37==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} - input.seek(index9_12); + input.seek(index9_37); if ( s>=0 ) return s; break; case 29 : - int LA9_14 = input.LA(1); + int LA9_39 = input.LA(1); - int index9_14 = input.index(); + int index9_39 = input.index(); input.rewind(); s = -1; - if ( (LA9_14==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA9_39==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} - input.seek(index9_14); + input.seek(index9_39); if ( s>=0 ) return s; break; case 30 : - int LA9_24 = input.LA(1); + int LA9_55 = input.LA(1); - int index9_24 = input.index(); + int index9_55 = input.index(); input.rewind(); s = -1; - if ( (LA9_24==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA9_55==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} - input.seek(index9_24); + input.seek(index9_55); if ( s>=0 ) return s; break; case 31 : - int LA9_25 = input.LA(1); + int LA9_38 = input.LA(1); - int index9_25 = input.index(); + int index9_38 = input.index(); input.rewind(); s = -1; - if ( (LA9_25==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA9_38==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} - input.seek(index9_25); + input.seek(index9_38); if ( s>=0 ) return s; break; } @@ -9105,61 +8936,531 @@ public class CMISParser extends Parser { throw nvae; } } + static final String DFA12_eotS = + "\u0096\uffff"; + static final String DFA12_eofS = + "\u0096\uffff"; + static final String DFA12_minS = + "\1\40\1\46\34\uffff\1\47\1\45\1\40\5\47\1\105\1\106\1\0\1\106\1"+ + "\0\35\107\5\0\2\47\1\40\1\uffff\1\47\1\40\1\45\2\0\35\107\1\0\35"+ + "\107\1\0\2\47\2\0"; + static final String DFA12_maxS = + "\1\115\1\46\34\uffff\2\114\1\115\5\114\1\105\1\107\1\0\1\107\1"+ + "\0\35\107\5\0\2\114\1\115\1\uffff\1\114\1\115\1\114\2\0\35\107\1"+ + "\0\35\107\1\0\2\114\2\0"; + static final String DFA12_acceptS = + "\2\uffff\34\2\62\uffff\1\1\105\uffff"; + static final String DFA12_specialS = + "\1\15\47\uffff\1\5\1\uffff\1\4\35\uffff\1\6\1\7\1\10\1\11\1\12"+ + "\7\uffff\1\13\1\14\35\uffff\1\3\35\uffff\1\2\2\uffff\1\1\1\0}>"; + static final String[] DFA12_transitionS = { + "\1\2\2\uffff\1\3\4\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\uffff"+ + "\1\12\1\13\1\14\1\15\5\uffff\1\16\1\17\1\20\1\21\1\22\1\23\1"+ + "\24\1\25\1\26\1\27\1\30\1\31\2\uffff\1\35\3\uffff\1\33\1\34"+ + "\1\32\1\1", + "\1\36", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\50\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1\46", + "\1\51\1\uffff\1\52\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42"+ + "\1\44\1\45\1\46", + "\1\53\2\uffff\1\54\4\uffff\1\55\1\56\1\57\1\60\1\61\1\62\1"+ + "\uffff\1\63\1\64\1\65\1\66\5\uffff\1\67\1\70\1\71\1\72\1\73"+ + "\1\74\1\75\1\76\1\77\1\100\1\101\1\102\2\uffff\1\107\3\uffff"+ + "\1\104\1\105\1\103\1\106", + "\1\110\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\111\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\112\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\113\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\114\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\115", + "\1\116\1\117", + "\1\uffff", + "\1\121\1\122", + "\1\uffff", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\123", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\124\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\125\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\126\2\uffff\1\127\4\uffff\1\130\1\131\1\132\1\133\1\134"+ + "\1\135\1\uffff\1\136\1\137\1\140\1\141\5\uffff\1\142\1\143\1"+ + "\144\1\145\1\146\1\147\1\150\1\151\1\152\1\153\1\154\1\155\2"+ + "\uffff\1\162\3\uffff\1\157\1\160\1\156\1\161", + "", + "\1\163\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45\1"+ + "\46", + "\1\164\2\uffff\1\165\4\uffff\1\166\1\167\1\170\1\171\1\172"+ + "\1\173\1\uffff\1\174\1\175\1\176\1\177\5\uffff\1\u0080\1\u0081"+ + "\1\u0082\1\u0083\1\u0084\1\u0085\1\u0086\1\u0087\1\u0088\1\u0089"+ + "\1\u008a\1\u008b\2\uffff\1\u0090\3\uffff\1\u008d\1\u008e\1\u008c"+ + "\1\u008f", + "\1\51\1\uffff\1\u0091\34\uffff\1\47\1\43\1\37\1\40\1\41\1"+ + "\42\1\44\1\45\1\46", + "\1\uffff", + "\1\uffff", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\u0092", + "\1\uffff", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\u0093", + "\1\uffff", + "\1\u0094\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45"+ + "\1\46", + "\1\u0095\34\uffff\1\47\1\43\1\37\1\40\1\41\1\42\1\44\1\45"+ + "\1\46", + "\1\uffff", + "\1\uffff" + }; + + static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS); + static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS); + static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS); + static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS); + static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS); + static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS); + static final short[][] DFA12_transition; + + static { + int numStates = DFA12_transitionS.length; + DFA12_transition = new short[numStates][]; + for (int i=0; i ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) );"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA12_149 = input.LA(1); + + + int index12_149 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_149); + if ( s>=0 ) return s; + break; + case 1 : + int LA12_148 = input.LA(1); + + + int index12_148 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_148); + if ( s>=0 ) return s; + break; + case 2 : + int LA12_145 = input.LA(1); + + + int index12_145 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_145); + if ( s>=0 ) return s; + break; + case 3 : + int LA12_115 = input.LA(1); + + + int index12_115 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_115); + if ( s>=0 ) return s; + break; + case 4 : + int LA12_42 = input.LA(1); + + + int index12_42 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_42); + if ( s>=0 ) return s; + break; + case 5 : + int LA12_40 = input.LA(1); + + + int index12_40 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_40); + if ( s>=0 ) return s; + break; + case 6 : + int LA12_72 = input.LA(1); + + + int index12_72 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_72); + if ( s>=0 ) return s; + break; + case 7 : + int LA12_73 = input.LA(1); + + + int index12_73 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_73); + if ( s>=0 ) return s; + break; + case 8 : + int LA12_74 = input.LA(1); + + + int index12_74 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_74); + if ( s>=0 ) return s; + break; + case 9 : + int LA12_75 = input.LA(1); + + + int index12_75 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_75); + if ( s>=0 ) return s; + break; + case 10 : + int LA12_76 = input.LA(1); + + + int index12_76 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_76); + if ( s>=0 ) return s; + break; + case 11 : + int LA12_84 = input.LA(1); + + + int index12_84 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_84); + if ( s>=0 ) return s; + break; + case 12 : + int LA12_85 = input.LA(1); + + + int index12_85 = input.index(); + input.rewind(); + s = -1; + if ( (!(((strict == false)))) ) {s = 80;} + + else if ( ((strict == false)) ) {s = 29;} + + + input.seek(index12_85); + if ( s>=0 ) return s; + break; + case 13 : + int LA12_0 = input.LA(1); + + + int index12_0 = input.index(); + input.rewind(); + s = -1; + if ( (LA12_0==SCORE) ) {s = 1;} + + else if ( (LA12_0==SELECT) && ((strict == false))) {s = 2;} + + else if ( (LA12_0==AS) && ((strict == false))) {s = 3;} + + else if ( (LA12_0==FROM) && ((strict == false))) {s = 4;} + + else if ( (LA12_0==JOIN) && ((strict == false))) {s = 5;} + + else if ( (LA12_0==INNER) && ((strict == false))) {s = 6;} + + else if ( (LA12_0==LEFT) && ((strict == false))) {s = 7;} + + else if ( (LA12_0==OUTER) && ((strict == false))) {s = 8;} + + else if ( (LA12_0==ON) && ((strict == false))) {s = 9;} + + else if ( (LA12_0==WHERE) && ((strict == false))) {s = 10;} + + else if ( (LA12_0==OR) && ((strict == false))) {s = 11;} + + else if ( (LA12_0==AND) && ((strict == false))) {s = 12;} + + else if ( (LA12_0==NOT) && ((strict == false))) {s = 13;} + + else if ( (LA12_0==IN) && ((strict == false))) {s = 14;} + + else if ( (LA12_0==LIKE) && ((strict == false))) {s = 15;} + + else if ( (LA12_0==IS) && ((strict == false))) {s = 16;} + + else if ( (LA12_0==NULL) && ((strict == false))) {s = 17;} + + else if ( (LA12_0==ANY) && ((strict == false))) {s = 18;} + + else if ( (LA12_0==CONTAINS) && ((strict == false))) {s = 19;} + + else if ( (LA12_0==IN_FOLDER) && ((strict == false))) {s = 20;} + + else if ( (LA12_0==IN_TREE) && ((strict == false))) {s = 21;} + + else if ( (LA12_0==ORDER) && ((strict == false))) {s = 22;} + + else if ( (LA12_0==BY) && ((strict == false))) {s = 23;} + + else if ( (LA12_0==ASC) && ((strict == false))) {s = 24;} + + else if ( (LA12_0==DESC) && ((strict == false))) {s = 25;} + + else if ( (LA12_0==TIMESTAMP) && ((strict == false))) {s = 26;} + + else if ( (LA12_0==TRUE) && ((strict == false))) {s = 27;} + + else if ( (LA12_0==FALSE) && ((strict == false))) {s = 28;} + + else if ( (LA12_0==ID) && ((strict == false))) {s = 29;} + + + input.seek(index12_0); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 12, _s, input); + error(nvae); + throw nvae; + } + } static final String DFA10_eotS = - "\45\uffff"; + "\13\uffff"; static final String DFA10_eofS = - "\1\uffff\1\4\40\uffff\1\44\2\uffff"; + "\13\uffff"; static final String DFA10_minS = - "\1\105\1\41\1\37\2\uffff\35\106\1\41\2\uffff"; + "\1\47\12\uffff"; static final String DFA10_maxS = - "\1\106\1\77\1\114\2\uffff\35\106\1\77\2\uffff"; + "\1\114\12\uffff"; static final String DFA10_acceptS = - "\3\uffff\1\1\1\2\36\uffff\1\1\1\2"; + "\1\uffff\1\2\11\1"; static final String DFA10_specialS = - "\1\20\1\uffff\1\27\2\uffff\1\30\1\22\1\14\1\10\1\13\1\5\1\0\1\34"+ - "\1\32\1\35\1\21\1\31\1\26\1\7\1\16\1\3\1\2\1\4\1\33\1\36\1\37\1"+ - "\23\1\25\1\6\1\12\1\15\1\1\1\24\1\17\1\11\2\uffff}>"; + "\1\0\12\uffff}>"; static final String[] DFA10_transitionS = { - "\1\1\1\2", - "\1\4\2\uffff\1\3\1\uffff\2\4\7\uffff\3\4\5\uffff\1\4\1\uffff"+ - "\1\4\5\uffff\1\4", - "\1\5\2\uffff\1\6\4\uffff\1\7\1\10\1\11\1\12\1\13\1\14\1\uffff"+ - "\1\15\1\16\1\17\1\20\5\uffff\1\21\1\22\1\23\1\24\1\25\1\26\1"+ - "\27\1\30\1\31\1\32\1\33\1\34\2\uffff\1\41\3\uffff\1\36\1\37"+ - "\1\35\1\40", + "\1\1\34\uffff\1\12\1\6\1\2\1\3\1\4\1\5\1\7\1\10\1\11", + "", + "", + "", + "", + "", + "", "", "", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\42", - "\1\44\2\uffff\1\43\1\uffff\2\44\7\uffff\3\44\5\uffff\1\44"+ - "\1\uffff\1\44\5\uffff\1\44", "", "" }; @@ -9194,488 +9495,43 @@ public class CMISParser extends Parser { this.transition = DFA10_transition; } public String getDescription() { - return "345:10: ( qualifier DOT )?"; + return "()* loopback of 375:46: ( functionArgument )*"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA10_11 = input.LA(1); - - - int index10_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_11==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_11); - if ( s>=0 ) return s; - break; - case 1 : - int LA10_31 = input.LA(1); - - - int index10_31 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_31==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_31); - if ( s>=0 ) return s; - break; - case 2 : - int LA10_21 = input.LA(1); - - - int index10_21 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_21==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_21); - if ( s>=0 ) return s; - break; - case 3 : - int LA10_20 = input.LA(1); - - - int index10_20 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_20==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_20); - if ( s>=0 ) return s; - break; - case 4 : - int LA10_22 = input.LA(1); - - - int index10_22 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_22==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_22); - if ( s>=0 ) return s; - break; - case 5 : - int LA10_10 = input.LA(1); - - - int index10_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_10==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_10); - if ( s>=0 ) return s; - break; - case 6 : - int LA10_28 = input.LA(1); - - - int index10_28 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_28==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_28); - if ( s>=0 ) return s; - break; - case 7 : - int LA10_18 = input.LA(1); - - - int index10_18 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_18==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_18); - if ( s>=0 ) return s; - break; - case 8 : - int LA10_8 = input.LA(1); - - - int index10_8 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_8==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_8); - if ( s>=0 ) return s; - break; - case 9 : - int LA10_34 = input.LA(1); - - - int index10_34 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_34==DOT) && ((strict == false))) {s = 35;} - - else if ( (LA10_34==EOF||LA10_34==COMMA||(LA10_34>=RPAREN && LA10_34<=FROM)||(LA10_34>=OR && LA10_34<=NOT)||LA10_34==IN||LA10_34==IS||LA10_34==ORDER) && ((strict == false))) {s = 36;} - - - input.seek(index10_34); - if ( s>=0 ) return s; - break; - case 10 : - int LA10_29 = input.LA(1); - - - int index10_29 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_29==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_29); - if ( s>=0 ) return s; - break; - case 11 : - int LA10_9 = input.LA(1); - - - int index10_9 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_9==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_9); - if ( s>=0 ) return s; - break; - case 12 : - int LA10_7 = input.LA(1); - - - int index10_7 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_7==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_7); - if ( s>=0 ) return s; - break; - case 13 : - int LA10_30 = input.LA(1); - - - int index10_30 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_30==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_30); - if ( s>=0 ) return s; - break; - case 14 : - int LA10_19 = input.LA(1); - - - int index10_19 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_19==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_19); - if ( s>=0 ) return s; - break; - case 15 : - int LA10_33 = input.LA(1); - - - int index10_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_33==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_33); - if ( s>=0 ) return s; - break; - case 16 : int LA10_0 = input.LA(1); int index10_0 = input.index(); input.rewind(); s = -1; - if ( (LA10_0==ID) ) {s = 1;} + if ( (LA10_0==RPAREN) ) {s = 1;} - else if ( (LA10_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} + else if ( (LA10_0==ID) ) {s = 2;} + + else if ( (LA10_0==DOUBLE_QUOTE) && ((strict == false))) {s = 3;} + + else if ( (LA10_0==FLOATING_POINT_LITERAL) ) {s = 4;} + + else if ( (LA10_0==DECIMAL_INTEGER_LITERAL) ) {s = 5;} + + else if ( (LA10_0==QUOTED_STRING) ) {s = 6;} + + else if ( (LA10_0==TRUE) ) {s = 7;} + + else if ( (LA10_0==FALSE) ) {s = 8;} + + else if ( (LA10_0==TIMESTAMP) ) {s = 9;} + + else if ( (LA10_0==COLON) && ((strict == false))) {s = 10;} input.seek(index10_0); if ( s>=0 ) return s; break; - case 17 : - int LA10_15 = input.LA(1); - - - int index10_15 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_15==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_15); - if ( s>=0 ) return s; - break; - case 18 : - int LA10_6 = input.LA(1); - - - int index10_6 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_6==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_6); - if ( s>=0 ) return s; - break; - case 19 : - int LA10_26 = input.LA(1); - - - int index10_26 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_26==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_26); - if ( s>=0 ) return s; - break; - case 20 : - int LA10_32 = input.LA(1); - - - int index10_32 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_32==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_32); - if ( s>=0 ) return s; - break; - case 21 : - int LA10_27 = input.LA(1); - - - int index10_27 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_27==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_27); - if ( s>=0 ) return s; - break; - case 22 : - int LA10_17 = input.LA(1); - - - int index10_17 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_17==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_17); - if ( s>=0 ) return s; - break; - case 23 : - int LA10_2 = input.LA(1); - - - int index10_2 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_2==SELECT) && ((strict == false))) {s = 5;} - - else if ( (LA10_2==AS) && ((strict == false))) {s = 6;} - - else if ( (LA10_2==FROM) && ((strict == false))) {s = 7;} - - else if ( (LA10_2==JOIN) && ((strict == false))) {s = 8;} - - else if ( (LA10_2==INNER) && ((strict == false))) {s = 9;} - - else if ( (LA10_2==LEFT) && ((strict == false))) {s = 10;} - - else if ( (LA10_2==OUTER) && ((strict == false))) {s = 11;} - - else if ( (LA10_2==ON) && ((strict == false))) {s = 12;} - - else if ( (LA10_2==WHERE) && ((strict == false))) {s = 13;} - - else if ( (LA10_2==OR) && ((strict == false))) {s = 14;} - - else if ( (LA10_2==AND) && ((strict == false))) {s = 15;} - - else if ( (LA10_2==NOT) && ((strict == false))) {s = 16;} - - else if ( (LA10_2==IN) && ((strict == false))) {s = 17;} - - else if ( (LA10_2==LIKE) && ((strict == false))) {s = 18;} - - else if ( (LA10_2==IS) && ((strict == false))) {s = 19;} - - else if ( (LA10_2==NULL) && ((strict == false))) {s = 20;} - - else if ( (LA10_2==ANY) && ((strict == false))) {s = 21;} - - else if ( (LA10_2==CONTAINS) && ((strict == false))) {s = 22;} - - else if ( (LA10_2==IN_FOLDER) && ((strict == false))) {s = 23;} - - else if ( (LA10_2==IN_TREE) && ((strict == false))) {s = 24;} - - else if ( (LA10_2==ORDER) && ((strict == false))) {s = 25;} - - else if ( (LA10_2==BY) && ((strict == false))) {s = 26;} - - else if ( (LA10_2==ASC) && ((strict == false))) {s = 27;} - - else if ( (LA10_2==DESC) && ((strict == false))) {s = 28;} - - else if ( (LA10_2==TIMESTAMP) && ((strict == false))) {s = 29;} - - else if ( (LA10_2==TRUE) && ((strict == false))) {s = 30;} - - else if ( (LA10_2==FALSE) && ((strict == false))) {s = 31;} - - else if ( (LA10_2==SCORE) && ((strict == false))) {s = 32;} - - else if ( (LA10_2==ID) && ((strict == false))) {s = 33;} - - - input.seek(index10_2); - if ( s>=0 ) return s; - break; - case 24 : - int LA10_5 = input.LA(1); - - - int index10_5 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_5==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_5); - if ( s>=0 ) return s; - break; - case 25 : - int LA10_16 = input.LA(1); - - - int index10_16 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_16==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_16); - if ( s>=0 ) return s; - break; - case 26 : - int LA10_13 = input.LA(1); - - - int index10_13 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_13==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_13); - if ( s>=0 ) return s; - break; - case 27 : - int LA10_23 = input.LA(1); - - - int index10_23 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_23==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_23); - if ( s>=0 ) return s; - break; - case 28 : - int LA10_12 = input.LA(1); - - - int index10_12 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_12==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_12); - if ( s>=0 ) return s; - break; - case 29 : - int LA10_14 = input.LA(1); - - - int index10_14 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_14==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_14); - if ( s>=0 ) return s; - break; - case 30 : - int LA10_24 = input.LA(1); - - - int index10_24 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_24==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_24); - if ( s>=0 ) return s; - break; - case 31 : - int LA10_25 = input.LA(1); - - - int index10_25 = input.index(); - input.rewind(); - s = -1; - if ( (LA10_25==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index10_25); - if ( s>=0 ) return s; - break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = @@ -9684,159 +9540,189 @@ public class CMISParser extends Parser { throw nvae; } } + static final String DFA11_eotS = + "\13\uffff"; + static final String DFA11_eofS = + "\13\uffff"; + static final String DFA11_minS = + "\1\47\12\uffff"; + static final String DFA11_maxS = + "\1\114\12\uffff"; + static final String DFA11_acceptS = + "\1\uffff\1\2\11\1"; + static final String DFA11_specialS = + "\1\0\12\uffff}>"; + static final String[] DFA11_transitionS = { + "\1\1\34\uffff\1\12\1\6\1\2\1\3\1\4\1\5\1\7\1\10\1\11", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA11_eot = DFA.unpackEncodedString(DFA11_eotS); + static final short[] DFA11_eof = DFA.unpackEncodedString(DFA11_eofS); + static final char[] DFA11_min = DFA.unpackEncodedStringToUnsignedChars(DFA11_minS); + static final char[] DFA11_max = DFA.unpackEncodedStringToUnsignedChars(DFA11_maxS); + static final short[] DFA11_accept = DFA.unpackEncodedString(DFA11_acceptS); + static final short[] DFA11_special = DFA.unpackEncodedString(DFA11_specialS); + static final short[][] DFA11_transition; + + static { + int numStates = DFA11_transitionS.length; + DFA11_transition = new short[numStates][]; + for (int i=0; i=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 11, _s, input); + error(nvae); + throw nvae; + } + } static final String DFA13_eotS = - "\173\uffff"; + "\76\uffff"; static final String DFA13_eofS = - "\173\uffff"; + "\76\uffff"; static final String DFA13_minS = - "\1\37\1\45\1\uffff\1\46\1\44\1\37\5\46\1\104\1\105\2\0\1\105\35"+ - "\106\5\0\2\46\1\37\1\uffff\1\46\1\37\1\44\2\0\35\106\1\0\35\106"+ - "\1\0\2\46\2\0"; + "\1\104\1\45\1\40\22\uffff\35\107\1\45\13\uffff"; static final String DFA13_maxS = - "\1\114\1\45\1\uffff\2\113\1\114\5\113\1\104\1\106\2\0\36\106\5"+ - "\0\2\113\1\114\1\uffff\1\113\1\114\1\113\2\0\35\106\1\0\35\106\1"+ - "\0\2\113\2\0"; + "\2\114\1\115\22\uffff\35\107\1\114\13\uffff"; static final String DFA13_acceptS = - "\2\uffff\1\2\62\uffff\1\1\105\uffff"; + "\3\uffff\7\3\1\1\12\2\36\uffff\12\2\1\1"; static final String DFA13_specialS = - "\1\0\14\uffff\1\10\1\11\36\uffff\1\7\1\6\1\5\1\4\1\12\7\uffff\1"+ - "\13\1\14\35\uffff\1\15\35\uffff\1\3\2\uffff\1\2\1\1}>"; + "\1\7\1\uffff\1\1\22\uffff\1\16\1\21\1\12\1\13\1\14\1\27\1\30\1"+ + "\24\1\23\1\25\1\34\1\37\1\35\1\31\1\33\1\2\1\3\1\0\1\6\1\4\1\5\1"+ + "\15\1\10\1\20\1\22\1\17\1\26\1\32\1\36\1\11\13\uffff}>"; static final String[] DFA13_transitionS = { - "\1\2\2\uffff\1\2\4\uffff\6\2\1\uffff\4\2\5\uffff\14\2\2\uffff"+ - "\1\2\3\uffff\3\2\1\1", - "\1\3", + "\1\11\1\5\1\1\1\2\1\3\1\4\1\6\1\7\1\10", + "\1\12\1\uffff\1\13\34\uffff\1\24\1\20\1\14\1\15\1\16\1\17"+ + "\1\21\1\22\1\23", + "\1\25\2\uffff\1\26\4\uffff\1\27\1\30\1\31\1\32\1\33\1\34\1"+ + "\uffff\1\35\1\36\1\37\1\40\5\uffff\1\41\1\42\1\43\1\44\1\45"+ + "\1\46\1\47\1\50\1\51\1\52\1\53\1\54\2\uffff\1\61\3\uffff\1\56"+ + "\1\57\1\55\1\60", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", "", - "\1\15\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\17\1\uffff\1\16\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11"+ - "\1\12\1\13", - "\1\20\2\uffff\1\21\4\uffff\1\22\1\23\1\24\1\25\1\26\1\27\1"+ - "\uffff\1\30\1\31\1\32\1\33\5\uffff\1\34\1\35\1\36\1\37\1\40"+ - "\1\41\1\42\1\43\1\44\1\45\1\46\1\47\2\uffff\1\54\3\uffff\1\51"+ - "\1\52\1\50\1\53", - "\1\55\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\56\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\57\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\60\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\61\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", "\1\62", - "\1\63\1\64", - "\1\uffff", - "\1\uffff", - "\1\66\1\67", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\70", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\71\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\72\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\73\2\uffff\1\74\4\uffff\1\75\1\76\1\77\1\100\1\101\1\102"+ - "\1\uffff\1\103\1\104\1\105\1\106\5\uffff\1\107\1\110\1\111\1"+ - "\112\1\113\1\114\1\115\1\116\1\117\1\120\1\121\1\122\2\uffff"+ - "\1\127\3\uffff\1\124\1\125\1\123\1\126", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\62", + "\1\75\1\uffff\1\63\34\uffff\1\74\1\70\1\64\1\65\1\66\1\67"+ + "\1\71\1\72\1\73", "", - "\1\130\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\131\2\uffff\1\132\4\uffff\1\133\1\134\1\135\1\136\1\137"+ - "\1\140\1\uffff\1\141\1\142\1\143\1\144\5\uffff\1\145\1\146\1"+ - "\147\1\150\1\151\1\152\1\153\1\154\1\155\1\156\1\157\1\160\2"+ - "\uffff\1\165\3\uffff\1\162\1\163\1\161\1\164", - "\1\17\1\uffff\1\166\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11"+ - "\1\12\1\13", - "\1\uffff", - "\1\uffff", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\167", - "\1\uffff", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\170", - "\1\uffff", - "\1\171\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\172\34\uffff\1\14\1\10\1\4\1\5\1\6\1\7\1\11\1\12\1\13", - "\1\uffff", - "\1\uffff" + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" }; static final short[] DFA13_eot = DFA.unpackEncodedString(DFA13_eotS); @@ -9869,220 +9755,518 @@ public class CMISParser extends Parser { this.transition = DFA13_transition; } public String getDescription() { - return "349:1: valueFunction : (cmisFunctionName= cmisFunction LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $cmisFunctionName LPAREN ( functionArgument )* RPAREN ) | {...}? =>functionName= keyWordOrId LPAREN ( functionArgument )* RPAREN -> ^( FUNCTION $functionName LPAREN ( functionArgument )* RPAREN ) );"; + return "383:1: functionArgument : ( qualifier DOT columnName -> ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : + int LA13_38 = input.LA(1); + + + int index13_38 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_38==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_38); + if ( s>=0 ) return s; + break; + case 1 : + int LA13_2 = input.LA(1); + + + int index13_2 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_2==SELECT) && ((strict == false))) {s = 21;} + + else if ( (LA13_2==AS) && ((strict == false))) {s = 22;} + + else if ( (LA13_2==FROM) && ((strict == false))) {s = 23;} + + else if ( (LA13_2==JOIN) && ((strict == false))) {s = 24;} + + else if ( (LA13_2==INNER) && ((strict == false))) {s = 25;} + + else if ( (LA13_2==LEFT) && ((strict == false))) {s = 26;} + + else if ( (LA13_2==OUTER) && ((strict == false))) {s = 27;} + + else if ( (LA13_2==ON) && ((strict == false))) {s = 28;} + + else if ( (LA13_2==WHERE) && ((strict == false))) {s = 29;} + + else if ( (LA13_2==OR) && ((strict == false))) {s = 30;} + + else if ( (LA13_2==AND) && ((strict == false))) {s = 31;} + + else if ( (LA13_2==NOT) && ((strict == false))) {s = 32;} + + else if ( (LA13_2==IN) && ((strict == false))) {s = 33;} + + else if ( (LA13_2==LIKE) && ((strict == false))) {s = 34;} + + else if ( (LA13_2==IS) && ((strict == false))) {s = 35;} + + else if ( (LA13_2==NULL) && ((strict == false))) {s = 36;} + + else if ( (LA13_2==ANY) && ((strict == false))) {s = 37;} + + else if ( (LA13_2==CONTAINS) && ((strict == false))) {s = 38;} + + else if ( (LA13_2==IN_FOLDER) && ((strict == false))) {s = 39;} + + else if ( (LA13_2==IN_TREE) && ((strict == false))) {s = 40;} + + else if ( (LA13_2==ORDER) && ((strict == false))) {s = 41;} + + else if ( (LA13_2==BY) && ((strict == false))) {s = 42;} + + else if ( (LA13_2==ASC) && ((strict == false))) {s = 43;} + + else if ( (LA13_2==DESC) && ((strict == false))) {s = 44;} + + else if ( (LA13_2==TIMESTAMP) && ((strict == false))) {s = 45;} + + else if ( (LA13_2==TRUE) && ((strict == false))) {s = 46;} + + else if ( (LA13_2==FALSE) && ((strict == false))) {s = 47;} + + else if ( (LA13_2==SCORE) && ((strict == false))) {s = 48;} + + else if ( (LA13_2==ID) && ((strict == false))) {s = 49;} + + + input.seek(index13_2); + if ( s>=0 ) return s; + break; + case 2 : + int LA13_36 = input.LA(1); + + + int index13_36 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_36==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_36); + if ( s>=0 ) return s; + break; + case 3 : + int LA13_37 = input.LA(1); + + + int index13_37 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_37==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_37); + if ( s>=0 ) return s; + break; + case 4 : + int LA13_40 = input.LA(1); + + + int index13_40 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_40==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_40); + if ( s>=0 ) return s; + break; + case 5 : + int LA13_41 = input.LA(1); + + + int index13_41 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_41==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_41); + if ( s>=0 ) return s; + break; + case 6 : + int LA13_39 = input.LA(1); + + + int index13_39 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_39==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_39); + if ( s>=0 ) return s; + break; + case 7 : int LA13_0 = input.LA(1); int index13_0 = input.index(); input.rewind(); s = -1; - if ( (LA13_0==SCORE) ) {s = 1;} + if ( (LA13_0==ID) ) {s = 1;} - else if ( (LA13_0==SELECT||LA13_0==AS||(LA13_0>=FROM && LA13_0<=ON)||(LA13_0>=WHERE && LA13_0<=NOT)||(LA13_0>=IN && LA13_0<=DESC)||LA13_0==ID||(LA13_0>=TRUE && LA13_0<=TIMESTAMP)) && ((strict == false))) {s = 2;} + else if ( (LA13_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} + + else if ( (LA13_0==FLOATING_POINT_LITERAL) ) {s = 3;} + + else if ( (LA13_0==DECIMAL_INTEGER_LITERAL) ) {s = 4;} + + else if ( (LA13_0==QUOTED_STRING) ) {s = 5;} + + else if ( (LA13_0==TRUE) ) {s = 6;} + + else if ( (LA13_0==FALSE) ) {s = 7;} + + else if ( (LA13_0==TIMESTAMP) ) {s = 8;} + + else if ( (LA13_0==COLON) && ((strict == false))) {s = 9;} input.seek(index13_0); if ( s>=0 ) return s; break; - case 1 : - int LA13_122 = input.LA(1); + case 8 : + int LA13_43 = input.LA(1); - int index13_122 = input.index(); + int index13_43 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_43==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - input.seek(index13_122); + input.seek(index13_43); if ( s>=0 ) return s; break; - case 2 : - int LA13_121 = input.LA(1); + case 9 : + int LA13_50 = input.LA(1); - int index13_121 = input.index(); + int index13_50 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} + if ( (LA13_50==RPAREN) && ((strict == false))) {s = 51;} - else if ( ((strict == false)) ) {s = 2;} + else if ( (LA13_50==ID) && ((strict == false))) {s = 52;} + + else if ( (LA13_50==DOUBLE_QUOTE) && ((strict == false))) {s = 53;} + + else if ( (LA13_50==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 54;} + + else if ( (LA13_50==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 55;} + + else if ( (LA13_50==QUOTED_STRING) && ((strict == false))) {s = 56;} + + else if ( (LA13_50==TRUE) && ((strict == false))) {s = 57;} + + else if ( (LA13_50==FALSE) && ((strict == false))) {s = 58;} + + else if ( (LA13_50==TIMESTAMP) && ((strict == false))) {s = 59;} + + else if ( (LA13_50==COLON) && ((strict == false))) {s = 60;} + + else if ( (LA13_50==DOT) && ((strict == false))) {s = 61;} - input.seek(index13_121); + input.seek(index13_50); if ( s>=0 ) return s; break; - case 3 : - int LA13_118 = input.LA(1); + case 10 : + int LA13_23 = input.LA(1); - int index13_118 = input.index(); + int index13_23 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_23==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - input.seek(index13_118); + input.seek(index13_23); if ( s>=0 ) return s; break; - case 4 : - int LA13_48 = input.LA(1); + case 11 : + int LA13_24 = input.LA(1); - int index13_48 = input.index(); + int index13_24 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_24==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - input.seek(index13_48); + input.seek(index13_24); if ( s>=0 ) return s; break; - case 5 : - int LA13_47 = input.LA(1); + case 12 : + int LA13_25 = input.LA(1); - int index13_47 = input.index(); + int index13_25 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_25==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - input.seek(index13_47); + input.seek(index13_25); if ( s>=0 ) return s; break; - case 6 : + case 13 : + int LA13_42 = input.LA(1); + + + int index13_42 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_42==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_42); + if ( s>=0 ) return s; + break; + case 14 : + int LA13_21 = input.LA(1); + + + int index13_21 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_21==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_21); + if ( s>=0 ) return s; + break; + case 15 : int LA13_46 = input.LA(1); int index13_46 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_46==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} input.seek(index13_46); if ( s>=0 ) return s; break; - case 7 : + case 16 : + int LA13_44 = input.LA(1); + + + int index13_44 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_44==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_44); + if ( s>=0 ) return s; + break; + case 17 : + int LA13_22 = input.LA(1); + + + int index13_22 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_22==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_22); + if ( s>=0 ) return s; + break; + case 18 : int LA13_45 = input.LA(1); int index13_45 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_45==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} input.seek(index13_45); if ( s>=0 ) return s; break; - case 8 : - int LA13_13 = input.LA(1); + case 19 : + int LA13_29 = input.LA(1); - int index13_13 = input.index(); + int index13_29 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_29==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - input.seek(index13_13); + input.seek(index13_29); if ( s>=0 ) return s; break; - case 9 : - int LA13_14 = input.LA(1); + case 20 : + int LA13_28 = input.LA(1); - int index13_14 = input.index(); + int index13_28 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_28==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - input.seek(index13_14); + input.seek(index13_28); if ( s>=0 ) return s; break; - case 10 : + case 21 : + int LA13_30 = input.LA(1); + + + int index13_30 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_30==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_30); + if ( s>=0 ) return s; + break; + case 22 : + int LA13_47 = input.LA(1); + + + int index13_47 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_47==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_47); + if ( s>=0 ) return s; + break; + case 23 : + int LA13_26 = input.LA(1); + + + int index13_26 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_26==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_26); + if ( s>=0 ) return s; + break; + case 24 : + int LA13_27 = input.LA(1); + + + int index13_27 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_27==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_27); + if ( s>=0 ) return s; + break; + case 25 : + int LA13_34 = input.LA(1); + + + int index13_34 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_34==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_34); + if ( s>=0 ) return s; + break; + case 26 : + int LA13_48 = input.LA(1); + + + int index13_48 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_48==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_48); + if ( s>=0 ) return s; + break; + case 27 : + int LA13_35 = input.LA(1); + + + int index13_35 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_35==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_35); + if ( s>=0 ) return s; + break; + case 28 : + int LA13_31 = input.LA(1); + + + int index13_31 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_31==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_31); + if ( s>=0 ) return s; + break; + case 29 : + int LA13_33 = input.LA(1); + + + int index13_33 = input.index(); + input.rewind(); + s = -1; + if ( (LA13_33==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + + + input.seek(index13_33); + if ( s>=0 ) return s; + break; + case 30 : int LA13_49 = input.LA(1); int index13_49 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_49==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} input.seek(index13_49); if ( s>=0 ) return s; break; - case 11 : - int LA13_57 = input.LA(1); + case 31 : + int LA13_32 = input.LA(1); - int index13_57 = input.index(); + int index13_32 = input.index(); input.rewind(); s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} + if ( (LA13_32==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - input.seek(index13_57); - if ( s>=0 ) return s; - break; - case 12 : - int LA13_58 = input.LA(1); - - - int index13_58 = input.index(); - input.rewind(); - s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} - - - input.seek(index13_58); - if ( s>=0 ) return s; - break; - case 13 : - int LA13_88 = input.LA(1); - - - int index13_88 = input.index(); - input.rewind(); - s = -1; - if ( (!(((strict == false)))) ) {s = 53;} - - else if ( ((strict == false)) ) {s = 2;} - - - input.seek(index13_88); + input.seek(index13_32); if ( s>=0 ) return s; break; } @@ -10094,603 +10278,20 @@ public class CMISParser extends Parser { } } static final String DFA14_eotS = - "\47\uffff"; + "\43\uffff"; static final String DFA14_eofS = - "\47\uffff"; + "\43\uffff"; static final String DFA14_minS = - "\1\103\1\44\1\37\4\uffff\35\106\1\44\2\uffff"; + "\1\106\1\0\1\40\2\uffff\35\107\1\0"; static final String DFA14_maxS = - "\2\113\1\114\4\uffff\35\106\1\113\2\uffff"; + "\1\107\1\0\1\115\2\uffff\35\107\1\0"; static final String DFA14_acceptS = - "\3\uffff\2\3\1\2\1\1\36\uffff\1\1\1\2"; - static final String DFA14_specialS = - "\1\26\1\uffff\1\25\4\uffff\1\27\1\20\1\13\1\10\1\12\1\5\1\0\1\34"+ - "\1\33\1\36\1\17\1\31\1\24\1\7\1\15\1\3\1\2\1\4\1\32\1\35\1\37\1"+ - "\21\1\23\1\6\1\11\1\14\1\1\1\22\1\16\1\30\2\uffff}>"; - static final String[] DFA14_transitionS = { - "\1\4\1\3\1\1\1\2\5\3", - "\1\6\1\uffff\1\5\34\uffff\11\5", - "\1\7\2\uffff\1\10\4\uffff\1\11\1\12\1\13\1\14\1\15\1\16\1"+ - "\uffff\1\17\1\20\1\21\1\22\5\uffff\1\23\1\24\1\25\1\26\1\27"+ - "\1\30\1\31\1\32\1\33\1\34\1\35\1\36\2\uffff\1\43\3\uffff\1\40"+ - "\1\41\1\37\1\42", - "", - "", - "", - "", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\44", - "\1\45\1\uffff\1\46\34\uffff\11\46", - "", - "" - }; - - static final short[] DFA14_eot = DFA.unpackEncodedString(DFA14_eotS); - static final short[] DFA14_eof = DFA.unpackEncodedString(DFA14_eofS); - static final char[] DFA14_min = DFA.unpackEncodedStringToUnsignedChars(DFA14_minS); - static final char[] DFA14_max = DFA.unpackEncodedStringToUnsignedChars(DFA14_maxS); - static final short[] DFA14_accept = DFA.unpackEncodedString(DFA14_acceptS); - static final short[] DFA14_special = DFA.unpackEncodedString(DFA14_specialS); - static final short[][] DFA14_transition; - - static { - int numStates = DFA14_transitionS.length; - DFA14_transition = new short[numStates][]; - for (int i=0; i ^( COLUMN_REF columnName qualifier ) | identifier | literalOrParameterName );"; - } - public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { - TokenStream input = (TokenStream)_input; - int _s = s; - switch ( s ) { - case 0 : - int LA14_13 = input.LA(1); - - - int index14_13 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_13==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_13); - if ( s>=0 ) return s; - break; - case 1 : - int LA14_33 = input.LA(1); - - - int index14_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_33==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_33); - if ( s>=0 ) return s; - break; - case 2 : - int LA14_23 = input.LA(1); - - - int index14_23 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_23==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_23); - if ( s>=0 ) return s; - break; - case 3 : - int LA14_22 = input.LA(1); - - - int index14_22 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_22==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_22); - if ( s>=0 ) return s; - break; - case 4 : - int LA14_24 = input.LA(1); - - - int index14_24 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_24==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_24); - if ( s>=0 ) return s; - break; - case 5 : - int LA14_12 = input.LA(1); - - - int index14_12 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_12==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_12); - if ( s>=0 ) return s; - break; - case 6 : - int LA14_30 = input.LA(1); - - - int index14_30 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_30==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_30); - if ( s>=0 ) return s; - break; - case 7 : - int LA14_20 = input.LA(1); - - - int index14_20 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_20==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_20); - if ( s>=0 ) return s; - break; - case 8 : - int LA14_10 = input.LA(1); - - - int index14_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_10==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_10); - if ( s>=0 ) return s; - break; - case 9 : - int LA14_31 = input.LA(1); - - - int index14_31 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_31==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_31); - if ( s>=0 ) return s; - break; - case 10 : - int LA14_11 = input.LA(1); - - - int index14_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_11==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_11); - if ( s>=0 ) return s; - break; - case 11 : - int LA14_9 = input.LA(1); - - - int index14_9 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_9==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_9); - if ( s>=0 ) return s; - break; - case 12 : - int LA14_32 = input.LA(1); - - - int index14_32 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_32==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_32); - if ( s>=0 ) return s; - break; - case 13 : - int LA14_21 = input.LA(1); - - - int index14_21 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_21==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_21); - if ( s>=0 ) return s; - break; - case 14 : - int LA14_35 = input.LA(1); - - - int index14_35 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_35==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_35); - if ( s>=0 ) return s; - break; - case 15 : - int LA14_17 = input.LA(1); - - - int index14_17 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_17==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_17); - if ( s>=0 ) return s; - break; - case 16 : - int LA14_8 = input.LA(1); - - - int index14_8 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_8==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_8); - if ( s>=0 ) return s; - break; - case 17 : - int LA14_28 = input.LA(1); - - - int index14_28 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_28==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_28); - if ( s>=0 ) return s; - break; - case 18 : - int LA14_34 = input.LA(1); - - - int index14_34 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_34==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_34); - if ( s>=0 ) return s; - break; - case 19 : - int LA14_29 = input.LA(1); - - - int index14_29 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_29==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_29); - if ( s>=0 ) return s; - break; - case 20 : - int LA14_19 = input.LA(1); - - - int index14_19 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_19==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_19); - if ( s>=0 ) return s; - break; - case 21 : - int LA14_2 = input.LA(1); - - - int index14_2 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_2==SELECT) && ((strict == false))) {s = 7;} - - else if ( (LA14_2==AS) && ((strict == false))) {s = 8;} - - else if ( (LA14_2==FROM) && ((strict == false))) {s = 9;} - - else if ( (LA14_2==JOIN) && ((strict == false))) {s = 10;} - - else if ( (LA14_2==INNER) && ((strict == false))) {s = 11;} - - else if ( (LA14_2==LEFT) && ((strict == false))) {s = 12;} - - else if ( (LA14_2==OUTER) && ((strict == false))) {s = 13;} - - else if ( (LA14_2==ON) && ((strict == false))) {s = 14;} - - else if ( (LA14_2==WHERE) && ((strict == false))) {s = 15;} - - else if ( (LA14_2==OR) && ((strict == false))) {s = 16;} - - else if ( (LA14_2==AND) && ((strict == false))) {s = 17;} - - else if ( (LA14_2==NOT) && ((strict == false))) {s = 18;} - - else if ( (LA14_2==IN) && ((strict == false))) {s = 19;} - - else if ( (LA14_2==LIKE) && ((strict == false))) {s = 20;} - - else if ( (LA14_2==IS) && ((strict == false))) {s = 21;} - - else if ( (LA14_2==NULL) && ((strict == false))) {s = 22;} - - else if ( (LA14_2==ANY) && ((strict == false))) {s = 23;} - - else if ( (LA14_2==CONTAINS) && ((strict == false))) {s = 24;} - - else if ( (LA14_2==IN_FOLDER) && ((strict == false))) {s = 25;} - - else if ( (LA14_2==IN_TREE) && ((strict == false))) {s = 26;} - - else if ( (LA14_2==ORDER) && ((strict == false))) {s = 27;} - - else if ( (LA14_2==BY) && ((strict == false))) {s = 28;} - - else if ( (LA14_2==ASC) && ((strict == false))) {s = 29;} - - else if ( (LA14_2==DESC) && ((strict == false))) {s = 30;} - - else if ( (LA14_2==TIMESTAMP) && ((strict == false))) {s = 31;} - - else if ( (LA14_2==TRUE) && ((strict == false))) {s = 32;} - - else if ( (LA14_2==FALSE) && ((strict == false))) {s = 33;} - - else if ( (LA14_2==SCORE) && ((strict == false))) {s = 34;} - - else if ( (LA14_2==ID) && ((strict == false))) {s = 35;} - - - input.seek(index14_2); - if ( s>=0 ) return s; - break; - case 22 : - int LA14_0 = input.LA(1); - - - int index14_0 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_0==ID) ) {s = 1;} - - else if ( (LA14_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} - - else if ( (LA14_0==QUOTED_STRING||(LA14_0>=FLOATING_POINT_LITERAL && LA14_0<=TIMESTAMP)) ) {s = 3;} - - else if ( (LA14_0==COLON) && ((strict == false))) {s = 4;} - - - input.seek(index14_0); - if ( s>=0 ) return s; - break; - case 23 : - int LA14_7 = input.LA(1); - - - int index14_7 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_7==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_7); - if ( s>=0 ) return s; - break; - case 24 : - int LA14_36 = input.LA(1); - - - int index14_36 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_36==DOT) && ((strict == false))) {s = 37;} - - else if ( (LA14_36==RPAREN||(LA14_36>=COLON && LA14_36<=TIMESTAMP)) && ((strict == false))) {s = 38;} - - - input.seek(index14_36); - if ( s>=0 ) return s; - break; - case 25 : - int LA14_18 = input.LA(1); - - - int index14_18 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_18==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_18); - if ( s>=0 ) return s; - break; - case 26 : - int LA14_25 = input.LA(1); - - - int index14_25 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_25==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_25); - if ( s>=0 ) return s; - break; - case 27 : - int LA14_15 = input.LA(1); - - - int index14_15 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_15==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_15); - if ( s>=0 ) return s; - break; - case 28 : - int LA14_14 = input.LA(1); - - - int index14_14 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_14==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_14); - if ( s>=0 ) return s; - break; - case 29 : - int LA14_26 = input.LA(1); - - - int index14_26 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_26==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_26); - if ( s>=0 ) return s; - break; - case 30 : - int LA14_16 = input.LA(1); - - - int index14_16 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_16==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_16); - if ( s>=0 ) return s; - break; - case 31 : - int LA14_27 = input.LA(1); - - - int index14_27 = input.index(); - input.rewind(); - s = -1; - if ( (LA14_27==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index14_27); - if ( s>=0 ) return s; - break; - } - if (state.backtracking>0) {state.failed=true; return -1;} - NoViableAltException nvae = - new NoViableAltException(getDescription(), 14, _s, input); - error(nvae); - throw nvae; - } - } - static final String DFA15_eotS = - "\43\uffff"; - static final String DFA15_eofS = - "\43\uffff"; - static final String DFA15_minS = - "\1\105\1\0\1\37\2\uffff\35\106\1\0"; - static final String DFA15_maxS = - "\1\106\1\0\1\114\2\uffff\35\106\1\0"; - static final String DFA15_acceptS = "\3\uffff\1\1\1\2\36\uffff"; - static final String DFA15_specialS = - "\1\36\1\16\1\5\2\uffff\1\32\1\34\1\37\1\17\1\21\1\23\1\25\1\10"+ - "\1\6\1\3\1\1\1\15\1\14\1\13\1\12\1\27\1\24\1\22\1\20\1\40\1\35\1"+ - "\33\1\31\1\4\1\7\1\0\1\2\1\30\1\11\1\26}>"; - static final String[] DFA15_transitionS = { + static final String DFA14_specialS = + "\1\2\1\25\1\40\2\uffff\1\23\1\26\1\24\1\32\1\30\1\37\1\34\1\4\1"+ + "\1\1\10\1\6\1\14\1\12\1\21\1\16\1\22\1\17\1\15\1\13\1\11\1\5\1\3"+ + "\1\0\1\36\1\33\1\31\1\27\1\35\1\7\1\20}>"; + static final String[] DFA14_transitionS = { "\1\1\1\2", "\1\uffff", "\1\5\2\uffff\1\6\4\uffff\1\7\1\10\1\11\1\12\1\13\1\14\1\uffff"+ @@ -10731,561 +10332,671 @@ public class CMISParser extends Parser { "\1\uffff" }; - static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS); - static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS); - static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS); - static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS); - static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS); - static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS); - static final short[][] DFA15_transition; + static final short[] DFA14_eot = DFA.unpackEncodedString(DFA14_eotS); + static final short[] DFA14_eof = DFA.unpackEncodedString(DFA14_eofS); + static final char[] DFA14_min = DFA.unpackEncodedStringToUnsignedChars(DFA14_minS); + static final char[] DFA14_max = DFA.unpackEncodedStringToUnsignedChars(DFA14_maxS); + static final short[] DFA14_accept = DFA.unpackEncodedString(DFA14_acceptS); + static final short[] DFA14_special = DFA.unpackEncodedString(DFA14_specialS); + static final short[][] DFA14_transition; static { - int numStates = DFA15_transitionS.length; - DFA15_transition = new short[numStates][]; + int numStates = DFA14_transitionS.length; + DFA14_transition = new short[numStates][]; for (int i=0; i tableName -> tableName | correlationName -> correlationName );"; + return "392:1: qualifier : ( ( tableName )=> tableName -> tableName | correlationName -> correlationName );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA15_30 = input.LA(1); + int LA14_27 = input.LA(1); - int index15_30 = input.index(); + int index14_27 = input.index(); input.rewind(); s = -1; - if ( (LA15_30==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_27==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_30); + input.seek(index14_27); if ( s>=0 ) return s; break; case 1 : - int LA15_15 = input.LA(1); + int LA14_13 = input.LA(1); - int index15_15 = input.index(); + int index14_13 = input.index(); input.rewind(); s = -1; - if ( (LA15_15==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_13==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_15); + input.seek(index14_13); if ( s>=0 ) return s; break; case 2 : - int LA15_31 = input.LA(1); + int LA14_0 = input.LA(1); - int index15_31 = input.index(); + int index14_0 = input.index(); input.rewind(); s = -1; - if ( (LA15_31==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_0==ID) ) {s = 1;} + + else if ( (LA14_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} - input.seek(index15_31); + input.seek(index14_0); if ( s>=0 ) return s; break; case 3 : - int LA15_14 = input.LA(1); + int LA14_26 = input.LA(1); - int index15_14 = input.index(); + int index14_26 = input.index(); input.rewind(); s = -1; - if ( (LA15_14==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_26==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_14); + input.seek(index14_26); if ( s>=0 ) return s; break; case 4 : - int LA15_28 = input.LA(1); + int LA14_12 = input.LA(1); - int index15_28 = input.index(); + int index14_12 = input.index(); input.rewind(); s = -1; - if ( (LA15_28==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_12==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_28); + input.seek(index14_12); if ( s>=0 ) return s; break; case 5 : - int LA15_2 = input.LA(1); + int LA14_25 = input.LA(1); - int index15_2 = input.index(); + int index14_25 = input.index(); input.rewind(); s = -1; - if ( (LA15_2==SELECT) && ((strict == false))) {s = 5;} - - else if ( (LA15_2==AS) && ((strict == false))) {s = 6;} - - else if ( (LA15_2==FROM) && ((strict == false))) {s = 7;} - - else if ( (LA15_2==JOIN) && ((strict == false))) {s = 8;} - - else if ( (LA15_2==INNER) && ((strict == false))) {s = 9;} - - else if ( (LA15_2==LEFT) && ((strict == false))) {s = 10;} - - else if ( (LA15_2==OUTER) && ((strict == false))) {s = 11;} - - else if ( (LA15_2==ON) && ((strict == false))) {s = 12;} - - else if ( (LA15_2==WHERE) && ((strict == false))) {s = 13;} - - else if ( (LA15_2==OR) && ((strict == false))) {s = 14;} - - else if ( (LA15_2==AND) && ((strict == false))) {s = 15;} - - else if ( (LA15_2==NOT) && ((strict == false))) {s = 16;} - - else if ( (LA15_2==IN) && ((strict == false))) {s = 17;} - - else if ( (LA15_2==LIKE) && ((strict == false))) {s = 18;} - - else if ( (LA15_2==IS) && ((strict == false))) {s = 19;} - - else if ( (LA15_2==NULL) && ((strict == false))) {s = 20;} - - else if ( (LA15_2==ANY) && ((strict == false))) {s = 21;} - - else if ( (LA15_2==CONTAINS) && ((strict == false))) {s = 22;} - - else if ( (LA15_2==IN_FOLDER) && ((strict == false))) {s = 23;} - - else if ( (LA15_2==IN_TREE) && ((strict == false))) {s = 24;} - - else if ( (LA15_2==ORDER) && ((strict == false))) {s = 25;} - - else if ( (LA15_2==BY) && ((strict == false))) {s = 26;} - - else if ( (LA15_2==ASC) && ((strict == false))) {s = 27;} - - else if ( (LA15_2==DESC) && ((strict == false))) {s = 28;} - - else if ( (LA15_2==TIMESTAMP) && ((strict == false))) {s = 29;} - - else if ( (LA15_2==TRUE) && ((strict == false))) {s = 30;} - - else if ( (LA15_2==FALSE) && ((strict == false))) {s = 31;} - - else if ( (LA15_2==SCORE) && ((strict == false))) {s = 32;} - - else if ( (LA15_2==ID) && ((strict == false))) {s = 33;} + if ( (LA14_25==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_2); + input.seek(index14_25); if ( s>=0 ) return s; break; case 6 : - int LA15_13 = input.LA(1); + int LA14_15 = input.LA(1); - int index15_13 = input.index(); + int index14_15 = input.index(); input.rewind(); s = -1; - if ( (LA15_13==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_15==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_13); + input.seek(index14_15); if ( s>=0 ) return s; break; case 7 : - int LA15_29 = input.LA(1); + int LA14_33 = input.LA(1); - int index15_29 = input.index(); + int index14_33 = input.index(); input.rewind(); s = -1; - if ( (LA15_29==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_33==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_29); + input.seek(index14_33); if ( s>=0 ) return s; break; case 8 : - int LA15_12 = input.LA(1); + int LA14_14 = input.LA(1); - int index15_12 = input.index(); + int index14_14 = input.index(); input.rewind(); s = -1; - if ( (LA15_12==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_14==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_12); + input.seek(index14_14); if ( s>=0 ) return s; break; case 9 : - int LA15_33 = input.LA(1); + int LA14_24 = input.LA(1); - int index15_33 = input.index(); + int index14_24 = input.index(); input.rewind(); s = -1; - if ( (LA15_33==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_24==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_33); + input.seek(index14_24); if ( s>=0 ) return s; break; case 10 : - int LA15_19 = input.LA(1); + int LA14_17 = input.LA(1); - int index15_19 = input.index(); + int index14_17 = input.index(); input.rewind(); s = -1; - if ( (LA15_19==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_17==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_19); + input.seek(index14_17); if ( s>=0 ) return s; break; case 11 : - int LA15_18 = input.LA(1); + int LA14_23 = input.LA(1); - int index15_18 = input.index(); + int index14_23 = input.index(); input.rewind(); s = -1; - if ( (LA15_18==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_23==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_18); + input.seek(index14_23); if ( s>=0 ) return s; break; case 12 : - int LA15_17 = input.LA(1); + int LA14_16 = input.LA(1); - int index15_17 = input.index(); + int index14_16 = input.index(); input.rewind(); s = -1; - if ( (LA15_17==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_16==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_17); + input.seek(index14_16); if ( s>=0 ) return s; break; case 13 : - int LA15_16 = input.LA(1); + int LA14_22 = input.LA(1); - int index15_16 = input.index(); + int index14_22 = input.index(); input.rewind(); s = -1; - if ( (LA15_16==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_22==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_16); + input.seek(index14_22); if ( s>=0 ) return s; break; case 14 : - int LA15_1 = input.LA(1); + int LA14_19 = input.LA(1); - int index15_1 = input.index(); + int index14_19 = input.index(); input.rewind(); s = -1; - if ( (synpred2_CMIS()) ) {s = 3;} - - else if ( (true) ) {s = 4;} + if ( (LA14_19==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_1); + input.seek(index14_19); if ( s>=0 ) return s; break; case 15 : - int LA15_8 = input.LA(1); + int LA14_21 = input.LA(1); - int index15_8 = input.index(); + int index14_21 = input.index(); input.rewind(); s = -1; - if ( (LA15_8==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_21==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_8); + input.seek(index14_21); if ( s>=0 ) return s; break; case 16 : - int LA15_23 = input.LA(1); + int LA14_34 = input.LA(1); - int index15_23 = input.index(); + int index14_34 = input.index(); input.rewind(); s = -1; - if ( (LA15_23==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index15_23); - if ( s>=0 ) return s; - break; - case 17 : - int LA15_9 = input.LA(1); - - - int index15_9 = input.index(); - input.rewind(); - s = -1; - if ( (LA15_9==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index15_9); - if ( s>=0 ) return s; - break; - case 18 : - int LA15_22 = input.LA(1); - - - int index15_22 = input.index(); - input.rewind(); - s = -1; - if ( (LA15_22==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index15_22); - if ( s>=0 ) return s; - break; - case 19 : - int LA15_10 = input.LA(1); - - - int index15_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA15_10==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index15_10); - if ( s>=0 ) return s; - break; - case 20 : - int LA15_21 = input.LA(1); - - - int index15_21 = input.index(); - input.rewind(); - s = -1; - if ( (LA15_21==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index15_21); - if ( s>=0 ) return s; - break; - case 21 : - int LA15_11 = input.LA(1); - - - int index15_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA15_11==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index15_11); - if ( s>=0 ) return s; - break; - case 22 : - int LA15_34 = input.LA(1); - - - int index15_34 = input.index(); - input.rewind(); - s = -1; - if ( ((synpred2_CMIS()&&(strict == false))) ) {s = 3;} + if ( ((synpred1_CMIS()&&(strict == false))) ) {s = 3;} else if ( ((strict == false)) ) {s = 4;} - input.seek(index15_34); + input.seek(index14_34); + if ( s>=0 ) return s; + break; + case 17 : + int LA14_18 = input.LA(1); + + + int index14_18 = input.index(); + input.rewind(); + s = -1; + if ( (LA14_18==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + + + input.seek(index14_18); + if ( s>=0 ) return s; + break; + case 18 : + int LA14_20 = input.LA(1); + + + int index14_20 = input.index(); + input.rewind(); + s = -1; + if ( (LA14_20==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + + + input.seek(index14_20); + if ( s>=0 ) return s; + break; + case 19 : + int LA14_5 = input.LA(1); + + + int index14_5 = input.index(); + input.rewind(); + s = -1; + if ( (LA14_5==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + + + input.seek(index14_5); + if ( s>=0 ) return s; + break; + case 20 : + int LA14_7 = input.LA(1); + + + int index14_7 = input.index(); + input.rewind(); + s = -1; + if ( (LA14_7==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + + + input.seek(index14_7); + if ( s>=0 ) return s; + break; + case 21 : + int LA14_1 = input.LA(1); + + + int index14_1 = input.index(); + input.rewind(); + s = -1; + if ( (synpred1_CMIS()) ) {s = 3;} + + else if ( (true) ) {s = 4;} + + + input.seek(index14_1); + if ( s>=0 ) return s; + break; + case 22 : + int LA14_6 = input.LA(1); + + + int index14_6 = input.index(); + input.rewind(); + s = -1; + if ( (LA14_6==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + + + input.seek(index14_6); if ( s>=0 ) return s; break; case 23 : - int LA15_20 = input.LA(1); + int LA14_31 = input.LA(1); - int index15_20 = input.index(); + int index14_31 = input.index(); input.rewind(); s = -1; - if ( (LA15_20==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_31==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_20); + input.seek(index14_31); if ( s>=0 ) return s; break; case 24 : - int LA15_32 = input.LA(1); + int LA14_9 = input.LA(1); - int index15_32 = input.index(); + int index14_9 = input.index(); input.rewind(); s = -1; - if ( (LA15_32==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_9==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_32); + input.seek(index14_9); if ( s>=0 ) return s; break; case 25 : - int LA15_27 = input.LA(1); + int LA14_30 = input.LA(1); - int index15_27 = input.index(); + int index14_30 = input.index(); input.rewind(); s = -1; - if ( (LA15_27==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_30==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_27); + input.seek(index14_30); if ( s>=0 ) return s; break; case 26 : - int LA15_5 = input.LA(1); + int LA14_8 = input.LA(1); - int index15_5 = input.index(); + int index14_8 = input.index(); input.rewind(); s = -1; - if ( (LA15_5==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_8==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_5); + input.seek(index14_8); if ( s>=0 ) return s; break; case 27 : - int LA15_26 = input.LA(1); + int LA14_29 = input.LA(1); - int index15_26 = input.index(); + int index14_29 = input.index(); input.rewind(); s = -1; - if ( (LA15_26==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_29==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_26); + input.seek(index14_29); if ( s>=0 ) return s; break; case 28 : - int LA15_6 = input.LA(1); + int LA14_11 = input.LA(1); - int index15_6 = input.index(); + int index14_11 = input.index(); input.rewind(); s = -1; - if ( (LA15_6==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_11==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_6); + input.seek(index14_11); if ( s>=0 ) return s; break; case 29 : - int LA15_25 = input.LA(1); + int LA14_32 = input.LA(1); - int index15_25 = input.index(); + int index14_32 = input.index(); input.rewind(); s = -1; - if ( (LA15_25==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_32==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_25); + input.seek(index14_32); if ( s>=0 ) return s; break; case 30 : - int LA15_0 = input.LA(1); + int LA14_28 = input.LA(1); - int index15_0 = input.index(); + int index14_28 = input.index(); input.rewind(); s = -1; - if ( (LA15_0==ID) ) {s = 1;} - - else if ( (LA15_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} + if ( (LA14_28==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_0); + input.seek(index14_28); if ( s>=0 ) return s; break; case 31 : - int LA15_7 = input.LA(1); + int LA14_10 = input.LA(1); - int index15_7 = input.index(); + int index14_10 = input.index(); input.rewind(); s = -1; - if ( (LA15_7==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_10==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - input.seek(index15_7); + input.seek(index14_10); if ( s>=0 ) return s; break; case 32 : - int LA15_24 = input.LA(1); + int LA14_2 = input.LA(1); - int index15_24 = input.index(); + int index14_2 = input.index(); input.rewind(); s = -1; - if ( (LA15_24==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} + if ( (LA14_2==SELECT) && ((strict == false))) {s = 5;} + + else if ( (LA14_2==AS) && ((strict == false))) {s = 6;} + + else if ( (LA14_2==FROM) && ((strict == false))) {s = 7;} + + else if ( (LA14_2==JOIN) && ((strict == false))) {s = 8;} + + else if ( (LA14_2==INNER) && ((strict == false))) {s = 9;} + + else if ( (LA14_2==LEFT) && ((strict == false))) {s = 10;} + + else if ( (LA14_2==OUTER) && ((strict == false))) {s = 11;} + + else if ( (LA14_2==ON) && ((strict == false))) {s = 12;} + + else if ( (LA14_2==WHERE) && ((strict == false))) {s = 13;} + + else if ( (LA14_2==OR) && ((strict == false))) {s = 14;} + + else if ( (LA14_2==AND) && ((strict == false))) {s = 15;} + + else if ( (LA14_2==NOT) && ((strict == false))) {s = 16;} + + else if ( (LA14_2==IN) && ((strict == false))) {s = 17;} + + else if ( (LA14_2==LIKE) && ((strict == false))) {s = 18;} + + else if ( (LA14_2==IS) && ((strict == false))) {s = 19;} + + else if ( (LA14_2==NULL) && ((strict == false))) {s = 20;} + + else if ( (LA14_2==ANY) && ((strict == false))) {s = 21;} + + else if ( (LA14_2==CONTAINS) && ((strict == false))) {s = 22;} + + else if ( (LA14_2==IN_FOLDER) && ((strict == false))) {s = 23;} + + else if ( (LA14_2==IN_TREE) && ((strict == false))) {s = 24;} + + else if ( (LA14_2==ORDER) && ((strict == false))) {s = 25;} + + else if ( (LA14_2==BY) && ((strict == false))) {s = 26;} + + else if ( (LA14_2==ASC) && ((strict == false))) {s = 27;} + + else if ( (LA14_2==DESC) && ((strict == false))) {s = 28;} + + else if ( (LA14_2==TIMESTAMP) && ((strict == false))) {s = 29;} + + else if ( (LA14_2==TRUE) && ((strict == false))) {s = 30;} + + else if ( (LA14_2==FALSE) && ((strict == false))) {s = 31;} + + else if ( (LA14_2==SCORE) && ((strict == false))) {s = 32;} + + else if ( (LA14_2==ID) && ((strict == false))) {s = 33;} - input.seek(index15_24); + input.seek(index14_2); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 15, _s, input); + new NoViableAltException(getDescription(), 14, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA18_eotS = + "\13\uffff"; + static final String DFA18_eofS = + "\1\11\12\uffff"; + static final String DFA18_minS = + "\1\43\12\uffff"; + static final String DFA18_maxS = + "\1\107\12\uffff"; + static final String DFA18_acceptS = + "\1\uffff\3\1\7\2"; + static final String DFA18_specialS = + "\1\0\12\uffff}>"; + static final String[] DFA18_transitionS = { + "\1\1\5\uffff\1\6\1\4\1\5\1\uffff\1\12\1\uffff\1\7\20\uffff"+ + "\1\10\5\uffff\1\2\1\3", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA18_eot = DFA.unpackEncodedString(DFA18_eotS); + static final short[] DFA18_eof = DFA.unpackEncodedString(DFA18_eofS); + static final char[] DFA18_min = DFA.unpackEncodedStringToUnsignedChars(DFA18_minS); + static final char[] DFA18_max = DFA.unpackEncodedStringToUnsignedChars(DFA18_maxS); + static final short[] DFA18_accept = DFA.unpackEncodedString(DFA18_acceptS); + static final short[] DFA18_special = DFA.unpackEncodedString(DFA18_specialS); + static final short[][] DFA18_transition; + + static { + int numStates = DFA18_transitionS.length; + DFA18_transition = new short[numStates][]; + for (int i=0; i=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 18, _s, input); error(nvae); throw nvae; } } static final String DFA26_eotS = - "\167\uffff"; + "\u00db\uffff"; static final String DFA26_eofS = - "\167\uffff"; + "\u00db\uffff"; static final String DFA26_minS = - "\2\37\12\uffff\1\37\1\44\1\37\3\45\3\46\1\105\1\uffff\1\105\35"+ - "\106\2\46\1\37\1\46\1\37\1\44\72\106\2\46"; + "\2\40\42\uffff\1\40\43\uffff\1\45\1\40\30\uffff\3\46\3\47\1\106"+ + "\2\uffff\1\106\17\uffff\35\107\1\47\1\uffff\1\47\1\40\1\47\1\40"+ + "\1\45\72\107\2\47"; static final String DFA26_maxS = - "\2\114\12\uffff\1\114\1\113\1\114\1\104\5\113\1\106\1\uffff\36"+ - "\106\2\113\1\114\1\113\1\114\1\113\72\106\2\113"; + "\2\115\42\uffff\1\115\43\uffff\1\114\1\115\30\uffff\1\105\5\114"+ + "\1\107\2\uffff\1\107\17\uffff\35\107\1\114\1\uffff\1\114\1\115\1"+ + "\114\1\115\1\114\72\107\2\114"; static final String DFA26_acceptS = - "\2\uffff\11\2\1\1\12\uffff\1\2\140\uffff"; + "\2\uffff\42\2\1\uffff\43\1\2\uffff\30\1\7\uffff\1\1\1\2\1\uffff"+ + "\5\1\11\2\1\1\36\uffff\1\1\101\uffff"; static final String DFA26_specialS = - "\1\15\13\uffff\1\7\1\5\2\uffff\1\3\1\4\1\6\1\0\1\1\40\uffff\1\2"+ - "\1\11\1\uffff\1\10\1\uffff\1\14\72\uffff\1\12\1\13}>"; + "\1\1\43\uffff\1\7\43\uffff\1\15\32\uffff\1\12\1\13\1\4\1\5\1\3"+ + "\60\uffff\1\2\1\uffff\1\10\1\uffff\1\0\1\uffff\1\14\72\uffff\1\11"+ + "\1\6}>"; static final String[] DFA26_transitionS = { - "\1\5\2\uffff\1\5\2\uffff\1\12\1\uffff\6\5\1\uffff\3\5\1\1\5"+ - "\uffff\4\5\4\6\4\7\1\11\1\10\1\2\1\3\5\10\1\4", - "\1\13\2\uffff\1\13\2\uffff\1\14\1\uffff\6\13\1\uffff\4\13"+ - "\5\uffff\26\13", + "\1\5\2\uffff\1\6\2\uffff\1\43\1\uffff\1\7\1\10\1\11\1\12\1"+ + "\13\1\14\1\uffff\1\15\1\16\1\17\1\1\5\uffff\1\20\1\21\1\22\1"+ + "\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\42\1\41\1\2\1"+ + "\3\1\37\1\40\1\35\1\36\1\34\1\4", + "\1\50\2\uffff\1\51\2\uffff\1\44\1\uffff\1\52\1\53\1\54\1\55"+ + "\1\56\1\57\1\uffff\1\60\1\61\1\62\1\63\5\uffff\1\64\1\65\1\66"+ + "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\1\76\1\77\1\106\1\105\1"+ + "\45\1\46\1\103\1\104\1\101\1\102\1\100\1\47", "", "", "", @@ -11296,124 +11007,245 @@ public class CMISParser extends Parser { "", "", "", - "\1\13\2\uffff\1\13\2\uffff\1\13\1\26\6\13\1\uffff\4\13\5\uffff"+ - "\14\13\1\25\1\24\1\15\1\16\1\22\1\23\1\20\1\21\1\17\1\13", - "\1\27\1\13\1\26\6\uffff\1\13\3\uffff\11\13\11\uffff\11\26", - "\1\30\2\uffff\1\31\4\uffff\1\32\1\33\1\34\1\35\1\36\1\37\1"+ - "\uffff\1\40\1\41\1\42\1\43\5\uffff\1\44\1\45\1\46\1\47\1\50"+ - "\1\51\1\52\1\53\1\54\1\55\1\56\1\57\2\uffff\1\64\3\uffff\1\61"+ - "\1\62\1\60\1\63", - "\1\13\36\uffff\1\65", - "\1\13\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\13\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\66\1\67", "", - "\1\70\1\71", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\72", - "\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\73\2\uffff\1\74\4\uffff\1\75\1\76\1\77\1\100\1\101\1\102"+ - "\1\uffff\1\103\1\104\1\105\1\106\5\uffff\1\107\1\110\1\111\1"+ - "\112\1\113\1\114\1\115\1\116\1\117\1\120\1\121\1\122\2\uffff"+ - "\1\127\3\uffff\1\124\1\125\1\123\1\126", - "\1\26\6\uffff\1\13\3\uffff\11\13\11\uffff\11\26", - "\1\130\2\uffff\1\131\4\uffff\1\132\1\133\1\134\1\135\1\136"+ - "\1\137\1\uffff\1\140\1\141\1\142\1\143\5\uffff\1\144\1\145\1"+ - "\146\1\147\1\150\1\151\1\152\1\153\1\154\1\155\1\156\1\157\2"+ - "\uffff\1\164\3\uffff\1\161\1\162\1\160\1\163", - "\1\27\1\uffff\1\26\6\uffff\1\13\3\uffff\11\13\11\uffff\11"+ - "\26", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\165", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\166", - "\1\26\6\uffff\1\13\4\uffff\5\13\14\uffff\11\26", - "\1\26\6\uffff\1\13\3\uffff\11\13\11\uffff\11\26" + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\113\2\uffff\1\114\2\uffff\1\151\1\152\1\115\1\116\1\117"+ + "\1\120\1\121\1\122\1\uffff\1\123\1\124\1\125\1\107\5\uffff\1"+ + "\126\1\127\1\130\1\131\1\132\1\133\1\134\1\135\1\136\1\137\1"+ + "\140\1\141\1\150\1\147\1\110\1\111\1\145\1\146\1\143\1\144\1"+ + "\142\1\112", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\153\1\160\1\152\6\uffff\1\157\3\uffff\1\154\5\157\1\156"+ + "\1\155\1\172\11\uffff\1\171\1\165\1\161\1\162\1\163\1\164\1"+ + "\166\1\167\1\170", + "\1\173\2\uffff\1\174\4\uffff\1\175\1\176\1\177\1\u0080\1\u0081"+ + "\1\u0082\1\uffff\1\u0083\1\u0084\1\u0085\1\u0086\5\uffff\1\u0087"+ + "\1\u0088\1\u0089\1\u008a\1\u008b\1\u008c\1\u008d\1\u008e\1\u008f"+ + "\1\u0090\1\u0091\1\u0092\2\uffff\1\u0097\3\uffff\1\u0094\1\u0095"+ + "\1\u0093\1\u0096", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\160\36\uffff\1\u0098", + "\1\160\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171"+ + "\1\165\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "\1\160\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171"+ + "\1\165\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171\1\165"+ + "\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171\1\165"+ + "\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171\1\165"+ + "\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "\1\u009a\1\u009b", + "", + "", + "\1\u009c\1\u009d", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\u009e", + "\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171\1\165"+ + "\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "", + "\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171\1\165"+ + "\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "\1\u009f\2\uffff\1\u00a0\4\uffff\1\u00a1\1\u00a2\1\u00a3\1"+ + "\u00a4\1\u00a5\1\u00a6\1\uffff\1\u00a7\1\u00a8\1\u00a9\1\u00aa"+ + "\5\uffff\1\u00ab\1\u00ac\1\u00ad\1\u00ae\1\u00af\1\u00b0\1\u00b1"+ + "\1\u00b2\1\u00b3\1\u00b4\1\u00b5\1\u00b6\2\uffff\1\u00bb\3\uffff"+ + "\1\u00b8\1\u00b9\1\u00b7\1\u00ba", + "\1\152\6\uffff\1\157\3\uffff\1\154\5\157\1\156\1\155\1\172"+ + "\11\uffff\1\171\1\165\1\161\1\162\1\163\1\164\1\166\1\167\1"+ + "\170", + "\1\u00bc\2\uffff\1\u00bd\4\uffff\1\u00be\1\u00bf\1\u00c0\1"+ + "\u00c1\1\u00c2\1\u00c3\1\uffff\1\u00c4\1\u00c5\1\u00c6\1\u00c7"+ + "\5\uffff\1\u00c8\1\u00c9\1\u00ca\1\u00cb\1\u00cc\1\u00cd\1\u00ce"+ + "\1\u00cf\1\u00d0\1\u00d1\1\u00d2\1\u00d3\2\uffff\1\u00d8\3\uffff"+ + "\1\u00d5\1\u00d6\1\u00d4\1\u00d7", + "\1\153\1\uffff\1\152\6\uffff\1\157\3\uffff\1\154\5\157\1\156"+ + "\1\155\1\172\11\uffff\1\171\1\165\1\161\1\162\1\163\1\164\1"+ + "\166\1\167\1\170", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00d9", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\u00da", + "\1\152\6\uffff\1\u0099\4\uffff\5\u0099\14\uffff\1\171\1\165"+ + "\1\161\1\162\1\163\1\164\1\166\1\167\1\170", + "\1\152\6\uffff\1\157\3\uffff\1\154\5\157\1\156\1\155\1\172"+ + "\11\uffff\1\171\1\165\1\161\1\162\1\163\1\164\1\166\1\167\1"+ + "\170" }; static final short[] DFA26_eot = DFA.unpackEncodedString(DFA26_eotS); @@ -11446,230 +11278,54 @@ public class CMISParser extends Parser { this.transition = DFA26_transition; } public String getDescription() { - return "449:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest );"; + return "558:1: searchNotCondition : ( NOT searchTest -> ^( NEGATION searchTest ) | searchTest -> searchTest );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA26_19 = input.LA(1); + int LA26_156 = input.LA(1); - int index26_19 = input.index(); + int index26_156 = input.index(); input.rewind(); s = -1; - if ( (LA26_19==RPAREN||(LA26_19>=COLON && LA26_19<=TIMESTAMP)) && ((strict == false))) {s = 22;} + if ( (LA26_156==EQUALS||(LA26_156>=NOTEQUALS && LA26_156<=GREATERTHANOREQUALS)) ) {s = 111;} - else if ( (LA26_19==EQUALS||(LA26_19>=NOTEQUALS && LA26_19<=GREATERTHANOREQUALS)) ) {s = 11;} + else if ( (LA26_156==NOT) ) {s = 108;} + + else if ( (LA26_156==LIKE) ) {s = 109;} + + else if ( (LA26_156==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_156==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_156==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_156==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_156==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_156==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_156==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_156==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_156==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_156==COLON) && ((strict == false))) {s = 121;} + + else if ( (LA26_156==IN) ) {s = 110;} + + else if ( (LA26_156==IS) ) {s = 122;} - input.seek(index26_19); + input.seek(index26_156); if ( s>=0 ) return s; break; case 1 : - int LA26_20 = input.LA(1); - - - int index26_20 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_20==RPAREN||(LA26_20>=COLON && LA26_20<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - else if ( (LA26_20==EQUALS||(LA26_20>=NOTEQUALS && LA26_20<=GREATERTHANOREQUALS)) ) {s = 11;} - - - input.seek(index26_20); - if ( s>=0 ) return s; - break; - case 2 : - int LA26_53 = input.LA(1); - - - int index26_53 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_53==RPAREN||(LA26_53>=COLON && LA26_53<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - else if ( (LA26_53==EQUALS||(LA26_53>=NOTEQUALS && LA26_53<=GREATERTHANOREQUALS)) ) {s = 11;} - - - input.seek(index26_53); - if ( s>=0 ) return s; - break; - case 3 : - int LA26_16 = input.LA(1); - - - int index26_16 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_16==RPAREN||(LA26_16>=COLON && LA26_16<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - else if ( (LA26_16==LPAREN||LA26_16==EQUALS||(LA26_16>=NOTEQUALS && LA26_16<=GREATERTHANOREQUALS)) ) {s = 11;} - - - input.seek(index26_16); - if ( s>=0 ) return s; - break; - case 4 : - int LA26_17 = input.LA(1); - - - int index26_17 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_17==LPAREN||LA26_17==EQUALS||(LA26_17>=NOTEQUALS && LA26_17<=GREATERTHANOREQUALS)) ) {s = 11;} - - else if ( (LA26_17==RPAREN||(LA26_17>=COLON && LA26_17<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - - input.seek(index26_17); - if ( s>=0 ) return s; - break; - case 5 : - int LA26_13 = input.LA(1); - - - int index26_13 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_13==LPAREN||LA26_13==EQUALS||(LA26_13>=NOT && LA26_13<=IS)) ) {s = 11;} - - else if ( (LA26_13==RPAREN||(LA26_13>=COLON && LA26_13<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - else if ( (LA26_13==DOT) ) {s = 23;} - - - input.seek(index26_13); - if ( s>=0 ) return s; - break; - case 6 : - int LA26_18 = input.LA(1); - - - int index26_18 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_18==EQUALS||(LA26_18>=NOTEQUALS && LA26_18<=GREATERTHANOREQUALS)) ) {s = 11;} - - else if ( (LA26_18==RPAREN||(LA26_18>=COLON && LA26_18<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - - input.seek(index26_18); - if ( s>=0 ) return s; - break; - case 7 : - int LA26_12 = input.LA(1); - - - int index26_12 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_12==SELECT||LA26_12==AS||LA26_12==LPAREN||(LA26_12>=FROM && LA26_12<=ON)||(LA26_12>=WHERE && LA26_12<=NOT)||(LA26_12>=IN && LA26_12<=DESC)||LA26_12==SCORE) ) {s = 11;} - - else if ( (LA26_12==ID) ) {s = 13;} - - else if ( (LA26_12==DOUBLE_QUOTE) ) {s = 14;} - - else if ( (LA26_12==TIMESTAMP) ) {s = 15;} - - else if ( (LA26_12==TRUE) ) {s = 16;} - - else if ( (LA26_12==FALSE) ) {s = 17;} - - else if ( (LA26_12==FLOATING_POINT_LITERAL) ) {s = 18;} - - else if ( (LA26_12==DECIMAL_INTEGER_LITERAL) ) {s = 19;} - - else if ( (LA26_12==QUOTED_STRING) ) {s = 20;} - - else if ( (LA26_12==COLON) ) {s = 21;} - - else if ( (LA26_12==RPAREN) && ((strict == false))) {s = 22;} - - - input.seek(index26_12); - if ( s>=0 ) return s; - break; - case 8 : - int LA26_56 = input.LA(1); - - - int index26_56 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_56==EQUALS||(LA26_56>=NOT && LA26_56<=IS)) ) {s = 11;} - - else if ( (LA26_56==RPAREN||(LA26_56>=COLON && LA26_56<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - - input.seek(index26_56); - if ( s>=0 ) return s; - break; - case 9 : - int LA26_54 = input.LA(1); - - - int index26_54 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_54==EQUALS||(LA26_54>=NOTEQUALS && LA26_54<=GREATERTHANOREQUALS)) ) {s = 11;} - - else if ( (LA26_54==RPAREN||(LA26_54>=COLON && LA26_54<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - - input.seek(index26_54); - if ( s>=0 ) return s; - break; - case 10 : - int LA26_117 = input.LA(1); - - - int index26_117 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_117==RPAREN||(LA26_117>=COLON && LA26_117<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - else if ( (LA26_117==EQUALS||(LA26_117>=NOTEQUALS && LA26_117<=GREATERTHANOREQUALS)) ) {s = 11;} - - - input.seek(index26_117); - if ( s>=0 ) return s; - break; - case 11 : - int LA26_118 = input.LA(1); - - - int index26_118 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_118==EQUALS||(LA26_118>=NOT && LA26_118<=IS)) ) {s = 11;} - - else if ( (LA26_118==RPAREN||(LA26_118>=COLON && LA26_118<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - - input.seek(index26_118); - if ( s>=0 ) return s; - break; - case 12 : - int LA26_58 = input.LA(1); - - - int index26_58 = input.index(); - input.rewind(); - s = -1; - if ( (LA26_58==DOT) ) {s = 23;} - - else if ( (LA26_58==EQUALS||(LA26_58>=NOT && LA26_58<=IS)) ) {s = 11;} - - else if ( (LA26_58==RPAREN||(LA26_58>=COLON && LA26_58<=TIMESTAMP)) && ((strict == false))) {s = 22;} - - - input.seek(index26_58); - if ( s>=0 ) return s; - break; - case 13 : int LA26_0 = input.LA(1); @@ -11684,22 +11340,552 @@ public class CMISParser extends Parser { else if ( (LA26_0==SCORE) ) {s = 4;} - else if ( (LA26_0==SELECT||LA26_0==AS||(LA26_0>=FROM && LA26_0<=ON)||(LA26_0>=WHERE && LA26_0<=AND)||(LA26_0>=IN && LA26_0<=NULL)) && ((strict == false))) {s = 5;} + else if ( (LA26_0==SELECT) && ((strict == false))) {s = 5;} - else if ( ((LA26_0>=ANY && LA26_0<=IN_TREE)) ) {s = 6;} + else if ( (LA26_0==AS) && ((strict == false))) {s = 6;} - else if ( ((LA26_0>=ORDER && LA26_0<=DESC)) && ((strict == false))) {s = 7;} + else if ( (LA26_0==FROM) && ((strict == false))) {s = 7;} - else if ( (LA26_0==QUOTED_STRING||(LA26_0>=FLOATING_POINT_LITERAL && LA26_0<=TIMESTAMP)) ) {s = 8;} + else if ( (LA26_0==JOIN) && ((strict == false))) {s = 8;} - else if ( (LA26_0==COLON) && ((strict == false))) {s = 9;} + else if ( (LA26_0==INNER) && ((strict == false))) {s = 9;} - else if ( (LA26_0==LPAREN) ) {s = 10;} + else if ( (LA26_0==LEFT) && ((strict == false))) {s = 10;} + + else if ( (LA26_0==OUTER) && ((strict == false))) {s = 11;} + + else if ( (LA26_0==ON) && ((strict == false))) {s = 12;} + + else if ( (LA26_0==WHERE) && ((strict == false))) {s = 13;} + + else if ( (LA26_0==OR) && ((strict == false))) {s = 14;} + + else if ( (LA26_0==AND) && ((strict == false))) {s = 15;} + + else if ( (LA26_0==IN) && ((strict == false))) {s = 16;} + + else if ( (LA26_0==LIKE) && ((strict == false))) {s = 17;} + + else if ( (LA26_0==IS) && ((strict == false))) {s = 18;} + + else if ( (LA26_0==NULL) && ((strict == false))) {s = 19;} + + else if ( (LA26_0==ANY) ) {s = 20;} + + else if ( (LA26_0==CONTAINS) ) {s = 21;} + + else if ( (LA26_0==IN_FOLDER) ) {s = 22;} + + else if ( (LA26_0==IN_TREE) ) {s = 23;} + + else if ( (LA26_0==ORDER) && ((strict == false))) {s = 24;} + + else if ( (LA26_0==BY) && ((strict == false))) {s = 25;} + + else if ( (LA26_0==ASC) && ((strict == false))) {s = 26;} + + else if ( (LA26_0==DESC) && ((strict == false))) {s = 27;} + + else if ( (LA26_0==TIMESTAMP) ) {s = 28;} + + else if ( (LA26_0==TRUE) ) {s = 29;} + + else if ( (LA26_0==FALSE) ) {s = 30;} + + else if ( (LA26_0==FLOATING_POINT_LITERAL) ) {s = 31;} + + else if ( (LA26_0==DECIMAL_INTEGER_LITERAL) ) {s = 32;} + + else if ( (LA26_0==QUOTED_STRING) ) {s = 33;} + + else if ( (LA26_0==COLON) && ((strict == false))) {s = 34;} + + else if ( (LA26_0==LPAREN) ) {s = 35;} input.seek(index26_0); if ( s>=0 ) return s; break; + case 2 : + int LA26_152 = input.LA(1); + + + int index26_152 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_152==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_152==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_152==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_152==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_152==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_152==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_152==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_152==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_152==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_152==COLON) && ((strict == false))) {s = 121;} + + else if ( (LA26_152==EQUALS||(LA26_152>=NOTEQUALS && LA26_152<=GREATERTHANOREQUALS)) ) {s = 153;} + + + input.seek(index26_152); + if ( s>=0 ) return s; + break; + case 3 : + int LA26_103 = input.LA(1); + + + int index26_103 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_103==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_103==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_103==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_103==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_103==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_103==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_103==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_103==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_103==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_103==COLON) && ((strict == false))) {s = 121;} + + else if ( (LA26_103==EQUALS||(LA26_103>=NOTEQUALS && LA26_103<=GREATERTHANOREQUALS)) ) {s = 153;} + + + input.seek(index26_103); + if ( s>=0 ) return s; + break; + case 4 : + int LA26_101 = input.LA(1); + + + int index26_101 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_101==EQUALS||(LA26_101>=NOTEQUALS && LA26_101<=GREATERTHANOREQUALS)) ) {s = 153;} + + else if ( (LA26_101==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_101==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_101==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_101==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_101==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_101==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_101==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_101==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_101==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_101==COLON) && ((strict == false))) {s = 121;} + + + input.seek(index26_101); + if ( s>=0 ) return s; + break; + case 5 : + int LA26_102 = input.LA(1); + + + int index26_102 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_102==EQUALS||(LA26_102>=NOTEQUALS && LA26_102<=GREATERTHANOREQUALS)) ) {s = 153;} + + else if ( (LA26_102==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_102==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_102==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_102==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_102==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_102==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_102==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_102==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_102==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_102==COLON) && ((strict == false))) {s = 121;} + + + input.seek(index26_102); + if ( s>=0 ) return s; + break; + case 6 : + int LA26_218 = input.LA(1); + + + int index26_218 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_218==IS) ) {s = 122;} + + else if ( (LA26_218==EQUALS||(LA26_218>=NOTEQUALS && LA26_218<=GREATERTHANOREQUALS)) ) {s = 111;} + + else if ( (LA26_218==NOT) ) {s = 108;} + + else if ( (LA26_218==LIKE) ) {s = 109;} + + else if ( (LA26_218==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_218==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_218==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_218==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_218==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_218==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_218==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_218==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_218==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_218==COLON) && ((strict == false))) {s = 121;} + + else if ( (LA26_218==IN) ) {s = 110;} + + + input.seek(index26_218); + if ( s>=0 ) return s; + break; + case 7 : + int LA26_36 = input.LA(1); + + + int index26_36 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_36==NOT) ) {s = 71;} + + else if ( (LA26_36==ID) ) {s = 72;} + + else if ( (LA26_36==DOUBLE_QUOTE) ) {s = 73;} + + else if ( (LA26_36==SCORE) ) {s = 74;} + + else if ( (LA26_36==SELECT) ) {s = 75;} + + else if ( (LA26_36==AS) ) {s = 76;} + + else if ( (LA26_36==FROM) ) {s = 77;} + + else if ( (LA26_36==JOIN) ) {s = 78;} + + else if ( (LA26_36==INNER) ) {s = 79;} + + else if ( (LA26_36==LEFT) ) {s = 80;} + + else if ( (LA26_36==OUTER) ) {s = 81;} + + else if ( (LA26_36==ON) ) {s = 82;} + + else if ( (LA26_36==WHERE) ) {s = 83;} + + else if ( (LA26_36==OR) ) {s = 84;} + + else if ( (LA26_36==AND) ) {s = 85;} + + else if ( (LA26_36==IN) ) {s = 86;} + + else if ( (LA26_36==LIKE) ) {s = 87;} + + else if ( (LA26_36==IS) ) {s = 88;} + + else if ( (LA26_36==NULL) ) {s = 89;} + + else if ( (LA26_36==ANY) ) {s = 90;} + + else if ( (LA26_36==CONTAINS) ) {s = 91;} + + else if ( (LA26_36==IN_FOLDER) ) {s = 92;} + + else if ( (LA26_36==IN_TREE) ) {s = 93;} + + else if ( (LA26_36==ORDER) ) {s = 94;} + + else if ( (LA26_36==BY) ) {s = 95;} + + else if ( (LA26_36==ASC) ) {s = 96;} + + else if ( (LA26_36==DESC) ) {s = 97;} + + else if ( (LA26_36==TIMESTAMP) ) {s = 98;} + + else if ( (LA26_36==TRUE) ) {s = 99;} + + else if ( (LA26_36==FALSE) ) {s = 100;} + + else if ( (LA26_36==FLOATING_POINT_LITERAL) ) {s = 101;} + + else if ( (LA26_36==DECIMAL_INTEGER_LITERAL) ) {s = 102;} + + else if ( (LA26_36==QUOTED_STRING) ) {s = 103;} + + else if ( (LA26_36==COLON) ) {s = 104;} + + else if ( (LA26_36==LPAREN) ) {s = 105;} + + else if ( (LA26_36==RPAREN) && ((strict == false))) {s = 106;} + + + input.seek(index26_36); + if ( s>=0 ) return s; + break; + case 8 : + int LA26_154 = input.LA(1); + + + int index26_154 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_154==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_154==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_154==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_154==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_154==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_154==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_154==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_154==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_154==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_154==COLON) && ((strict == false))) {s = 121;} + + else if ( (LA26_154==EQUALS||(LA26_154>=NOTEQUALS && LA26_154<=GREATERTHANOREQUALS)) ) {s = 153;} + + + input.seek(index26_154); + if ( s>=0 ) return s; + break; + case 9 : + int LA26_217 = input.LA(1); + + + int index26_217 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_217==EQUALS||(LA26_217>=NOTEQUALS && LA26_217<=GREATERTHANOREQUALS)) ) {s = 153;} + + else if ( (LA26_217==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_217==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_217==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_217==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_217==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_217==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_217==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_217==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_217==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_217==COLON) && ((strict == false))) {s = 121;} + + + input.seek(index26_217); + if ( s>=0 ) return s; + break; + case 10 : + int LA26_99 = input.LA(1); + + + int index26_99 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_99==LPAREN) ) {s = 112;} + + else if ( (LA26_99==EQUALS||(LA26_99>=NOTEQUALS && LA26_99<=GREATERTHANOREQUALS)) ) {s = 153;} + + else if ( (LA26_99==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_99==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_99==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_99==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_99==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_99==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_99==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_99==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_99==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_99==COLON) && ((strict == false))) {s = 121;} + + + input.seek(index26_99); + if ( s>=0 ) return s; + break; + case 11 : + int LA26_100 = input.LA(1); + + + int index26_100 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_100==EQUALS||(LA26_100>=NOTEQUALS && LA26_100<=GREATERTHANOREQUALS)) ) {s = 153;} + + else if ( (LA26_100==LPAREN) ) {s = 112;} + + else if ( (LA26_100==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_100==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_100==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_100==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_100==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_100==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_100==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_100==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_100==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_100==COLON) && ((strict == false))) {s = 121;} + + + input.seek(index26_100); + if ( s>=0 ) return s; + break; + case 12 : + int LA26_158 = input.LA(1); + + + int index26_158 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_158==DOT) ) {s = 107;} + + else if ( (LA26_158==EQUALS||(LA26_158>=NOTEQUALS && LA26_158<=GREATERTHANOREQUALS)) ) {s = 111;} + + else if ( (LA26_158==IS) ) {s = 122;} + + else if ( (LA26_158==NOT) ) {s = 108;} + + else if ( (LA26_158==LIKE) ) {s = 109;} + + else if ( (LA26_158==IN) ) {s = 110;} + + else if ( (LA26_158==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_158==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_158==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_158==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_158==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_158==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_158==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_158==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_158==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_158==COLON) && ((strict == false))) {s = 121;} + + + input.seek(index26_158); + if ( s>=0 ) return s; + break; + case 13 : + int LA26_72 = input.LA(1); + + + int index26_72 = input.index(); + input.rewind(); + s = -1; + if ( (LA26_72==DOT) ) {s = 107;} + + else if ( (LA26_72==NOT) ) {s = 108;} + + else if ( (LA26_72==LIKE) ) {s = 109;} + + else if ( (LA26_72==IN) ) {s = 110;} + + else if ( (LA26_72==EQUALS||(LA26_72>=NOTEQUALS && LA26_72<=GREATERTHANOREQUALS)) ) {s = 111;} + + else if ( (LA26_72==LPAREN) ) {s = 112;} + + else if ( (LA26_72==RPAREN) && ((strict == false))) {s = 106;} + + else if ( (LA26_72==ID) && ((strict == false))) {s = 113;} + + else if ( (LA26_72==DOUBLE_QUOTE) && ((strict == false))) {s = 114;} + + else if ( (LA26_72==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 115;} + + else if ( (LA26_72==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 116;} + + else if ( (LA26_72==QUOTED_STRING) && ((strict == false))) {s = 117;} + + else if ( (LA26_72==TRUE) && ((strict == false))) {s = 118;} + + else if ( (LA26_72==FALSE) && ((strict == false))) {s = 119;} + + else if ( (LA26_72==TIMESTAMP) && ((strict == false))) {s = 120;} + + else if ( (LA26_72==COLON) && ((strict == false))) {s = 121;} + + else if ( (LA26_72==IS) ) {s = 122;} + + + input.seek(index26_72); + if ( s>=0 ) return s; + break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = @@ -11709,20 +11895,48 @@ public class CMISParser extends Parser { } } static final String DFA27_eotS = - "\12\uffff"; + "\44\uffff"; static final String DFA27_eofS = - "\12\uffff"; + "\44\uffff"; static final String DFA27_minS = - "\1\37\11\uffff"; + "\1\40\43\uffff"; static final String DFA27_maxS = - "\1\114\11\uffff"; + "\1\115\43\uffff"; static final String DFA27_acceptS = - "\1\uffff\10\1\1\2"; + "\1\uffff\42\1\1\2"; static final String DFA27_specialS = - "\1\0\11\uffff}>"; + "\1\0\43\uffff}>"; static final String[] DFA27_transitionS = { - "\1\4\2\uffff\1\4\2\uffff\1\11\1\uffff\6\4\1\uffff\4\4\5\uffff"+ - "\4\4\4\5\4\6\1\10\1\7\1\1\1\2\5\7\1\3", + "\1\4\2\uffff\1\5\2\uffff\1\43\1\uffff\1\6\1\7\1\10\1\11\1\12"+ + "\1\13\1\uffff\1\14\1\15\1\16\1\17\5\uffff\1\20\1\21\1\22\1\23"+ + "\1\24\1\25\1\26\1\27\1\30\1\31\1\32\1\33\1\42\1\41\1\1\1\2\1"+ + "\37\1\40\1\35\1\36\1\34\1\3", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", "", "", "", @@ -11764,7 +11978,7 @@ public class CMISParser extends Parser { this.transition = DFA27_transition; } public String getDescription() { - return "456:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition );"; + return "567:1: searchTest : ( predicate -> predicate | LPAREN searchOrCondition RPAREN -> searchOrCondition );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; @@ -11783,17 +11997,69 @@ public class CMISParser extends Parser { else if ( (LA27_0==SCORE) ) {s = 3;} - else if ( (LA27_0==SELECT||LA27_0==AS||(LA27_0>=FROM && LA27_0<=ON)||(LA27_0>=WHERE && LA27_0<=NOT)||(LA27_0>=IN && LA27_0<=NULL)) && ((strict == false))) {s = 4;} + else if ( (LA27_0==SELECT) && ((strict == false))) {s = 4;} - else if ( ((LA27_0>=ANY && LA27_0<=IN_TREE)) ) {s = 5;} + else if ( (LA27_0==AS) && ((strict == false))) {s = 5;} - else if ( ((LA27_0>=ORDER && LA27_0<=DESC)) && ((strict == false))) {s = 6;} + else if ( (LA27_0==FROM) && ((strict == false))) {s = 6;} - else if ( (LA27_0==QUOTED_STRING||(LA27_0>=FLOATING_POINT_LITERAL && LA27_0<=TIMESTAMP)) ) {s = 7;} + else if ( (LA27_0==JOIN) && ((strict == false))) {s = 7;} - else if ( (LA27_0==COLON) && ((strict == false))) {s = 8;} + else if ( (LA27_0==INNER) && ((strict == false))) {s = 8;} - else if ( (LA27_0==LPAREN) ) {s = 9;} + else if ( (LA27_0==LEFT) && ((strict == false))) {s = 9;} + + else if ( (LA27_0==OUTER) && ((strict == false))) {s = 10;} + + else if ( (LA27_0==ON) && ((strict == false))) {s = 11;} + + else if ( (LA27_0==WHERE) && ((strict == false))) {s = 12;} + + else if ( (LA27_0==OR) && ((strict == false))) {s = 13;} + + else if ( (LA27_0==AND) && ((strict == false))) {s = 14;} + + else if ( (LA27_0==NOT) && ((strict == false))) {s = 15;} + + else if ( (LA27_0==IN) && ((strict == false))) {s = 16;} + + else if ( (LA27_0==LIKE) && ((strict == false))) {s = 17;} + + else if ( (LA27_0==IS) && ((strict == false))) {s = 18;} + + else if ( (LA27_0==NULL) && ((strict == false))) {s = 19;} + + else if ( (LA27_0==ANY) ) {s = 20;} + + else if ( (LA27_0==CONTAINS) ) {s = 21;} + + else if ( (LA27_0==IN_FOLDER) ) {s = 22;} + + else if ( (LA27_0==IN_TREE) ) {s = 23;} + + else if ( (LA27_0==ORDER) && ((strict == false))) {s = 24;} + + else if ( (LA27_0==BY) && ((strict == false))) {s = 25;} + + else if ( (LA27_0==ASC) && ((strict == false))) {s = 26;} + + else if ( (LA27_0==DESC) && ((strict == false))) {s = 27;} + + else if ( (LA27_0==TIMESTAMP) ) {s = 28;} + + else if ( (LA27_0==TRUE) ) {s = 29;} + + else if ( (LA27_0==FALSE) ) {s = 30;} + + else if ( (LA27_0==FLOATING_POINT_LITERAL) ) {s = 31;} + + else if ( (LA27_0==DECIMAL_INTEGER_LITERAL) ) {s = 32;} + + else if ( (LA27_0==QUOTED_STRING) ) {s = 33;} + + else if ( (LA27_0==COLON) && ((strict == false))) {s = 34;} + + else if ( (LA27_0==LPAREN) ) {s = 35;} input.seek(index27_0); @@ -11808,288 +12074,355 @@ public class CMISParser extends Parser { } } static final String DFA28_eotS = - "\u00e5\uffff"; + "\u0113\uffff"; static final String DFA28_eofS = - "\u0083\uffff\1\145\36\uffff\1\u0084\35\uffff\1\u0084\44\uffff"; + "\u00a6\uffff\1\u00ec\36\uffff\1\u00f2\36\uffff\1\u00f2\56\uffff"; static final String DFA28_minS = - "\1\37\1\44\1\37\2\uffff\7\45\3\uffff\1\105\1\67\4\uffff\35\106"+ - "\1\uffff\3\46\1\uffff\1\55\1\37\1\44\1\41\1\37\1\46\1\41\1\37\1"+ - "\46\1\41\1\37\1\46\35\106\1\uffff\1\105\1\67\3\uffff\35\106\1\46"+ - "\1\uffff\35\106\1\46\35\106\1\46\2\55\1\37\3\41\35\106\1\55"; + "\1\40\1\45\1\40\21\uffff\4\46\4\uffff\3\46\4\uffff\1\70\2\uffff"+ + "\1\106\3\uffff\35\107\2\uffff\3\47\2\uffff\1\56\1\40\1\45\1\42\1"+ + "\40\2\uffff\1\47\5\uffff\1\42\1\40\1\47\1\42\1\40\1\47\35\107\1"+ + "\70\2\uffff\1\106\7\uffff\35\107\1\47\1\uffff\35\107\1\47\1\uffff"+ + "\35\107\1\47\2\56\1\40\1\42\5\uffff\1\42\5\uffff\1\42\35\107\1\56"; static final String DFA28_maxS = - "\1\114\1\71\1\114\2\uffff\1\106\3\45\1\104\2\66\3\uffff\1\106\1"+ - "\70\4\uffff\35\106\1\uffff\3\113\1\uffff\1\71\1\114\1\71\1\113\1"+ - "\114\2\113\1\114\2\113\1\114\1\113\35\106\1\uffff\1\106\1\70\3\uffff"+ - "\35\106\1\77\1\uffff\35\106\1\77\35\106\1\77\2\71\1\114\3\113\35"+ - "\106\1\71"; + "\1\115\1\72\1\115\21\uffff\1\107\3\46\4\uffff\1\105\2\67\4\uffff"+ + "\1\71\2\uffff\1\107\3\uffff\35\107\2\uffff\3\114\2\uffff\1\72\1"+ + "\115\1\72\1\114\1\115\2\uffff\1\114\5\uffff\1\114\1\115\2\114\1"+ + "\115\1\114\35\107\1\71\2\uffff\1\107\7\uffff\35\107\1\100\1\uffff"+ + "\35\107\1\100\1\uffff\35\107\1\100\2\72\1\115\1\114\5\uffff\1\114"+ + "\5\uffff\1\114\35\107\1\72"; static final String DFA28_acceptS = - "\3\uffff\2\1\7\uffff\2\5\1\4\2\uffff\1\3\1\2\2\1\35\uffff\1\6\3"+ - "\uffff\1\5\51\uffff\1\4\2\uffff\1\3\1\2\1\7\36\uffff\1\10\140\uffff"; + "\3\uffff\21\1\4\uffff\4\1\3\uffff\4\5\1\uffff\1\3\1\2\1\uffff\1"+ + "\4\2\1\35\uffff\2\6\3\uffff\2\5\5\uffff\2\1\1\uffff\5\1\44\uffff"+ + "\1\3\1\1\1\uffff\1\2\1\4\4\1\1\7\36\uffff\1\10\36\uffff\1\10\42"+ + "\uffff\5\7\1\uffff\5\10\37\uffff"; static final String DFA28_specialS = - "\1\41\1\55\1\116\2\uffff\1\112\3\uffff\1\110\1\44\1\45\11\uffff"+ - "\1\106\1\70\1\75\1\60\1\43\1\32\1\24\1\14\1\11\1\1\1\122\1\117\1"+ - "\101\1\74\1\71\1\50\1\0\1\7\1\12\1\21\1\31\1\34\1\52\1\57\1\66\1"+ - "\105\1\111\1\121\1\10\1\uffff\1\35\1\64\1\63\3\uffff\1\3\1\23\1"+ - "\uffff\1\72\1\17\1\uffff\1\40\1\16\1\uffff\1\37\36\uffff\1\27\1"+ - "\53\40\uffff\1\2\36\uffff\1\103\35\uffff\1\77\1\uffff\1\47\1\124"+ - "\1\15\1\6\1\5\1\13\1\22\1\20\1\30\1\25\1\26\1\36\1\33\1\46\1\42"+ - "\1\51\1\54\1\61\1\56\1\62\1\65\1\67\1\73\1\76\1\100\1\102\1\104"+ - "\1\107\1\113\1\115\1\120\1\123\1\125\1\114\1\4}>"; + "\1\42\1\102\1\72\21\uffff\1\2\7\uffff\1\51\1\12\1\14\13\uffff\1"+ + "\104\1\112\1\117\1\124\1\106\1\113\1\73\1\75\1\50\1\56\1\34\1\43"+ + "\1\20\1\25\1\10\1\5\1\13\1\0\1\4\1\125\1\121\1\114\1\105\1\76\1"+ + "\70\1\57\1\47\1\67\1\115\2\uffff\1\120\1\40\1\37\4\uffff\1\123\1"+ + "\1\3\uffff\1\64\5\uffff\1\27\1\uffff\1\7\1\26\1\uffff\1\6\35\uffff"+ + "\1\62\2\uffff\1\60\44\uffff\1\122\36\uffff\1\22\36\uffff\1\32\1"+ + "\uffff\1\53\1\3\1\31\5\uffff\1\24\5\uffff\1\23\1\21\1\17\1\16\1"+ + "\15\1\44\1\41\1\36\1\35\1\33\1\30\1\55\1\61\1\63\1\45\1\46\1\52"+ + "\1\54\1\77\1\100\1\101\1\66\1\71\1\74\1\110\1\107\1\111\1\103\1"+ + "\116\1\11\1\65}>"; static final String[] DFA28_transitionS = { - "\1\4\2\uffff\1\4\4\uffff\6\4\1\uffff\4\4\5\uffff\4\4\1\5\1"+ - "\6\1\7\1\10\4\4\1\15\1\14\1\1\1\2\2\14\1\12\1\13\1\11\1\3", - "\1\17\1\24\7\uffff\1\23\3\uffff\1\20\5\23\1\22\1\21\1\16", - "\1\25\2\uffff\1\26\4\uffff\1\27\1\30\1\31\1\32\1\33\1\34\1"+ - "\uffff\1\35\1\36\1\37\1\40\5\uffff\1\41\1\42\1\43\1\44\1\45"+ - "\1\46\1\47\1\50\1\51\1\52\1\53\1\54\2\uffff\1\61\3\uffff\1\56"+ - "\1\57\1\55\1\60", - "", - "", - "\1\24\37\uffff\2\62", - "\1\63", - "\1\64", - "\1\65", - "\1\24\36\uffff\1\66", - "\1\24\7\uffff\1\66\4\uffff\5\66", - "\1\24\7\uffff\1\66\4\uffff\5\66", - "", - "", - "", - "\1\67\1\70", - "\1\22\1\21", + "\1\4\2\uffff\1\5\4\uffff\1\6\1\7\1\10\1\11\1\12\1\13\1\uffff"+ + "\1\14\1\15\1\16\1\17\5\uffff\1\20\1\21\1\22\1\23\1\24\1\25\1"+ + "\26\1\27\1\30\1\31\1\32\1\33\1\42\1\41\1\1\1\2\1\37\1\40\1\35"+ + "\1\36\1\34\1\3", + "\1\46\1\50\7\uffff\1\51\3\uffff\1\43\5\51\1\45\1\44\1\47", + "\1\52\2\uffff\1\53\4\uffff\1\54\1\55\1\56\1\57\1\60\1\61\1"+ + "\uffff\1\62\1\63\1\64\1\65\5\uffff\1\66\1\67\1\70\1\71\1\72"+ + "\1\73\1\74\1\75\1\76\1\77\1\100\1\101\2\uffff\1\106\3\uffff"+ + "\1\103\1\104\1\102\1\105", "", "", "", "", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "\1\71", - "", - "\1\24\34\uffff\1\24\1\74\1\72\1\73\5\24", - "\1\24\34\uffff\1\24\1\77\1\75\1\76\5\24", - "\1\24\34\uffff\1\24\1\102\1\100\1\101\5\24", - "", - "\1\23\3\uffff\1\20\5\23\1\22\1\21\1\16", - "\1\103\2\uffff\1\104\4\uffff\1\105\1\106\1\107\1\110\1\111"+ - "\1\112\1\uffff\1\113\1\114\1\115\1\116\5\uffff\1\117\1\120\1"+ - "\121\1\122\1\123\1\124\1\125\1\126\1\127\1\130\1\131\1\132\2"+ - "\uffff\1\137\3\uffff\1\134\1\135\1\133\1\136", - "\1\141\10\uffff\1\24\3\uffff\1\142\5\24\1\144\1\143\1\140", - "\1\145\2\uffff\1\24\1\uffff\1\24\34\uffff\11\24", - "\1\146\2\uffff\1\147\4\uffff\1\150\1\151\1\152\1\153\1\154"+ - "\1\155\1\uffff\1\156\1\157\1\160\1\161\5\uffff\1\162\1\163\1"+ - "\164\1\165\1\166\1\167\1\170\1\171\1\172\1\173\1\174\1\175\2"+ - "\uffff\1\u0082\3\uffff\1\177\1\u0080\1\176\1\u0081", - "\1\u0083\34\uffff\11\24", - "\1\u0084\2\uffff\1\24\1\uffff\1\24\34\uffff\11\24", - "\1\u0085\2\uffff\1\u0086\4\uffff\1\u0087\1\u0088\1\u0089\1"+ - "\u008a\1\u008b\1\u008c\1\uffff\1\u008d\1\u008e\1\u008f\1\u0090"+ - "\5\uffff\1\u0091\1\u0092\1\u0093\1\u0094\1\u0095\1\u0096\1\u0097"+ - "\1\u0098\1\u0099\1\u009a\1\u009b\1\u009c\2\uffff\1\u00a1\3\uffff"+ - "\1\u009e\1\u009f\1\u009d\1\u00a0", - "\1\u00a2\34\uffff\11\24", - "\1\u0084\2\uffff\1\24\1\uffff\1\24\34\uffff\11\24", - "\1\u00a3\2\uffff\1\u00a4\4\uffff\1\u00a5\1\u00a6\1\u00a7\1"+ - "\u00a8\1\u00a9\1\u00aa\1\uffff\1\u00ab\1\u00ac\1\u00ad\1\u00ae"+ - "\5\uffff\1\u00af\1\u00b0\1\u00b1\1\u00b2\1\u00b3\1\u00b4\1\u00b5"+ - "\1\u00b6\1\u00b7\1\u00b8\1\u00b9\1\u00ba\2\uffff\1\u00bf\3\uffff"+ - "\1\u00bc\1\u00bd\1\u00bb\1\u00be", - "\1\u00c0\34\uffff\11\24", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "\1\u00c1", - "", - "\1\u00c2\1\u00c3", - "\1\144\1\143", "", "", "", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\u00c4", - "\1\145\6\uffff\1\24\1\uffff\2\145\1\uffff\5\24\10\uffff\1"+ - "\145", "", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u00c5", - "\1\u0084\6\uffff\1\24\1\uffff\2\u0084\1\uffff\5\24\10\uffff"+ - "\1\u0084", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u00c6", - "\1\u0084\6\uffff\1\24\1\uffff\2\u0084\1\uffff\5\24\10\uffff"+ - "\1\u0084", - "\1\23\3\uffff\1\20\5\23\1\22\1\21\1\16", - "\1\24\3\uffff\1\142\5\24\1\144\1\143\1\140", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\50\37\uffff\1\107\1\110", + "\1\111", + "\1\112", + "\1\113", + "", + "", + "", + "", + "\1\50\36\uffff\1\114", + "\1\50\7\uffff\1\115\4\uffff\5\115", + "\1\50\7\uffff\1\115\4\uffff\5\115", + "", + "", + "", + "", + "\1\45\1\44", + "", + "", + "\1\116\1\117", + "", + "", + "", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "\1\120", + "", + "", + "\1\132\34\uffff\1\131\1\125\1\121\1\122\1\123\1\124\1\126"+ + "\1\127\1\130", + "\1\132\34\uffff\1\131\1\135\1\133\1\134\1\123\1\124\1\126"+ + "\1\127\1\130", + "\1\132\34\uffff\1\131\1\140\1\136\1\137\1\123\1\124\1\126"+ + "\1\127\1\130", + "", + "", + "\1\51\3\uffff\1\43\5\51\1\45\1\44\1\47", + "\1\141\2\uffff\1\142\4\uffff\1\143\1\144\1\145\1\146\1\147"+ + "\1\150\1\uffff\1\151\1\152\1\153\1\154\5\uffff\1\155\1\156\1"+ + "\157\1\160\1\161\1\162\1\163\1\164\1\165\1\166\1\167\1\170\2"+ + "\uffff\1\175\3\uffff\1\172\1\173\1\171\1\174", + "\1\u0081\10\uffff\1\u0080\3\uffff\1\176\5\u0080\1\u0082\1"+ + "\177\1\u0083", + "\1\u0088\2\uffff\1\u0087\1\uffff\1\132\34\uffff\1\131\1\u0086"+ + "\1\u0084\1\u0085\1\123\1\124\1\126\1\127\1\130", + "\1\u0089\2\uffff\1\u008a\4\uffff\1\u008b\1\u008c\1\u008d\1"+ + "\u008e\1\u008f\1\u0090\1\uffff\1\u0091\1\u0092\1\u0093\1\u0094"+ + "\5\uffff\1\u0095\1\u0096\1\u0097\1\u0098\1\u0099\1\u009a\1\u009b"+ + "\1\u009c\1\u009d\1\u009e\1\u009f\1\u00a0\2\uffff\1\u00a5\3\uffff"+ + "\1\u00a2\1\u00a3\1\u00a1\1\u00a4", + "", + "", + "\1\u00a6\34\uffff\1\131\1\u0086\1\u0084\1\u0085\1\123\1\124"+ + "\1\126\1\127\1\130", + "", + "", + "", + "", + "", + "\1\u00a7\2\uffff\1\u0087\1\uffff\1\132\34\uffff\1\131\1\u0086"+ + "\1\u0084\1\u0085\1\123\1\124\1\126\1\127\1\130", + "\1\u00a8\2\uffff\1\u00a9\4\uffff\1\u00aa\1\u00ab\1\u00ac\1"+ + "\u00ad\1\u00ae\1\u00af\1\uffff\1\u00b0\1\u00b1\1\u00b2\1\u00b3"+ + "\5\uffff\1\u00b4\1\u00b5\1\u00b6\1\u00b7\1\u00b8\1\u00b9\1\u00ba"+ + "\1\u00bb\1\u00bc\1\u00bd\1\u00be\1\u00bf\2\uffff\1\u00c4\3\uffff"+ + "\1\u00c1\1\u00c2\1\u00c0\1\u00c3", + "\1\u00c5\34\uffff\1\131\1\u0086\1\u0084\1\u0085\1\123\1\124"+ + "\1\126\1\127\1\130", + "\1\u00c6\2\uffff\1\u0087\1\uffff\1\132\34\uffff\1\131\1\u0086"+ + "\1\u0084\1\u0085\1\123\1\124\1\126\1\127\1\130", "\1\u00c7\2\uffff\1\u00c8\4\uffff\1\u00c9\1\u00ca\1\u00cb\1"+ "\u00cc\1\u00cd\1\u00ce\1\uffff\1\u00cf\1\u00d0\1\u00d1\1\u00d2"+ "\5\uffff\1\u00d3\1\u00d4\1\u00d5\1\u00d6\1\u00d7\1\u00d8\1\u00d9"+ "\1\u00da\1\u00db\1\u00dc\1\u00dd\1\u00de\2\uffff\1\u00e3\3\uffff"+ "\1\u00e0\1\u00e1\1\u00df\1\u00e2", - "\1\145\2\uffff\1\24\1\uffff\1\24\34\uffff\11\24", - "\1\u0084\2\uffff\1\24\1\uffff\1\24\34\uffff\11\24", - "\1\u0084\2\uffff\1\24\1\uffff\1\24\34\uffff\11\24", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\u00e4", - "\1\24\3\uffff\1\142\5\24\1\144\1\143\1\140" + "\1\u00e4\34\uffff\1\131\1\u0086\1\u0084\1\u0085\1\123\1\124"+ + "\1\126\1\127\1\130", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u00e5", + "\1\u0082\1\177", + "", + "", + "\1\u00e6\1\u00e7", + "", + "", + "", + "", + "", + "", + "", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00e8", + "\1\u00ed\6\uffff\1\u0080\1\uffff\1\u00ea\1\u00e9\1\uffff\5"+ + "\u0080\10\uffff\1\u00eb", + "", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00ee", + "\1\u00f3\6\uffff\1\u0080\1\uffff\1\u00f0\1\u00ef\1\uffff\5"+ + "\u0080\10\uffff\1\u00f1", + "", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f4", + "\1\u00f3\6\uffff\1\u0080\1\uffff\1\u00f0\1\u00ef\1\uffff\5"+ + "\u0080\10\uffff\1\u00f1", + "\1\51\3\uffff\1\43\5\51\1\45\1\44\1\47", + "\1\u0080\3\uffff\1\176\5\u0080\1\u0082\1\177\1\u0083", + "\1\u00f5\2\uffff\1\u00f6\4\uffff\1\u00f7\1\u00f8\1\u00f9\1"+ + "\u00fa\1\u00fb\1\u00fc\1\uffff\1\u00fd\1\u00fe\1\u00ff\1\u0100"+ + "\5\uffff\1\u0101\1\u0102\1\u0103\1\u0104\1\u0105\1\u0106\1\u0107"+ + "\1\u0108\1\u0109\1\u010a\1\u010b\1\u010c\2\uffff\1\u0111\3\uffff"+ + "\1\u010e\1\u010f\1\u010d\1\u0110", + "\1\u0088\2\uffff\1\u0087\1\uffff\1\132\34\uffff\1\131\1\u0086"+ + "\1\u0084\1\u0085\1\123\1\124\1\126\1\127\1\130", + "", + "", + "", + "", + "", + "\1\u00a7\2\uffff\1\u0087\1\uffff\1\132\34\uffff\1\131\1\u0086"+ + "\1\u0084\1\u0085\1\123\1\124\1\126\1\127\1\130", + "", + "", + "", + "", + "", + "\1\u00c6\2\uffff\1\u0087\1\uffff\1\132\34\uffff\1\131\1\u0086"+ + "\1\u0084\1\u0085\1\123\1\124\1\126\1\127\1\130", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0112", + "\1\u0080\3\uffff\1\176\5\u0080\1\u0082\1\177\1\u0083" }; static final short[] DFA28_eot = DFA.unpackEncodedString(DFA28_eotS); @@ -12122,486 +12455,743 @@ public class CMISParser extends Parser { this.transition = DFA28_transition; } public String getDescription() { - return "463:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate );"; + return "575:1: predicate : ( comparisonPredicate | inPredicate | likePredicate | nullPredicate | quantifiedComparisonPredicate | quantifiedInPredicate | textSearchPredicate | folderPredicate );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA28_37 = input.LA(1); + int LA28_59 = input.LA(1); - int index28_37 = input.index(); + int index28_59 = input.index(); input.rewind(); s = -1; - if ( (LA28_37==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_59==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_37); + input.seek(index28_59); if ( s>=0 ) return s; break; case 1 : - int LA28_30 = input.LA(1); + int LA28_81 = input.LA(1); - int index28_30 = input.index(); + int index28_81 = input.index(); input.rewind(); s = -1; - if ( (LA28_30==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_81==RPAREN) && ((strict == false))) {s = 90;} + + else if ( (LA28_81==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_81==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_81==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_81==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_81==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_81==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_81==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_81==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_81==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_81==DOT) && ((strict == false))) {s = 135;} + + else if ( (LA28_81==COMMA) ) {s = 136;} - input.seek(index28_30); + input.seek(index28_81); if ( s>=0 ) return s; break; case 2 : - int LA28_131 = input.LA(1); + int LA28_20 = input.LA(1); - int index28_131 = input.index(); + int index28_20 = input.index(); input.rewind(); s = -1; - if ( (LA28_131==EOF||LA28_131==RPAREN||(LA28_131>=OR && LA28_131<=AND)||LA28_131==ORDER) ) {s = 101;} + if ( (LA28_20==LPAREN) && ((strict == false))) {s = 40;} - else if ( (LA28_131==EQUALS||(LA28_131>=NOTEQUALS && LA28_131<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 20;} + else if ( (LA28_20==ID) ) {s = 71;} + + else if ( (LA28_20==DOUBLE_QUOTE) ) {s = 72;} - input.seek(index28_131); + input.seek(index28_20); if ( s>=0 ) return s; break; case 3 : + int LA28_231 = input.LA(1); + + + int index28_231 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_231==SELECT) && ((strict == false))) {s = 245;} + + else if ( (LA28_231==AS) && ((strict == false))) {s = 246;} + + else if ( (LA28_231==FROM) && ((strict == false))) {s = 247;} + + else if ( (LA28_231==JOIN) && ((strict == false))) {s = 248;} + + else if ( (LA28_231==INNER) && ((strict == false))) {s = 249;} + + else if ( (LA28_231==LEFT) && ((strict == false))) {s = 250;} + + else if ( (LA28_231==OUTER) && ((strict == false))) {s = 251;} + + else if ( (LA28_231==ON) && ((strict == false))) {s = 252;} + + else if ( (LA28_231==WHERE) && ((strict == false))) {s = 253;} + + else if ( (LA28_231==OR) && ((strict == false))) {s = 254;} + + else if ( (LA28_231==AND) && ((strict == false))) {s = 255;} + + else if ( (LA28_231==NOT) && ((strict == false))) {s = 256;} + + else if ( (LA28_231==IN) && ((strict == false))) {s = 257;} + + else if ( (LA28_231==LIKE) && ((strict == false))) {s = 258;} + + else if ( (LA28_231==IS) && ((strict == false))) {s = 259;} + + else if ( (LA28_231==NULL) && ((strict == false))) {s = 260;} + + else if ( (LA28_231==ANY) && ((strict == false))) {s = 261;} + + else if ( (LA28_231==CONTAINS) && ((strict == false))) {s = 262;} + + else if ( (LA28_231==IN_FOLDER) && ((strict == false))) {s = 263;} + + else if ( (LA28_231==IN_TREE) && ((strict == false))) {s = 264;} + + else if ( (LA28_231==ORDER) && ((strict == false))) {s = 265;} + + else if ( (LA28_231==BY) && ((strict == false))) {s = 266;} + + else if ( (LA28_231==ASC) && ((strict == false))) {s = 267;} + + else if ( (LA28_231==DESC) && ((strict == false))) {s = 268;} + + else if ( (LA28_231==TIMESTAMP) && ((strict == false))) {s = 269;} + + else if ( (LA28_231==TRUE) && ((strict == false))) {s = 270;} + + else if ( (LA28_231==FALSE) && ((strict == false))) {s = 271;} + + else if ( (LA28_231==SCORE) && ((strict == false))) {s = 272;} + + else if ( (LA28_231==ID) && ((strict == false))) {s = 273;} + + + input.seek(index28_231); + if ( s>=0 ) return s; + break; + case 4 : + int LA28_60 = input.LA(1); + + + int index28_60 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_60==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_60); + if ( s>=0 ) return s; + break; + case 5 : int LA28_57 = input.LA(1); int index28_57 = input.index(); input.rewind(); s = -1; - if ( (LA28_57==IS) && ((strict == false))) {s = 96;} - - else if ( (LA28_57==DOT) && ((strict == false))) {s = 97;} - - else if ( (LA28_57==NOT) && ((strict == false))) {s = 98;} - - else if ( (LA28_57==LIKE) && ((strict == false))) {s = 99;} - - else if ( (LA28_57==IN) && ((strict == false))) {s = 100;} - - else if ( (LA28_57==EQUALS||(LA28_57>=NOTEQUALS && LA28_57<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 20;} + if ( (LA28_57==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} input.seek(index28_57); if ( s>=0 ) return s; break; - case 4 : - int LA28_228 = input.LA(1); - - - int index28_228 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_228==IS) && ((strict == false))) {s = 96;} - - else if ( (LA28_228==NOT) && ((strict == false))) {s = 98;} - - else if ( (LA28_228==LIKE) && ((strict == false))) {s = 99;} - - else if ( (LA28_228==IN) && ((strict == false))) {s = 100;} - - else if ( (LA28_228==EQUALS||(LA28_228>=NOTEQUALS && LA28_228<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 20;} - - - input.seek(index28_228); - if ( s>=0 ) return s; - break; - case 5 : - int LA28_198 = input.LA(1); - - - int index28_198 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_198==DOT||LA28_198==RPAREN||(LA28_198>=COLON && LA28_198<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - else if ( (LA28_198==COMMA) ) {s = 132;} - - - input.seek(index28_198); - if ( s>=0 ) return s; - break; case 6 : - int LA28_197 = input.LA(1); + int LA28_96 = input.LA(1); - int index28_197 = input.index(); + int index28_96 = input.index(); input.rewind(); s = -1; - if ( (LA28_197==DOT||LA28_197==RPAREN||(LA28_197>=COLON && LA28_197<=TIMESTAMP)) && ((strict == false))) {s = 20;} + if ( (LA28_96==RPAREN) ) {s = 228;} - else if ( (LA28_197==COMMA) ) {s = 132;} + else if ( (LA28_96==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_96==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_96==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_96==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_96==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_96==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_96==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_96==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_96==COLON) && ((strict == false))) {s = 89;} - input.seek(index28_197); + input.seek(index28_96); if ( s>=0 ) return s; break; case 7 : - int LA28_38 = input.LA(1); + int LA28_93 = input.LA(1); - int index28_38 = input.index(); + int index28_93 = input.index(); input.rewind(); s = -1; - if ( (LA28_38==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_93==RPAREN) ) {s = 197;} + + else if ( (LA28_93==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_93==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_93==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_93==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_93==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_93==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_93==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_93==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_93==COLON) && ((strict == false))) {s = 89;} - input.seek(index28_38); + input.seek(index28_93); if ( s>=0 ) return s; break; case 8 : - int LA28_49 = input.LA(1); + int LA28_56 = input.LA(1); - int index28_49 = input.index(); + int index28_56 = input.index(); input.rewind(); s = -1; - if ( (LA28_49==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_56==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_49); + input.seek(index28_56); if ( s>=0 ) return s; break; case 9 : + int LA28_273 = input.LA(1); + + + int index28_273 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_273==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_273); + if ( s>=0 ) return s; + break; + case 10 : int LA28_29 = input.LA(1); int index28_29 = input.index(); input.rewind(); s = -1; - if ( (LA28_29==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_29==EQUALS||(LA28_29>=NOTEQUALS && LA28_29<=GREATERTHANOREQUALS)) ) {s = 77;} + + else if ( (LA28_29==LPAREN) && ((strict == false))) {s = 40;} input.seek(index28_29); if ( s>=0 ) return s; break; - case 10 : - int LA28_39 = input.LA(1); - - - int index28_39 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_39==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_39); - if ( s>=0 ) return s; - break; case 11 : - int LA28_199 = input.LA(1); - - - int index28_199 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_199==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_199); - if ( s>=0 ) return s; - break; - case 12 : - int LA28_28 = input.LA(1); - - - int index28_28 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_28==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_28); - if ( s>=0 ) return s; - break; - case 13 : - int LA28_196 = input.LA(1); - - - int index28_196 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_196==DOT||LA28_196==RPAREN||(LA28_196>=COLON && LA28_196<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - else if ( (LA28_196==COMMA) ) {s = 101;} - - - input.seek(index28_196); - if ( s>=0 ) return s; - break; - case 14 : - int LA28_64 = input.LA(1); - - - int index28_64 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_64==COMMA) ) {s = 132;} - - else if ( (LA28_64==DOT||LA28_64==RPAREN||(LA28_64>=COLON && LA28_64<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - - input.seek(index28_64); - if ( s>=0 ) return s; - break; - case 15 : - int LA28_61 = input.LA(1); - - - int index28_61 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_61==COMMA) ) {s = 132;} - - else if ( (LA28_61==DOT||LA28_61==RPAREN||(LA28_61>=COLON && LA28_61<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - - input.seek(index28_61); - if ( s>=0 ) return s; - break; - case 16 : - int LA28_201 = input.LA(1); - - - int index28_201 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_201==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_201); - if ( s>=0 ) return s; - break; - case 17 : - int LA28_40 = input.LA(1); - - - int index28_40 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_40==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_40); - if ( s>=0 ) return s; - break; - case 18 : - int LA28_200 = input.LA(1); - - - int index28_200 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_200==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_200); - if ( s>=0 ) return s; - break; - case 19 : int LA28_58 = input.LA(1); int index28_58 = input.index(); input.rewind(); s = -1; - if ( (LA28_58==COMMA) ) {s = 101;} - - else if ( (LA28_58==DOT||LA28_58==RPAREN||(LA28_58>=COLON && LA28_58<=TIMESTAMP)) && ((strict == false))) {s = 20;} + if ( (LA28_58==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} input.seek(index28_58); if ( s>=0 ) return s; break; - case 20 : - int LA28_27 = input.LA(1); + case 12 : + int LA28_30 = input.LA(1); - int index28_27 = input.index(); + int index28_30 = input.index(); input.rewind(); s = -1; - if ( (LA28_27==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_30==LPAREN) && ((strict == false))) {s = 40;} + + else if ( (LA28_30==EQUALS||(LA28_30>=NOTEQUALS && LA28_30<=GREATERTHANOREQUALS)) ) {s = 77;} - input.seek(index28_27); + input.seek(index28_30); + if ( s>=0 ) return s; + break; + case 13 : + int LA28_248 = input.LA(1); + + + int index28_248 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_248==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_248); + if ( s>=0 ) return s; + break; + case 14 : + int LA28_247 = input.LA(1); + + + int index28_247 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_247==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_247); + if ( s>=0 ) return s; + break; + case 15 : + int LA28_246 = input.LA(1); + + + int index28_246 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_246==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_246); + if ( s>=0 ) return s; + break; + case 16 : + int LA28_54 = input.LA(1); + + + int index28_54 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_54==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_54); + if ( s>=0 ) return s; + break; + case 17 : + int LA28_245 = input.LA(1); + + + int index28_245 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_245==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_245); + if ( s>=0 ) return s; + break; + case 18 : + int LA28_197 = input.LA(1); + + + int index28_197 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_197==AND) ) {s = 239;} + + else if ( (LA28_197==OR) ) {s = 240;} + + else if ( (LA28_197==ORDER) ) {s = 241;} + + else if ( (LA28_197==EOF) ) {s = 242;} + + else if ( (LA28_197==RPAREN) ) {s = 243;} + + else if ( (LA28_197==EQUALS||(LA28_197>=NOTEQUALS && LA28_197<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 128;} + + + input.seek(index28_197); + if ( s>=0 ) return s; + break; + case 19 : + int LA28_244 = input.LA(1); + + + int index28_244 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_244==RPAREN) && ((strict == false))) {s = 90;} + + else if ( (LA28_244==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_244==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_244==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_244==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_244==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_244==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_244==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_244==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_244==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_244==DOT) && ((strict == false))) {s = 135;} + + else if ( (LA28_244==COMMA) ) {s = 198;} + + + input.seek(index28_244); + if ( s>=0 ) return s; + break; + case 20 : + int LA28_238 = input.LA(1); + + + int index28_238 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_238==RPAREN) && ((strict == false))) {s = 90;} + + else if ( (LA28_238==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_238==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_238==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_238==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_238==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_238==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_238==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_238==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_238==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_238==COMMA) ) {s = 167;} + + else if ( (LA28_238==DOT) && ((strict == false))) {s = 135;} + + + input.seek(index28_238); if ( s>=0 ) return s; break; case 21 : - int LA28_203 = input.LA(1); + int LA28_55 = input.LA(1); - int index28_203 = input.index(); + int index28_55 = input.index(); input.rewind(); s = -1; - if ( (LA28_203==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_55==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_203); + input.seek(index28_55); if ( s>=0 ) return s; break; case 22 : - int LA28_204 = input.LA(1); + int LA28_94 = input.LA(1); - int index28_204 = input.index(); + int index28_94 = input.index(); input.rewind(); s = -1; - if ( (LA28_204==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_94==RPAREN) && ((strict == false))) {s = 90;} + + else if ( (LA28_94==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_94==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_94==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_94==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_94==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_94==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_94==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_94==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_94==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_94==DOT) && ((strict == false))) {s = 135;} + + else if ( (LA28_94==COMMA) ) {s = 198;} - input.seek(index28_204); + input.seek(index28_94); if ( s>=0 ) return s; break; case 23 : - int LA28_97 = input.LA(1); + int LA28_91 = input.LA(1); - int index28_97 = input.index(); + int index28_91 = input.index(); input.rewind(); s = -1; - if ( (LA28_97==ID) && ((strict == false))) {s = 194;} + if ( (LA28_91==RPAREN) && ((strict == false))) {s = 90;} - else if ( (LA28_97==DOUBLE_QUOTE) && ((strict == false))) {s = 195;} + else if ( (LA28_91==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_91==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_91==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_91==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_91==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_91==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_91==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_91==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_91==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_91==DOT) && ((strict == false))) {s = 135;} + + else if ( (LA28_91==COMMA) ) {s = 167;} - input.seek(index28_97); + input.seek(index28_91); if ( s>=0 ) return s; break; case 24 : - int LA28_202 = input.LA(1); + int LA28_254 = input.LA(1); - int index28_202 = input.index(); + int index28_254 = input.index(); input.rewind(); s = -1; - if ( (LA28_202==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_254==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_202); + input.seek(index28_254); if ( s>=0 ) return s; break; case 25 : - int LA28_41 = input.LA(1); + int LA28_232 = input.LA(1); - int index28_41 = input.index(); + int index28_232 = input.index(); input.rewind(); s = -1; - if ( (LA28_41==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_232==COMMA) ) {s = 136;} + + else if ( (LA28_232==RPAREN) && ((strict == false))) {s = 90;} + + else if ( (LA28_232==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_232==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_232==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_232==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_232==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_232==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_232==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_232==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_232==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_232==DOT) && ((strict == false))) {s = 135;} - input.seek(index28_41); + input.seek(index28_232); if ( s>=0 ) return s; break; case 26 : - int LA28_26 = input.LA(1); + int LA28_228 = input.LA(1); - int index28_26 = input.index(); + int index28_228 = input.index(); input.rewind(); s = -1; - if ( (LA28_26==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_228==AND) ) {s = 239;} + + else if ( (LA28_228==OR) ) {s = 240;} + + else if ( (LA28_228==ORDER) ) {s = 241;} + + else if ( (LA28_228==EOF) ) {s = 242;} + + else if ( (LA28_228==RPAREN) ) {s = 243;} + + else if ( (LA28_228==EQUALS||(LA28_228>=NOTEQUALS && LA28_228<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 128;} - input.seek(index28_26); + input.seek(index28_228); if ( s>=0 ) return s; break; case 27 : - int LA28_206 = input.LA(1); + int LA28_253 = input.LA(1); - int index28_206 = input.index(); + int index28_253 = input.index(); input.rewind(); s = -1; - if ( (LA28_206==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_253==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_206); + input.seek(index28_253); if ( s>=0 ) return s; break; case 28 : - int LA28_42 = input.LA(1); + int LA28_52 = input.LA(1); - int index28_42 = input.index(); + int index28_52 = input.index(); input.rewind(); s = -1; - if ( (LA28_42==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_52==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_42); + input.seek(index28_52); if ( s>=0 ) return s; break; case 29 : - int LA28_51 = input.LA(1); + int LA28_252 = input.LA(1); - int index28_51 = input.index(); + int index28_252 = input.index(); input.rewind(); s = -1; - if ( (LA28_51==ID) ) {s = 58;} - - else if ( (LA28_51==DOUBLE_QUOTE) ) {s = 59;} - - else if ( (LA28_51==RPAREN||LA28_51==COLON||(LA28_51>=FLOATING_POINT_LITERAL && LA28_51<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - else if ( (LA28_51==QUOTED_STRING) ) {s = 60;} + if ( (LA28_252==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_51); + input.seek(index28_252); if ( s>=0 ) return s; break; case 30 : - int LA28_205 = input.LA(1); + int LA28_251 = input.LA(1); - int index28_205 = input.index(); + int index28_251 = input.index(); input.rewind(); s = -1; - if ( (LA28_205==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_251==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_205); + input.seek(index28_251); if ( s>=0 ) return s; break; case 31 : - int LA28_66 = input.LA(1); + int LA28_75 = input.LA(1); - int index28_66 = input.index(); + int index28_75 = input.index(); input.rewind(); s = -1; - if ( (LA28_66==RPAREN) ) {s = 192;} + if ( (LA28_75==ID) ) {s = 94;} - else if ( ((LA28_66>=COLON && LA28_66<=TIMESTAMP)) && ((strict == false))) {s = 20;} + else if ( (LA28_75==DOUBLE_QUOTE) ) {s = 95;} + + else if ( (LA28_75==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_75==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_75==QUOTED_STRING) ) {s = 96;} + + else if ( (LA28_75==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_75==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_75==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_75==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_75==RPAREN) && ((strict == false))) {s = 90;} - input.seek(index28_66); + input.seek(index28_75); if ( s>=0 ) return s; break; case 32 : - int LA28_63 = input.LA(1); + int LA28_74 = input.LA(1); - int index28_63 = input.index(); + int index28_74 = input.index(); input.rewind(); s = -1; - if ( (LA28_63==RPAREN) ) {s = 162;} + if ( (LA28_74==ID) ) {s = 91;} - else if ( ((LA28_63>=COLON && LA28_63<=TIMESTAMP)) && ((strict == false))) {s = 20;} + else if ( (LA28_74==DOUBLE_QUOTE) ) {s = 92;} + + else if ( (LA28_74==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_74==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_74==QUOTED_STRING) ) {s = 93;} + + else if ( (LA28_74==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_74==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_74==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_74==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_74==RPAREN) && ((strict == false))) {s = 90;} - input.seek(index28_63); + input.seek(index28_74); if ( s>=0 ) return s; break; case 33 : + int LA28_250 = input.LA(1); + + + int index28_250 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_250==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_250); + if ( s>=0 ) return s; + break; + case 34 : int LA28_0 = input.LA(1); @@ -12614,864 +13204,879 @@ public class CMISParser extends Parser { else if ( (LA28_0==SCORE) ) {s = 3;} - else if ( (LA28_0==SELECT||LA28_0==AS||(LA28_0>=FROM && LA28_0<=ON)||(LA28_0>=WHERE && LA28_0<=NOT)||(LA28_0>=IN && LA28_0<=NULL)||(LA28_0>=ORDER && LA28_0<=DESC)) && ((strict == false))) {s = 4;} + else if ( (LA28_0==SELECT) && ((strict == false))) {s = 4;} - else if ( (LA28_0==ANY) ) {s = 5;} + else if ( (LA28_0==AS) && ((strict == false))) {s = 5;} - else if ( (LA28_0==CONTAINS) ) {s = 6;} + else if ( (LA28_0==FROM) && ((strict == false))) {s = 6;} - else if ( (LA28_0==IN_FOLDER) ) {s = 7;} + else if ( (LA28_0==JOIN) && ((strict == false))) {s = 7;} - else if ( (LA28_0==IN_TREE) ) {s = 8;} + else if ( (LA28_0==INNER) && ((strict == false))) {s = 8;} - else if ( (LA28_0==TIMESTAMP) ) {s = 9;} + else if ( (LA28_0==LEFT) && ((strict == false))) {s = 9;} - else if ( (LA28_0==TRUE) ) {s = 10;} + else if ( (LA28_0==OUTER) && ((strict == false))) {s = 10;} - else if ( (LA28_0==FALSE) ) {s = 11;} + else if ( (LA28_0==ON) && ((strict == false))) {s = 11;} - else if ( (LA28_0==QUOTED_STRING||(LA28_0>=FLOATING_POINT_LITERAL && LA28_0<=DECIMAL_INTEGER_LITERAL)) ) {s = 12;} + else if ( (LA28_0==WHERE) && ((strict == false))) {s = 12;} - else if ( (LA28_0==COLON) && ((strict == false))) {s = 13;} + else if ( (LA28_0==OR) && ((strict == false))) {s = 13;} + + else if ( (LA28_0==AND) && ((strict == false))) {s = 14;} + + else if ( (LA28_0==NOT) && ((strict == false))) {s = 15;} + + else if ( (LA28_0==IN) && ((strict == false))) {s = 16;} + + else if ( (LA28_0==LIKE) && ((strict == false))) {s = 17;} + + else if ( (LA28_0==IS) && ((strict == false))) {s = 18;} + + else if ( (LA28_0==NULL) && ((strict == false))) {s = 19;} + + else if ( (LA28_0==ANY) ) {s = 20;} + + else if ( (LA28_0==CONTAINS) ) {s = 21;} + + else if ( (LA28_0==IN_FOLDER) ) {s = 22;} + + else if ( (LA28_0==IN_TREE) ) {s = 23;} + + else if ( (LA28_0==ORDER) && ((strict == false))) {s = 24;} + + else if ( (LA28_0==BY) && ((strict == false))) {s = 25;} + + else if ( (LA28_0==ASC) && ((strict == false))) {s = 26;} + + else if ( (LA28_0==DESC) && ((strict == false))) {s = 27;} + + else if ( (LA28_0==TIMESTAMP) ) {s = 28;} + + else if ( (LA28_0==TRUE) ) {s = 29;} + + else if ( (LA28_0==FALSE) ) {s = 30;} + + else if ( (LA28_0==FLOATING_POINT_LITERAL) ) {s = 31;} + + else if ( (LA28_0==DECIMAL_INTEGER_LITERAL) ) {s = 32;} + + else if ( (LA28_0==QUOTED_STRING) ) {s = 33;} + + else if ( (LA28_0==COLON) && ((strict == false))) {s = 34;} input.seek(index28_0); if ( s>=0 ) return s; break; - case 34 : - int LA28_208 = input.LA(1); - - - int index28_208 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_208==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_208); - if ( s>=0 ) return s; - break; case 35 : - int LA28_25 = input.LA(1); - - - int index28_25 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_25==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_25); - if ( s>=0 ) return s; - break; - case 36 : - int LA28_10 = input.LA(1); - - - int index28_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_10==LPAREN) && ((strict == false))) {s = 20;} - - else if ( (LA28_10==EQUALS||(LA28_10>=NOTEQUALS && LA28_10<=GREATERTHANOREQUALS)) ) {s = 54;} - - - input.seek(index28_10); - if ( s>=0 ) return s; - break; - case 37 : - int LA28_11 = input.LA(1); - - - int index28_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_11==LPAREN) && ((strict == false))) {s = 20;} - - else if ( (LA28_11==EQUALS||(LA28_11>=NOTEQUALS && LA28_11<=GREATERTHANOREQUALS)) ) {s = 54;} - - - input.seek(index28_11); - if ( s>=0 ) return s; - break; - case 38 : - int LA28_207 = input.LA(1); - - - int index28_207 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_207==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_207); - if ( s>=0 ) return s; - break; - case 39 : - int LA28_194 = input.LA(1); - - - int index28_194 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_194==IS) && ((strict == false))) {s = 96;} - - else if ( (LA28_194==NOT) && ((strict == false))) {s = 98;} - - else if ( (LA28_194==LIKE) && ((strict == false))) {s = 99;} - - else if ( (LA28_194==IN) && ((strict == false))) {s = 100;} - - else if ( (LA28_194==EQUALS||(LA28_194>=NOTEQUALS && LA28_194<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 20;} - - - input.seek(index28_194); - if ( s>=0 ) return s; - break; - case 40 : - int LA28_36 = input.LA(1); - - - int index28_36 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_36==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_36); - if ( s>=0 ) return s; - break; - case 41 : - int LA28_209 = input.LA(1); - - - int index28_209 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_209==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_209); - if ( s>=0 ) return s; - break; - case 42 : - int LA28_43 = input.LA(1); - - - int index28_43 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_43==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_43); - if ( s>=0 ) return s; - break; - case 43 : - int LA28_98 = input.LA(1); - - - int index28_98 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_98==IN) && ((strict == false))) {s = 100;} - - else if ( (LA28_98==LIKE) && ((strict == false))) {s = 99;} - - - input.seek(index28_98); - if ( s>=0 ) return s; - break; - case 44 : - int LA28_210 = input.LA(1); - - - int index28_210 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_210==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_210); - if ( s>=0 ) return s; - break; - case 45 : - int LA28_1 = input.LA(1); - - - int index28_1 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_1==IS) ) {s = 14;} - - else if ( (LA28_1==DOT) ) {s = 15;} - - else if ( (LA28_1==NOT) ) {s = 16;} - - else if ( (LA28_1==LIKE) ) {s = 17;} - - else if ( (LA28_1==IN) ) {s = 18;} - - else if ( (LA28_1==EQUALS||(LA28_1>=NOTEQUALS && LA28_1<=GREATERTHANOREQUALS)) ) {s = 19;} - - else if ( (LA28_1==LPAREN) && ((strict == false))) {s = 20;} - - - input.seek(index28_1); - if ( s>=0 ) return s; - break; - case 46 : - int LA28_212 = input.LA(1); - - - int index28_212 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_212==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_212); - if ( s>=0 ) return s; - break; - case 47 : - int LA28_44 = input.LA(1); - - - int index28_44 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_44==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_44); - if ( s>=0 ) return s; - break; - case 48 : - int LA28_24 = input.LA(1); - - - int index28_24 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_24==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_24); - if ( s>=0 ) return s; - break; - case 49 : - int LA28_211 = input.LA(1); - - - int index28_211 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_211==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_211); - if ( s>=0 ) return s; - break; - case 50 : - int LA28_213 = input.LA(1); - - - int index28_213 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_213==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_213); - if ( s>=0 ) return s; - break; - case 51 : int LA28_53 = input.LA(1); int index28_53 = input.index(); input.rewind(); s = -1; - if ( (LA28_53==ID) ) {s = 64;} - - else if ( (LA28_53==DOUBLE_QUOTE) ) {s = 65;} - - else if ( (LA28_53==RPAREN||LA28_53==COLON||(LA28_53>=FLOATING_POINT_LITERAL && LA28_53<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - else if ( (LA28_53==QUOTED_STRING) ) {s = 66;} + if ( (LA28_53==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} input.seek(index28_53); if ( s>=0 ) return s; break; - case 52 : - int LA28_52 = input.LA(1); + case 36 : + int LA28_249 = input.LA(1); - int index28_52 = input.index(); + int index28_249 = input.index(); input.rewind(); s = -1; - if ( (LA28_52==ID) ) {s = 61;} - - else if ( (LA28_52==DOUBLE_QUOTE) ) {s = 62;} - - else if ( (LA28_52==RPAREN||LA28_52==COLON||(LA28_52>=FLOATING_POINT_LITERAL && LA28_52<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - else if ( (LA28_52==QUOTED_STRING) ) {s = 63;} + if ( (LA28_249==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_52); + input.seek(index28_249); + if ( s>=0 ) return s; + break; + case 37 : + int LA28_258 = input.LA(1); + + + int index28_258 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_258==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_258); + if ( s>=0 ) return s; + break; + case 38 : + int LA28_259 = input.LA(1); + + + int index28_259 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_259==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_259); + if ( s>=0 ) return s; + break; + case 39 : + int LA28_68 = input.LA(1); + + + int index28_68 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_68==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_68); + if ( s>=0 ) return s; + break; + case 40 : + int LA28_50 = input.LA(1); + + + int index28_50 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_50==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_50); + if ( s>=0 ) return s; + break; + case 41 : + int LA28_28 = input.LA(1); + + + int index28_28 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_28==QUOTED_STRING) ) {s = 76;} + + else if ( (LA28_28==LPAREN) && ((strict == false))) {s = 40;} + + + input.seek(index28_28); + if ( s>=0 ) return s; + break; + case 42 : + int LA28_260 = input.LA(1); + + + int index28_260 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_260==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_260); + if ( s>=0 ) return s; + break; + case 43 : + int LA28_230 = input.LA(1); + + + int index28_230 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_230==NOT) && ((strict == false))) {s = 126;} + + else if ( (LA28_230==LIKE) && ((strict == false))) {s = 127;} + + else if ( (LA28_230==IN) && ((strict == false))) {s = 130;} + + else if ( (LA28_230==IS) && ((strict == false))) {s = 131;} + + else if ( (LA28_230==EQUALS||(LA28_230>=NOTEQUALS && LA28_230<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 128;} + + + input.seek(index28_230); + if ( s>=0 ) return s; + break; + case 44 : + int LA28_261 = input.LA(1); + + + int index28_261 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_261==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_261); + if ( s>=0 ) return s; + break; + case 45 : + int LA28_255 = input.LA(1); + + + int index28_255 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_255==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_255); + if ( s>=0 ) return s; + break; + case 46 : + int LA28_51 = input.LA(1); + + + int index28_51 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_51==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_51); + if ( s>=0 ) return s; + break; + case 47 : + int LA28_67 = input.LA(1); + + + int index28_67 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_67==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_67); + if ( s>=0 ) return s; + break; + case 48 : + int LA28_129 = input.LA(1); + + + int index28_129 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_129==ID) && ((strict == false))) {s = 230;} + + else if ( (LA28_129==DOUBLE_QUOTE) && ((strict == false))) {s = 231;} + + + input.seek(index28_129); + if ( s>=0 ) return s; + break; + case 49 : + int LA28_256 = input.LA(1); + + + int index28_256 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_256==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_256); + if ( s>=0 ) return s; + break; + case 50 : + int LA28_126 = input.LA(1); + + + int index28_126 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_126==IN) && ((strict == false))) {s = 130;} + + else if ( (LA28_126==LIKE) && ((strict == false))) {s = 127;} + + + input.seek(index28_126); + if ( s>=0 ) return s; + break; + case 51 : + int LA28_257 = input.LA(1); + + + int index28_257 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_257==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_257); + if ( s>=0 ) return s; + break; + case 52 : + int LA28_85 = input.LA(1); + + + int index28_85 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_85==RPAREN) ) {s = 166;} + + else if ( (LA28_85==ID) && ((strict == false))) {s = 132;} + + else if ( (LA28_85==DOUBLE_QUOTE) && ((strict == false))) {s = 133;} + + else if ( (LA28_85==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_85==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_85==QUOTED_STRING) && ((strict == false))) {s = 134;} + + else if ( (LA28_85==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_85==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_85==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_85==COLON) && ((strict == false))) {s = 89;} + + + input.seek(index28_85); if ( s>=0 ) return s; break; case 53 : - int LA28_214 = input.LA(1); + int LA28_274 = input.LA(1); - int index28_214 = input.index(); + int index28_274 = input.index(); input.rewind(); s = -1; - if ( (LA28_214==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_274==NOT) && ((strict == false))) {s = 126;} + + else if ( (LA28_274==LIKE) && ((strict == false))) {s = 127;} + + else if ( (LA28_274==EQUALS||(LA28_274>=NOTEQUALS && LA28_274<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 128;} + + else if ( (LA28_274==IN) && ((strict == false))) {s = 130;} + + else if ( (LA28_274==IS) && ((strict == false))) {s = 131;} - input.seek(index28_214); + input.seek(index28_274); if ( s>=0 ) return s; break; case 54 : - int LA28_45 = input.LA(1); + int LA28_265 = input.LA(1); - int index28_45 = input.index(); + int index28_265 = input.index(); input.rewind(); s = -1; - if ( (LA28_45==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_265==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_45); + input.seek(index28_265); if ( s>=0 ) return s; break; case 55 : - int LA28_215 = input.LA(1); + int LA28_69 = input.LA(1); - int index28_215 = input.index(); + int index28_69 = input.index(); input.rewind(); s = -1; - if ( (LA28_215==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_69==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_215); + input.seek(index28_69); if ( s>=0 ) return s; break; case 56 : - int LA28_22 = input.LA(1); + int LA28_66 = input.LA(1); - int index28_22 = input.index(); + int index28_66 = input.index(); input.rewind(); s = -1; - if ( (LA28_22==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_66==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_22); + input.seek(index28_66); if ( s>=0 ) return s; break; case 57 : - int LA28_35 = input.LA(1); + int LA28_266 = input.LA(1); - int index28_35 = input.index(); + int index28_266 = input.index(); input.rewind(); s = -1; - if ( (LA28_35==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_266==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_35); + input.seek(index28_266); if ( s>=0 ) return s; break; case 58 : - int LA28_60 = input.LA(1); - - - int index28_60 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_60==RPAREN) ) {s = 131;} - - else if ( ((LA28_60>=COLON && LA28_60<=TIMESTAMP)) && ((strict == false))) {s = 20;} - - - input.seek(index28_60); - if ( s>=0 ) return s; - break; - case 59 : - int LA28_216 = input.LA(1); - - - int index28_216 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_216==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_216); - if ( s>=0 ) return s; - break; - case 60 : - int LA28_34 = input.LA(1); - - - int index28_34 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_34==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_34); - if ( s>=0 ) return s; - break; - case 61 : - int LA28_23 = input.LA(1); - - - int index28_23 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_23==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_23); - if ( s>=0 ) return s; - break; - case 62 : - int LA28_217 = input.LA(1); - - - int index28_217 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_217==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_217); - if ( s>=0 ) return s; - break; - case 63 : - int LA28_192 = input.LA(1); - - - int index28_192 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_192==EOF||LA28_192==RPAREN||(LA28_192>=OR && LA28_192<=AND)||LA28_192==ORDER) ) {s = 132;} - - else if ( (LA28_192==EQUALS||(LA28_192>=NOTEQUALS && LA28_192<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 20;} - - - input.seek(index28_192); - if ( s>=0 ) return s; - break; - case 64 : - int LA28_218 = input.LA(1); - - - int index28_218 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_218==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_218); - if ( s>=0 ) return s; - break; - case 65 : - int LA28_33 = input.LA(1); - - - int index28_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_33==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_33); - if ( s>=0 ) return s; - break; - case 66 : - int LA28_219 = input.LA(1); - - - int index28_219 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_219==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_219); - if ( s>=0 ) return s; - break; - case 67 : - int LA28_162 = input.LA(1); - - - int index28_162 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_162==EOF||LA28_162==RPAREN||(LA28_162>=OR && LA28_162<=AND)||LA28_162==ORDER) ) {s = 132;} - - else if ( (LA28_162==EQUALS||(LA28_162>=NOTEQUALS && LA28_162<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 20;} - - - input.seek(index28_162); - if ( s>=0 ) return s; - break; - case 68 : - int LA28_220 = input.LA(1); - - - int index28_220 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_220==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_220); - if ( s>=0 ) return s; - break; - case 69 : - int LA28_46 = input.LA(1); - - - int index28_46 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_46==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_46); - if ( s>=0 ) return s; - break; - case 70 : - int LA28_21 = input.LA(1); - - - int index28_21 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_21==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_21); - if ( s>=0 ) return s; - break; - case 71 : - int LA28_221 = input.LA(1); - - - int index28_221 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_221==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_221); - if ( s>=0 ) return s; - break; - case 72 : - int LA28_9 = input.LA(1); - - - int index28_9 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_9==QUOTED_STRING) ) {s = 54;} - - else if ( (LA28_9==LPAREN) && ((strict == false))) {s = 20;} - - - input.seek(index28_9); - if ( s>=0 ) return s; - break; - case 73 : - int LA28_47 = input.LA(1); - - - int index28_47 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_47==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_47); - if ( s>=0 ) return s; - break; - case 74 : - int LA28_5 = input.LA(1); - - - int index28_5 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_5==LPAREN) && ((strict == false))) {s = 20;} - - else if ( ((LA28_5>=ID && LA28_5<=DOUBLE_QUOTE)) ) {s = 50;} - - - input.seek(index28_5); - if ( s>=0 ) return s; - break; - case 75 : - int LA28_222 = input.LA(1); - - - int index28_222 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_222==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_222); - if ( s>=0 ) return s; - break; - case 76 : - int LA28_227 = input.LA(1); - - - int index28_227 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_227==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_227); - if ( s>=0 ) return s; - break; - case 77 : - int LA28_223 = input.LA(1); - - - int index28_223 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_223==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_223); - if ( s>=0 ) return s; - break; - case 78 : int LA28_2 = input.LA(1); int index28_2 = input.index(); input.rewind(); s = -1; - if ( (LA28_2==SELECT) && ((strict == false))) {s = 21;} + if ( (LA28_2==SELECT) && ((strict == false))) {s = 42;} - else if ( (LA28_2==AS) && ((strict == false))) {s = 22;} + else if ( (LA28_2==AS) && ((strict == false))) {s = 43;} - else if ( (LA28_2==FROM) && ((strict == false))) {s = 23;} + else if ( (LA28_2==FROM) && ((strict == false))) {s = 44;} - else if ( (LA28_2==JOIN) && ((strict == false))) {s = 24;} + else if ( (LA28_2==JOIN) && ((strict == false))) {s = 45;} - else if ( (LA28_2==INNER) && ((strict == false))) {s = 25;} + else if ( (LA28_2==INNER) && ((strict == false))) {s = 46;} - else if ( (LA28_2==LEFT) && ((strict == false))) {s = 26;} + else if ( (LA28_2==LEFT) && ((strict == false))) {s = 47;} - else if ( (LA28_2==OUTER) && ((strict == false))) {s = 27;} + else if ( (LA28_2==OUTER) && ((strict == false))) {s = 48;} - else if ( (LA28_2==ON) && ((strict == false))) {s = 28;} + else if ( (LA28_2==ON) && ((strict == false))) {s = 49;} - else if ( (LA28_2==WHERE) && ((strict == false))) {s = 29;} + else if ( (LA28_2==WHERE) && ((strict == false))) {s = 50;} - else if ( (LA28_2==OR) && ((strict == false))) {s = 30;} + else if ( (LA28_2==OR) && ((strict == false))) {s = 51;} - else if ( (LA28_2==AND) && ((strict == false))) {s = 31;} + else if ( (LA28_2==AND) && ((strict == false))) {s = 52;} - else if ( (LA28_2==NOT) && ((strict == false))) {s = 32;} + else if ( (LA28_2==NOT) && ((strict == false))) {s = 53;} - else if ( (LA28_2==IN) && ((strict == false))) {s = 33;} + else if ( (LA28_2==IN) && ((strict == false))) {s = 54;} - else if ( (LA28_2==LIKE) && ((strict == false))) {s = 34;} + else if ( (LA28_2==LIKE) && ((strict == false))) {s = 55;} - else if ( (LA28_2==IS) && ((strict == false))) {s = 35;} + else if ( (LA28_2==IS) && ((strict == false))) {s = 56;} - else if ( (LA28_2==NULL) && ((strict == false))) {s = 36;} + else if ( (LA28_2==NULL) && ((strict == false))) {s = 57;} - else if ( (LA28_2==ANY) && ((strict == false))) {s = 37;} + else if ( (LA28_2==ANY) && ((strict == false))) {s = 58;} - else if ( (LA28_2==CONTAINS) && ((strict == false))) {s = 38;} + else if ( (LA28_2==CONTAINS) && ((strict == false))) {s = 59;} - else if ( (LA28_2==IN_FOLDER) && ((strict == false))) {s = 39;} + else if ( (LA28_2==IN_FOLDER) && ((strict == false))) {s = 60;} - else if ( (LA28_2==IN_TREE) && ((strict == false))) {s = 40;} + else if ( (LA28_2==IN_TREE) && ((strict == false))) {s = 61;} - else if ( (LA28_2==ORDER) && ((strict == false))) {s = 41;} + else if ( (LA28_2==ORDER) && ((strict == false))) {s = 62;} - else if ( (LA28_2==BY) && ((strict == false))) {s = 42;} + else if ( (LA28_2==BY) && ((strict == false))) {s = 63;} - else if ( (LA28_2==ASC) && ((strict == false))) {s = 43;} + else if ( (LA28_2==ASC) && ((strict == false))) {s = 64;} - else if ( (LA28_2==DESC) && ((strict == false))) {s = 44;} + else if ( (LA28_2==DESC) && ((strict == false))) {s = 65;} - else if ( (LA28_2==TIMESTAMP) && ((strict == false))) {s = 45;} + else if ( (LA28_2==TIMESTAMP) && ((strict == false))) {s = 66;} - else if ( (LA28_2==TRUE) && ((strict == false))) {s = 46;} + else if ( (LA28_2==TRUE) && ((strict == false))) {s = 67;} - else if ( (LA28_2==FALSE) && ((strict == false))) {s = 47;} + else if ( (LA28_2==FALSE) && ((strict == false))) {s = 68;} - else if ( (LA28_2==SCORE) && ((strict == false))) {s = 48;} + else if ( (LA28_2==SCORE) && ((strict == false))) {s = 69;} - else if ( (LA28_2==ID) && ((strict == false))) {s = 49;} + else if ( (LA28_2==ID) && ((strict == false))) {s = 70;} input.seek(index28_2); if ( s>=0 ) return s; break; - case 79 : - int LA28_32 = input.LA(1); - - - int index28_32 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_32==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index28_32); - if ( s>=0 ) return s; - break; - case 80 : - int LA28_224 = input.LA(1); - - - int index28_224 = input.index(); - input.rewind(); - s = -1; - if ( (LA28_224==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} - - - input.seek(index28_224); - if ( s>=0 ) return s; - break; - case 81 : + case 59 : int LA28_48 = input.LA(1); int index28_48 = input.index(); input.rewind(); s = -1; - if ( (LA28_48==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_48==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} input.seek(index28_48); if ( s>=0 ) return s; break; - case 82 : - int LA28_31 = input.LA(1); + case 60 : + int LA28_267 = input.LA(1); - int index28_31 = input.index(); + int index28_267 = input.index(); input.rewind(); s = -1; - if ( (LA28_31==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} + if ( (LA28_267==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} - input.seek(index28_31); + input.seek(index28_267); + if ( s>=0 ) return s; + break; + case 61 : + int LA28_49 = input.LA(1); + + + int index28_49 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_49==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_49); + if ( s>=0 ) return s; + break; + case 62 : + int LA28_65 = input.LA(1); + + + int index28_65 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_65==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_65); + if ( s>=0 ) return s; + break; + case 63 : + int LA28_262 = input.LA(1); + + + int index28_262 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_262==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_262); + if ( s>=0 ) return s; + break; + case 64 : + int LA28_263 = input.LA(1); + + + int index28_263 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_263==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_263); + if ( s>=0 ) return s; + break; + case 65 : + int LA28_264 = input.LA(1); + + + int index28_264 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_264==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_264); + if ( s>=0 ) return s; + break; + case 66 : + int LA28_1 = input.LA(1); + + + int index28_1 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_1==NOT) ) {s = 35;} + + else if ( (LA28_1==LIKE) ) {s = 36;} + + else if ( (LA28_1==IN) ) {s = 37;} + + else if ( (LA28_1==DOT) ) {s = 38;} + + else if ( (LA28_1==IS) ) {s = 39;} + + else if ( (LA28_1==LPAREN) && ((strict == false))) {s = 40;} + + else if ( (LA28_1==EQUALS||(LA28_1>=NOTEQUALS && LA28_1<=GREATERTHANOREQUALS)) ) {s = 41;} + + + input.seek(index28_1); + if ( s>=0 ) return s; + break; + case 67 : + int LA28_271 = input.LA(1); + + + int index28_271 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_271==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_271); + if ( s>=0 ) return s; + break; + case 68 : + int LA28_42 = input.LA(1); + + + int index28_42 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_42==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_42); + if ( s>=0 ) return s; + break; + case 69 : + int LA28_64 = input.LA(1); + + + int index28_64 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_64==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_64); + if ( s>=0 ) return s; + break; + case 70 : + int LA28_46 = input.LA(1); + + + int index28_46 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_46==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_46); + if ( s>=0 ) return s; + break; + case 71 : + int LA28_269 = input.LA(1); + + + int index28_269 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_269==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_269); + if ( s>=0 ) return s; + break; + case 72 : + int LA28_268 = input.LA(1); + + + int index28_268 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_268==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_268); + if ( s>=0 ) return s; + break; + case 73 : + int LA28_270 = input.LA(1); + + + int index28_270 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_270==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_270); + if ( s>=0 ) return s; + break; + case 74 : + int LA28_43 = input.LA(1); + + + int index28_43 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_43==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_43); + if ( s>=0 ) return s; + break; + case 75 : + int LA28_47 = input.LA(1); + + + int index28_47 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_47==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_47); + if ( s>=0 ) return s; + break; + case 76 : + int LA28_63 = input.LA(1); + + + int index28_63 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_63==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_63); + if ( s>=0 ) return s; + break; + case 77 : + int LA28_70 = input.LA(1); + + + int index28_70 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_70==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_70); + if ( s>=0 ) return s; + break; + case 78 : + int LA28_272 = input.LA(1); + + + int index28_272 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_272==DOUBLE_QUOTE) && ((strict == false))) {s = 274;} + + + input.seek(index28_272); + if ( s>=0 ) return s; + break; + case 79 : + int LA28_44 = input.LA(1); + + + int index28_44 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_44==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_44); + if ( s>=0 ) return s; + break; + case 80 : + int LA28_73 = input.LA(1); + + + int index28_73 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_73==ID) ) {s = 81;} + + else if ( (LA28_73==DOUBLE_QUOTE) ) {s = 82;} + + else if ( (LA28_73==FLOATING_POINT_LITERAL) && ((strict == false))) {s = 83;} + + else if ( (LA28_73==DECIMAL_INTEGER_LITERAL) && ((strict == false))) {s = 84;} + + else if ( (LA28_73==QUOTED_STRING) ) {s = 85;} + + else if ( (LA28_73==TRUE) && ((strict == false))) {s = 86;} + + else if ( (LA28_73==FALSE) && ((strict == false))) {s = 87;} + + else if ( (LA28_73==TIMESTAMP) && ((strict == false))) {s = 88;} + + else if ( (LA28_73==COLON) && ((strict == false))) {s = 89;} + + else if ( (LA28_73==RPAREN) && ((strict == false))) {s = 90;} + + + input.seek(index28_73); + if ( s>=0 ) return s; + break; + case 81 : + int LA28_62 = input.LA(1); + + + int index28_62 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_62==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} + + + input.seek(index28_62); + if ( s>=0 ) return s; + break; + case 82 : + int LA28_166 = input.LA(1); + + + int index28_166 = input.index(); + input.rewind(); + s = -1; + if ( (LA28_166==AND) ) {s = 233;} + + else if ( (LA28_166==OR) ) {s = 234;} + + else if ( (LA28_166==ORDER) ) {s = 235;} + + else if ( (LA28_166==EOF) ) {s = 236;} + + else if ( (LA28_166==RPAREN) ) {s = 237;} + + else if ( (LA28_166==EQUALS||(LA28_166>=NOTEQUALS && LA28_166<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 128;} + + + input.seek(index28_166); if ( s>=0 ) return s; break; case 83 : - int LA28_225 = input.LA(1); + int LA28_80 = input.LA(1); - int index28_225 = input.index(); + int index28_80 = input.index(); input.rewind(); s = -1; - if ( (LA28_225==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_80==NOT) && ((strict == false))) {s = 126;} + + else if ( (LA28_80==LIKE) && ((strict == false))) {s = 127;} + + else if ( (LA28_80==EQUALS||(LA28_80>=NOTEQUALS && LA28_80<=GREATERTHANOREQUALS)) && ((strict == false))) {s = 128;} + + else if ( (LA28_80==DOT) && ((strict == false))) {s = 129;} + + else if ( (LA28_80==IN) && ((strict == false))) {s = 130;} + + else if ( (LA28_80==IS) && ((strict == false))) {s = 131;} - input.seek(index28_225); + input.seek(index28_80); if ( s>=0 ) return s; break; case 84 : - int LA28_195 = input.LA(1); + int LA28_45 = input.LA(1); - int index28_195 = input.index(); + int index28_45 = input.index(); input.rewind(); s = -1; - if ( (LA28_195==SELECT) && ((strict == false))) {s = 199;} - - else if ( (LA28_195==AS) && ((strict == false))) {s = 200;} - - else if ( (LA28_195==FROM) && ((strict == false))) {s = 201;} - - else if ( (LA28_195==JOIN) && ((strict == false))) {s = 202;} - - else if ( (LA28_195==INNER) && ((strict == false))) {s = 203;} - - else if ( (LA28_195==LEFT) && ((strict == false))) {s = 204;} - - else if ( (LA28_195==OUTER) && ((strict == false))) {s = 205;} - - else if ( (LA28_195==ON) && ((strict == false))) {s = 206;} - - else if ( (LA28_195==WHERE) && ((strict == false))) {s = 207;} - - else if ( (LA28_195==OR) && ((strict == false))) {s = 208;} - - else if ( (LA28_195==AND) && ((strict == false))) {s = 209;} - - else if ( (LA28_195==NOT) && ((strict == false))) {s = 210;} - - else if ( (LA28_195==IN) && ((strict == false))) {s = 211;} - - else if ( (LA28_195==LIKE) && ((strict == false))) {s = 212;} - - else if ( (LA28_195==IS) && ((strict == false))) {s = 213;} - - else if ( (LA28_195==NULL) && ((strict == false))) {s = 214;} - - else if ( (LA28_195==ANY) && ((strict == false))) {s = 215;} - - else if ( (LA28_195==CONTAINS) && ((strict == false))) {s = 216;} - - else if ( (LA28_195==IN_FOLDER) && ((strict == false))) {s = 217;} - - else if ( (LA28_195==IN_TREE) && ((strict == false))) {s = 218;} - - else if ( (LA28_195==ORDER) && ((strict == false))) {s = 219;} - - else if ( (LA28_195==BY) && ((strict == false))) {s = 220;} - - else if ( (LA28_195==ASC) && ((strict == false))) {s = 221;} - - else if ( (LA28_195==DESC) && ((strict == false))) {s = 222;} - - else if ( (LA28_195==TIMESTAMP) && ((strict == false))) {s = 223;} - - else if ( (LA28_195==TRUE) && ((strict == false))) {s = 224;} - - else if ( (LA28_195==FALSE) && ((strict == false))) {s = 225;} - - else if ( (LA28_195==SCORE) && ((strict == false))) {s = 226;} - - else if ( (LA28_195==ID) && ((strict == false))) {s = 227;} + if ( (LA28_45==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_195); + input.seek(index28_45); if ( s>=0 ) return s; break; case 85 : - int LA28_226 = input.LA(1); + int LA28_61 = input.LA(1); - int index28_226 = input.index(); + int index28_61 = input.index(); input.rewind(); s = -1; - if ( (LA28_226==DOUBLE_QUOTE) && ((strict == false))) {s = 228;} + if ( (LA28_61==DOUBLE_QUOTE) && ((strict == false))) {s = 80;} - input.seek(index28_226); + input.seek(index28_61); if ( s>=0 ) return s; break; } @@ -13482,26 +14087,26 @@ public class CMISParser extends Parser { throw nvae; } } - static final String DFA36_eotS = + static final String DFA34_eotS = "\151\uffff"; - static final String DFA36_eofS = + static final String DFA34_eofS = "\151\uffff"; - static final String DFA36_minS = - "\1\105\1\44\1\37\1\105\1\61\35\106\1\71\1\37\2\uffff\1\44\35\106"+ - "\1\61\1\105\1\71\2\uffff\1\71\1\37\35\106\1\71"; - static final String DFA36_maxS = - "\1\106\1\71\1\114\1\106\1\72\35\106\1\71\1\114\2\uffff\1\71\35"+ - "\106\1\72\1\106\1\71\2\uffff\1\71\1\114\35\106\1\71"; - static final String DFA36_acceptS = - "\44\uffff\1\2\1\1\41\uffff\1\1\1\2\40\uffff"; - static final String DFA36_specialS = - "\1\41\1\uffff\1\16\2\uffff\1\45\1\30\1\37\1\22\1\13\1\3\1\11\1"+ - "\65\1\76\1\52\1\42\1\56\1\27\1\35\1\33\1\1\1\15\1\67\1\71\1\100"+ - "\1\44\1\55\1\60\1\25\1\32\1\2\1\10\1\62\1\47\4\uffff\1\36\35\uffff"+ - "\1\17\1\4\3\uffff\1\24\1\50\1\31\1\34\1\40\1\20\1\21\1\23\1\26\1"+ - "\53\1\51\1\46\1\43\1\63\1\61\1\57\1\54\1\72\1\70\1\66\1\64\1\101"+ - "\1\77\1\75\1\74\1\6\1\7\1\0\1\5\1\73\1\12\1\14}>"; - static final String[] DFA36_transitionS = { + static final String DFA34_minS = + "\1\106\1\45\1\40\1\106\1\62\35\107\1\72\1\40\2\uffff\1\45\35\107"+ + "\1\106\1\62\2\72\1\40\2\uffff\35\107\1\72"; + static final String DFA34_maxS = + "\1\107\1\72\1\115\1\107\1\73\35\107\1\72\1\115\2\uffff\1\72\36"+ + "\107\1\73\2\72\1\115\2\uffff\35\107\1\72"; + static final String DFA34_acceptS = + "\44\uffff\1\1\1\2\43\uffff\1\2\1\1\36\uffff"; + static final String DFA34_specialS = + "\1\46\1\uffff\1\50\2\uffff\1\35\1\26\1\31\1\33\1\44\1\47\1\45\1"+ + "\37\1\42\1\73\1\72\1\75\1\57\1\65\1\63\1\7\1\1\1\20\1\24\1\14\1"+ + "\32\1\27\1\30\1\36\1\34\1\43\1\41\1\52\1\71\4\uffff\1\40\35\uffff"+ + "\1\16\1\66\1\uffff\1\62\1\25\2\uffff\1\12\1\15\1\13\1\21\1\17\1"+ + "\23\1\22\1\2\1\0\1\4\1\3\1\6\1\5\1\11\1\10\1\70\1\67\1\64\1\61\1"+ + "\60\1\55\1\54\1\51\1\101\1\77\1\76\1\74\1\100\1\56\1\53}>"; + static final String[] DFA34_transitionS = { "\1\1\1\2", "\1\3\24\uffff\1\4", "\1\5\2\uffff\1\6\4\uffff\1\7\1\10\1\11\1\12\1\13\1\14\1\uffff"+ @@ -13509,7 +14114,7 @@ public class CMISParser extends Parser { "\27\1\30\1\31\1\32\1\33\1\34\2\uffff\1\41\3\uffff\1\36\1\37"+ "\1\35\1\40", "\1\42\1\43", - "\1\44\10\uffff\1\45", + "\1\45\10\uffff\1\44", "\1\46", "\1\46", "\1\46", @@ -13546,7 +14151,7 @@ public class CMISParser extends Parser { "\100\1\101\1\77\1\102", "", "", - "\1\105\24\uffff\1\104", + "\1\104\24\uffff\1\105", "\1\106", "\1\106", "\1\106", @@ -13576,1153 +14181,46 @@ public class CMISParser extends Parser { "\1\106", "\1\106", "\1\106", - "\1\110\10\uffff\1\107", - "\1\111\1\112", + "\1\107\1\110", + "\1\111\10\uffff\1\112", "\1\4", - "", - "", - "\1\104", + "\1\105", "\1\113\2\uffff\1\114\4\uffff\1\115\1\116\1\117\1\120\1\121"+ "\1\122\1\uffff\1\123\1\124\1\125\1\126\5\uffff\1\127\1\130\1"+ "\131\1\132\1\133\1\134\1\135\1\136\1\137\1\140\1\141\1\142\2"+ "\uffff\1\147\3\uffff\1\144\1\145\1\143\1\146", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\150", - "\1\104" - }; - - static final short[] DFA36_eot = DFA.unpackEncodedString(DFA36_eotS); - static final short[] DFA36_eof = DFA.unpackEncodedString(DFA36_eofS); - static final char[] DFA36_min = DFA.unpackEncodedStringToUnsignedChars(DFA36_minS); - static final char[] DFA36_max = DFA.unpackEncodedStringToUnsignedChars(DFA36_maxS); - static final short[] DFA36_accept = DFA.unpackEncodedString(DFA36_acceptS); - static final short[] DFA36_special = DFA.unpackEncodedString(DFA36_specialS); - static final short[][] DFA36_transition; - - static { - int numStates = DFA36_transitionS.length; - DFA36_transition = new short[numStates][]; - for (int i=0; i columnReference | multiValuedColumnReference ) IS NULL -> ^( PRED_EXISTS columnReference NOT ) | ( ( columnReference )=> columnReference | multiValuedColumnReference ) IS NOT NULL -> ^( PRED_EXISTS columnReference ) );"; - } - public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { - TokenStream input = (TokenStream)_input; - int _s = s; - switch ( s ) { - case 0 : - int LA36_100 = input.LA(1); - - - int index36_100 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_100==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_100); - if ( s>=0 ) return s; - break; - case 1 : - int LA36_20 = input.LA(1); - - - int index36_20 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_20==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_20); - if ( s>=0 ) return s; - break; - case 2 : - int LA36_30 = input.LA(1); - - - int index36_30 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_30==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_30); - if ( s>=0 ) return s; - break; - case 3 : - int LA36_10 = input.LA(1); - - - int index36_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_10==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_10); - if ( s>=0 ) return s; - break; - case 4 : - int LA36_69 = input.LA(1); - - - int index36_69 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_69==ID) && ((strict == false))) {s = 73;} - - else if ( (LA36_69==DOUBLE_QUOTE) && ((strict == false))) {s = 74;} - - - input.seek(index36_69); - if ( s>=0 ) return s; - break; - case 5 : - int LA36_101 = input.LA(1); - - - int index36_101 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_101==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_101); - if ( s>=0 ) return s; - break; - case 6 : - int LA36_98 = input.LA(1); - - - int index36_98 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_98==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_98); - if ( s>=0 ) return s; - break; - case 7 : - int LA36_99 = input.LA(1); - - - int index36_99 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_99==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_99); - if ( s>=0 ) return s; - break; - case 8 : - int LA36_31 = input.LA(1); - - - int index36_31 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_31==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_31); - if ( s>=0 ) return s; - break; - case 9 : - int LA36_11 = input.LA(1); - - - int index36_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_11==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_11); - if ( s>=0 ) return s; - break; - case 10 : - int LA36_103 = input.LA(1); - - - int index36_103 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_103==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_103); - if ( s>=0 ) return s; - break; - case 11 : - int LA36_9 = input.LA(1); - - - int index36_9 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_9==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_9); - if ( s>=0 ) return s; - break; - case 12 : - int LA36_104 = input.LA(1); - - - int index36_104 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_104==IS) && ((strict == false))) {s = 68;} - - - input.seek(index36_104); - if ( s>=0 ) return s; - break; - case 13 : - int LA36_21 = input.LA(1); - - - int index36_21 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_21==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_21); - if ( s>=0 ) return s; - break; - case 14 : - int LA36_2 = input.LA(1); - - - int index36_2 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_2==SELECT) && ((strict == false))) {s = 5;} - - else if ( (LA36_2==AS) && ((strict == false))) {s = 6;} - - else if ( (LA36_2==FROM) && ((strict == false))) {s = 7;} - - else if ( (LA36_2==JOIN) && ((strict == false))) {s = 8;} - - else if ( (LA36_2==INNER) && ((strict == false))) {s = 9;} - - else if ( (LA36_2==LEFT) && ((strict == false))) {s = 10;} - - else if ( (LA36_2==OUTER) && ((strict == false))) {s = 11;} - - else if ( (LA36_2==ON) && ((strict == false))) {s = 12;} - - else if ( (LA36_2==WHERE) && ((strict == false))) {s = 13;} - - else if ( (LA36_2==OR) && ((strict == false))) {s = 14;} - - else if ( (LA36_2==AND) && ((strict == false))) {s = 15;} - - else if ( (LA36_2==NOT) && ((strict == false))) {s = 16;} - - else if ( (LA36_2==IN) && ((strict == false))) {s = 17;} - - else if ( (LA36_2==LIKE) && ((strict == false))) {s = 18;} - - else if ( (LA36_2==IS) && ((strict == false))) {s = 19;} - - else if ( (LA36_2==NULL) && ((strict == false))) {s = 20;} - - else if ( (LA36_2==ANY) && ((strict == false))) {s = 21;} - - else if ( (LA36_2==CONTAINS) && ((strict == false))) {s = 22;} - - else if ( (LA36_2==IN_FOLDER) && ((strict == false))) {s = 23;} - - else if ( (LA36_2==IN_TREE) && ((strict == false))) {s = 24;} - - else if ( (LA36_2==ORDER) && ((strict == false))) {s = 25;} - - else if ( (LA36_2==BY) && ((strict == false))) {s = 26;} - - else if ( (LA36_2==ASC) && ((strict == false))) {s = 27;} - - else if ( (LA36_2==DESC) && ((strict == false))) {s = 28;} - - else if ( (LA36_2==TIMESTAMP) && ((strict == false))) {s = 29;} - - else if ( (LA36_2==TRUE) && ((strict == false))) {s = 30;} - - else if ( (LA36_2==FALSE) && ((strict == false))) {s = 31;} - - else if ( (LA36_2==SCORE) && ((strict == false))) {s = 32;} - - else if ( (LA36_2==ID) && ((strict == false))) {s = 33;} - - - input.seek(index36_2); - if ( s>=0 ) return s; - break; - case 15 : - int LA36_68 = input.LA(1); - - - int index36_68 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_68==NULL) && ((strict == false))) {s = 71;} - - else if ( (LA36_68==NOT) && ((strict == false))) {s = 72;} - - - input.seek(index36_68); - if ( s>=0 ) return s; - break; - case 16 : - int LA36_78 = input.LA(1); - - - int index36_78 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_78==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_78); - if ( s>=0 ) return s; - break; - case 17 : - int LA36_79 = input.LA(1); - - - int index36_79 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_79==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_79); - if ( s>=0 ) return s; - break; - case 18 : - int LA36_8 = input.LA(1); - - - int index36_8 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_8==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_8); - if ( s>=0 ) return s; - break; - case 19 : - int LA36_80 = input.LA(1); - - - int index36_80 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_80==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_80); - if ( s>=0 ) return s; - break; - case 20 : - int LA36_73 = input.LA(1); - - - int index36_73 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_73==IS) && ((strict == false))) {s = 68;} - - - input.seek(index36_73); - if ( s>=0 ) return s; - break; - case 21 : - int LA36_28 = input.LA(1); - - - int index36_28 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_28==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_28); - if ( s>=0 ) return s; - break; - case 22 : - int LA36_81 = input.LA(1); - - - int index36_81 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_81==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_81); - if ( s>=0 ) return s; - break; - case 23 : - int LA36_17 = input.LA(1); - - - int index36_17 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_17==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_17); - if ( s>=0 ) return s; - break; - case 24 : - int LA36_6 = input.LA(1); - - - int index36_6 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_6==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_6); - if ( s>=0 ) return s; - break; - case 25 : - int LA36_75 = input.LA(1); - - - int index36_75 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_75==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_75); - if ( s>=0 ) return s; - break; - case 26 : - int LA36_29 = input.LA(1); - - - int index36_29 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_29==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_29); - if ( s>=0 ) return s; - break; - case 27 : - int LA36_19 = input.LA(1); - - - int index36_19 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_19==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_19); - if ( s>=0 ) return s; - break; - case 28 : - int LA36_76 = input.LA(1); - - - int index36_76 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_76==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_76); - if ( s>=0 ) return s; - break; - case 29 : - int LA36_18 = input.LA(1); - - - int index36_18 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_18==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_18); - if ( s>=0 ) return s; - break; - case 30 : - int LA36_38 = input.LA(1); - - - int index36_38 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_38==IS) && ((strict == false))) {s = 68;} - - else if ( (LA36_38==DOT) && ((strict == false))) {s = 69;} - - - input.seek(index36_38); - if ( s>=0 ) return s; - break; - case 31 : - int LA36_7 = input.LA(1); - - - int index36_7 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_7==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_7); - if ( s>=0 ) return s; - break; - case 32 : - int LA36_77 = input.LA(1); - - - int index36_77 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_77==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_77); - if ( s>=0 ) return s; - break; - case 33 : - int LA36_0 = input.LA(1); - - - int index36_0 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_0==ID) ) {s = 1;} - - else if ( (LA36_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} - - - input.seek(index36_0); - if ( s>=0 ) return s; - break; - case 34 : - int LA36_15 = input.LA(1); - - - int index36_15 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_15==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_15); - if ( s>=0 ) return s; - break; - case 35 : - int LA36_85 = input.LA(1); - - - int index36_85 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_85==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_85); - if ( s>=0 ) return s; - break; - case 36 : - int LA36_25 = input.LA(1); - - - int index36_25 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_25==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_25); - if ( s>=0 ) return s; - break; - case 37 : - int LA36_5 = input.LA(1); - - - int index36_5 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_5==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_5); - if ( s>=0 ) return s; - break; - case 38 : - int LA36_84 = input.LA(1); - - - int index36_84 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_84==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_84); - if ( s>=0 ) return s; - break; - case 39 : - int LA36_33 = input.LA(1); - - - int index36_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_33==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_33); - if ( s>=0 ) return s; - break; - case 40 : - int LA36_74 = input.LA(1); - - - int index36_74 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_74==SELECT) && ((strict == false))) {s = 75;} - - else if ( (LA36_74==AS) && ((strict == false))) {s = 76;} - - else if ( (LA36_74==FROM) && ((strict == false))) {s = 77;} - - else if ( (LA36_74==JOIN) && ((strict == false))) {s = 78;} - - else if ( (LA36_74==INNER) && ((strict == false))) {s = 79;} - - else if ( (LA36_74==LEFT) && ((strict == false))) {s = 80;} - - else if ( (LA36_74==OUTER) && ((strict == false))) {s = 81;} - - else if ( (LA36_74==ON) && ((strict == false))) {s = 82;} - - else if ( (LA36_74==WHERE) && ((strict == false))) {s = 83;} - - else if ( (LA36_74==OR) && ((strict == false))) {s = 84;} - - else if ( (LA36_74==AND) && ((strict == false))) {s = 85;} - - else if ( (LA36_74==NOT) && ((strict == false))) {s = 86;} - - else if ( (LA36_74==IN) && ((strict == false))) {s = 87;} - - else if ( (LA36_74==LIKE) && ((strict == false))) {s = 88;} - - else if ( (LA36_74==IS) && ((strict == false))) {s = 89;} - - else if ( (LA36_74==NULL) && ((strict == false))) {s = 90;} - - else if ( (LA36_74==ANY) && ((strict == false))) {s = 91;} - - else if ( (LA36_74==CONTAINS) && ((strict == false))) {s = 92;} - - else if ( (LA36_74==IN_FOLDER) && ((strict == false))) {s = 93;} - - else if ( (LA36_74==IN_TREE) && ((strict == false))) {s = 94;} - - else if ( (LA36_74==ORDER) && ((strict == false))) {s = 95;} - - else if ( (LA36_74==BY) && ((strict == false))) {s = 96;} - - else if ( (LA36_74==ASC) && ((strict == false))) {s = 97;} - - else if ( (LA36_74==DESC) && ((strict == false))) {s = 98;} - - else if ( (LA36_74==TIMESTAMP) && ((strict == false))) {s = 99;} - - else if ( (LA36_74==TRUE) && ((strict == false))) {s = 100;} - - else if ( (LA36_74==FALSE) && ((strict == false))) {s = 101;} - - else if ( (LA36_74==SCORE) && ((strict == false))) {s = 102;} - - else if ( (LA36_74==ID) && ((strict == false))) {s = 103;} - - - input.seek(index36_74); - if ( s>=0 ) return s; - break; - case 41 : - int LA36_83 = input.LA(1); - - - int index36_83 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_83==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_83); - if ( s>=0 ) return s; - break; - case 42 : - int LA36_14 = input.LA(1); - - - int index36_14 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_14==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_14); - if ( s>=0 ) return s; - break; - case 43 : - int LA36_82 = input.LA(1); - - - int index36_82 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_82==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_82); - if ( s>=0 ) return s; - break; - case 44 : - int LA36_89 = input.LA(1); - - - int index36_89 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_89==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_89); - if ( s>=0 ) return s; - break; - case 45 : - int LA36_26 = input.LA(1); - - - int index36_26 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_26==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_26); - if ( s>=0 ) return s; - break; - case 46 : - int LA36_16 = input.LA(1); - - - int index36_16 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_16==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_16); - if ( s>=0 ) return s; - break; - case 47 : - int LA36_88 = input.LA(1); - - - int index36_88 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_88==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_88); - if ( s>=0 ) return s; - break; - case 48 : - int LA36_27 = input.LA(1); - - - int index36_27 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_27==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_27); - if ( s>=0 ) return s; - break; - case 49 : - int LA36_87 = input.LA(1); - - - int index36_87 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_87==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_87); - if ( s>=0 ) return s; - break; - case 50 : - int LA36_32 = input.LA(1); - - - int index36_32 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_32==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_32); - if ( s>=0 ) return s; - break; - case 51 : - int LA36_86 = input.LA(1); - - - int index36_86 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_86==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_86); - if ( s>=0 ) return s; - break; - case 52 : - int LA36_93 = input.LA(1); - - - int index36_93 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_93==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_93); - if ( s>=0 ) return s; - break; - case 53 : - int LA36_12 = input.LA(1); - - - int index36_12 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_12==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_12); - if ( s>=0 ) return s; - break; - case 54 : - int LA36_92 = input.LA(1); - - - int index36_92 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_92==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_92); - if ( s>=0 ) return s; - break; - case 55 : - int LA36_22 = input.LA(1); - - - int index36_22 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_22==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_22); - if ( s>=0 ) return s; - break; - case 56 : - int LA36_91 = input.LA(1); - - - int index36_91 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_91==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_91); - if ( s>=0 ) return s; - break; - case 57 : - int LA36_23 = input.LA(1); - - - int index36_23 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_23==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_23); - if ( s>=0 ) return s; - break; - case 58 : - int LA36_90 = input.LA(1); - - - int index36_90 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_90==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_90); - if ( s>=0 ) return s; - break; - case 59 : - int LA36_102 = input.LA(1); - - - int index36_102 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_102==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_102); - if ( s>=0 ) return s; - break; - case 60 : - int LA36_97 = input.LA(1); - - - int index36_97 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_97==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_97); - if ( s>=0 ) return s; - break; - case 61 : - int LA36_96 = input.LA(1); - - - int index36_96 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_96==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_96); - if ( s>=0 ) return s; - break; - case 62 : - int LA36_13 = input.LA(1); - - - int index36_13 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_13==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_13); - if ( s>=0 ) return s; - break; - case 63 : - int LA36_95 = input.LA(1); - - - int index36_95 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_95==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_95); - if ( s>=0 ) return s; - break; - case 64 : - int LA36_24 = input.LA(1); - - - int index36_24 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_24==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index36_24); - if ( s>=0 ) return s; - break; - case 65 : - int LA36_94 = input.LA(1); - - - int index36_94 = input.index(); - input.rewind(); - s = -1; - if ( (LA36_94==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - - - input.seek(index36_94); - if ( s>=0 ) return s; - break; - } - if (state.backtracking>0) {state.failed=true; return -1;} - NoViableAltException nvae = - new NoViableAltException(getDescription(), 36, _s, input); - error(nvae); - throw nvae; - } - } - static final String DFA34_eotS = - "\77\uffff"; - static final String DFA34_eofS = - "\77\uffff"; - static final String DFA34_minS = - "\1\105\1\0\1\37\2\uffff\35\106\35\0"; - static final String DFA34_maxS = - "\1\106\1\0\1\114\2\uffff\35\106\35\0"; - static final String DFA34_acceptS = - "\3\uffff\1\1\1\2\72\uffff"; - static final String DFA34_specialS = - "\1\62\1\72\1\44\2\uffff\1\57\1\50\1\54\1\45\1\42\1\2\1\4\1\67\1"+ - "\73\1\61\1\55\1\64\1\47\1\53\1\52\1\0\1\43\1\70\1\71\1\74\1\56\1"+ - "\63\1\65\1\46\1\51\1\1\1\3\1\66\1\60\1\23\1\24\1\25\1\26\1\27\1"+ - "\30\1\31\1\32\1\33\1\34\1\35\1\36\1\37\1\40\1\41\1\22\1\21\1\20"+ - "\1\17\1\16\1\15\1\14\1\13\1\12\1\11\1\10\1\7\1\6\1\5}>"; - static final String[] DFA34_transitionS = { - "\1\1\1\2", - "\1\uffff", - "\1\5\2\uffff\1\6\4\uffff\1\7\1\10\1\11\1\12\1\13\1\14\1\uffff"+ - "\1\15\1\16\1\17\1\20\5\uffff\1\21\1\22\1\23\1\24\1\25\1\26\1"+ - "\27\1\30\1\31\1\32\1\33\1\34\2\uffff\1\41\3\uffff\1\36\1\37"+ - "\1\35\1\40", "", "", - "\1\42", - "\1\43", - "\1\44", - "\1\45", - "\1\46", - "\1\47", - "\1\50", - "\1\51", - "\1\52", - "\1\53", - "\1\54", - "\1\55", - "\1\56", - "\1\57", - "\1\60", - "\1\61", - "\1\62", - "\1\63", - "\1\64", - "\1\65", - "\1\66", - "\1\67", - "\1\70", - "\1\71", - "\1\72", - "\1\73", - "\1\74", - "\1\75", - "\1\76", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff" + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\150", + "\1\105" }; static final short[] DFA34_eot = DFA.unpackEncodedString(DFA34_eotS); @@ -14755,513 +14253,541 @@ public class CMISParser extends Parser { this.transition = DFA34_transition; } public String getDescription() { - return "516:4: ( ( columnReference )=> columnReference | multiValuedColumnReference )"; + return "639:1: nullPredicate : ( columnReference IS NULL -> ^( PRED_EXISTS columnReference NOT ) | columnReference IS NOT NULL -> ^( PRED_EXISTS columnReference ) );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : + int LA34_83 = input.LA(1); + + + int index34_83 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_83==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_83); + if ( s>=0 ) return s; + break; + case 1 : + int LA34_21 = input.LA(1); + + + int index34_21 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_21==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_21); + if ( s>=0 ) return s; + break; + case 2 : + int LA34_82 = input.LA(1); + + + int index34_82 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_82==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_82); + if ( s>=0 ) return s; + break; + case 3 : + int LA34_85 = input.LA(1); + + + int index34_85 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_85==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_85); + if ( s>=0 ) return s; + break; + case 4 : + int LA34_84 = input.LA(1); + + + int index34_84 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_84==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_84); + if ( s>=0 ) return s; + break; + case 5 : + int LA34_87 = input.LA(1); + + + int index34_87 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_87==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_87); + if ( s>=0 ) return s; + break; + case 6 : + int LA34_86 = input.LA(1); + + + int index34_86 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_86==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_86); + if ( s>=0 ) return s; + break; + case 7 : int LA34_20 = input.LA(1); int index34_20 = input.index(); input.rewind(); s = -1; - if ( (LA34_20==DOUBLE_QUOTE) && ((strict == false))) {s = 49;} + if ( (LA34_20==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} input.seek(index34_20); if ( s>=0 ) return s; break; - case 1 : - int LA34_30 = input.LA(1); - - - int index34_30 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_30==DOUBLE_QUOTE) && ((strict == false))) {s = 59;} - - - input.seek(index34_30); - if ( s>=0 ) return s; - break; - case 2 : - int LA34_10 = input.LA(1); - - - int index34_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_10==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - - - input.seek(index34_10); - if ( s>=0 ) return s; - break; - case 3 : - int LA34_31 = input.LA(1); - - - int index34_31 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_31==DOUBLE_QUOTE) && ((strict == false))) {s = 60;} - - - input.seek(index34_31); - if ( s>=0 ) return s; - break; - case 4 : - int LA34_11 = input.LA(1); - - - int index34_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_11==DOUBLE_QUOTE) && ((strict == false))) {s = 40;} - - - input.seek(index34_11); - if ( s>=0 ) return s; - break; - case 5 : - int LA34_62 = input.LA(1); - - - int index34_62 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_62); - if ( s>=0 ) return s; - break; - case 6 : - int LA34_61 = input.LA(1); - - - int index34_61 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_61); - if ( s>=0 ) return s; - break; - case 7 : - int LA34_60 = input.LA(1); - - - int index34_60 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_60); - if ( s>=0 ) return s; - break; case 8 : - int LA34_59 = input.LA(1); + int LA34_89 = input.LA(1); - int index34_59 = input.index(); + int index34_89 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_89==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_59); + input.seek(index34_89); if ( s>=0 ) return s; break; case 9 : - int LA34_58 = input.LA(1); + int LA34_88 = input.LA(1); - int index34_58 = input.index(); + int index34_88 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_88==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_58); + input.seek(index34_88); if ( s>=0 ) return s; break; case 10 : - int LA34_57 = input.LA(1); + int LA34_75 = input.LA(1); - int index34_57 = input.index(); + int index34_75 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_75==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_57); + input.seek(index34_75); if ( s>=0 ) return s; break; case 11 : - int LA34_56 = input.LA(1); + int LA34_77 = input.LA(1); - int index34_56 = input.index(); + int index34_77 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_77==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_56); + input.seek(index34_77); if ( s>=0 ) return s; break; case 12 : - int LA34_55 = input.LA(1); + int LA34_24 = input.LA(1); - int index34_55 = input.index(); + int index34_24 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_24==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_55); + input.seek(index34_24); if ( s>=0 ) return s; break; case 13 : - int LA34_54 = input.LA(1); + int LA34_76 = input.LA(1); - int index34_54 = input.index(); + int index34_76 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_76==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_54); + input.seek(index34_76); if ( s>=0 ) return s; break; case 14 : - int LA34_53 = input.LA(1); + int LA34_68 = input.LA(1); - int index34_53 = input.index(); + int index34_68 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} + if ( (LA34_68==ID) && ((strict == false))) {s = 71;} - else if ( ((strict == false)) ) {s = 4;} + else if ( (LA34_68==DOUBLE_QUOTE) && ((strict == false))) {s = 72;} - input.seek(index34_53); + input.seek(index34_68); if ( s>=0 ) return s; break; case 15 : - int LA34_52 = input.LA(1); + int LA34_79 = input.LA(1); - int index34_52 = input.index(); + int index34_79 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_79==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_52); + input.seek(index34_79); if ( s>=0 ) return s; break; case 16 : - int LA34_51 = input.LA(1); + int LA34_22 = input.LA(1); - int index34_51 = input.index(); + int index34_22 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_22==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_51); + input.seek(index34_22); if ( s>=0 ) return s; break; case 17 : - int LA34_50 = input.LA(1); + int LA34_78 = input.LA(1); - int index34_50 = input.index(); + int index34_78 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_78==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_50); + input.seek(index34_78); if ( s>=0 ) return s; break; case 18 : - int LA34_49 = input.LA(1); + int LA34_81 = input.LA(1); - int index34_49 = input.index(); + int index34_81 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_81==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_49); + input.seek(index34_81); if ( s>=0 ) return s; break; case 19 : - int LA34_34 = input.LA(1); + int LA34_80 = input.LA(1); - int index34_34 = input.index(); + int index34_80 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_80==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_34); + input.seek(index34_80); if ( s>=0 ) return s; break; case 20 : - int LA34_35 = input.LA(1); + int LA34_23 = input.LA(1); - int index34_35 = input.index(); + int index34_23 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_23==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_35); + input.seek(index34_23); if ( s>=0 ) return s; break; case 21 : - int LA34_36 = input.LA(1); + int LA34_72 = input.LA(1); - int index34_36 = input.index(); + int index34_72 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} + if ( (LA34_72==SELECT) && ((strict == false))) {s = 75;} - else if ( ((strict == false)) ) {s = 4;} + else if ( (LA34_72==AS) && ((strict == false))) {s = 76;} + + else if ( (LA34_72==FROM) && ((strict == false))) {s = 77;} + + else if ( (LA34_72==JOIN) && ((strict == false))) {s = 78;} + + else if ( (LA34_72==INNER) && ((strict == false))) {s = 79;} + + else if ( (LA34_72==LEFT) && ((strict == false))) {s = 80;} + + else if ( (LA34_72==OUTER) && ((strict == false))) {s = 81;} + + else if ( (LA34_72==ON) && ((strict == false))) {s = 82;} + + else if ( (LA34_72==WHERE) && ((strict == false))) {s = 83;} + + else if ( (LA34_72==OR) && ((strict == false))) {s = 84;} + + else if ( (LA34_72==AND) && ((strict == false))) {s = 85;} + + else if ( (LA34_72==NOT) && ((strict == false))) {s = 86;} + + else if ( (LA34_72==IN) && ((strict == false))) {s = 87;} + + else if ( (LA34_72==LIKE) && ((strict == false))) {s = 88;} + + else if ( (LA34_72==IS) && ((strict == false))) {s = 89;} + + else if ( (LA34_72==NULL) && ((strict == false))) {s = 90;} + + else if ( (LA34_72==ANY) && ((strict == false))) {s = 91;} + + else if ( (LA34_72==CONTAINS) && ((strict == false))) {s = 92;} + + else if ( (LA34_72==IN_FOLDER) && ((strict == false))) {s = 93;} + + else if ( (LA34_72==IN_TREE) && ((strict == false))) {s = 94;} + + else if ( (LA34_72==ORDER) && ((strict == false))) {s = 95;} + + else if ( (LA34_72==BY) && ((strict == false))) {s = 96;} + + else if ( (LA34_72==ASC) && ((strict == false))) {s = 97;} + + else if ( (LA34_72==DESC) && ((strict == false))) {s = 98;} + + else if ( (LA34_72==TIMESTAMP) && ((strict == false))) {s = 99;} + + else if ( (LA34_72==TRUE) && ((strict == false))) {s = 100;} + + else if ( (LA34_72==FALSE) && ((strict == false))) {s = 101;} + + else if ( (LA34_72==SCORE) && ((strict == false))) {s = 102;} + + else if ( (LA34_72==ID) && ((strict == false))) {s = 103;} - input.seek(index34_36); + input.seek(index34_72); if ( s>=0 ) return s; break; case 22 : - int LA34_37 = input.LA(1); + int LA34_6 = input.LA(1); - int index34_37 = input.index(); + int index34_6 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_6==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_37); + input.seek(index34_6); if ( s>=0 ) return s; break; case 23 : + int LA34_26 = input.LA(1); + + + int index34_26 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_26==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_26); + if ( s>=0 ) return s; + break; + case 24 : + int LA34_27 = input.LA(1); + + + int index34_27 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_27==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_27); + if ( s>=0 ) return s; + break; + case 25 : + int LA34_7 = input.LA(1); + + + int index34_7 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_7==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_7); + if ( s>=0 ) return s; + break; + case 26 : + int LA34_25 = input.LA(1); + + + int index34_25 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_25==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_25); + if ( s>=0 ) return s; + break; + case 27 : + int LA34_8 = input.LA(1); + + + int index34_8 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_8==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_8); + if ( s>=0 ) return s; + break; + case 28 : + int LA34_29 = input.LA(1); + + + int index34_29 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_29==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_29); + if ( s>=0 ) return s; + break; + case 29 : + int LA34_5 = input.LA(1); + + + int index34_5 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_5==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_5); + if ( s>=0 ) return s; + break; + case 30 : + int LA34_28 = input.LA(1); + + + int index34_28 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_28==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_28); + if ( s>=0 ) return s; + break; + case 31 : + int LA34_12 = input.LA(1); + + + int index34_12 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_12==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_12); + if ( s>=0 ) return s; + break; + case 32 : int LA34_38 = input.LA(1); int index34_38 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} + if ( (LA34_38==DOT) && ((strict == false))) {s = 68;} - else if ( ((strict == false)) ) {s = 4;} + else if ( (LA34_38==IS) && ((strict == false))) {s = 69;} input.seek(index34_38); if ( s>=0 ) return s; break; - case 24 : - int LA34_39 = input.LA(1); - - - int index34_39 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_39); - if ( s>=0 ) return s; - break; - case 25 : - int LA34_40 = input.LA(1); - - - int index34_40 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_40); - if ( s>=0 ) return s; - break; - case 26 : - int LA34_41 = input.LA(1); - - - int index34_41 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_41); - if ( s>=0 ) return s; - break; - case 27 : - int LA34_42 = input.LA(1); - - - int index34_42 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_42); - if ( s>=0 ) return s; - break; - case 28 : - int LA34_43 = input.LA(1); - - - int index34_43 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_43); - if ( s>=0 ) return s; - break; - case 29 : - int LA34_44 = input.LA(1); - - - int index34_44 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_44); - if ( s>=0 ) return s; - break; - case 30 : - int LA34_45 = input.LA(1); - - - int index34_45 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_45); - if ( s>=0 ) return s; - break; - case 31 : - int LA34_46 = input.LA(1); - - - int index34_46 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_46); - if ( s>=0 ) return s; - break; - case 32 : - int LA34_47 = input.LA(1); - - - int index34_47 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index34_47); - if ( s>=0 ) return s; - break; case 33 : - int LA34_48 = input.LA(1); + int LA34_31 = input.LA(1); - int index34_48 = input.index(); + int index34_31 = input.index(); input.rewind(); s = -1; - if ( (((synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false))||(synpred3_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} + if ( (LA34_31==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_48); + input.seek(index34_31); if ( s>=0 ) return s; break; case 34 : + int LA34_13 = input.LA(1); + + + int index34_13 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_13==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_13); + if ( s>=0 ) return s; + break; + case 35 : + int LA34_30 = input.LA(1); + + + int index34_30 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_30==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_30); + if ( s>=0 ) return s; + break; + case 36 : int LA34_9 = input.LA(1); @@ -15274,20 +14800,48 @@ public class CMISParser extends Parser { input.seek(index34_9); if ( s>=0 ) return s; break; - case 35 : - int LA34_21 = input.LA(1); + case 37 : + int LA34_11 = input.LA(1); - int index34_21 = input.index(); + int index34_11 = input.index(); input.rewind(); s = -1; - if ( (LA34_21==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} + if ( (LA34_11==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_21); + input.seek(index34_11); if ( s>=0 ) return s; break; - case 36 : + case 38 : + int LA34_0 = input.LA(1); + + + int index34_0 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_0==ID) ) {s = 1;} + + else if ( (LA34_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} + + + input.seek(index34_0); + if ( s>=0 ) return s; + break; + case 39 : + int LA34_10 = input.LA(1); + + + int index34_10 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_10==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_10); + if ( s>=0 ) return s; + break; + case 40 : int LA34_2 = input.LA(1); @@ -15356,320 +14910,331 @@ public class CMISParser extends Parser { input.seek(index34_2); if ( s>=0 ) return s; break; - case 37 : - int LA34_8 = input.LA(1); - - - int index34_8 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_8==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} - - - input.seek(index34_8); - if ( s>=0 ) return s; - break; - case 38 : - int LA34_28 = input.LA(1); - - - int index34_28 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_28==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index34_28); - if ( s>=0 ) return s; - break; - case 39 : - int LA34_17 = input.LA(1); - - - int index34_17 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_17==DOUBLE_QUOTE) && ((strict == false))) {s = 46;} - - - input.seek(index34_17); - if ( s>=0 ) return s; - break; - case 40 : - int LA34_6 = input.LA(1); - - - int index34_6 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_6==DOUBLE_QUOTE) && ((strict == false))) {s = 35;} - - - input.seek(index34_6); - if ( s>=0 ) return s; - break; case 41 : - int LA34_29 = input.LA(1); + int LA34_97 = input.LA(1); - int index34_29 = input.index(); + int index34_97 = input.index(); input.rewind(); s = -1; - if ( (LA34_29==DOUBLE_QUOTE) && ((strict == false))) {s = 58;} + if ( (LA34_97==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_29); + input.seek(index34_97); if ( s>=0 ) return s; break; case 42 : - int LA34_19 = input.LA(1); - - - int index34_19 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_19==DOUBLE_QUOTE) && ((strict == false))) {s = 48;} - - - input.seek(index34_19); - if ( s>=0 ) return s; - break; - case 43 : - int LA34_18 = input.LA(1); - - - int index34_18 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_18==DOUBLE_QUOTE) && ((strict == false))) {s = 47;} - - - input.seek(index34_18); - if ( s>=0 ) return s; - break; - case 44 : - int LA34_7 = input.LA(1); - - - int index34_7 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_7==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index34_7); - if ( s>=0 ) return s; - break; - case 45 : - int LA34_15 = input.LA(1); - - - int index34_15 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_15==DOUBLE_QUOTE) && ((strict == false))) {s = 44;} - - - input.seek(index34_15); - if ( s>=0 ) return s; - break; - case 46 : - int LA34_25 = input.LA(1); - - - int index34_25 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_25==DOUBLE_QUOTE) && ((strict == false))) {s = 54;} - - - input.seek(index34_25); - if ( s>=0 ) return s; - break; - case 47 : - int LA34_5 = input.LA(1); - - - int index34_5 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_5==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index34_5); - if ( s>=0 ) return s; - break; - case 48 : - int LA34_33 = input.LA(1); - - - int index34_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_33==DOUBLE_QUOTE) && ((strict == false))) {s = 62;} - - - input.seek(index34_33); - if ( s>=0 ) return s; - break; - case 49 : - int LA34_14 = input.LA(1); - - - int index34_14 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_14==DOUBLE_QUOTE) && ((strict == false))) {s = 43;} - - - input.seek(index34_14); - if ( s>=0 ) return s; - break; - case 50 : - int LA34_0 = input.LA(1); - - - int index34_0 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_0==ID) ) {s = 1;} - - else if ( (LA34_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} - - - input.seek(index34_0); - if ( s>=0 ) return s; - break; - case 51 : - int LA34_26 = input.LA(1); - - - int index34_26 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_26==DOUBLE_QUOTE) && ((strict == false))) {s = 55;} - - - input.seek(index34_26); - if ( s>=0 ) return s; - break; - case 52 : - int LA34_16 = input.LA(1); - - - int index34_16 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_16==DOUBLE_QUOTE) && ((strict == false))) {s = 45;} - - - input.seek(index34_16); - if ( s>=0 ) return s; - break; - case 53 : - int LA34_27 = input.LA(1); - - - int index34_27 = input.index(); - input.rewind(); - s = -1; - if ( (LA34_27==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} - - - input.seek(index34_27); - if ( s>=0 ) return s; - break; - case 54 : int LA34_32 = input.LA(1); int index34_32 = input.index(); input.rewind(); s = -1; - if ( (LA34_32==DOUBLE_QUOTE) && ((strict == false))) {s = 61;} + if ( (LA34_32==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} input.seek(index34_32); if ( s>=0 ) return s; break; - case 55 : - int LA34_12 = input.LA(1); + case 43 : + int LA34_104 = input.LA(1); - int index34_12 = input.index(); + int index34_104 = input.index(); input.rewind(); s = -1; - if ( (LA34_12==DOUBLE_QUOTE) && ((strict == false))) {s = 41;} + if ( (LA34_104==IS) && ((strict == false))) {s = 69;} - input.seek(index34_12); + input.seek(index34_104); + if ( s>=0 ) return s; + break; + case 44 : + int LA34_96 = input.LA(1); + + + int index34_96 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_96==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_96); + if ( s>=0 ) return s; + break; + case 45 : + int LA34_95 = input.LA(1); + + + int index34_95 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_95==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_95); + if ( s>=0 ) return s; + break; + case 46 : + int LA34_103 = input.LA(1); + + + int index34_103 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_103==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_103); + if ( s>=0 ) return s; + break; + case 47 : + int LA34_17 = input.LA(1); + + + int index34_17 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_17==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_17); + if ( s>=0 ) return s; + break; + case 48 : + int LA34_94 = input.LA(1); + + + int index34_94 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_94==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_94); + if ( s>=0 ) return s; + break; + case 49 : + int LA34_93 = input.LA(1); + + + int index34_93 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_93==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_93); + if ( s>=0 ) return s; + break; + case 50 : + int LA34_71 = input.LA(1); + + + int index34_71 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_71==IS) && ((strict == false))) {s = 69;} + + + input.seek(index34_71); + if ( s>=0 ) return s; + break; + case 51 : + int LA34_19 = input.LA(1); + + + int index34_19 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_19==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_19); + if ( s>=0 ) return s; + break; + case 52 : + int LA34_92 = input.LA(1); + + + int index34_92 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_92==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_92); + if ( s>=0 ) return s; + break; + case 53 : + int LA34_18 = input.LA(1); + + + int index34_18 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_18==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_18); + if ( s>=0 ) return s; + break; + case 54 : + int LA34_69 = input.LA(1); + + + int index34_69 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_69==NOT) && ((strict == false))) {s = 73;} + + else if ( (LA34_69==NULL) && ((strict == false))) {s = 74;} + + + input.seek(index34_69); + if ( s>=0 ) return s; + break; + case 55 : + int LA34_91 = input.LA(1); + + + int index34_91 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_91==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_91); if ( s>=0 ) return s; break; case 56 : - int LA34_22 = input.LA(1); + int LA34_90 = input.LA(1); - int index34_22 = input.index(); + int index34_90 = input.index(); input.rewind(); s = -1; - if ( (LA34_22==DOUBLE_QUOTE) && ((strict == false))) {s = 51;} + if ( (LA34_90==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_22); + input.seek(index34_90); if ( s>=0 ) return s; break; case 57 : - int LA34_23 = input.LA(1); + int LA34_33 = input.LA(1); - int index34_23 = input.index(); + int index34_33 = input.index(); input.rewind(); s = -1; - if ( (LA34_23==DOUBLE_QUOTE) && ((strict == false))) {s = 52;} + if ( (LA34_33==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_23); + input.seek(index34_33); if ( s>=0 ) return s; break; case 58 : - int LA34_1 = input.LA(1); + int LA34_15 = input.LA(1); - int index34_1 = input.index(); + int index34_15 = input.index(); input.rewind(); s = -1; - if ( (synpred3_CMIS()) ) {s = 3;} - - else if ( (true) ) {s = 4;} + if ( (LA34_15==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_1); + input.seek(index34_15); if ( s>=0 ) return s; break; case 59 : - int LA34_13 = input.LA(1); + int LA34_14 = input.LA(1); - int index34_13 = input.index(); + int index34_14 = input.index(); input.rewind(); s = -1; - if ( (LA34_13==DOUBLE_QUOTE) && ((strict == false))) {s = 42;} + if ( (LA34_14==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - input.seek(index34_13); + input.seek(index34_14); if ( s>=0 ) return s; break; case 60 : - int LA34_24 = input.LA(1); + int LA34_101 = input.LA(1); - int index34_24 = input.index(); + int index34_101 = input.index(); input.rewind(); s = -1; - if ( (LA34_24==DOUBLE_QUOTE) && ((strict == false))) {s = 53;} + if ( (LA34_101==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} - input.seek(index34_24); + input.seek(index34_101); + if ( s>=0 ) return s; + break; + case 61 : + int LA34_16 = input.LA(1); + + + int index34_16 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_16==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} + + + input.seek(index34_16); + if ( s>=0 ) return s; + break; + case 62 : + int LA34_100 = input.LA(1); + + + int index34_100 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_100==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_100); + if ( s>=0 ) return s; + break; + case 63 : + int LA34_99 = input.LA(1); + + + int index34_99 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_99==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_99); + if ( s>=0 ) return s; + break; + case 64 : + int LA34_102 = input.LA(1); + + + int index34_102 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_102==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_102); + if ( s>=0 ) return s; + break; + case 65 : + int LA34_98 = input.LA(1); + + + int index34_98 = input.index(); + input.rewind(); + s = -1; + if ( (LA34_98==DOUBLE_QUOTE) && ((strict == false))) {s = 104;} + + + input.seek(index34_98); if ( s>=0 ) return s; break; } @@ -15680,1154 +15245,113 @@ public class CMISParser extends Parser { throw nvae; } } - static final String DFA35_eotS = - "\77\uffff"; - static final String DFA35_eofS = - "\77\uffff"; - static final String DFA35_minS = - "\1\105\1\0\1\37\2\uffff\35\106\35\0"; - static final String DFA35_maxS = - "\1\106\1\0\1\114\2\uffff\35\106\35\0"; - static final String DFA35_acceptS = - "\3\uffff\1\1\1\2\72\uffff"; - static final String DFA35_specialS = - "\1\32\1\24\1\7\2\uffff\1\22\1\13\1\17\1\10\1\5\1\2\1\4\1\33\1\73"+ - "\1\25\1\20\1\27\1\12\1\16\1\15\1\0\1\6\1\34\1\53\1\74\1\21\1\26"+ - "\1\30\1\11\1\14\1\1\1\3\1\31\1\23\1\54\1\55\1\56\1\57\1\60\1\61"+ - "\1\62\1\63\1\64\1\65\1\66\1\67\1\70\1\71\1\72\1\52\1\51\1\50\1\47"+ - "\1\46\1\45\1\44\1\43\1\42\1\41\1\40\1\37\1\36\1\35}>"; - static final String[] DFA35_transitionS = { - "\1\1\1\2", - "\1\uffff", - "\1\5\2\uffff\1\6\4\uffff\1\7\1\10\1\11\1\12\1\13\1\14\1\uffff"+ - "\1\15\1\16\1\17\1\20\5\uffff\1\21\1\22\1\23\1\24\1\25\1\26\1"+ - "\27\1\30\1\31\1\32\1\33\1\34\2\uffff\1\41\3\uffff\1\36\1\37"+ - "\1\35\1\40", - "", - "", - "\1\42", - "\1\43", - "\1\44", - "\1\45", - "\1\46", - "\1\47", - "\1\50", - "\1\51", - "\1\52", - "\1\53", - "\1\54", - "\1\55", - "\1\56", - "\1\57", - "\1\60", - "\1\61", - "\1\62", - "\1\63", - "\1\64", - "\1\65", - "\1\66", - "\1\67", - "\1\70", - "\1\71", - "\1\72", - "\1\73", - "\1\74", - "\1\75", - "\1\76", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff" - }; - - static final short[] DFA35_eot = DFA.unpackEncodedString(DFA35_eotS); - static final short[] DFA35_eof = DFA.unpackEncodedString(DFA35_eofS); - static final char[] DFA35_min = DFA.unpackEncodedStringToUnsignedChars(DFA35_minS); - static final char[] DFA35_max = DFA.unpackEncodedStringToUnsignedChars(DFA35_maxS); - static final short[] DFA35_accept = DFA.unpackEncodedString(DFA35_acceptS); - static final short[] DFA35_special = DFA.unpackEncodedString(DFA35_specialS); - static final short[][] DFA35_transition; - - static { - int numStates = DFA35_transitionS.length; - DFA35_transition = new short[numStates][]; - for (int i=0; i columnReference | multiValuedColumnReference )"; - } - public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { - TokenStream input = (TokenStream)_input; - int _s = s; - switch ( s ) { - case 0 : - int LA35_20 = input.LA(1); - - - int index35_20 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_20==DOUBLE_QUOTE) && ((strict == false))) {s = 49;} - - - input.seek(index35_20); - if ( s>=0 ) return s; - break; - case 1 : - int LA35_30 = input.LA(1); - - - int index35_30 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_30==DOUBLE_QUOTE) && ((strict == false))) {s = 59;} - - - input.seek(index35_30); - if ( s>=0 ) return s; - break; - case 2 : - int LA35_10 = input.LA(1); - - - int index35_10 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_10==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - - - input.seek(index35_10); - if ( s>=0 ) return s; - break; - case 3 : - int LA35_31 = input.LA(1); - - - int index35_31 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_31==DOUBLE_QUOTE) && ((strict == false))) {s = 60;} - - - input.seek(index35_31); - if ( s>=0 ) return s; - break; - case 4 : - int LA35_11 = input.LA(1); - - - int index35_11 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_11==DOUBLE_QUOTE) && ((strict == false))) {s = 40;} - - - input.seek(index35_11); - if ( s>=0 ) return s; - break; - case 5 : - int LA35_9 = input.LA(1); - - - int index35_9 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_9==DOUBLE_QUOTE) && ((strict == false))) {s = 38;} - - - input.seek(index35_9); - if ( s>=0 ) return s; - break; - case 6 : - int LA35_21 = input.LA(1); - - - int index35_21 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_21==DOUBLE_QUOTE) && ((strict == false))) {s = 50;} - - - input.seek(index35_21); - if ( s>=0 ) return s; - break; - case 7 : - int LA35_2 = input.LA(1); - - - int index35_2 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_2==SELECT) && ((strict == false))) {s = 5;} - - else if ( (LA35_2==AS) && ((strict == false))) {s = 6;} - - else if ( (LA35_2==FROM) && ((strict == false))) {s = 7;} - - else if ( (LA35_2==JOIN) && ((strict == false))) {s = 8;} - - else if ( (LA35_2==INNER) && ((strict == false))) {s = 9;} - - else if ( (LA35_2==LEFT) && ((strict == false))) {s = 10;} - - else if ( (LA35_2==OUTER) && ((strict == false))) {s = 11;} - - else if ( (LA35_2==ON) && ((strict == false))) {s = 12;} - - else if ( (LA35_2==WHERE) && ((strict == false))) {s = 13;} - - else if ( (LA35_2==OR) && ((strict == false))) {s = 14;} - - else if ( (LA35_2==AND) && ((strict == false))) {s = 15;} - - else if ( (LA35_2==NOT) && ((strict == false))) {s = 16;} - - else if ( (LA35_2==IN) && ((strict == false))) {s = 17;} - - else if ( (LA35_2==LIKE) && ((strict == false))) {s = 18;} - - else if ( (LA35_2==IS) && ((strict == false))) {s = 19;} - - else if ( (LA35_2==NULL) && ((strict == false))) {s = 20;} - - else if ( (LA35_2==ANY) && ((strict == false))) {s = 21;} - - else if ( (LA35_2==CONTAINS) && ((strict == false))) {s = 22;} - - else if ( (LA35_2==IN_FOLDER) && ((strict == false))) {s = 23;} - - else if ( (LA35_2==IN_TREE) && ((strict == false))) {s = 24;} - - else if ( (LA35_2==ORDER) && ((strict == false))) {s = 25;} - - else if ( (LA35_2==BY) && ((strict == false))) {s = 26;} - - else if ( (LA35_2==ASC) && ((strict == false))) {s = 27;} - - else if ( (LA35_2==DESC) && ((strict == false))) {s = 28;} - - else if ( (LA35_2==TIMESTAMP) && ((strict == false))) {s = 29;} - - else if ( (LA35_2==TRUE) && ((strict == false))) {s = 30;} - - else if ( (LA35_2==FALSE) && ((strict == false))) {s = 31;} - - else if ( (LA35_2==SCORE) && ((strict == false))) {s = 32;} - - else if ( (LA35_2==ID) && ((strict == false))) {s = 33;} - - - input.seek(index35_2); - if ( s>=0 ) return s; - break; - case 8 : - int LA35_8 = input.LA(1); - - - int index35_8 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_8==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} - - - input.seek(index35_8); - if ( s>=0 ) return s; - break; - case 9 : - int LA35_28 = input.LA(1); - - - int index35_28 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_28==DOUBLE_QUOTE) && ((strict == false))) {s = 57;} - - - input.seek(index35_28); - if ( s>=0 ) return s; - break; - case 10 : - int LA35_17 = input.LA(1); - - - int index35_17 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_17==DOUBLE_QUOTE) && ((strict == false))) {s = 46;} - - - input.seek(index35_17); - if ( s>=0 ) return s; - break; - case 11 : - int LA35_6 = input.LA(1); - - - int index35_6 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_6==DOUBLE_QUOTE) && ((strict == false))) {s = 35;} - - - input.seek(index35_6); - if ( s>=0 ) return s; - break; - case 12 : - int LA35_29 = input.LA(1); - - - int index35_29 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_29==DOUBLE_QUOTE) && ((strict == false))) {s = 58;} - - - input.seek(index35_29); - if ( s>=0 ) return s; - break; - case 13 : - int LA35_19 = input.LA(1); - - - int index35_19 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_19==DOUBLE_QUOTE) && ((strict == false))) {s = 48;} - - - input.seek(index35_19); - if ( s>=0 ) return s; - break; - case 14 : - int LA35_18 = input.LA(1); - - - int index35_18 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_18==DOUBLE_QUOTE) && ((strict == false))) {s = 47;} - - - input.seek(index35_18); - if ( s>=0 ) return s; - break; - case 15 : - int LA35_7 = input.LA(1); - - - int index35_7 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_7==DOUBLE_QUOTE) && ((strict == false))) {s = 36;} - - - input.seek(index35_7); - if ( s>=0 ) return s; - break; - case 16 : - int LA35_15 = input.LA(1); - - - int index35_15 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_15==DOUBLE_QUOTE) && ((strict == false))) {s = 44;} - - - input.seek(index35_15); - if ( s>=0 ) return s; - break; - case 17 : - int LA35_25 = input.LA(1); - - - int index35_25 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_25==DOUBLE_QUOTE) && ((strict == false))) {s = 54;} - - - input.seek(index35_25); - if ( s>=0 ) return s; - break; - case 18 : - int LA35_5 = input.LA(1); - - - int index35_5 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_5==DOUBLE_QUOTE) && ((strict == false))) {s = 34;} - - - input.seek(index35_5); - if ( s>=0 ) return s; - break; - case 19 : - int LA35_33 = input.LA(1); - - - int index35_33 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_33==DOUBLE_QUOTE) && ((strict == false))) {s = 62;} - - - input.seek(index35_33); - if ( s>=0 ) return s; - break; - case 20 : - int LA35_1 = input.LA(1); - - - int index35_1 = input.index(); - input.rewind(); - s = -1; - if ( (synpred4_CMIS()) ) {s = 3;} - - else if ( (true) ) {s = 4;} - - - input.seek(index35_1); - if ( s>=0 ) return s; - break; - case 21 : - int LA35_14 = input.LA(1); - - - int index35_14 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_14==DOUBLE_QUOTE) && ((strict == false))) {s = 43;} - - - input.seek(index35_14); - if ( s>=0 ) return s; - break; - case 22 : - int LA35_26 = input.LA(1); - - - int index35_26 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_26==DOUBLE_QUOTE) && ((strict == false))) {s = 55;} - - - input.seek(index35_26); - if ( s>=0 ) return s; - break; - case 23 : - int LA35_16 = input.LA(1); - - - int index35_16 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_16==DOUBLE_QUOTE) && ((strict == false))) {s = 45;} - - - input.seek(index35_16); - if ( s>=0 ) return s; - break; - case 24 : - int LA35_27 = input.LA(1); - - - int index35_27 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_27==DOUBLE_QUOTE) && ((strict == false))) {s = 56;} - - - input.seek(index35_27); - if ( s>=0 ) return s; - break; - case 25 : - int LA35_32 = input.LA(1); - - - int index35_32 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_32==DOUBLE_QUOTE) && ((strict == false))) {s = 61;} - - - input.seek(index35_32); - if ( s>=0 ) return s; - break; - case 26 : - int LA35_0 = input.LA(1); - - - int index35_0 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_0==ID) ) {s = 1;} - - else if ( (LA35_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} - - - input.seek(index35_0); - if ( s>=0 ) return s; - break; - case 27 : - int LA35_12 = input.LA(1); - - - int index35_12 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_12==DOUBLE_QUOTE) && ((strict == false))) {s = 41;} - - - input.seek(index35_12); - if ( s>=0 ) return s; - break; - case 28 : - int LA35_22 = input.LA(1); - - - int index35_22 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_22==DOUBLE_QUOTE) && ((strict == false))) {s = 51;} - - - input.seek(index35_22); - if ( s>=0 ) return s; - break; - case 29 : - int LA35_62 = input.LA(1); - - - int index35_62 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_62); - if ( s>=0 ) return s; - break; - case 30 : - int LA35_61 = input.LA(1); - - - int index35_61 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_61); - if ( s>=0 ) return s; - break; - case 31 : - int LA35_60 = input.LA(1); - - - int index35_60 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_60); - if ( s>=0 ) return s; - break; - case 32 : - int LA35_59 = input.LA(1); - - - int index35_59 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_59); - if ( s>=0 ) return s; - break; - case 33 : - int LA35_58 = input.LA(1); - - - int index35_58 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_58); - if ( s>=0 ) return s; - break; - case 34 : - int LA35_57 = input.LA(1); - - - int index35_57 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_57); - if ( s>=0 ) return s; - break; - case 35 : - int LA35_56 = input.LA(1); - - - int index35_56 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_56); - if ( s>=0 ) return s; - break; - case 36 : - int LA35_55 = input.LA(1); - - - int index35_55 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_55); - if ( s>=0 ) return s; - break; - case 37 : - int LA35_54 = input.LA(1); - - - int index35_54 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_54); - if ( s>=0 ) return s; - break; - case 38 : - int LA35_53 = input.LA(1); - - - int index35_53 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_53); - if ( s>=0 ) return s; - break; - case 39 : - int LA35_52 = input.LA(1); - - - int index35_52 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_52); - if ( s>=0 ) return s; - break; - case 40 : - int LA35_51 = input.LA(1); - - - int index35_51 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_51); - if ( s>=0 ) return s; - break; - case 41 : - int LA35_50 = input.LA(1); - - - int index35_50 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_50); - if ( s>=0 ) return s; - break; - case 42 : - int LA35_49 = input.LA(1); - - - int index35_49 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_49); - if ( s>=0 ) return s; - break; - case 43 : - int LA35_23 = input.LA(1); - - - int index35_23 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_23==DOUBLE_QUOTE) && ((strict == false))) {s = 52;} - - - input.seek(index35_23); - if ( s>=0 ) return s; - break; - case 44 : - int LA35_34 = input.LA(1); - - - int index35_34 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_34); - if ( s>=0 ) return s; - break; - case 45 : - int LA35_35 = input.LA(1); - - - int index35_35 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_35); - if ( s>=0 ) return s; - break; - case 46 : - int LA35_36 = input.LA(1); - - - int index35_36 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_36); - if ( s>=0 ) return s; - break; - case 47 : - int LA35_37 = input.LA(1); - - - int index35_37 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_37); - if ( s>=0 ) return s; - break; - case 48 : - int LA35_38 = input.LA(1); - - - int index35_38 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_38); - if ( s>=0 ) return s; - break; - case 49 : - int LA35_39 = input.LA(1); - - - int index35_39 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_39); - if ( s>=0 ) return s; - break; - case 50 : - int LA35_40 = input.LA(1); - - - int index35_40 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_40); - if ( s>=0 ) return s; - break; - case 51 : - int LA35_41 = input.LA(1); - - - int index35_41 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_41); - if ( s>=0 ) return s; - break; - case 52 : - int LA35_42 = input.LA(1); - - - int index35_42 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_42); - if ( s>=0 ) return s; - break; - case 53 : - int LA35_43 = input.LA(1); - - - int index35_43 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_43); - if ( s>=0 ) return s; - break; - case 54 : - int LA35_44 = input.LA(1); - - - int index35_44 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_44); - if ( s>=0 ) return s; - break; - case 55 : - int LA35_45 = input.LA(1); - - - int index35_45 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_45); - if ( s>=0 ) return s; - break; - case 56 : - int LA35_46 = input.LA(1); - - - int index35_46 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_46); - if ( s>=0 ) return s; - break; - case 57 : - int LA35_47 = input.LA(1); - - - int index35_47 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_47); - if ( s>=0 ) return s; - break; - case 58 : - int LA35_48 = input.LA(1); - - - int index35_48 = input.index(); - input.rewind(); - s = -1; - if ( (((synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false))||(synpred4_CMIS()&&(strict == false)))) ) {s = 3;} - - else if ( ((strict == false)) ) {s = 4;} - - - input.seek(index35_48); - if ( s>=0 ) return s; - break; - case 59 : - int LA35_13 = input.LA(1); - - - int index35_13 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_13==DOUBLE_QUOTE) && ((strict == false))) {s = 42;} - - - input.seek(index35_13); - if ( s>=0 ) return s; - break; - case 60 : - int LA35_24 = input.LA(1); - - - int index35_24 = input.index(); - input.rewind(); - s = -1; - if ( (LA35_24==DOUBLE_QUOTE) && ((strict == false))) {s = 53;} - - - input.seek(index35_24); - if ( s>=0 ) return s; - break; - } - if (state.backtracking>0) {state.failed=true; return -1;} - NoViableAltException nvae = - new NoViableAltException(getDescription(), 35, _s, input); - error(nvae); - throw nvae; - } - } - static final String DFA43_eotS = + static final String DFA41_eotS = "\153\uffff"; - static final String DFA43_eofS = - "\1\uffff\1\4\41\uffff\1\4\1\uffff\1\103\40\uffff\1\111\1\114\42"+ - "\uffff\1\114"; - static final String DFA43_minS = - "\1\105\1\41\1\37\2\uffff\1\105\35\106\1\41\1\37\1\41\35\106\1\uffff"+ - "\1\105\1\uffff\2\41\1\37\4\uffff\35\106\1\41"; - static final String DFA43_maxS = - "\1\106\1\102\1\114\2\uffff\36\106\1\102\1\114\1\102\35\106\1\uffff"+ - "\1\106\1\uffff\2\102\1\114\4\uffff\35\106\1\102"; - static final String DFA43_acceptS = - "\3\uffff\1\2\1\1\76\uffff\1\1\1\uffff\1\2\3\uffff\1\1\2\2\1\1\36"+ - "\uffff"; - static final String DFA43_specialS = - "\1\74\1\uffff\1\40\3\uffff\1\50\1\43\1\45\1\41\1\37\1\30\1\35\1"+ - "\23\1\25\1\17\1\14\1\20\1\6\1\12\1\10\1\0\1\1\1\67\1\71\1\77\1\47"+ - "\1\57\1\61\1\42\1\44\1\27\1\34\1\63\1\53\2\uffff\1\51\36\uffff\1"+ - "\22\2\uffff\1\21\1\15\4\uffff\1\7\1\11\1\13\1\2\1\3\1\4\1\5\1\55"+ - "\1\54\1\52\1\46\1\64\1\62\1\60\1\56\1\72\1\70\1\66\1\65\1\100\1"+ - "\76\1\75\1\73\1\32\1\33\1\26\1\31\1\24\1\36\1\16}>"; - static final String[] DFA43_transitionS = { + static final String DFA41_eofS = + "\1\uffff\1\5\43\uffff\1\5\1\uffff\1\111\42\uffff\1\5\1\111\36\uffff"+ + "\1\111"; + static final String DFA41_minS = + "\1\106\1\42\1\40\1\106\4\uffff\35\107\1\42\1\40\1\42\35\107\2\uffff"+ + "\1\106\2\uffff\2\42\1\40\35\107\1\42"; + static final String DFA41_maxS = + "\1\107\1\103\1\115\1\107\4\uffff\35\107\1\103\1\115\1\103\35\107"+ + "\2\uffff\1\107\2\uffff\2\103\1\115\35\107\1\103"; + static final String DFA41_acceptS = + "\4\uffff\2\1\2\2\75\uffff\2\2\1\uffff\2\1\41\uffff"; + static final String DFA41_specialS = + "\1\43\1\uffff\1\52\5\uffff\1\36\1\26\1\32\1\34\1\47\1\51\1\50\1"+ + "\42\1\45\1\72\1\71\1\74\1\60\1\65\1\63\1\7\1\1\1\20\1\24\1\14\1"+ + "\33\1\27\1\31\1\40\1\35\1\46\1\44\1\54\1\70\2\uffff\1\30\37\uffff"+ + "\1\16\3\uffff\1\37\1\25\1\12\1\15\1\13\1\21\1\17\1\23\1\22\1\2\1"+ + "\0\1\4\1\3\1\6\1\5\1\11\1\10\1\67\1\66\1\64\1\62\1\61\1\56\1\55"+ + "\1\53\1\100\1\76\1\75\1\73\1\77\1\57\1\41}>"; + static final String[] DFA41_transitionS = { "\1\1\1\2", - "\1\4\2\uffff\1\5\34\uffff\2\3", - "\1\6\2\uffff\1\7\4\uffff\1\10\1\11\1\12\1\13\1\14\1\15\1\uffff"+ - "\1\16\1\17\1\20\1\21\5\uffff\1\22\1\23\1\24\1\25\1\26\1\27\1"+ - "\30\1\31\1\32\1\33\1\34\1\35\2\uffff\1\42\3\uffff\1\37\1\40"+ - "\1\36\1\41", + "\1\4\2\uffff\1\3\34\uffff\1\6\1\7", + "\1\10\2\uffff\1\11\4\uffff\1\12\1\13\1\14\1\15\1\16\1\17\1"+ + "\uffff\1\20\1\21\1\22\1\23\5\uffff\1\24\1\25\1\26\1\27\1\30"+ + "\1\31\1\32\1\33\1\34\1\35\1\36\1\37\2\uffff\1\44\3\uffff\1\41"+ + "\1\42\1\40\1\43", + "\1\45\1\46", "", "", - "\1\43\1\44", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\45", - "\1\4\37\uffff\2\3", - "\1\46\2\uffff\1\47\4\uffff\1\50\1\51\1\52\1\53\1\54\1\55\1"+ - "\uffff\1\56\1\57\1\60\1\61\5\uffff\1\62\1\63\1\64\1\65\1\66"+ - "\1\67\1\70\1\71\1\72\1\73\1\74\1\75\2\uffff\1\102\3\uffff\1"+ - "\77\1\100\1\76\1\101", - "\1\103\2\uffff\1\104\34\uffff\2\105", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", - "\1\106", "", - "\1\107\1\110", "", - "\1\4\37\uffff\1\3\1\112", - "\1\103\37\uffff\1\105\1\113", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\47", + "\1\4\37\uffff\1\6\1\7", + "\1\50\2\uffff\1\51\4\uffff\1\52\1\53\1\54\1\55\1\56\1\57\1"+ + "\uffff\1\60\1\61\1\62\1\63\5\uffff\1\64\1\65\1\66\1\67\1\70"+ + "\1\71\1\72\1\73\1\74\1\75\1\76\1\77\2\uffff\1\104\3\uffff\1"+ + "\101\1\102\1\100\1\103", + "\1\110\2\uffff\1\107\34\uffff\1\105\1\106", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "\1\112", + "", + "", + "\1\113\1\114", + "", + "", + "\1\4\37\uffff\1\6\1\7", + "\1\110\37\uffff\1\105\1\106", "\1\115\2\uffff\1\116\4\uffff\1\117\1\120\1\121\1\122\1\123"+ "\1\124\1\uffff\1\125\1\126\1\127\1\130\5\uffff\1\131\1\132\1"+ "\133\1\134\1\135\1\136\1\137\1\140\1\141\1\142\1\143\1\144\2"+ "\uffff\1\151\3\uffff\1\146\1\147\1\145\1\150", - "", - "", - "", - "", "\1\152", "\1\152", "\1\152", @@ -16857,1238 +15381,1240 @@ public class CMISParser extends Parser { "\1\152", "\1\152", "\1\152", - "\1\103\37\uffff\1\105\1\113" + "\1\110\37\uffff\1\105\1\106" }; - static final short[] DFA43_eot = DFA.unpackEncodedString(DFA43_eotS); - static final short[] DFA43_eof = DFA.unpackEncodedString(DFA43_eofS); - static final char[] DFA43_min = DFA.unpackEncodedStringToUnsignedChars(DFA43_minS); - static final char[] DFA43_max = DFA.unpackEncodedStringToUnsignedChars(DFA43_maxS); - static final short[] DFA43_accept = DFA.unpackEncodedString(DFA43_acceptS); - static final short[] DFA43_special = DFA.unpackEncodedString(DFA43_specialS); - static final short[][] DFA43_transition; + 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 = DFA43_transitionS.length; - DFA43_transition = new short[numStates][]; + 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) );"; + return "701:1: sortSpecification : ( columnReference -> ^( SORT_SPECIFICATION columnReference ASC ) | columnReference (by= ASC | by= DESC ) -> ^( SORT_SPECIFICATION columnReference $by) );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA43_21 = input.LA(1); + int LA41_85 = input.LA(1); - int index43_21 = input.index(); + int index41_85 = input.index(); input.rewind(); s = -1; - if ( (LA43_21==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_85==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_21); + input.seek(index41_85); if ( s>=0 ) return s; break; case 1 : - int LA43_22 = input.LA(1); + int LA41_24 = input.LA(1); - int index43_22 = input.index(); + int index41_24 = input.index(); input.rewind(); s = -1; - if ( (LA43_22==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_24==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_22); + input.seek(index41_24); if ( s>=0 ) return s; break; case 2 : - int LA43_80 = input.LA(1); + int LA41_84 = input.LA(1); - int index43_80 = input.index(); + int index41_84 = input.index(); input.rewind(); s = -1; - if ( (LA43_80==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_84==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_80); + input.seek(index41_84); if ( s>=0 ) return s; break; case 3 : - int LA43_81 = input.LA(1); + int LA41_87 = input.LA(1); - int index43_81 = input.index(); + int index41_87 = input.index(); input.rewind(); s = -1; - if ( (LA43_81==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_87==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_81); + input.seek(index41_87); if ( s>=0 ) return s; break; case 4 : - int LA43_82 = input.LA(1); + int LA41_86 = input.LA(1); - int index43_82 = input.index(); + int index41_86 = input.index(); input.rewind(); s = -1; - if ( (LA43_82==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_86==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_82); + input.seek(index41_86); if ( s>=0 ) return s; break; case 5 : - int LA43_83 = input.LA(1); + int LA41_89 = input.LA(1); - int index43_83 = input.index(); + int index41_89 = input.index(); input.rewind(); s = -1; - if ( (LA43_83==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_89==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_83); + input.seek(index41_89); if ( s>=0 ) return s; break; case 6 : - int LA43_18 = input.LA(1); + int LA41_88 = input.LA(1); - int index43_18 = input.index(); + int index41_88 = input.index(); input.rewind(); s = -1; - if ( (LA43_18==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_88==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_18); + input.seek(index41_88); if ( s>=0 ) return s; break; case 7 : - int LA43_77 = input.LA(1); + int LA41_23 = input.LA(1); - int index43_77 = input.index(); + int index41_23 = input.index(); input.rewind(); s = -1; - if ( (LA43_77==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_23==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_77); + input.seek(index41_23); if ( s>=0 ) return s; break; case 8 : - int LA43_20 = input.LA(1); + int LA41_91 = input.LA(1); - int index43_20 = input.index(); + int index41_91 = input.index(); input.rewind(); s = -1; - if ( (LA43_20==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_91==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_20); + input.seek(index41_91); if ( s>=0 ) return s; break; case 9 : - int LA43_78 = input.LA(1); + int LA41_90 = input.LA(1); - int index43_78 = input.index(); + int index41_90 = input.index(); input.rewind(); s = -1; - if ( (LA43_78==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_90==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_78); + input.seek(index41_90); if ( s>=0 ) return s; break; case 10 : - int LA43_19 = input.LA(1); + int LA41_77 = input.LA(1); - int index43_19 = input.index(); + int index41_77 = input.index(); input.rewind(); s = -1; - if ( (LA43_19==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_77==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_19); + input.seek(index41_77); if ( s>=0 ) return s; break; case 11 : - int LA43_79 = input.LA(1); + int LA41_79 = input.LA(1); - int index43_79 = input.index(); + int index41_79 = input.index(); input.rewind(); s = -1; - if ( (LA43_79==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_79==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_79); + input.seek(index41_79); if ( s>=0 ) return s; break; case 12 : - int LA43_16 = input.LA(1); + int LA41_27 = input.LA(1); - int index43_16 = input.index(); + int index41_27 = input.index(); input.rewind(); s = -1; - if ( (LA43_16==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_27==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_16); + input.seek(index41_27); if ( s>=0 ) return s; break; case 13 : - int LA43_72 = input.LA(1); + int LA41_78 = input.LA(1); - int index43_72 = input.index(); + int index41_78 = input.index(); input.rewind(); s = -1; - if ( (LA43_72==SELECT) && ((strict == false))) {s = 77;} - - else if ( (LA43_72==AS) && ((strict == false))) {s = 78;} - - else if ( (LA43_72==FROM) && ((strict == false))) {s = 79;} - - else if ( (LA43_72==JOIN) && ((strict == false))) {s = 80;} - - else if ( (LA43_72==INNER) && ((strict == false))) {s = 81;} - - else if ( (LA43_72==LEFT) && ((strict == false))) {s = 82;} - - else if ( (LA43_72==OUTER) && ((strict == false))) {s = 83;} - - else if ( (LA43_72==ON) && ((strict == false))) {s = 84;} - - else if ( (LA43_72==WHERE) && ((strict == false))) {s = 85;} - - else if ( (LA43_72==OR) && ((strict == false))) {s = 86;} - - else if ( (LA43_72==AND) && ((strict == false))) {s = 87;} - - else if ( (LA43_72==NOT) && ((strict == false))) {s = 88;} - - else if ( (LA43_72==IN) && ((strict == false))) {s = 89;} - - else if ( (LA43_72==LIKE) && ((strict == false))) {s = 90;} - - else if ( (LA43_72==IS) && ((strict == false))) {s = 91;} - - else if ( (LA43_72==NULL) && ((strict == false))) {s = 92;} - - else if ( (LA43_72==ANY) && ((strict == false))) {s = 93;} - - else if ( (LA43_72==CONTAINS) && ((strict == false))) {s = 94;} - - else if ( (LA43_72==IN_FOLDER) && ((strict == false))) {s = 95;} - - else if ( (LA43_72==IN_TREE) && ((strict == false))) {s = 96;} - - else if ( (LA43_72==ORDER) && ((strict == false))) {s = 97;} - - else if ( (LA43_72==BY) && ((strict == false))) {s = 98;} - - else if ( (LA43_72==ASC) && ((strict == false))) {s = 99;} - - else if ( (LA43_72==DESC) && ((strict == false))) {s = 100;} - - else if ( (LA43_72==TIMESTAMP) && ((strict == false))) {s = 101;} - - else if ( (LA43_72==TRUE) && ((strict == false))) {s = 102;} - - else if ( (LA43_72==FALSE) && ((strict == false))) {s = 103;} - - else if ( (LA43_72==SCORE) && ((strict == false))) {s = 104;} - - else if ( (LA43_72==ID) && ((strict == false))) {s = 105;} + if ( (LA41_78==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_72); + input.seek(index41_78); if ( s>=0 ) return s; break; case 14 : - int LA43_106 = input.LA(1); + int LA41_71 = input.LA(1); - int index43_106 = input.index(); + int index41_71 = input.index(); input.rewind(); s = -1; - if ( (LA43_106==COMMA) && ((strict == false))) {s = 67;} + if ( (LA41_71==ID) && ((strict == false))) {s = 75;} - else if ( (LA43_106==EOF) && ((strict == false))) {s = 76;} - - else if ( (LA43_106==ASC) && ((strict == false))) {s = 69;} - - else if ( (LA43_106==DESC) && ((strict == false))) {s = 75;} + else if ( (LA41_71==DOUBLE_QUOTE) && ((strict == false))) {s = 76;} - input.seek(index43_106); + input.seek(index41_71); if ( s>=0 ) return s; break; case 15 : - int LA43_15 = input.LA(1); + int LA41_81 = input.LA(1); - int index43_15 = input.index(); + int index41_81 = input.index(); input.rewind(); s = -1; - if ( (LA43_15==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_81==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_15); + input.seek(index41_81); if ( s>=0 ) return s; break; case 16 : - int LA43_17 = input.LA(1); + int LA41_25 = input.LA(1); - int index43_17 = input.index(); + int index41_25 = input.index(); input.rewind(); s = -1; - if ( (LA43_17==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_25==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_17); + input.seek(index41_25); if ( s>=0 ) return s; break; case 17 : - int LA43_71 = input.LA(1); + int LA41_80 = input.LA(1); - int index43_71 = input.index(); + int index41_80 = input.index(); input.rewind(); s = -1; - if ( (LA43_71==ASC) && ((strict == false))) {s = 69;} - - else if ( (LA43_71==DESC) && ((strict == false))) {s = 75;} - - else if ( (LA43_71==COMMA) && ((strict == false))) {s = 67;} - - else if ( (LA43_71==EOF) && ((strict == false))) {s = 76;} + if ( (LA41_80==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_71); + input.seek(index41_80); if ( s>=0 ) return s; break; case 18 : - int LA43_68 = input.LA(1); + int LA41_83 = input.LA(1); - int index43_68 = input.index(); + int index41_83 = input.index(); input.rewind(); s = -1; - if ( (LA43_68==ID) && ((strict == false))) {s = 71;} - - else if ( (LA43_68==DOUBLE_QUOTE) && ((strict == false))) {s = 72;} + if ( (LA41_83==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_68); + input.seek(index41_83); if ( s>=0 ) return s; break; case 19 : - int LA43_13 = input.LA(1); + int LA41_82 = input.LA(1); - int index43_13 = input.index(); + int index41_82 = input.index(); input.rewind(); s = -1; - if ( (LA43_13==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_82==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_13); + input.seek(index41_82); if ( s>=0 ) return s; break; case 20 : - int LA43_104 = input.LA(1); + int LA41_26 = input.LA(1); - int index43_104 = input.index(); + int index41_26 = input.index(); input.rewind(); s = -1; - if ( (LA43_104==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_26==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_104); + input.seek(index41_26); if ( s>=0 ) return s; break; case 21 : - int LA43_14 = input.LA(1); + int LA41_76 = input.LA(1); - int index43_14 = input.index(); + int index41_76 = input.index(); input.rewind(); s = -1; - if ( (LA43_14==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_76==SELECT) && ((strict == false))) {s = 77;} + + else if ( (LA41_76==AS) && ((strict == false))) {s = 78;} + + else if ( (LA41_76==FROM) && ((strict == false))) {s = 79;} + + else if ( (LA41_76==JOIN) && ((strict == false))) {s = 80;} + + else if ( (LA41_76==INNER) && ((strict == false))) {s = 81;} + + else if ( (LA41_76==LEFT) && ((strict == false))) {s = 82;} + + else if ( (LA41_76==OUTER) && ((strict == false))) {s = 83;} + + else if ( (LA41_76==ON) && ((strict == false))) {s = 84;} + + else if ( (LA41_76==WHERE) && ((strict == false))) {s = 85;} + + else if ( (LA41_76==OR) && ((strict == false))) {s = 86;} + + else if ( (LA41_76==AND) && ((strict == false))) {s = 87;} + + else if ( (LA41_76==NOT) && ((strict == false))) {s = 88;} + + else if ( (LA41_76==IN) && ((strict == false))) {s = 89;} + + else if ( (LA41_76==LIKE) && ((strict == false))) {s = 90;} + + else if ( (LA41_76==IS) && ((strict == false))) {s = 91;} + + else if ( (LA41_76==NULL) && ((strict == false))) {s = 92;} + + else if ( (LA41_76==ANY) && ((strict == false))) {s = 93;} + + else if ( (LA41_76==CONTAINS) && ((strict == false))) {s = 94;} + + else if ( (LA41_76==IN_FOLDER) && ((strict == false))) {s = 95;} + + else if ( (LA41_76==IN_TREE) && ((strict == false))) {s = 96;} + + else if ( (LA41_76==ORDER) && ((strict == false))) {s = 97;} + + else if ( (LA41_76==BY) && ((strict == false))) {s = 98;} + + else if ( (LA41_76==ASC) && ((strict == false))) {s = 99;} + + else if ( (LA41_76==DESC) && ((strict == false))) {s = 100;} + + else if ( (LA41_76==TIMESTAMP) && ((strict == false))) {s = 101;} + + else if ( (LA41_76==TRUE) && ((strict == false))) {s = 102;} + + else if ( (LA41_76==FALSE) && ((strict == false))) {s = 103;} + + else if ( (LA41_76==SCORE) && ((strict == false))) {s = 104;} + + else if ( (LA41_76==ID) && ((strict == false))) {s = 105;} - input.seek(index43_14); + input.seek(index41_76); if ( s>=0 ) return s; break; case 22 : - int LA43_102 = input.LA(1); + int LA41_9 = input.LA(1); - int index43_102 = input.index(); + int index41_9 = input.index(); input.rewind(); s = -1; - if ( (LA43_102==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_9==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_102); + input.seek(index41_9); if ( s>=0 ) return s; break; case 23 : - int LA43_31 = input.LA(1); + int LA41_29 = input.LA(1); - int index43_31 = input.index(); + int index41_29 = input.index(); input.rewind(); s = -1; - if ( (LA43_31==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_29==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_31); + input.seek(index41_29); if ( s>=0 ) return s; break; case 24 : - int LA43_11 = input.LA(1); + int LA41_39 = input.LA(1); - int index43_11 = input.index(); + int index41_39 = input.index(); input.rewind(); s = -1; - if ( (LA43_11==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_39==ASC) && ((strict == false))) {s = 69;} + + else if ( (LA41_39==DESC) && ((strict == false))) {s = 70;} + + else if ( (LA41_39==DOT) && ((strict == false))) {s = 71;} + + else if ( (LA41_39==COMMA) && ((strict == false))) {s = 72;} + + else if ( (LA41_39==EOF) && ((strict == false))) {s = 73;} - input.seek(index43_11); + input.seek(index41_39); if ( s>=0 ) return s; break; case 25 : - int LA43_103 = input.LA(1); + int LA41_30 = input.LA(1); - int index43_103 = input.index(); + int index41_30 = input.index(); input.rewind(); s = -1; - if ( (LA43_103==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_30==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_103); + input.seek(index41_30); if ( s>=0 ) return s; break; case 26 : - int LA43_100 = input.LA(1); + int LA41_10 = input.LA(1); - int index43_100 = input.index(); + int index41_10 = input.index(); input.rewind(); s = -1; - if ( (LA43_100==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_10==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_100); + input.seek(index41_10); if ( s>=0 ) return s; break; case 27 : - int LA43_101 = input.LA(1); + int LA41_28 = input.LA(1); - int index43_101 = input.index(); + int index41_28 = input.index(); input.rewind(); s = -1; - if ( (LA43_101==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_28==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_101); + input.seek(index41_28); if ( s>=0 ) return s; break; case 28 : - int LA43_32 = input.LA(1); + int LA41_11 = input.LA(1); - int index43_32 = input.index(); + int index41_11 = input.index(); input.rewind(); s = -1; - if ( (LA43_32==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_11==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_32); + input.seek(index41_11); if ( s>=0 ) return s; break; case 29 : - int LA43_12 = input.LA(1); + int LA41_32 = input.LA(1); - int index43_12 = input.index(); + int index41_32 = input.index(); input.rewind(); s = -1; - if ( (LA43_12==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_32==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_12); + input.seek(index41_32); if ( s>=0 ) return s; break; case 30 : - int LA43_105 = input.LA(1); + int LA41_8 = input.LA(1); - int index43_105 = input.index(); + int index41_8 = input.index(); input.rewind(); s = -1; - if ( (LA43_105==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_8==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_105); + input.seek(index41_8); if ( s>=0 ) return s; break; case 31 : - int LA43_10 = input.LA(1); + int LA41_75 = input.LA(1); - int index43_10 = input.index(); + int index41_75 = input.index(); input.rewind(); s = -1; - if ( (LA43_10==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_75==COMMA) && ((strict == false))) {s = 72;} + + else if ( (LA41_75==EOF) && ((strict == false))) {s = 73;} + + else if ( (LA41_75==ASC) && ((strict == false))) {s = 69;} + + else if ( (LA41_75==DESC) && ((strict == false))) {s = 70;} - input.seek(index43_10); + input.seek(index41_75); if ( s>=0 ) return s; break; case 32 : - int LA43_2 = input.LA(1); + int LA41_31 = input.LA(1); - int index43_2 = input.index(); + int index41_31 = input.index(); input.rewind(); s = -1; - if ( (LA43_2==SELECT) && ((strict == false))) {s = 6;} - - else if ( (LA43_2==AS) && ((strict == false))) {s = 7;} - - else if ( (LA43_2==FROM) && ((strict == false))) {s = 8;} - - else if ( (LA43_2==JOIN) && ((strict == false))) {s = 9;} - - else if ( (LA43_2==INNER) && ((strict == false))) {s = 10;} - - else if ( (LA43_2==LEFT) && ((strict == false))) {s = 11;} - - else if ( (LA43_2==OUTER) && ((strict == false))) {s = 12;} - - else if ( (LA43_2==ON) && ((strict == false))) {s = 13;} - - else if ( (LA43_2==WHERE) && ((strict == false))) {s = 14;} - - else if ( (LA43_2==OR) && ((strict == false))) {s = 15;} - - else if ( (LA43_2==AND) && ((strict == false))) {s = 16;} - - else if ( (LA43_2==NOT) && ((strict == false))) {s = 17;} - - else if ( (LA43_2==IN) && ((strict == false))) {s = 18;} - - else if ( (LA43_2==LIKE) && ((strict == false))) {s = 19;} - - else if ( (LA43_2==IS) && ((strict == false))) {s = 20;} - - else if ( (LA43_2==NULL) && ((strict == false))) {s = 21;} - - else if ( (LA43_2==ANY) && ((strict == false))) {s = 22;} - - else if ( (LA43_2==CONTAINS) && ((strict == false))) {s = 23;} - - else if ( (LA43_2==IN_FOLDER) && ((strict == false))) {s = 24;} - - else if ( (LA43_2==IN_TREE) && ((strict == false))) {s = 25;} - - else if ( (LA43_2==ORDER) && ((strict == false))) {s = 26;} - - else if ( (LA43_2==BY) && ((strict == false))) {s = 27;} - - else if ( (LA43_2==ASC) && ((strict == false))) {s = 28;} - - else if ( (LA43_2==DESC) && ((strict == false))) {s = 29;} - - else if ( (LA43_2==TIMESTAMP) && ((strict == false))) {s = 30;} - - else if ( (LA43_2==TRUE) && ((strict == false))) {s = 31;} - - else if ( (LA43_2==FALSE) && ((strict == false))) {s = 32;} - - else if ( (LA43_2==SCORE) && ((strict == false))) {s = 33;} - - else if ( (LA43_2==ID) && ((strict == false))) {s = 34;} + if ( (LA41_31==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_2); + input.seek(index41_31); if ( s>=0 ) return s; break; case 33 : - int LA43_9 = input.LA(1); + int LA41_106 = input.LA(1); - int index43_9 = input.index(); + int index41_106 = input.index(); input.rewind(); s = -1; - if ( (LA43_9==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_106==ASC) && ((strict == false))) {s = 69;} + + else if ( (LA41_106==DESC) && ((strict == false))) {s = 70;} + + else if ( (LA41_106==COMMA) && ((strict == false))) {s = 72;} + + else if ( (LA41_106==EOF) && ((strict == false))) {s = 73;} - input.seek(index43_9); + input.seek(index41_106); if ( s>=0 ) return s; break; case 34 : - int LA43_29 = input.LA(1); + int LA41_15 = input.LA(1); - int index43_29 = input.index(); + int index41_15 = input.index(); input.rewind(); s = -1; - if ( (LA43_29==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_15==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_29); + input.seek(index41_15); if ( s>=0 ) return s; break; case 35 : - int LA43_7 = input.LA(1); + int LA41_0 = input.LA(1); - int index43_7 = input.index(); + int index41_0 = input.index(); input.rewind(); s = -1; - if ( (LA43_7==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_0==ID) ) {s = 1;} + + else if ( (LA41_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} - input.seek(index43_7); + input.seek(index41_0); if ( s>=0 ) return s; break; case 36 : - int LA43_30 = input.LA(1); + int LA41_34 = input.LA(1); - int index43_30 = input.index(); + int index41_34 = input.index(); input.rewind(); s = -1; - if ( (LA43_30==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_34==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_30); + input.seek(index41_34); if ( s>=0 ) return s; break; case 37 : - int LA43_8 = input.LA(1); + int LA41_16 = input.LA(1); - int index43_8 = input.index(); + int index41_16 = input.index(); input.rewind(); s = -1; - if ( (LA43_8==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_16==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_8); + input.seek(index41_16); if ( s>=0 ) return s; break; case 38 : - int LA43_87 = input.LA(1); + int LA41_33 = input.LA(1); - int index43_87 = input.index(); + int index41_33 = input.index(); input.rewind(); s = -1; - if ( (LA43_87==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_33==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_87); + input.seek(index41_33); if ( s>=0 ) return s; break; case 39 : - int LA43_26 = input.LA(1); + int LA41_12 = input.LA(1); - int index43_26 = input.index(); + int index41_12 = input.index(); input.rewind(); s = -1; - if ( (LA43_26==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_12==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_26); + input.seek(index41_12); if ( s>=0 ) return s; break; case 40 : - int LA43_6 = input.LA(1); + int LA41_14 = input.LA(1); - int index43_6 = input.index(); + int index41_14 = input.index(); input.rewind(); s = -1; - if ( (LA43_6==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_14==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_6); + input.seek(index41_14); if ( s>=0 ) return s; break; case 41 : - int LA43_37 = input.LA(1); + int LA41_13 = input.LA(1); - int index43_37 = input.index(); + int index41_13 = input.index(); input.rewind(); s = -1; - if ( (LA43_37==EOF||LA43_37==COMMA) && ((strict == false))) {s = 67;} - - else if ( (LA43_37==DOT) && ((strict == false))) {s = 68;} - - else if ( ((LA43_37>=ASC && LA43_37<=DESC)) && ((strict == false))) {s = 69;} + if ( (LA41_13==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_37); + input.seek(index41_13); if ( s>=0 ) return s; break; case 42 : - int LA43_86 = input.LA(1); + int LA41_2 = input.LA(1); - int index43_86 = input.index(); + int index41_2 = input.index(); input.rewind(); s = -1; - if ( (LA43_86==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_2==SELECT) && ((strict == false))) {s = 8;} + + else if ( (LA41_2==AS) && ((strict == false))) {s = 9;} + + else if ( (LA41_2==FROM) && ((strict == false))) {s = 10;} + + else if ( (LA41_2==JOIN) && ((strict == false))) {s = 11;} + + else if ( (LA41_2==INNER) && ((strict == false))) {s = 12;} + + else if ( (LA41_2==LEFT) && ((strict == false))) {s = 13;} + + else if ( (LA41_2==OUTER) && ((strict == false))) {s = 14;} + + else if ( (LA41_2==ON) && ((strict == false))) {s = 15;} + + else if ( (LA41_2==WHERE) && ((strict == false))) {s = 16;} + + else if ( (LA41_2==OR) && ((strict == false))) {s = 17;} + + else if ( (LA41_2==AND) && ((strict == false))) {s = 18;} + + else if ( (LA41_2==NOT) && ((strict == false))) {s = 19;} + + else if ( (LA41_2==IN) && ((strict == false))) {s = 20;} + + else if ( (LA41_2==LIKE) && ((strict == false))) {s = 21;} + + else if ( (LA41_2==IS) && ((strict == false))) {s = 22;} + + else if ( (LA41_2==NULL) && ((strict == false))) {s = 23;} + + else if ( (LA41_2==ANY) && ((strict == false))) {s = 24;} + + else if ( (LA41_2==CONTAINS) && ((strict == false))) {s = 25;} + + else if ( (LA41_2==IN_FOLDER) && ((strict == false))) {s = 26;} + + else if ( (LA41_2==IN_TREE) && ((strict == false))) {s = 27;} + + else if ( (LA41_2==ORDER) && ((strict == false))) {s = 28;} + + else if ( (LA41_2==BY) && ((strict == false))) {s = 29;} + + else if ( (LA41_2==ASC) && ((strict == false))) {s = 30;} + + else if ( (LA41_2==DESC) && ((strict == false))) {s = 31;} + + else if ( (LA41_2==TIMESTAMP) && ((strict == false))) {s = 32;} + + else if ( (LA41_2==TRUE) && ((strict == false))) {s = 33;} + + else if ( (LA41_2==FALSE) && ((strict == false))) {s = 34;} + + else if ( (LA41_2==SCORE) && ((strict == false))) {s = 35;} + + else if ( (LA41_2==ID) && ((strict == false))) {s = 36;} - input.seek(index43_86); + input.seek(index41_2); if ( s>=0 ) return s; break; case 43 : - int LA43_34 = input.LA(1); + int LA41_99 = input.LA(1); - int index43_34 = input.index(); + int index41_99 = input.index(); input.rewind(); s = -1; - if ( (LA43_34==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_99==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_34); + input.seek(index41_99); if ( s>=0 ) return s; break; case 44 : - int LA43_85 = input.LA(1); + int LA41_35 = input.LA(1); - int index43_85 = input.index(); + int index41_35 = input.index(); input.rewind(); s = -1; - if ( (LA43_85==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_35==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_85); + input.seek(index41_35); if ( s>=0 ) return s; break; case 45 : - int LA43_84 = input.LA(1); + int LA41_98 = input.LA(1); - int index43_84 = input.index(); + int index41_98 = input.index(); input.rewind(); s = -1; - if ( (LA43_84==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_98==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_84); + input.seek(index41_98); if ( s>=0 ) return s; break; case 46 : - int LA43_91 = input.LA(1); + int LA41_97 = input.LA(1); - int index43_91 = input.index(); + int index41_97 = input.index(); input.rewind(); s = -1; - if ( (LA43_91==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_97==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_91); + input.seek(index41_97); if ( s>=0 ) return s; break; case 47 : - int LA43_27 = input.LA(1); + int LA41_105 = input.LA(1); - int index43_27 = input.index(); + int index41_105 = input.index(); input.rewind(); s = -1; - if ( (LA43_27==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_105==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_27); + input.seek(index41_105); if ( s>=0 ) return s; break; case 48 : - int LA43_90 = input.LA(1); + int LA41_20 = input.LA(1); - int index43_90 = input.index(); + int index41_20 = input.index(); input.rewind(); s = -1; - if ( (LA43_90==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_20==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_90); + input.seek(index41_20); if ( s>=0 ) return s; break; case 49 : - int LA43_28 = input.LA(1); + int LA41_96 = input.LA(1); - int index43_28 = input.index(); + int index41_96 = input.index(); input.rewind(); s = -1; - if ( (LA43_28==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_96==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_28); + input.seek(index41_96); if ( s>=0 ) return s; break; case 50 : - int LA43_89 = input.LA(1); + int LA41_95 = input.LA(1); - int index43_89 = input.index(); + int index41_95 = input.index(); input.rewind(); s = -1; - if ( (LA43_89==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_95==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_89); + input.seek(index41_95); if ( s>=0 ) return s; break; case 51 : - int LA43_33 = input.LA(1); + int LA41_22 = input.LA(1); - int index43_33 = input.index(); + int index41_22 = input.index(); input.rewind(); s = -1; - if ( (LA43_33==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_22==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_33); + input.seek(index41_22); if ( s>=0 ) return s; break; case 52 : - int LA43_88 = input.LA(1); + int LA41_94 = input.LA(1); - int index43_88 = input.index(); + int index41_94 = input.index(); input.rewind(); s = -1; - if ( (LA43_88==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_94==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_88); + input.seek(index41_94); if ( s>=0 ) return s; break; case 53 : - int LA43_95 = input.LA(1); + int LA41_21 = input.LA(1); - int index43_95 = input.index(); + int index41_21 = input.index(); input.rewind(); s = -1; - if ( (LA43_95==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_21==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_95); + input.seek(index41_21); if ( s>=0 ) return s; break; case 54 : - int LA43_94 = input.LA(1); + int LA41_93 = input.LA(1); - int index43_94 = input.index(); + int index41_93 = input.index(); input.rewind(); s = -1; - if ( (LA43_94==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_93==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_94); + input.seek(index41_93); if ( s>=0 ) return s; break; case 55 : - int LA43_23 = input.LA(1); + int LA41_92 = input.LA(1); - int index43_23 = input.index(); + int index41_92 = input.index(); input.rewind(); s = -1; - if ( (LA43_23==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_92==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_23); + input.seek(index41_92); if ( s>=0 ) return s; break; case 56 : - int LA43_93 = input.LA(1); + int LA41_36 = input.LA(1); - int index43_93 = input.index(); + int index41_36 = input.index(); input.rewind(); s = -1; - if ( (LA43_93==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_36==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_93); + input.seek(index41_36); if ( s>=0 ) return s; break; case 57 : - int LA43_24 = input.LA(1); + int LA41_18 = input.LA(1); - int index43_24 = input.index(); + int index41_18 = input.index(); input.rewind(); s = -1; - if ( (LA43_24==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_18==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_24); + input.seek(index41_18); if ( s>=0 ) return s; break; case 58 : - int LA43_92 = input.LA(1); + int LA41_17 = input.LA(1); - int index43_92 = input.index(); + int index41_17 = input.index(); input.rewind(); s = -1; - if ( (LA43_92==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_17==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_92); + input.seek(index41_17); if ( s>=0 ) return s; break; case 59 : - int LA43_99 = input.LA(1); + int LA41_103 = input.LA(1); - int index43_99 = input.index(); + int index41_103 = input.index(); input.rewind(); s = -1; - if ( (LA43_99==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_103==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_99); + input.seek(index41_103); if ( s>=0 ) return s; break; case 60 : - int LA43_0 = input.LA(1); + int LA41_19 = input.LA(1); - int index43_0 = input.index(); + int index41_19 = input.index(); input.rewind(); s = -1; - if ( (LA43_0==ID) ) {s = 1;} - - else if ( (LA43_0==DOUBLE_QUOTE) && ((strict == false))) {s = 2;} + if ( (LA41_19==DOUBLE_QUOTE) && ((strict == false))) {s = 39;} - input.seek(index43_0); + input.seek(index41_19); if ( s>=0 ) return s; break; case 61 : - int LA43_98 = input.LA(1); + int LA41_102 = input.LA(1); - int index43_98 = input.index(); + int index41_102 = input.index(); input.rewind(); s = -1; - if ( (LA43_98==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_102==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_98); + input.seek(index41_102); if ( s>=0 ) return s; break; case 62 : - int LA43_97 = input.LA(1); + int LA41_101 = input.LA(1); - int index43_97 = input.index(); + int index41_101 = input.index(); input.rewind(); s = -1; - if ( (LA43_97==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_101==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_97); + input.seek(index41_101); if ( s>=0 ) return s; break; case 63 : - int LA43_25 = input.LA(1); + int LA41_104 = input.LA(1); - int index43_25 = input.index(); + int index41_104 = input.index(); input.rewind(); s = -1; - if ( (LA43_25==DOUBLE_QUOTE) && ((strict == false))) {s = 37;} + if ( (LA41_104==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_25); + input.seek(index41_104); if ( s>=0 ) return s; break; case 64 : - int LA43_96 = input.LA(1); + int LA41_100 = input.LA(1); - int index43_96 = input.index(); + int index41_100 = input.index(); input.rewind(); s = -1; - if ( (LA43_96==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} + if ( (LA41_100==DOUBLE_QUOTE) && ((strict == false))) {s = 106;} - input.seek(index43_96); + input.seek(index41_100); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 43, _s, input); + new NoViableAltException(getDescription(), 41, _s, input); error(nvae); throw nvae; } } - public static final BitSet FOLLOW_SELECT_in_query217 = new BitSet(new long[]{0xFF83DF8580000000L,0x0000000000001E67L}); - public static final BitSet FOLLOW_selectList_in_query219 = new BitSet(new long[]{0x0000008000000000L}); - public static final BitSet FOLLOW_fromClause_in_query221 = new BitSet(new long[]{0x8000400000000000L}); - public static final BitSet FOLLOW_whereClause_in_query223 = new BitSet(new long[]{0x8000000000000000L}); - public static final BitSet FOLLOW_orderByClause_in_query226 = new BitSet(new long[]{0x0000000000000000L}); - public static final BitSet FOLLOW_EOF_in_query229 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_STAR_in_selectList286 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_selectSubList_in_selectList302 = new BitSet(new long[]{0x0000000200000002L}); - public static final BitSet FOLLOW_COMMA_in_selectList306 = new BitSet(new long[]{0xFF83DF8580000000L,0x0000000000001E67L}); - public static final BitSet FOLLOW_selectSubList_in_selectList308 = new BitSet(new long[]{0x0000000200000002L}); - public static final BitSet FOLLOW_valueExpression_in_selectSubList344 = new BitSet(new long[]{0x0000000400000002L,0x0000000000000060L}); - public static final BitSet FOLLOW_AS_in_selectSubList348 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_columnName_in_selectSubList351 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_qualifier_in_selectSubList372 = new BitSet(new long[]{0x0000000800000000L}); - public static final BitSet FOLLOW_DOTSTAR_in_selectSubList374 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_selectSubList390 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_valueExpression435 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_valueFunction_in_valueExpression448 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_qualifier_in_columnReference497 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_DOT_in_columnReference499 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_columnName_in_columnReference504 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_qualifier_in_multiValuedColumnReference566 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_DOT_in_multiValuedColumnReference568 = new BitSet(new long[]{0xFF83DF8580000000L,0x0000000000001E67L}); - public static final BitSet FOLLOW_multiValuedColumnName_in_multiValuedColumnReference574 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_cmisFunction_in_valueFunction640 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_LPAREN_in_valueFunction642 = new BitSet(new long[]{0x0000004000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_functionArgument_in_valueFunction644 = new BitSet(new long[]{0x0000004000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_RPAREN_in_valueFunction647 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_keyWordOrId_in_valueFunction675 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_LPAREN_in_valueFunction677 = new BitSet(new long[]{0x0000004000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_functionArgument_in_valueFunction679 = new BitSet(new long[]{0x0000004000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_RPAREN_in_valueFunction682 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_qualifier_in_functionArgument717 = new BitSet(new long[]{0x0000001000000000L}); - public static final BitSet FOLLOW_DOT_in_functionArgument719 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_columnName_in_functionArgument721 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_functionArgument745 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literalOrParameterName_in_functionArgument755 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_tableName_in_qualifier776 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_correlationName_in_qualifier788 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FROM_in_fromClause833 = new BitSet(new long[]{0x0000002000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_tableReference_in_fromClause835 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_singleTable_in_tableReference856 = new BitSet(new long[]{0x0000070000000002L}); - public static final BitSet FOLLOW_joinedTable_in_tableReference858 = new BitSet(new long[]{0x0000070000000002L}); - public static final BitSet FOLLOW_tableName_in_singleTable886 = new BitSet(new long[]{0x0000000400000002L,0x0000000000000060L}); - public static final BitSet FOLLOW_AS_in_singleTable890 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_correlationName_in_singleTable893 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_singleTable914 = new BitSet(new long[]{0x0000002000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_joinedTables_in_singleTable916 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_RPAREN_in_singleTable918 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_joinType_in_joinedTable966 = new BitSet(new long[]{0x0000010000000000L}); - public static final BitSet FOLLOW_JOIN_in_joinedTable969 = new BitSet(new long[]{0x0000002000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_tableReference_in_joinedTable971 = new BitSet(new long[]{0x0000100000000000L}); - public static final BitSet FOLLOW_joinSpecification_in_joinedTable973 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_singleTable_in_joinedTables1001 = new BitSet(new long[]{0x0000070000000000L}); - public static final BitSet FOLLOW_joinedTable_in_joinedTables1003 = new BitSet(new long[]{0x0000070000000002L}); - public static final BitSet FOLLOW_INNER_in_joinType1030 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LEFT_in_joinType1042 = new BitSet(new long[]{0x0000080000000002L}); - public static final BitSet FOLLOW_OUTER_in_joinType1044 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ON_in_joinSpecification1090 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_columnReference_in_joinSpecification1094 = new BitSet(new long[]{0x0000200000000000L}); - public static final BitSet FOLLOW_EQUALS_in_joinSpecification1096 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_columnReference_in_joinSpecification1100 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_WHERE_in_whereClause1159 = new BitSet(new long[]{0xFF83DFA580000000L,0x0000000000001FFFL}); - public static final BitSet FOLLOW_searchOrCondition_in_whereClause1161 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition1181 = new BitSet(new long[]{0x0000800000000002L}); - public static final BitSet FOLLOW_OR_in_searchOrCondition1184 = new BitSet(new long[]{0xFF83DFA580000000L,0x0000000000001FFFL}); - public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition1186 = new BitSet(new long[]{0x0000800000000002L}); - public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition1214 = new BitSet(new long[]{0x0001000000000002L}); - public static final BitSet FOLLOW_AND_in_searchAndCondition1217 = new BitSet(new long[]{0xFF83DFA580000000L,0x0000000000001FFFL}); - public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition1219 = new BitSet(new long[]{0x0001000000000002L}); - public static final BitSet FOLLOW_NOT_in_searchNotCondition1246 = new BitSet(new long[]{0xFF83DFA580000000L,0x0000000000001FFFL}); - public static final BitSet FOLLOW_searchTest_in_searchNotCondition1248 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_searchTest_in_searchNotCondition1263 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_predicate_in_searchTest1281 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_searchTest1292 = new BitSet(new long[]{0xFF83DFA580000000L,0x0000000000001FFFL}); - public static final BitSet FOLLOW_searchOrCondition_in_searchTest1294 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_RPAREN_in_searchTest1296 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_comparisonPredicate_in_predicate1313 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_inPredicate_in_predicate1318 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_likePredicate_in_predicate1323 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_nullPredicate_in_predicate1328 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_quantifiedComparisonPredicate_in_predicate1339 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_quantifiedInPredicate_in_predicate1344 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_textSearchPredicate_in_predicate1349 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_folderPredicate_in_predicate1354 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_valueExpression_in_comparisonPredicate1366 = new BitSet(new long[]{0x007C200000000000L}); - public static final BitSet FOLLOW_compOp_in_comparisonPredicate1368 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_literalOrParameterName_in_comparisonPredicate1370 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SELECT_in_query415 = new BitSet(new long[]{0xFF07BF0B00000000L,0x0000000000003CCFL}); + public static final BitSet FOLLOW_selectList_in_query417 = new BitSet(new long[]{0x0000010000000000L}); + public static final BitSet FOLLOW_fromClause_in_query419 = new BitSet(new long[]{0x0000800000000000L,0x0000000000000001L}); + public static final BitSet FOLLOW_whereClause_in_query421 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L}); + public static final BitSet FOLLOW_orderByClause_in_query424 = new BitSet(new long[]{0x0000000000000000L}); + public static final BitSet FOLLOW_EOF_in_query427 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_STAR_in_selectList526 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_selectSubList_in_selectList584 = new BitSet(new long[]{0x0000000400000002L}); + public static final BitSet FOLLOW_COMMA_in_selectList587 = new BitSet(new long[]{0xFF07BF0B00000000L,0x0000000000003CCFL}); + public static final BitSet FOLLOW_selectSubList_in_selectList589 = new BitSet(new long[]{0x0000000400000002L}); + public static final BitSet FOLLOW_valueExpression_in_selectSubList673 = new BitSet(new long[]{0x0000000800000002L,0x00000000000000C0L}); + public static final BitSet FOLLOW_AS_in_selectSubList676 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_columnName_in_selectSubList679 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_qualifier_in_selectSubList744 = new BitSet(new long[]{0x0000001000000000L}); + public static final BitSet FOLLOW_DOTSTAR_in_selectSubList746 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_valueExpression837 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_valueFunction_in_valueExpression869 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_qualifier_in_columnReference933 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_DOT_in_columnReference935 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_columnName_in_columnReference939 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_cmisFunction_in_valueFunction1035 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_LPAREN_in_valueFunction1037 = new BitSet(new long[]{0x0000008000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_functionArgument_in_valueFunction1039 = new BitSet(new long[]{0x0000008000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_RPAREN_in_valueFunction1042 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_keyWordOrId_in_valueFunction1115 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_LPAREN_in_valueFunction1117 = new BitSet(new long[]{0x0000008000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_functionArgument_in_valueFunction1119 = new BitSet(new long[]{0x0000008000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_RPAREN_in_valueFunction1122 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_qualifier_in_functionArgument1211 = new BitSet(new long[]{0x0000002000000000L}); + public static final BitSet FOLLOW_DOT_in_functionArgument1213 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_columnName_in_functionArgument1215 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_functionArgument1277 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literalOrParameterName_in_functionArgument1289 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_tableName_in_qualifier1328 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_correlationName_in_qualifier1360 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FROM_in_fromClause1423 = new BitSet(new long[]{0x0000004000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_tableReference_in_fromClause1425 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_singleTable_in_tableReference1488 = new BitSet(new long[]{0x00000E0000000002L}); + public static final BitSet FOLLOW_joinedTable_in_tableReference1490 = new BitSet(new long[]{0x00000E0000000002L}); + public static final BitSet FOLLOW_simpleTable_in_singleTable1588 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_complexTable_in_singleTable1620 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_tableName_in_simpleTable1711 = new BitSet(new long[]{0x0000000800000002L,0x00000000000000C0L}); + public static final BitSet FOLLOW_AS_in_simpleTable1714 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_correlationName_in_simpleTable1717 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_joinType_in_joinedTable1813 = new BitSet(new long[]{0x0000020000000000L}); + public static final BitSet FOLLOW_JOIN_in_joinedTable1816 = new BitSet(new long[]{0x0000004000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_tableReference_in_joinedTable1818 = new BitSet(new long[]{0x0000200000000000L}); + public static final BitSet FOLLOW_joinSpecification_in_joinedTable1820 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_complexTable1929 = new BitSet(new long[]{0x0000004000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_singleTable_in_complexTable1931 = new BitSet(new long[]{0x00000E0000000000L}); + public static final BitSet FOLLOW_joinedTable_in_complexTable1933 = new BitSet(new long[]{0x00000E8000000000L}); + public static final BitSet FOLLOW_RPAREN_in_complexTable1936 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_complexTable1999 = new BitSet(new long[]{0x0000004000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_complexTable_in_complexTable2001 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_RPAREN_in_complexTable2003 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INNER_in_joinType2056 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LEFT_in_joinType2088 = new BitSet(new long[]{0x0000100000000002L}); + public static final BitSet FOLLOW_OUTER_in_joinType2090 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ON_in_joinSpecification2154 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_columnReference_in_joinSpecification2158 = new BitSet(new long[]{0x0000400000000000L}); + public static final BitSet FOLLOW_EQUALS_in_joinSpecification2160 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_columnReference_in_joinSpecification2164 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_WHERE_in_whereClause2264 = new BitSet(new long[]{0xFF07BF4900000000L,0x0000000000003FFFL}); + public static final BitSet FOLLOW_searchOrCondition_in_whereClause2266 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition2321 = new BitSet(new long[]{0x0001000000000002L}); + public static final BitSet FOLLOW_OR_in_searchOrCondition2324 = new BitSet(new long[]{0xFF07BF4900000000L,0x0000000000003FFFL}); + public static final BitSet FOLLOW_searchAndCondition_in_searchOrCondition2326 = new BitSet(new long[]{0x0001000000000002L}); + public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition2412 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_AND_in_searchAndCondition2415 = new BitSet(new long[]{0xFF07BF4900000000L,0x0000000000003FFFL}); + public static final BitSet FOLLOW_searchNotCondition_in_searchAndCondition2417 = new BitSet(new long[]{0x0002000000000002L}); + public static final BitSet FOLLOW_NOT_in_searchNotCondition2501 = new BitSet(new long[]{0xFF07BF4900000000L,0x0000000000003FFFL}); + public static final BitSet FOLLOW_searchTest_in_searchNotCondition2503 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_searchTest_in_searchNotCondition2563 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_predicate_in_searchTest2616 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_searchTest2648 = new BitSet(new long[]{0xFF07BF4900000000L,0x0000000000003FFFL}); + public static final BitSet FOLLOW_searchOrCondition_in_searchTest2650 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_RPAREN_in_searchTest2652 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_comparisonPredicate_in_predicate2705 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_inPredicate_in_predicate2717 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_likePredicate_in_predicate2729 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_nullPredicate_in_predicate2741 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_quantifiedComparisonPredicate_in_predicate2753 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_quantifiedInPredicate_in_predicate2765 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_textSearchPredicate_in_predicate2777 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_folderPredicate_in_predicate2789 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_valueExpression_in_comparisonPredicate2822 = new BitSet(new long[]{0x00F8400000000000L}); + public static final BitSet FOLLOW_compOp_in_comparisonPredicate2824 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_literalOrParameterName_in_comparisonPredicate2826 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_set_in_compOp0 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literal_in_literalOrParameterName1436 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_parameterName_in_literalOrParameterName1444 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_signedNumericLiteral_in_literal1457 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_characterStringLiteral_in_literal1462 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_booleanLiteral_in_literal1467 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_datetimeLiteral_in_literal1472 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_inPredicate1484 = new BitSet(new long[]{0x0082000000000000L}); - public static final BitSet FOLLOW_NOT_in_inPredicate1486 = new BitSet(new long[]{0x0080000000000000L}); - public static final BitSet FOLLOW_IN_in_inPredicate1489 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_LPAREN_in_inPredicate1491 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_inValueList_in_inPredicate1493 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_RPAREN_in_inPredicate1495 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literalOrParameterName_in_inValueList1524 = new BitSet(new long[]{0x0000000200000002L}); - public static final BitSet FOLLOW_COMMA_in_inValueList1527 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_literalOrParameterName_in_inValueList1529 = new BitSet(new long[]{0x0000000200000002L}); - public static final BitSet FOLLOW_columnReference_in_likePredicate1555 = new BitSet(new long[]{0x0102000000000000L}); - public static final BitSet FOLLOW_NOT_in_likePredicate1557 = new BitSet(new long[]{0x0100000000000000L}); - public static final BitSet FOLLOW_LIKE_in_likePredicate1560 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); - public static final BitSet FOLLOW_characterStringLiteral_in_likePredicate1562 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_nullPredicate1596 = new BitSet(new long[]{0x0200000000000000L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_nullPredicate1600 = new BitSet(new long[]{0x0200000000000000L}); - public static final BitSet FOLLOW_IS_in_nullPredicate1603 = new BitSet(new long[]{0x0400000000000000L}); - public static final BitSet FOLLOW_NULL_in_nullPredicate1605 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_nullPredicate1634 = new BitSet(new long[]{0x0200000000000000L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_nullPredicate1638 = new BitSet(new long[]{0x0200000000000000L}); - public static final BitSet FOLLOW_IS_in_nullPredicate1641 = new BitSet(new long[]{0x0002000000000000L}); - public static final BitSet FOLLOW_NOT_in_nullPredicate1643 = new BitSet(new long[]{0x0400000000000000L}); - public static final BitSet FOLLOW_NULL_in_nullPredicate1645 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate1673 = new BitSet(new long[]{0x007C200000000000L}); - public static final BitSet FOLLOW_compOp_in_quantifiedComparisonPredicate1675 = new BitSet(new long[]{0x0800000000000000L}); - public static final BitSet FOLLOW_ANY_in_quantifiedComparisonPredicate1677 = new BitSet(new long[]{0xFF83DF8580000000L,0x0000000000001E67L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_quantifiedComparisonPredicate1679 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ANY_in_quantifiedInPredicate1708 = new BitSet(new long[]{0xFF83DF8580000000L,0x0000000000001E67L}); - public static final BitSet FOLLOW_multiValuedColumnReference_in_quantifiedInPredicate1710 = new BitSet(new long[]{0x0082000000000000L}); - public static final BitSet FOLLOW_NOT_in_quantifiedInPredicate1712 = new BitSet(new long[]{0x0080000000000000L}); - public static final BitSet FOLLOW_IN_in_quantifiedInPredicate1715 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_LPAREN_in_quantifiedInPredicate1718 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000FF8L}); - public static final BitSet FOLLOW_inValueList_in_quantifiedInPredicate1720 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_RPAREN_in_quantifiedInPredicate1722 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CONTAINS_in_textSearchPredicate1751 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_LPAREN_in_textSearchPredicate1753 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000070L}); - public static final BitSet FOLLOW_qualifier_in_textSearchPredicate1756 = new BitSet(new long[]{0x0000000200000000L}); - public static final BitSet FOLLOW_COMMA_in_textSearchPredicate1758 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000070L}); - public static final BitSet FOLLOW_textSearchExpression_in_textSearchPredicate1762 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_RPAREN_in_textSearchPredicate1764 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_FOLDER_in_folderPredicate1789 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1792 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_TREE_in_folderPredicate1813 = new BitSet(new long[]{0x0000002000000000L}); - public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate1815 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LPAREN_in_folderPredicateArgs1837 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000070L}); - public static final BitSet FOLLOW_qualifier_in_folderPredicateArgs1840 = new BitSet(new long[]{0x0000000200000000L}); - public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs1842 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000070L}); - public static final BitSet FOLLOW_folderId_in_folderPredicateArgs1846 = new BitSet(new long[]{0x0000004000000000L}); - public static final BitSet FOLLOW_RPAREN_in_folderPredicateArgs1848 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ORDER_in_orderByClause1887 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000001L}); - public static final BitSet FOLLOW_BY_in_orderByClause1889 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_sortSpecification_in_orderByClause1891 = new BitSet(new long[]{0x0000000200000002L}); - public static final BitSet FOLLOW_COMMA_in_orderByClause1895 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_sortSpecification_in_orderByClause1897 = new BitSet(new long[]{0x0000000200000002L}); - public static final BitSet FOLLOW_columnReference_in_sortSpecification1923 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_sortSpecification1941 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000006L}); - public static final BitSet FOLLOW_ASC_in_sortSpecification1947 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DESC_in_sortSpecification1953 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_correlationName1980 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_tableName1994 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_columnName2012 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_identifier_in_multiValuedColumnName2031 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_COLON_in_parameterName2049 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000060L}); - public static final BitSet FOLLOW_identifier_in_parameterName2051 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_characterStringLiteral_in_folderId2074 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_QUOTED_STRING_in_textSearchExpression2095 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_identifier2107 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier2122 = new BitSet(new long[]{0xFF83DF8480000000L,0x0000000000001E67L}); - public static final BitSet FOLLOW_keyWordOrId_in_identifier2124 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L}); - public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier2126 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral2145 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_integerLiteral_in_signedNumericLiteral2160 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral2179 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TRUE_in_booleanLiteral2203 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FALSE_in_booleanLiteral2221 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TIMESTAMP_in_datetimeLiteral2246 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000010L}); - public static final BitSet FOLLOW_QUOTED_STRING_in_datetimeLiteral2248 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_QUOTED_STRING_in_characterStringLiteral2271 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SELECT_in_keyWord2297 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_AS_in_keyWord2302 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FROM_in_keyWord2307 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_JOIN_in_keyWord2313 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_INNER_in_keyWord2319 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LEFT_in_keyWord2325 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_OUTER_in_keyWord2331 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ON_in_keyWord2337 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_WHERE_in_keyWord2343 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_OR_in_keyWord2349 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_AND_in_keyWord2355 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_NOT_in_keyWord2361 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_in_keyWord2367 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_LIKE_in_keyWord2373 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IS_in_keyWord2379 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_NULL_in_keyWord2385 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ANY_in_keyWord2391 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_CONTAINS_in_keyWord2397 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_FOLDER_in_keyWord2404 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_IN_TREE_in_keyWord2410 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ORDER_in_keyWord2416 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_BY_in_keyWord2421 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ASC_in_keyWord2427 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_DESC_in_keyWord2433 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TIMESTAMP_in_keyWord2438 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_TRUE_in_keyWord2443 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_FALSE_in_keyWord2448 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_cmisFunction_in_keyWord2453 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_SCORE_in_cmisFunction2464 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_keyWord_in_keyWordOrId2482 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_ID_in_keyWordOrId2494 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_valueExpression_in_synpred1_CMIS340 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_tableName_in_synpred2_CMIS771 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_synpred3_CMIS1592 = new BitSet(new long[]{0x0000000000000002L}); - public static final BitSet FOLLOW_columnReference_in_synpred4_CMIS1630 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literal_in_literalOrParameterName3006 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_parameterName_in_literalOrParameterName3021 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_signedNumericLiteral_in_literal3054 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_characterStringLiteral_in_literal3066 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_booleanLiteral_in_literal3078 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_datetimeLiteral_in_literal3090 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_inPredicate3123 = new BitSet(new long[]{0x0104000000000000L}); + public static final BitSet FOLLOW_NOT_in_inPredicate3125 = new BitSet(new long[]{0x0100000000000000L}); + public static final BitSet FOLLOW_IN_in_inPredicate3128 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_LPAREN_in_inPredicate3130 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_inValueList_in_inPredicate3132 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_RPAREN_in_inPredicate3134 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literalOrParameterName_in_inValueList3222 = new BitSet(new long[]{0x0000000400000002L}); + public static final BitSet FOLLOW_COMMA_in_inValueList3225 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_literalOrParameterName_in_inValueList3227 = new BitSet(new long[]{0x0000000400000002L}); + public static final BitSet FOLLOW_columnReference_in_likePredicate3311 = new BitSet(new long[]{0x0204000000000000L}); + public static final BitSet FOLLOW_NOT_in_likePredicate3313 = new BitSet(new long[]{0x0200000000000000L}); + public static final BitSet FOLLOW_LIKE_in_likePredicate3316 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L}); + public static final BitSet FOLLOW_characterStringLiteral_in_likePredicate3318 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_nullPredicate3404 = new BitSet(new long[]{0x0400000000000000L}); + public static final BitSet FOLLOW_IS_in_nullPredicate3406 = new BitSet(new long[]{0x0800000000000000L}); + public static final BitSet FOLLOW_NULL_in_nullPredicate3408 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_nullPredicate3470 = new BitSet(new long[]{0x0400000000000000L}); + public static final BitSet FOLLOW_IS_in_nullPredicate3472 = new BitSet(new long[]{0x0004000000000000L}); + public static final BitSet FOLLOW_NOT_in_nullPredicate3474 = new BitSet(new long[]{0x0800000000000000L}); + public static final BitSet FOLLOW_NULL_in_nullPredicate3476 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_literalOrParameterName_in_quantifiedComparisonPredicate3557 = new BitSet(new long[]{0x00F8400000000000L}); + public static final BitSet FOLLOW_compOp_in_quantifiedComparisonPredicate3559 = new BitSet(new long[]{0x1000000000000000L}); + public static final BitSet FOLLOW_ANY_in_quantifiedComparisonPredicate3561 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_columnReference_in_quantifiedComparisonPredicate3563 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ANY_in_quantifiedInPredicate3650 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_columnReference_in_quantifiedInPredicate3652 = new BitSet(new long[]{0x0104000000000000L}); + public static final BitSet FOLLOW_NOT_in_quantifiedInPredicate3654 = new BitSet(new long[]{0x0100000000000000L}); + public static final BitSet FOLLOW_IN_in_quantifiedInPredicate3657 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_LPAREN_in_quantifiedInPredicate3659 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001FF0L}); + public static final BitSet FOLLOW_inValueList_in_quantifiedInPredicate3661 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_RPAREN_in_quantifiedInPredicate3663 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CONTAINS_in_textSearchPredicate3751 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_LPAREN_in_textSearchPredicate3753 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000E0L}); + public static final BitSet FOLLOW_qualifier_in_textSearchPredicate3756 = new BitSet(new long[]{0x0000000400000000L}); + public static final BitSet FOLLOW_COMMA_in_textSearchPredicate3758 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000E0L}); + public static final BitSet FOLLOW_textSearchExpression_in_textSearchPredicate3762 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_RPAREN_in_textSearchPredicate3764 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_FOLDER_in_folderPredicate3848 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate3850 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_TREE_in_folderPredicate3910 = new BitSet(new long[]{0x0000004000000000L}); + public static final BitSet FOLLOW_folderPredicateArgs_in_folderPredicate3912 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_folderPredicateArgs3993 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000E0L}); + public static final BitSet FOLLOW_qualifier_in_folderPredicateArgs3996 = new BitSet(new long[]{0x0000000400000000L}); + public static final BitSet FOLLOW_COMMA_in_folderPredicateArgs3998 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000E0L}); + public static final BitSet FOLLOW_folderId_in_folderPredicateArgs4002 = new BitSet(new long[]{0x0000008000000000L}); + public static final BitSet FOLLOW_RPAREN_in_folderPredicateArgs4004 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ORDER_in_orderByClause4070 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000002L}); + public static final BitSet FOLLOW_BY_in_orderByClause4072 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_sortSpecification_in_orderByClause4074 = new BitSet(new long[]{0x0000000400000002L}); + public static final BitSet FOLLOW_COMMA_in_orderByClause4077 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_sortSpecification_in_orderByClause4079 = new BitSet(new long[]{0x0000000400000002L}); + public static final BitSet FOLLOW_columnReference_in_sortSpecification4163 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_columnReference_in_sortSpecification4225 = new BitSet(new long[]{0x0000000000000000L,0x000000000000000CL}); + public static final BitSet FOLLOW_ASC_in_sortSpecification4255 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DESC_in_sortSpecification4277 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_correlationName4371 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_tableName4407 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_identifier_in_columnName4460 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_COLON_in_parameterName4513 = new BitSet(new long[]{0x0000000000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_identifier_in_parameterName4515 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_characterStringLiteral_in_folderId4596 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_QUOTED_STRING_in_textSearchExpression4649 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_identifier4682 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier4717 = new BitSet(new long[]{0xFF07BF0900000000L,0x0000000000003CCFL}); + public static final BitSet FOLLOW_keyWordOrId_in_identifier4719 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L}); + public static final BitSet FOLLOW_DOUBLE_QUOTE_in_identifier4721 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FLOATING_POINT_LITERAL_in_signedNumericLiteral4800 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_integerLiteral_in_signedNumericLiteral4860 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DECIMAL_INTEGER_LITERAL_in_integerLiteral4913 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TRUE_in_booleanLiteral4994 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FALSE_in_booleanLiteral5054 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TIMESTAMP_in_datetimeLiteral5135 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L}); + public static final BitSet FOLLOW_QUOTED_STRING_in_datetimeLiteral5137 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_QUOTED_STRING_in_characterStringLiteral5218 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SELECT_in_keyWord5299 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_AS_in_keyWord5311 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FROM_in_keyWord5323 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_JOIN_in_keyWord5335 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_INNER_in_keyWord5347 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LEFT_in_keyWord5359 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OUTER_in_keyWord5371 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ON_in_keyWord5383 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_WHERE_in_keyWord5395 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_OR_in_keyWord5407 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_AND_in_keyWord5419 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_NOT_in_keyWord5431 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_in_keyWord5443 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LIKE_in_keyWord5455 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IS_in_keyWord5467 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_NULL_in_keyWord5479 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ANY_in_keyWord5491 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_CONTAINS_in_keyWord5503 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_FOLDER_in_keyWord5515 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_IN_TREE_in_keyWord5527 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ORDER_in_keyWord5539 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_BY_in_keyWord5551 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ASC_in_keyWord5563 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_DESC_in_keyWord5575 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TIMESTAMP_in_keyWord5587 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_TRUE_in_keyWord5599 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_FALSE_in_keyWord5611 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_cmisFunction_in_keyWord5623 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_SCORE_in_cmisFunction5656 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_keyWord_in_keyWordOrId5709 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_ID_in_keyWordOrId5741 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_tableName_in_synpred1_CMIS1323 = new BitSet(new long[]{0x0000000000000002L}); + public static final BitSet FOLLOW_LPAREN_in_synpred2_CMIS1917 = new BitSet(new long[]{0x0000004000000000L,0x00000000000000C0L}); + public static final BitSet FOLLOW_singleTable_in_synpred2_CMIS1919 = new BitSet(new long[]{0x00000E0000000000L}); + public static final BitSet FOLLOW_joinedTable_in_synpred2_CMIS1921 = new BitSet(new long[]{0x00000E8000000000L}); + public static final BitSet FOLLOW_RPAREN_in_synpred2_CMIS1924 = new BitSet(new long[]{0x0000000000000002L}); } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/search/impl/parsers/CMISTest.java b/source/java/org/alfresco/repo/search/impl/parsers/CMISTest.java index 6d4e6ec7d3..76a4c69519 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/CMISTest.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/CMISTest.java @@ -43,7 +43,7 @@ public class CMISTest extends TestCase CharStream input = new ANTLRInputStream(modelStream); - gUnitExecutor executer = new gUnitExecutor(parse(input)); + gUnitExecutor executer = new gUnitExecutor(parse(input), "CMIS"); System.out.print(executer.execTest()); // unit test result 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 54b865e9ba..133b0cfef8 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTS.g +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTS.g @@ -22,7 +22,6 @@ * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ - /* * Parser for the Alfresco full text query language. * It may be used stand-alone or embedded, for example, in CMIS SQL contains() @@ -33,69 +32,69 @@ grammar FTS; options { - output=AST; - backtrack=false; + output = AST; + backtrack = false; } - /* * Additional tokens for tree building. */ + + tokens { - FTS; - DISJUNCTION; - CONJUNCTION; - NEGATION; - TERM; - EXACT_TERM; - PHRASE; - SYNONYM; - RANGE; - PROXIMITY; - - DEFAULT; - MANDATORY; - OPTIONAL; - EXCLUDE; - - FIELD_DISJUNCTION; - FIELD_CONJUNCTION; - FIELD_NEGATION; - FIELD_GROUP; - FIELD_DEFAULT; - FIELD_MANDATORY; - FIELD_OPTIONAL; - FIELD_EXCLUDE; - FG_TERM; - FG_EXACT_TERM; - FG_PHRASE; - FG_SYNONYM; - FG_PROXIMITY; - FG_RANGE; - - FIELD_REF; - - INCLUSIVE; - EXCLUSIVE; - - QUALIFIER; - PREFIX; - NAME_SPACE; - - BOOST; - FUZZY; - - TEMPLATE; + FTS; + DISJUNCTION; + CONJUNCTION; + NEGATION; + TERM; + EXACT_TERM; + PHRASE; + SYNONYM; + RANGE; + PROXIMITY; + DEFAULT; + MANDATORY; + OPTIONAL; + EXCLUDE; + FIELD_DISJUNCTION; + FIELD_CONJUNCTION; + FIELD_NEGATION; + FIELD_GROUP; + FIELD_DEFAULT; + FIELD_MANDATORY; + FIELD_OPTIONAL; + FIELD_EXCLUDE; + FG_TERM; + FG_EXACT_TERM; + FG_PHRASE; + FG_SYNONYM; + FG_PROXIMITY; + FG_RANGE; + FIELD_REF; + INCLUSIVE; + EXCLUSIVE; + QUALIFIER; + PREFIX; + NAME_SPACE; + BOOST; + FUZZY; + TEMPLATE; } - - /* * Make sure the lexer and parser are generated in the correct package */ -@lexer::header{package org.alfresco.repo.search.impl.parsers;} -@header {package org.alfresco.repo.search.impl.parsers;} +@lexer::header +{ +package org.alfresco.repo.search.impl.parsers; +import org.alfresco.cmis.CMISQueryException; +} + +@header +{ +package org.alfresco.repo.search.impl.parsers; +} /* * Embeded java to control the default connective when not specified. * @@ -103,17 +102,29 @@ tokens * * Add extra detail to teh error message */ + + @members { + public enum Mode + { + CMIS, DEFAULT_CONJUNCTION, DEFAULT_DISJUNCTION + } + private Stack paraphrases = new Stack(); - - private boolean defaultConjunction = true; private boolean defaultFieldConjunction = true; - - public boolean defaultConjunction() + + private Mode mode = Mode.DEFAULT_CONJUNCTION; + + public Mode getMode() { - return defaultConjunction; + return mode; + } + + public void setMode(Mode mode) + { + this.mode = mode; } public boolean defaultFieldConjunction() @@ -121,61 +132,142 @@ tokens return defaultFieldConjunction; } - public void setDefaultConjunction(boolean defaultConjunction) - { - this.defaultConjunction = defaultConjunction; - } - public void setDefaultFieldConjunction(boolean defaultFieldConjunction) { this.defaultFieldConjunction = defaultFieldConjunction; } - protected void mismatch(IntStream input, int ttype, BitSet follow) throws RecognitionException + protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow) throws RecognitionException { - throw new MismatchedTokenException(ttype, input); + throw new MismatchedTokenException(ttype, input); } - + public Object recoverFromMismatchedSet(IntStream input, RecognitionException e, BitSet follow) throws RecognitionException { - throw e; + throw e; } - public String getErrorMessage(RecognitionException e, String[] tokenNames) + public String getErrorMessage(RecognitionException e, String[] tokenNames) { - List stack = getRuleInvocationStack(e, this.getClass().getName()); - String msg = null; - if(e instanceof NoViableAltException) - { + List stack = getRuleInvocationStack(e, this.getClass().getName()); + String msg = e.getMessage(); + if ( e instanceof UnwantedTokenException ) + { + UnwantedTokenException ute = (UnwantedTokenException)e; + String tokenName=""; + if ( ute.expecting== Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[ute.expecting]; + } + msg = "extraneous input " + getTokenErrorDisplay(ute.getUnexpectedToken()) + + " expecting "+tokenName; + } + else if ( e instanceof MissingTokenException ) + { + MissingTokenException mte = (MissingTokenException)e; + String tokenName=""; + if ( mte.expecting== Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mte.expecting]; + } + msg = "missing " + tokenName+" at " + getTokenErrorDisplay(e.token) + + " (" + getLongTokenErrorDisplay(e.token) +")"; + } + else if ( e instanceof MismatchedTokenException ) + { + MismatchedTokenException mte = (MismatchedTokenException)e; + String tokenName=""; + if ( mte.expecting== Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mte.expecting]; + } + msg = "mismatched input " + getTokenErrorDisplay(e.token) + + " expecting " + tokenName +" (" + getLongTokenErrorDisplay(e.token) + ")"; + } + else if ( e instanceof MismatchedTreeNodeException ) + { + MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e; + String tokenName=""; + if ( mtne.expecting==Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mtne.expecting]; + } + msg = "mismatched tree node: " + mtne.node + " expecting " + tokenName; + } + else if ( e instanceof NoViableAltException ) + { NoViableAltException nvae = (NoViableAltException)e; - msg = "Syntax error at line "+nvae.line+ " position "+nvae.charPositionInLine+" at token " + nvae.token.getText() + - "\n\tNo viable alternative: token="+e.token+ - "\n\t\tDecision No ="+nvae.decisionNumber+ - "\n\t\tState No "+nvae.stateNumber+ - "\n\t\tDecision=<<"+nvae.grammarDecisionDescription+">>"; - } - else - { - msg = super.getErrorMessage(e, tokenNames); - } - if(paraphrases.size() > 0) - { - String paraphrase = (String)paraphrases.peek(); - msg = msg+"\n\t\tParaphrase: "+paraphrase; - } - - return msg+"\n\tStack\n\t\t"+stack; + msg = "no viable alternative at input " + getTokenErrorDisplay(e.token) + + "\n\t (decision=" + nvae.decisionNumber + + " state " + nvae.stateNumber + ")" + + " decision=<<" + nvae.grammarDecisionDescription + ">>"; + } + else if ( e instanceof EarlyExitException ) + { + //EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at input " + getTokenErrorDisplay(e.token); + } + else if ( e instanceof MismatchedSetException ) + { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched input " + getTokenErrorDisplay(e.token) + + " expecting set " + mse.expecting; + } + else if ( e instanceof MismatchedNotSetException ) + { + MismatchedNotSetException mse = (MismatchedNotSetException)e; + msg = "mismatched input " + getTokenErrorDisplay(e.token) + + " expecting set " + mse.expecting; + } + else if ( e instanceof FailedPredicateException ) + { + FailedPredicateException fpe = (FailedPredicateException)e; + msg = "rule " + fpe.ruleName + " failed predicate: {" + fpe.predicateText + "}?"; + } + + if(paraphrases.size() > 0) + { + String paraphrase = (String)paraphrases.peek(); + msg = msg+" "+paraphrase; + } + return msg +"\n\t"+stack; + } + + public String getLongTokenErrorDisplay(Token t) + { + return t.toString(); } - public String getTokenErrorDisplay(Token t) - { - return t.toString(); - } -} + public String getErrorString(RecognitionException e) + { + String hdr = getErrorHeader(e); + String msg = getErrorMessage(e, this.getTokenNames()); + return hdr+" "+msg; + } +} /* * Always throw exceptions */ + + @rulecatch { catch(RecognitionException e) @@ -183,469 +275,980 @@ catch(RecognitionException e) throw e; } } - /* * Support for emitting duplicate tokens from the lexer * - required to emit ranges after matching floating point literals ... */ -@lexer::members { + + +@lexer::members +{ List tokens = new ArrayList(); public void emit(Token token) { state.token = token; tokens.add(token); } public Token nextToken() { - super.nextToken(); + nextTokenImpl(); if ( tokens.size()==0 ) { return Token.EOF_TOKEN; } return (Token)tokens.remove(0); } + +public Token nextTokenImpl() { + while (true) + { + state.token = null; + state.channel = Token.DEFAULT_CHANNEL; + state.tokenStartCharIndex = input.index(); + state.tokenStartCharPositionInLine = input.getCharPositionInLine(); + state.tokenStartLine = input.getLine(); + state.text = null; + if ( input.LA(1)==CharStream.EOF ) + { + return Token.EOF_TOKEN; + } + try + { + mTokens(); + if ( state.token==null ) + { + emit(); + } + else if ( state.token==Token.SKIP_TOKEN ) + { + continue; + } + return state.token; + } + catch (RecognitionException re) + { + throw new CMISQueryException(getErrorString(re), re); + } + } + } + + public String getErrorString(RecognitionException e) + { + String hdr = getErrorHeader(e); + String msg = getErrorMessage(e, this.getTokenNames()); + return hdr+" "+msg; + } } - - /* * Top level query */ -ftsQuery - : ftsImplicitConjunctionOrDisjunction EOF - -> ftsImplicitConjunctionOrDisjunction - ; -/* - * When and and or are not specified between query components decide what to do ... - */ -ftsImplicitConjunctionOrDisjunction - : {defaultConjunction()}? ftsExplicitDisjunction (ftsExplicitDisjunction)* - -> ^(CONJUNCTION ftsExplicitDisjunction+) - | ftsExplicitDisjunction (ftsExplicitDisjunction)* - -> ^(DISJUNCTION ftsExplicitDisjunction+) - ; - + +ftsQuery + : + ftsDisjunction EOF + -> ftsDisjunction + ; /* * "OR" * As SQL, OR has lower precedence than AND */ -ftsExplicitDisjunction - : ftsExplictConjunction ((or) => or ftsExplictConjunction)* - -> ^(DISJUNCTION ftsExplictConjunction+) - ; + +ftsDisjunction + : + {getMode() == Mode.CMIS}?=> cmisExplicitDisjunction + | {getMode() == Mode.DEFAULT_CONJUNCTION}?=> ftsExplicitDisjunction + | {getMode() == Mode.DEFAULT_DISJUNCTION}?=> ftsImplicitDisjunction + ; + +ftsExplicitDisjunction + : + ftsImplicitConjunction (or ftsImplicitConjunction)* + -> + ^(DISJUNCTION ftsImplicitConjunction+) + ; + +cmisExplicitDisjunction + : + cmisConjunction (or cmisConjunction)* + -> + ^(DISJUNCTION cmisConjunction+) + ; + +ftsImplicitDisjunction + : + (or? ftsExplicitConjunction)+ + -> + ^(DISJUNCTION ftsExplicitConjunction+) + ; /* * "AND" - */ -ftsExplictConjunction - : ftsPrefixed ((and) => and ftsPrefixed)* - -> ^(CONJUNCTION ftsPrefixed+) - ; - + */ + + +ftsExplicitConjunction + : + ftsPrefixed (and ftsPrefixed)* + -> + ^(CONJUNCTION ftsPrefixed+) + ; + +ftsImplicitConjunction + : + (and? ftsPrefixed)+ + -> + ^(CONJUNCTION ftsPrefixed+) + ; + +cmisConjunction + : + cmisPrefixed+ + -> + ^(CONJUNCTION cmisPrefixed+) + ; /* * Additional info around query compoents * - negation, default, mandatory, optional, exclude and boost * These options control how individual elements are embedded in OR and AND * and how matches affect the overall score. - */ -ftsPrefixed - : (not) => not ftsTest boost? - -> ^(NEGATION ftsTest boost?) - | ftsTest boost? - -> ^(DEFAULT ftsTest boost?) - | PLUS ftsTest boost? - -> ^(MANDATORY ftsTest boost?) - | BAR ftsTest boost? - -> ^(OPTIONAL ftsTest boost?) - | MINUS ftsTest boost? - -> ^(EXCLUDE ftsTest boost?) - ; + */ + +ftsPrefixed + : + (not) => not ftsTest boost? + -> + ^(NEGATION ftsTest boost?) + | ftsTest boost? + -> + ^(DEFAULT ftsTest boost?) + | PLUS ftsTest boost? + -> + ^(MANDATORY ftsTest boost?) + | BAR ftsTest boost? + -> + ^(OPTIONAL ftsTest boost?) + | MINUS ftsTest boost? + -> + ^(EXCLUDE ftsTest boost?) + ; + +cmisPrefixed + : + cmisTest + -> + ^(DEFAULT cmisTest) + | MINUS cmisTest + -> + ^(EXCLUDE cmisTest) + ; /* * Individual query components */ -ftsTest - : ftsTerm ((fuzzy) => fuzzy)? - -> ^(TERM ftsTerm fuzzy?) - | ftsExactTerm ((fuzzy) => fuzzy)? - -> ^(EXACT_TERM ftsExactTerm fuzzy?) - | ftsPhrase ((slop) => slop)? - -> ^(PHRASE ftsPhrase slop?) - | ftsSynonym ((fuzzy) => fuzzy)? - -> ^(SYNONYM ftsSynonym fuzzy?) - | ftsFieldGroupProximity - -> ^(PROXIMITY ftsFieldGroupProximity) - | ftsRange - -> ^(RANGE ftsRange) - | ftsFieldGroup - -> ftsFieldGroup - | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN - -> ftsImplicitConjunctionOrDisjunction - | template - -> template - ; + + +ftsTest + : + (ftsFieldGroupProximity) => ftsFieldGroupProximity + -> + ^(PROXIMITY ftsFieldGroupProximity) + | ftsTerm ( (fuzzy) => fuzzy)? + -> + ^(TERM ftsTerm fuzzy?) + | ftsExactTerm ( (fuzzy) => fuzzy)? + -> + ^(EXACT_TERM ftsExactTerm fuzzy?) + | ftsPhrase ( (slop) => slop)? + -> + ^(PHRASE ftsPhrase slop?) + | ftsSynonym ( (fuzzy) => fuzzy)? + -> + ^(SYNONYM ftsSynonym fuzzy?) + | ftsRange + -> + ^(RANGE ftsRange) + | ftsFieldGroup + -> ftsFieldGroup + | LPAREN ftsDisjunction RPAREN + -> ftsDisjunction + | template + -> template + ; + +cmisTest + : + cmisTerm + -> + ^(TERM cmisTerm) + | cmisPhrase + -> + ^(PHRASE cmisPhrase) + ; template - : PERCENT tempReference - -> ^(TEMPLATE tempReference) - | PERCENT LPAREN (tempReference COMMA?)+ RPAREN - -> ^(TEMPLATE tempReference+) - ; - - + : + PERCENT tempReference + -> + ^(TEMPLATE tempReference) + | PERCENT LPAREN (tempReference COMMA?)+ RPAREN + -> + ^(TEMPLATE tempReference+) + ; fuzzy - : TILDA number - -> ^(FUZZY number) - ; - + : + TILDA number + -> + ^(FUZZY number) + ; + slop - : TILDA DECIMAL_INTEGER_LITERAL - -> ^(FUZZY DECIMAL_INTEGER_LITERAL) - ; + : + TILDA DECIMAL_INTEGER_LITERAL + -> + ^(FUZZY DECIMAL_INTEGER_LITERAL) + ; boost - : CARAT number - -> ^(BOOST number) - ; + : + CARAT number + -> + ^(BOOST number) + ; ftsTerm - : (fieldReference COLON)? ftsWord - -> ftsWord fieldReference? - ; - + : + (fieldReference COLON)? ftsWord + -> ftsWord fieldReference? + ; + +cmisTerm + : + ftsWord + -> ftsWord + ; + ftsExactTerm - : EQUALS ftsTerm - -> ftsTerm - ; - + : + EQUALS ftsTerm + -> ftsTerm + ; + ftsPhrase - : (fieldReference COLON)? FTSPHRASE - -> FTSPHRASE fieldReference? - ; + : + (fieldReference COLON)? FTSPHRASE + -> FTSPHRASE fieldReference? + ; -ftsSynonym - : TILDA ftsTerm - -> ftsTerm - ; +cmisPhrase + : + FTSPHRASE + -> FTSPHRASE + ; + +ftsSynonym + : + TILDA ftsTerm + -> ftsTerm + ; + +ftsRange + : + (fieldReference COLON)? ftsFieldGroupRange + -> ftsFieldGroupRange fieldReference? + ; -ftsRange - : (fieldReference COLON)? ftsFieldGroupRange - -> ftsFieldGroupRange fieldReference? - ; - ftsFieldGroup - : fieldReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN - -> ^(FIELD_GROUP fieldReference ftsFieldGroupImplicitConjunctionOrDisjunction) - ; + : + fieldReference COLON LPAREN ftsFieldGroupDisjunction RPAREN + -> + ^(FIELD_GROUP fieldReference ftsFieldGroupDisjunction) + ; + +ftsFieldGroupDisjunction + : + {defaultFieldConjunction() == true}?=> ftsFieldGroupExplicitDisjunction + | {defaultFieldConjunction() == false}?=> ftsFieldGroupImplicitDisjunction + ; -ftsFieldGroupImplicitConjunctionOrDisjunction - : {defaultFieldConjunction()}? ftsFieldGroupExplicitDisjunction (ftsFieldGroupExplicitDisjunction)* - -> ^(FIELD_CONJUNCTION ftsFieldGroupExplicitDisjunction+) - | ftsFieldGroupExplicitDisjunction (ftsFieldGroupExplicitDisjunction)* - -> ^(FIELD_DISJUNCTION ftsFieldGroupExplicitDisjunction+) - ; - ftsFieldGroupExplicitDisjunction - : ftsFieldGroupExplictConjunction ((or) => or ftsFieldGroupExplictConjunction)* - -> ^(FIELD_DISJUNCTION ftsFieldGroupExplictConjunction+) - ; - -ftsFieldGroupExplictConjunction - : ftsFieldGroupPrefixed ((and) => and ftsFieldGroupPrefixed)* - -> ^(FIELD_CONJUNCTION ftsFieldGroupPrefixed+) - ; - - -ftsFieldGroupPrefixed - : (not) => not ftsFieldGroupTest boost? - -> ^(FIELD_NEGATION ftsFieldGroupTest boost?) - | ftsFieldGroupTest boost? - -> ^(FIELD_DEFAULT ftsFieldGroupTest boost?) - | PLUS ftsFieldGroupTest boost? - -> ^(FIELD_MANDATORY ftsFieldGroupTest boost?) - | BAR ftsFieldGroupTest boost? - -> ^(FIELD_OPTIONAL ftsFieldGroupTest boost?) - | MINUS ftsFieldGroupTest boost? - -> ^(FIELD_EXCLUDE ftsFieldGroupTest boost?) - ; + : + ftsFieldGroupImplicitConjunction (or ftsFieldGroupImplicitConjunction)* + -> + ^(FIELD_DISJUNCTION ftsFieldGroupImplicitConjunction+) + ; +ftsFieldGroupImplicitDisjunction + : + (or? ftsFieldGroupExplicitConjunction)+ + -> + ^(FIELD_DISJUNCTION ftsFieldGroupExplicitConjunction+) + ; +/* + * "AND" + */ + + +ftsFieldGroupExplicitConjunction + : + ftsFieldGroupPrefixed (and ftsFieldGroupPrefixed)* + -> + ^(FIELD_CONJUNCTION ftsFieldGroupPrefixed+) + ; + +ftsFieldGroupImplicitConjunction + : + (and? ftsFieldGroupPrefixed)+ + -> + ^(FIELD_CONJUNCTION ftsFieldGroupPrefixed+) + ; + +ftsFieldGroupPrefixed + : + (not) => not ftsFieldGroupTest boost? + -> + ^(FIELD_NEGATION ftsFieldGroupTest boost?) + | ftsFieldGroupTest boost? + -> + ^(FIELD_DEFAULT ftsFieldGroupTest boost?) + | PLUS ftsFieldGroupTest boost? + -> + ^(FIELD_MANDATORY ftsFieldGroupTest boost?) + | BAR ftsFieldGroupTest boost? + -> + ^(FIELD_OPTIONAL ftsFieldGroupTest boost?) + | MINUS ftsFieldGroupTest boost? + -> + ^(FIELD_EXCLUDE ftsFieldGroupTest boost?) + ; ftsFieldGroupTest - : ftsFieldGroupTerm ((fuzzy) => fuzzy)? - -> ^(FG_TERM ftsFieldGroupTerm fuzzy?) - | ftsFieldGroupExactTerm ((fuzzy) => fuzzy)? - -> ^(FG_EXACT_TERM ftsFieldGroupExactTerm fuzzy?) - | ftsFieldGroupPhrase ((slop) => slop)? - -> ^(FG_PHRASE ftsFieldGroupPhrase slop? ) - | ftsFieldGroupSynonym ((fuzzy) => fuzzy)? - -> ^(FG_SYNONYM ftsFieldGroupSynonym fuzzy?) - | ftsFieldGroupProximity - -> ^(FG_PROXIMITY ftsFieldGroupProximity) - | ftsFieldGroupRange - -> ^(FG_RANGE ftsFieldGroupRange) - | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN - -> ftsFieldGroupImplicitConjunctionOrDisjunction - ; - -ftsFieldGroupTerm - : ftsWord - ; - -ftsFieldGroupExactTerm - : EQUALS ftsFieldGroupTerm - -> ftsFieldGroupTerm - ; - -ftsFieldGroupPhrase - : FTSPHRASE - ; + : + (ftsFieldGroupProximity) => ftsFieldGroupProximity + -> + ^(FG_PROXIMITY ftsFieldGroupProximity) + | ftsFieldGroupTerm ( (fuzzy) => fuzzy)? + -> + ^(FG_TERM ftsFieldGroupTerm fuzzy?) + | ftsFieldGroupExactTerm ( (fuzzy) => fuzzy)? + -> + ^(FG_EXACT_TERM ftsFieldGroupExactTerm fuzzy?) + | ftsFieldGroupPhrase ( (slop) => slop)? + -> + ^(FG_PHRASE ftsFieldGroupPhrase slop?) + | ftsFieldGroupSynonym ( (fuzzy) => fuzzy)? + -> + ^(FG_SYNONYM ftsFieldGroupSynonym fuzzy?) + | ftsFieldGroupRange + -> + ^(FG_RANGE ftsFieldGroupRange) + | LPAREN ftsFieldGroupDisjunction RPAREN + -> ftsFieldGroupDisjunction + ; -ftsFieldGroupSynonym - : TILDA ftsFieldGroupTerm - -> ftsFieldGroupTerm - ; +ftsFieldGroupTerm + : + ftsWord + ; + +ftsFieldGroupExactTerm + : + EQUALS ftsFieldGroupTerm + -> ftsFieldGroupTerm + ; + +ftsFieldGroupPhrase + : + FTSPHRASE + ; + +ftsFieldGroupSynonym + : + TILDA ftsFieldGroupTerm + -> ftsFieldGroupTerm + ; ftsFieldGroupProximity - : ftsFieldGroupTerm (proximityGroup ftsFieldGroupTerm)+ - -> ftsFieldGroupTerm (proximityGroup ftsFieldGroupTerm)+ - ; - + : + ftsFieldGroupProximityTerm ( (proximityGroup) => proximityGroup ftsFieldGroupProximityTerm)+ + -> ftsFieldGroupProximityTerm (proximityGroup ftsFieldGroupProximityTerm)+ + ; + +ftsFieldGroupProximityTerm + : + ID + | FTSWORD + | FTSPRE + | FTSWILD + | NOT + | TO + | DECIMAL_INTEGER_LITERAL + | FLOATING_POINT_LITERAL + ; + proximityGroup - : STAR ( LPAREN DECIMAL_INTEGER_LITERAL? RPAREN)? - -> ^(PROXIMITY DECIMAL_INTEGER_LITERAL?) - ; - + : + STAR (LPAREN DECIMAL_INTEGER_LITERAL? RPAREN)? + -> + ^(PROXIMITY DECIMAL_INTEGER_LITERAL?) + ; + ftsFieldGroupRange - : ftsRangeWord DOTDOT ftsRangeWord - -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE - | range_left ftsRangeWord TO ftsRangeWord range_right - -> range_left ftsRangeWord ftsRangeWord range_right - ; - + : + ftsRangeWord DOTDOT ftsRangeWord + -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE + | range_left ftsRangeWord TO ftsRangeWord range_right + -> range_left ftsRangeWord ftsRangeWord range_right + ; + range_left - : LSQUARE - -> INCLUSIVE - | LT - -> EXCLUSIVE - ; - + : + LSQUARE + -> INCLUSIVE + | LT + -> EXCLUSIVE + ; + range_right - : RSQUARE - -> INCLUSIVE - | GT - -> EXCLUSIVE - ; - - /* Need to fix the generated parser for extra COLON check ??*/ + : + RSQUARE + -> INCLUSIVE + | GT + -> EXCLUSIVE + ; + +/* Need to fix the generated parser for extra COLON check ??*/ + fieldReference - : AT? (prefix|uri)? identifier - -> ^(FIELD_REF identifier prefix? uri?) - ; - + : + AT? + ( + prefix + | uri + )? + identifier + -> + ^(FIELD_REF identifier prefix? uri?) + ; + tempReference - : AT? (prefix|uri)? identifier - -> ^(FIELD_REF identifier prefix? uri?) - ; - + : + AT? + ( + prefix + | uri + )? + identifier + -> + ^(FIELD_REF identifier prefix? uri?) + ; + prefix - : identifier COLON - -> ^(PREFIX identifier) - ; - + : + identifier COLON + -> + ^(PREFIX identifier) + ; + uri - : URI - -> ^(NAME_SPACE URI) - ; - + : + URI + -> + ^(NAME_SPACE URI) + ; + identifier - : ID - ; - + : + ID + ; + ftsWord - : ID - | FTSWORD - | FTSPRE - | FTSWILD - | OR - | AND - | NOT - | TO - | DECIMAL_INTEGER_LITERAL - | FLOATING_POINT_LITERAL - ; - -number - : DECIMAL_INTEGER_LITERAL - | FLOATING_POINT_LITERAL - ; - + : + ID + | FTSWORD + | FTSPRE + | FTSWILD + | NOT + | TO + | DECIMAL_INTEGER_LITERAL + | FLOATING_POINT_LITERAL + | STAR + | QUESTION_MARK + ; + +number + : + DECIMAL_INTEGER_LITERAL + | FLOATING_POINT_LITERAL + ; + ftsRangeWord - : ID - | FTSWORD - | FTSPRE - | FTSWILD - | FTSPHRASE - | DECIMAL_INTEGER_LITERAL - | FLOATING_POINT_LITERAL - ; - + : + ID + | FTSWORD + | FTSPRE + | FTSWILD + | FTSPHRASE + | DECIMAL_INTEGER_LITERAL + | FLOATING_POINT_LITERAL + ; + +// + or - : OR - | BAR BAR - ; - -and - : AND - | AMP AMP - ; - + : + OR + | BAR BAR + ; + +and + : + AND + | AMP AMP + ; + not - : NOT - | EXCLAMATION - ; + : + NOT + | EXCLAMATION + ; // ===== // // LEXER // // ===== // FTSPHRASE - : '"' (F_ESC | ~('\\'|'"') )* '"' ; - - + : + '"' + ( + F_ESC + | + ~( + '\\' + | '"' + ) + )* + '"' + | '\'' + ( + F_ESC + | + ~( + '\\' + | '\'' + ) + )* + '\'' + ; /* * Basic URI pattern based on the regular expression patttern taken from the RFC (it it not full URI parsing) * Note this means the language can not use {} anywhere else in the syntax */ -URI - : '{' - ((F_URI_ALPHA|F_URI_DIGIT|F_URI_OTHER) => (F_URI_ALPHA|F_URI_DIGIT|F_URI_OTHER)+ COLON)? - ((('//') =>'//') - ( (F_URI_ALPHA|F_URI_DIGIT|F_URI_OTHER|COLON) => (F_URI_ALPHA|F_URI_DIGIT|F_URI_OTHER|COLON))*)? - (F_URI_ALPHA|F_URI_DIGIT|F_URI_OTHER|COLON|'/')* - ('?' (F_URI_ALPHA|F_URI_DIGIT|F_URI_OTHER|COLON|'/'|'?')*)? - ('#' (F_URI_ALPHA|F_URI_DIGIT|F_URI_OTHER|COLON|'/'|'?'|'#')*)? - '}' - ; -fragment -F_URI_ALPHA - : 'A'..'Z' | 'a'..'z' - ; +URI + : + '{' + ( + ( + F_URI_ALPHA + | F_URI_DIGIT + | F_URI_OTHER + ) + => + ( + F_URI_ALPHA + | F_URI_DIGIT + | F_URI_OTHER + )+ + COLON + )? + ( + ( ('//') => '//') + ( + ( + F_URI_ALPHA + | F_URI_DIGIT + | F_URI_OTHER + | COLON + ) + => + ( + F_URI_ALPHA + | F_URI_DIGIT + | F_URI_OTHER + | COLON + ) + )* + )? + ( + F_URI_ALPHA + | F_URI_DIGIT + | F_URI_OTHER + | COLON + | '/' + )* + ( + '?' + ( + F_URI_ALPHA + | F_URI_DIGIT + | F_URI_OTHER + | COLON + | '/' + | '?' + )* + )? + ( + '#' + ( + F_URI_ALPHA + | F_URI_DIGIT + | F_URI_OTHER + | COLON + | '/' + | '?' + | '#' + )* + )? + '}' + ; fragment -F_URI_DIGIT - : '0' ..'9' - ; - +F_URI_ALPHA + : + 'A'..'Z' + | 'a'..'z' + ; + +fragment +F_URI_DIGIT + : + '0'..'9' + ; + fragment F_URI_ESC - : '%' F_HEX F_HEX - ; - + : + '%' F_HEX F_HEX + ; + fragment F_URI_OTHER - : '-' |'.'|'_'|'~'|'['|']'|'@'|'!'|'$'|'&'|'\''|'('|')'|'*'|'+'|','|';'|'=' - ; - + : + '-' + | '.' + | '_' + | '~' + | '[' + | ']' + | '@' + | '!' + | '$' + | '&' + | '\'' + | '(' + | ')' + | '*' + | '+' + | ',' + | ';' + | '=' + ; /* * Simple tokens, note all are case insensitive - */ + */ -OR : ('O'|'o')('R'|'r'); -AND : ('A'|'a')('N'|'n')('D'|'d'); -NOT : ('N'|'n')('O'|'o')('T'|'t'); -TILDA : '~' ; -LPAREN : '(' ; -RPAREN : ')' ; -PLUS : '+' ; -MINUS : '-' ; -COLON : ':' ; -STAR : '*' ; -DOTDOT : '..' ; -DOT : '.' ; -AMP : '&' ; -EXCLAMATION : '!' ; -BAR : '|' ; -EQUALS : '=' ; -QUESTION_MARK : '?' ; -LCURL : '{' ; -RCURL : '}' ; -LSQUARE : '[' ; -RSQUARE : ']' ; -TO : ('T'|'t')('O'|'o') ; -COMMA : ','; -CARAT : '^'; -DOLLAR : '$'; -GT : '>'; -LT : '<'; -AT : '@'; -PERCENT : '%'; + +OR + : + ( + 'O' + | 'o' + ) + ( + 'R' + | 'r' + ) + ; + +AND + : + ( + 'A' + | 'a' + ) + ( + 'N' + | 'n' + ) + ( + 'D' + | 'd' + ) + ; + +NOT + : + ( + 'N' + | 'n' + ) + ( + 'O' + | 'o' + ) + ( + 'T' + | 't' + ) + ; + +TILDA + : + '~' + ; + +LPAREN + : + '(' + ; + +RPAREN + : + ')' + ; + +PLUS + : + '+' + ; + +MINUS + : + '-' + ; + +COLON + : + ':' + ; + +STAR + : + '*' + ; + +DOTDOT + : + '..' + ; + +DOT + : + '.' + ; + +AMP + : + '&' + ; + +EXCLAMATION + : + '!' + ; + +BAR + : + '|' + ; + +EQUALS + : + '=' + ; + +QUESTION_MARK + : + '?' + ; + +LCURL + : + '{' + ; + +RCURL + : + '}' + ; + +LSQUARE + : + '[' + ; + +RSQUARE + : + ']' + ; + +TO + : + ( + 'T' + | 't' + ) + ( + 'O' + | 'o' + ) + ; + +COMMA + : + ',' + ; + +CARAT + : + '^' + ; + +DOLLAR + : + '$' + ; + +GT + : + '>' + ; + +LT + : + '<' + ; + +AT + : + '@' + ; + +PERCENT + : + '%' + ; /** * ID * _x????_ encoding is supported for invalid sql characters but requires nothing here, they are handled in the code * Also supports \ style escaping for non CMIS SQL - */ -ID : ('a'..'z'|'A'..'Z'|'_')('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'$'|'#'|F_ESC)* ; - -DECIMAL_INTEGER_LITERAL - : ( PLUS | MINUS )? DECIMAL_NUMERAL + */ +ID + : + ( + 'a'..'z' + | 'A'..'Z' + | '_' + ) + ( + 'a'..'z' + | 'A'..'Z' + | '0'..'9' + | '_' + | '$' + | '#' + | F_ESC + )* ; -FTSWORD : (F_ESC | INWORD)+; +DECIMAL_INTEGER_LITERAL + : + ( + PLUS + | MINUS + )? + DECIMAL_NUMERAL + ; -FTSPRE : (F_ESC | INWORD)+ STAR; +FTSWORD + : + ( + F_ESC + | INWORD + )+ + ; -FTSWILD : (F_ESC | INWORD | STAR | QUESTION_MARK)+; - -fragment -F_ESC : '\\' - ( - // unicode - 'u' F_HEX F_HEX F_HEX F_HEX - // any single char escaped - | . - ) - ; +FTSPRE + : + ( + F_ESC + | INWORD + )+ + STAR + ; + +FTSWILD + : + ( + F_ESC + | INWORD + | STAR + | QUESTION_MARK + )+ + ; fragment -F_HEX - : '0' .. '9' - | 'a' .. 'f' - | 'A' .. 'F' - ; - -fragment -INWORD - : '\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' - ; - - +F_ESC + : + '\\' + ( + // unicode + 'u' F_HEX F_HEX F_HEX F_HEX + // any single char escaped + | . + ) + ; + +fragment +F_HEX + : + '0'..'9' + | 'a'..'f' + | 'A'..'F' + ; + +fragment +INWORD + : + '\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' + ; /* * Range and floating point have to be conbined to avoid lexer issues. * This requires multi-token emits and addition supporting java code - see above ... @@ -657,80 +1260,132 @@ INWORD * Likewise .1...2 does not require any special support * * Float and integer are based on the Java language spec. - */ -FLOATING_POINT_LITERAL - // Integer ranges - : d=START_RANGE_I r=DOTDOT - { + */ + + +FLOATING_POINT_LITERAL + // Integer ranges + : + d=START_RANGE_I r=DOTDOT { $d.setType(DECIMAL_INTEGER_LITERAL); emit($d); $r.setType(DOTDOT); emit($r); } - // Float ranges - | d=START_RANGE_F r=DOTDOT - { + // Float ranges + | d=START_RANGE_F r=DOTDOT { $d.setType(FLOATING_POINT_LITERAL); emit($d); $r.setType(DOTDOT); emit($r); } - // Normal float rules - | (PLUS | MINUS)? DIGIT+ DOT DIGIT* EXPONENT? - | (PLUS | MINUS)? DOT DIGIT+ EXPONENT? - | (PLUS | MINUS)? DIGIT+ EXPONENT - ; + // Normal float rules + | + ( + PLUS + | MINUS + )? + DIGIT+ DOT DIGIT* EXPONENT? + | + ( + PLUS + | MINUS + )? + DOT DIGIT+ EXPONENT? + | + ( + PLUS + | MINUS + )? + DIGIT+ EXPONENT + ; fragment START_RANGE_I - : (PLUS | MINUS)? DIGIT+ - ; + : + ( + PLUS + | MINUS + )? + DIGIT+ + ; fragment START_RANGE_F - : (PLUS | MINUS)? DIGIT+ DOT - ; + : + ( + PLUS + | MINUS + )? + DIGIT+ DOT + ; /** * Fragments for decimal */ - fragment DECIMAL_NUMERAL - : ZERO_DIGIT - | NON_ZERO_DIGIT DIGIT* - ; - -fragment -DIGIT - : ZERO_DIGIT - | NON_ZERO_DIGIT - ; - -fragment -ZERO_DIGIT - : '0' ; - -fragment -NON_ZERO_DIGIT - : '1'..'9' - ; + : + ZERO_DIGIT + | NON_ZERO_DIGIT DIGIT* + ; fragment -E : ('e' | 'E') ; - +DIGIT + : + ZERO_DIGIT + | NON_ZERO_DIGIT + ; + +fragment +ZERO_DIGIT + : + '0' + ; + +fragment +NON_ZERO_DIGIT + : + '1'..'9' + ; + +fragment +E + : + ( + 'e' + | 'E' + ) + ; + fragment EXPONENT - : E SIGNED_INTEGER - ; - + : + E SIGNED_INTEGER + ; + fragment SIGNED_INTEGER - : (PLUS | MINUS)? DIGIT+ - ; - + : + ( + PLUS + | MINUS + )? + DIGIT+ + ; /* * Standard white space * White space may be escaped by \ in some tokens */ -WS : ( ' ' | '\t' | '\r' | '\n' )+ { $channel = HIDDEN; } ; + + +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 633bca1f34..ac7c950024 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTS.tokens +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTS.tokens @@ -1,28 +1,28 @@ PREFIX=36 -LT=58 +LT=64 EXPONENT=89 -STAR=54 -LSQUARE=57 +STAR=61 +LSQUARE=63 FG_TERM=26 FUZZY=39 FIELD_DISJUNCTION=18 EQUALS=52 -F_URI_ALPHA=74 +F_URI_ALPHA=75 FG_EXACT_TERM=27 -NOT=69 +NOT=58 FIELD_EXCLUDE=25 NAME_SPACE=37 RPAREN=45 -FLOATING_POINT_LITERAL=70 -EXCLAMATION=72 -QUESTION_MARK=80 +FLOATING_POINT_LITERAL=60 +EXCLAMATION=73 +QUESTION_MARK=69 ZERO_DIGIT=90 FIELD_OPTIONAL=24 SYNONYM=11 E=92 CONJUNCTION=6 -FTSWORD=64 -URI=62 +FTSWORD=55 +URI=68 DISJUNCTION=5 FTS=4 WS=94 @@ -30,62 +30,62 @@ FG_SYNONYM=29 FTSPHRASE=53 FIELD_CONJUNCTION=19 INCLUSIVE=33 -OR=67 -GT=60 -F_HEX=77 +OR=70 +GT=66 +F_HEX=78 DECIMAL_INTEGER_LITERAL=49 -FTSPRE=65 +FTSPRE=56 FG_PHRASE=28 FIELD_NEGATION=20 TERM=8 DOLLAR=83 START_RANGE_I=86 -AMP=71 +AMP=72 FG_PROXIMITY=30 EXACT_TERM=9 START_RANGE_F=87 -DOTDOT=55 +DOTDOT=62 MANDATORY=15 EXCLUSIVE=34 -ID=63 -AND=68 +ID=54 +AND=71 LPAREN=44 BOOST=38 -AT=61 +AT=67 TILDA=48 DECIMAL_NUMERAL=84 COMMA=47 -F_URI_DIGIT=75 +F_URI_DIGIT=76 SIGNED_INTEGER=93 FIELD_DEFAULT=22 CARAT=50 PLUS=41 DIGIT=88 -DOT=79 -F_ESC=73 +DOT=80 +F_ESC=74 EXCLUDE=17 PERCENT=46 NON_ZERO_DIGIT=91 QUALIFIER=35 -TO=56 +TO=59 FIELD_GROUP=21 DEFAULT=14 INWORD=85 RANGE=12 MINUS=43 -RSQUARE=59 +RSQUARE=65 FIELD_REF=32 PROXIMITY=13 PHRASE=10 OPTIONAL=16 COLON=51 LCURL=81 -F_URI_OTHER=76 +F_URI_OTHER=77 NEGATION=7 -F_URI_ESC=78 +F_URI_ESC=79 TEMPLATE=40 RCURL=82 FIELD_MANDATORY=23 FG_RANGE=31 BAR=42 -FTSWILD=66 +FTSWILD=57 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 dbbfef9547..780042e3c2 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTSLexer.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTSLexer.java @@ -1,5 +1,8 @@ -// $ANTLR !Unknown version! W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g 2009-10-28 12:52:46 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g 2010-02-08 11:27:43 + package org.alfresco.repo.search.impl.parsers; +import org.alfresco.cmis.CMISQueryException; + import org.antlr.runtime.*; import java.util.Stack; @@ -10,30 +13,30 @@ import java.util.HashMap; public class FTSLexer extends Lexer { public static final int PREFIX=36; public static final int EXPONENT=89; - public static final int LT=58; - public static final int STAR=54; - public static final int LSQUARE=57; + public static final int LT=64; + public static final int STAR=61; + public static final int LSQUARE=63; public static final int FG_TERM=26; public static final int FUZZY=39; public static final int FIELD_DISJUNCTION=18; public static final int EQUALS=52; - public static final int F_URI_ALPHA=74; + public static final int F_URI_ALPHA=75; public static final int FG_EXACT_TERM=27; - public static final int NOT=69; + public static final int NOT=58; public static final int FIELD_EXCLUDE=25; public static final int EOF=-1; public static final int NAME_SPACE=37; public static final int RPAREN=45; - public static final int EXCLAMATION=72; - public static final int FLOATING_POINT_LITERAL=70; - public static final int QUESTION_MARK=80; + public static final int EXCLAMATION=73; + public static final int FLOATING_POINT_LITERAL=60; + public static final int QUESTION_MARK=69; public static final int ZERO_DIGIT=90; public static final int FIELD_OPTIONAL=24; public static final int SYNONYM=11; public static final int E=92; public static final int CONJUNCTION=6; - public static final int FTSWORD=64; - public static final int URI=62; + public static final int FTSWORD=55; + public static final int URI=68; public static final int DISJUNCTION=5; public static final int FTS=4; public static final int FG_SYNONYM=29; @@ -41,65 +44,65 @@ public class FTSLexer extends Lexer { public static final int FTSPHRASE=53; public static final int FIELD_CONJUNCTION=19; public static final int INCLUSIVE=33; - public static final int OR=67; - public static final int GT=60; - public static final int F_HEX=77; + public static final int OR=70; + public static final int GT=66; + public static final int F_HEX=78; public static final int DECIMAL_INTEGER_LITERAL=49; - public static final int FTSPRE=65; + public static final int FTSPRE=56; public static final int FG_PHRASE=28; public static final int FIELD_NEGATION=20; public static final int TERM=8; public static final int DOLLAR=83; public static final int START_RANGE_I=86; - public static final int AMP=71; + public static final int AMP=72; public static final int FG_PROXIMITY=30; public static final int EXACT_TERM=9; public static final int START_RANGE_F=87; - public static final int DOTDOT=55; + public static final int DOTDOT=62; public static final int MANDATORY=15; public static final int EXCLUSIVE=34; - public static final int ID=63; - public static final int AND=68; + public static final int ID=54; + public static final int AND=71; public static final int LPAREN=44; public static final int BOOST=38; - public static final int AT=61; + public static final int AT=67; public static final int TILDA=48; public static final int DECIMAL_NUMERAL=84; public static final int COMMA=47; - public static final int F_URI_DIGIT=75; + public static final int F_URI_DIGIT=76; public static final int SIGNED_INTEGER=93; public static final int FIELD_DEFAULT=22; public static final int CARAT=50; public static final int PLUS=41; public static final int DIGIT=88; - public static final int DOT=79; - public static final int F_ESC=73; + public static final int DOT=80; + public static final int F_ESC=74; public static final int EXCLUDE=17; public static final int PERCENT=46; public static final int NON_ZERO_DIGIT=91; public static final int QUALIFIER=35; - public static final int TO=56; + public static final int TO=59; public static final int FIELD_GROUP=21; public static final int DEFAULT=14; public static final int INWORD=85; public static final int RANGE=12; public static final int MINUS=43; - public static final int RSQUARE=59; + public static final int RSQUARE=65; public static final int FIELD_REF=32; public static final int PROXIMITY=13; public static final int PHRASE=10; public static final int OPTIONAL=16; public static final int COLON=51; public static final int LCURL=81; - public static final int F_URI_OTHER=76; + public static final int F_URI_OTHER=77; public static final int NEGATION=7; - public static final int F_URI_ESC=78; + public static final int F_URI_ESC=79; public static final int TEMPLATE=40; public static final int RCURL=82; public static final int FIELD_MANDATORY=23; public static final int FG_RANGE=31; public static final int BAR=42; - public static final int FTSWILD=66; + public static final int FTSWILD=57; List tokens = new ArrayList(); public void emit(Token token) { @@ -107,13 +110,53 @@ public class FTSLexer extends Lexer { tokens.add(token); } public Token nextToken() { - super.nextToken(); + nextTokenImpl(); if ( tokens.size()==0 ) { return Token.EOF_TOKEN; } return (Token)tokens.remove(0); } + public Token nextTokenImpl() { + while (true) + { + state.token = null; + state.channel = Token.DEFAULT_CHANNEL; + state.tokenStartCharIndex = input.index(); + state.tokenStartCharPositionInLine = input.getCharPositionInLine(); + state.tokenStartLine = input.getLine(); + state.text = null; + if ( input.LA(1)==CharStream.EOF ) + { + return Token.EOF_TOKEN; + } + try + { + mTokens(); + if ( state.token==null ) + { + emit(); + } + else if ( state.token==Token.SKIP_TOKEN ) + { + continue; + } + return state.token; + } + catch (RecognitionException re) + { + throw new CMISQueryException(getErrorString(re), re); + } + } + } + + public String getErrorString(RecognitionException e) + { + String hdr = getErrorHeader(e); + String msg = getErrorMessage(e, this.getTokenNames()); + return hdr+" "+msg; + } + // delegates // delegators @@ -126,65 +169,137 @@ public class FTSLexer extends Lexer { super(input,state); } - public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g"; } // $ANTLR start "FTSPHRASE" public final void mFTSPHRASE() throws RecognitionException { try { int _type = FTSPHRASE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:510:4: ( '\"' ( F_ESC | ~ ( '\\\\' | '\"' ) )* '\"' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:510:7: '\"' ( F_ESC | ~ ( '\\\\' | '\"' ) )* '\"' - { - match('\"'); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:510:11: ( F_ESC | ~ ( '\\\\' | '\"' ) )* - loop1: - do { - int alt1=3; - int LA1_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:819:9: ( '\"' ( F_ESC | ~ ( '\\\\' | '\"' ) )* '\"' | '\\'' ( F_ESC | ~ ( '\\\\' | '\\'' ) )* '\\'' ) + int alt3=2; + int LA3_0 = input.LA(1); - if ( (LA1_0=='\\') ) { - alt1=1; - } - else if ( ((LA1_0>='\u0000' && LA1_0<='!')||(LA1_0>='#' && LA1_0<='[')||(LA1_0>=']' && LA1_0<='\uFFFF')) ) { - alt1=2; - } + if ( (LA3_0=='\"') ) { + alt3=1; + } + else if ( (LA3_0=='\'') ) { + alt3=2; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + NoViableAltException nvae = + new NoViableAltException("", 3, 0, input); + + throw nvae; + } + switch (alt3) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:820:9: '\"' ( F_ESC | ~ ( '\\\\' | '\"' ) )* '\"' + { + match('\"'); if (state.failed) return ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:821:9: ( F_ESC | ~ ( '\\\\' | '\"' ) )* + loop1: + do { + int alt1=3; + int LA1_0 = input.LA(1); + + if ( (LA1_0=='\\') ) { + alt1=1; + } + else if ( ((LA1_0>='\u0000' && LA1_0<='!')||(LA1_0>='#' && LA1_0<='[')||(LA1_0>=']' && LA1_0<='\uFFFF')) ) { + alt1=2; + } - switch (alt1) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:510:12: F_ESC - { - mF_ESC(); if (state.failed) return ; + switch (alt1) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:822:17: F_ESC + { + mF_ESC(); if (state.failed) return ; - } - break; - case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:510:20: ~ ( '\\\\' | '\"' ) - { - if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { - input.consume(); - state.failed=false; - } - else { - if (state.backtracking>0) {state.failed=true; return ;} - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse;} + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:824:17: ~ ( '\\\\' | '\"' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} - } - break; + } + break; - default : - break loop1; - } - } while (true); + default : + break loop1; + } + } while (true); - match('\"'); if (state.failed) return ; + match('\"'); if (state.failed) return ; + + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:830:11: '\\'' ( F_ESC | ~ ( '\\\\' | '\\'' ) )* '\\'' + { + match('\''); if (state.failed) return ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:831:9: ( F_ESC | ~ ( '\\\\' | '\\'' ) )* + loop2: + do { + int alt2=3; + int LA2_0 = input.LA(1); + + if ( (LA2_0=='\\') ) { + alt2=1; + } + else if ( ((LA2_0>='\u0000' && LA2_0<='&')||(LA2_0>='(' && LA2_0<='[')||(LA2_0>=']' && LA2_0<='\uFFFF')) ) { + alt2=2; + } + + + switch (alt2) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:832:17: F_ESC + { + mF_ESC(); if (state.failed) return ; + + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:834:17: ~ ( '\\\\' | '\\'' ) + { + if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) { + input.consume(); + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop2; + } + } while (true); + + match('\''); if (state.failed) return ; + + } + break; } - state.type = _type; state.channel = _channel; } @@ -198,32 +313,32 @@ public class FTSLexer extends Lexer { try { int _type = URI; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:518:2: ( '{' ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )? ( ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* )? ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' )* ( '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* )? ( '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* )? '}' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:518:5: '{' ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )? ( ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* )? ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' )* ( '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* )? ( '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* )? '}' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:848:9: ( '{' ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )? ( ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* )? ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' )* ( '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* )? ( '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* )? '}' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:849:9: '{' ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )? ( ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* )? ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' )* ( '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* )? ( '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* )? '}' { match('{'); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:519:10: ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )? - int alt3=2; - alt3 = dfa3.predict(input); - switch (alt3) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:850:9: ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )? + int alt5=2; + alt5 = dfa5.predict(input); + switch (alt5) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:519:11: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:851:17: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:519:52: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ - int cnt2=0; - loop2: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:857:17: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ + int cnt4=0; + loop4: do { - int alt2=2; - int LA2_0 = input.LA(1); + int alt4=2; + int LA4_0 = input.LA(1); - if ( (LA2_0=='!'||LA2_0=='$'||(LA2_0>='&' && LA2_0<='.')||(LA2_0>='0' && LA2_0<='9')||LA2_0==';'||LA2_0=='='||(LA2_0>='@' && LA2_0<='[')||LA2_0==']'||LA2_0=='_'||(LA2_0>='a' && LA2_0<='z')||LA2_0=='~') ) { - alt2=1; + if ( (LA4_0=='!'||LA4_0=='$'||(LA4_0>='&' && LA4_0<='.')||(LA4_0>='0' && LA4_0<='9')||LA4_0==';'||LA4_0=='='||(LA4_0>='@' && LA4_0<='[')||LA4_0==']'||LA4_0=='_'||(LA4_0>='a' && LA4_0<='z')||LA4_0=='~') ) { + alt4=1; } - switch (alt2) { + switch (alt4) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<='.')||(input.LA(1)>='0' && input.LA(1)<='9')||input.LA(1)==';'||input.LA(1)=='='||(input.LA(1)>='@' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { input.consume(); @@ -240,13 +355,13 @@ public class FTSLexer extends Lexer { break; default : - if ( cnt2 >= 1 ) break loop2; + if ( cnt4 >= 1 ) break loop4; if (state.backtracking>0) {state.failed=true; return ;} EarlyExitException eee = - new EarlyExitException(2, input); + new EarlyExitException(4, input); throw eee; } - cnt2++; + cnt4++; } while (true); mCOLON(); if (state.failed) return ; @@ -256,53 +371,53 @@ public class FTSLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:520:10: ( ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* )? - int alt5=2; - int LA5_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:864:9: ( ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* )? + int alt7=2; + int LA7_0 = input.LA(1); - if ( (LA5_0=='/') ) { - int LA5_1 = input.LA(2); + if ( (LA7_0=='/') ) { + int LA7_1 = input.LA(2); - if ( (LA5_1=='/') ) { - int LA5_3 = input.LA(3); + if ( (LA7_1=='/') ) { + int LA7_6 = input.LA(3); if ( (synpred2_FTS()) ) { - alt5=1; + alt7=1; } } } - switch (alt5) { + switch (alt7) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:520:11: ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:865:17: ( ( '//' )=> '//' ) ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:520:11: ( ( '//' )=> '//' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:520:12: ( '//' )=> '//' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:865:17: ( ( '//' )=> '//' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:865:19: ( '//' )=> '//' { match("//"); if (state.failed) return ; } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:521:10: ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* - loop4: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:866:17: ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) )* + loop6: do { - int alt4=2; - int LA4_0 = input.LA(1); + int alt6=2; + int LA6_0 = input.LA(1); - if ( (LA4_0=='!'||LA4_0=='$'||(LA4_0>='&' && LA4_0<='.')||(LA4_0>='0' && LA4_0<=';')||LA4_0=='='||(LA4_0>='@' && LA4_0<='[')||LA4_0==']'||LA4_0=='_'||(LA4_0>='a' && LA4_0<='z')||LA4_0=='~') ) { - int LA4_1 = input.LA(2); + if ( (LA6_0=='!'||LA6_0=='$'||(LA6_0>='&' && LA6_0<='.')||(LA6_0>='0' && LA6_0<=';')||LA6_0=='='||(LA6_0>='@' && LA6_0<='[')||LA6_0==']'||LA6_0=='_'||(LA6_0>='a' && LA6_0<='z')||LA6_0=='~') ) { + int LA6_1 = input.LA(2); if ( (synpred3_FTS()) ) { - alt4=1; + alt6=1; } } - switch (alt4) { + switch (alt6) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:521:12: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:867:25: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) { if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<='.')||(input.LA(1)>='0' && input.LA(1)<=';')||input.LA(1)=='='||(input.LA(1)>='@' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { input.consume(); @@ -319,7 +434,7 @@ public class FTSLexer extends Lexer { break; default : - break loop4; + break loop6; } } while (true); @@ -329,20 +444,20 @@ public class FTSLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:522:10: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' )* - loop6: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:882:9: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' )* + loop8: do { - int alt6=2; - int LA6_0 = input.LA(1); + int alt8=2; + int LA8_0 = input.LA(1); - if ( (LA6_0=='!'||LA6_0=='$'||(LA6_0>='&' && LA6_0<=';')||LA6_0=='='||(LA6_0>='@' && LA6_0<='[')||LA6_0==']'||LA6_0=='_'||(LA6_0>='a' && LA6_0<='z')||LA6_0=='~') ) { - alt6=1; + if ( (LA8_0=='!'||LA8_0=='$'||(LA8_0>='&' && LA8_0<=';')||LA8_0=='='||(LA8_0>='@' && LA8_0<='[')||LA8_0==']'||LA8_0=='_'||(LA8_0>='a' && LA8_0<='z')||LA8_0=='~') ) { + alt8=1; } - switch (alt6) { + switch (alt8) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<=';')||input.LA(1)=='='||(input.LA(1)>='@' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { input.consume(); @@ -359,90 +474,38 @@ public class FTSLexer extends Lexer { break; default : - break loop6; + break loop8; } } while (true); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:523:10: ( '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* )? - int alt8=2; - int LA8_0 = input.LA(1); - - if ( (LA8_0=='?') ) { - alt8=1; - } - switch (alt8) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:523:11: '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* - { - match('?'); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:523:15: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* - loop7: - do { - int alt7=2; - int LA7_0 = input.LA(1); - - if ( (LA7_0=='!'||LA7_0=='$'||(LA7_0>='&' && LA7_0<=';')||LA7_0=='='||(LA7_0>='?' && LA7_0<='[')||LA7_0==']'||LA7_0=='_'||(LA7_0>='a' && LA7_0<='z')||LA7_0=='~') ) { - alt7=1; - } - - - switch (alt7) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: - { - if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<=';')||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { - input.consume(); - state.failed=false; - } - else { - if (state.backtracking>0) {state.failed=true; return ;} - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse;} - - - } - break; - - default : - break loop7; - } - } while (true); - - - } - break; - - } - - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:524:10: ( '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:889:9: ( '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* )? int alt10=2; int LA10_0 = input.LA(1); - if ( (LA10_0=='#') ) { + if ( (LA10_0=='?') ) { alt10=1; } switch (alt10) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:524:11: '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:890:17: '?' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* { - match('#'); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:524:15: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* + match('?'); if (state.failed) return ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:891:17: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' )* loop9: do { int alt9=2; int LA9_0 = input.LA(1); - if ( (LA9_0=='!'||(LA9_0>='#' && LA9_0<='$')||(LA9_0>='&' && LA9_0<=';')||LA9_0=='='||(LA9_0>='?' && LA9_0<='[')||LA9_0==']'||LA9_0=='_'||(LA9_0>='a' && LA9_0<='z')||LA9_0=='~') ) { + if ( (LA9_0=='!'||LA9_0=='$'||(LA9_0>='&' && LA9_0<=';')||LA9_0=='='||(LA9_0>='?' && LA9_0<='[')||LA9_0==']'||LA9_0=='_'||(LA9_0>='a' && LA9_0<='z')||LA9_0=='~') ) { alt9=1; } switch (alt9) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { - if ( input.LA(1)=='!'||(input.LA(1)>='#' && input.LA(1)<='$')||(input.LA(1)>='&' && input.LA(1)<=';')||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { + if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<=';')||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { input.consume(); state.failed=false; } @@ -467,6 +530,58 @@ public class FTSLexer extends Lexer { } + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:900:9: ( '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* )? + int alt12=2; + int LA12_0 = input.LA(1); + + if ( (LA12_0=='#') ) { + alt12=1; + } + switch (alt12) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:901:17: '#' ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* + { + match('#'); if (state.failed) return ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:902:17: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON | '/' | '?' | '#' )* + loop11: + do { + int alt11=2; + int LA11_0 = input.LA(1); + + if ( (LA11_0=='!'||(LA11_0>='#' && LA11_0<='$')||(LA11_0>='&' && LA11_0<=';')||LA11_0=='='||(LA11_0>='?' && LA11_0<='[')||LA11_0==']'||LA11_0=='_'||(LA11_0>='a' && LA11_0<='z')||LA11_0=='~') ) { + alt11=1; + } + + + switch (alt11) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + { + if ( input.LA(1)=='!'||(input.LA(1)>='#' && input.LA(1)<='$')||(input.LA(1)>='&' && input.LA(1)<=';')||input.LA(1)=='='||(input.LA(1)>='?' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { + input.consume(); + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + default : + break loop11; + } + } while (true); + + + } + break; + + } + match('}'); if (state.failed) return ; } @@ -482,8 +597,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "F_URI_ALPHA" public final void mF_URI_ALPHA() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:531:2: ( 'A' .. 'Z' | 'a' .. 'z' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:917:9: ( 'A' .. 'Z' | 'a' .. 'z' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( (input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -507,8 +622,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "F_URI_DIGIT" public final void mF_URI_DIGIT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:536:2: ( '0' .. '9' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:536:4: '0' .. '9' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:924:9: ( '0' .. '9' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:925:9: '0' .. '9' { matchRange('0','9'); if (state.failed) return ; @@ -523,8 +638,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "F_URI_ESC" public final void mF_URI_ESC() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:541:2: ( '%' F_HEX F_HEX ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:541:10: '%' F_HEX F_HEX + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:930:9: ( '%' F_HEX F_HEX ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:931:9: '%' F_HEX F_HEX { match('%'); if (state.failed) return ; mF_HEX(); if (state.failed) return ; @@ -541,8 +656,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "F_URI_OTHER" public final void mF_URI_OTHER() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:546:2: ( '-' | '.' | '_' | '~' | '[' | ']' | '@' | '!' | '$' | '&' | '\\'' | '(' | ')' | '*' | '+' | ',' | ';' | '=' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:936:9: ( '-' | '.' | '_' | '~' | '[' | ']' | '@' | '!' | '$' | '&' | '\\'' | '(' | ')' | '*' | '+' | ',' | ';' | '=' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<='.')||input.LA(1)==';'||input.LA(1)=='='||input.LA(1)=='@'||input.LA(1)=='['||input.LA(1)==']'||input.LA(1)=='_'||input.LA(1)=='~' ) { input.consume(); @@ -568,8 +683,8 @@ public class FTSLexer extends Lexer { try { int _type = OR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:553:4: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:553:6: ( 'O' | 'o' ) ( 'R' | 'r' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:962:9: ( ( 'O' | 'o' ) ( 'R' | 'r' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:963:9: ( 'O' | 'o' ) ( 'R' | 'r' ) { if ( input.LA(1)=='O'||input.LA(1)=='o' ) { input.consume(); @@ -607,8 +722,8 @@ public class FTSLexer extends Lexer { try { int _type = AND; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:554:5: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:554:7: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:974:9: ( ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:975:9: ( 'A' | 'a' ) ( 'N' | 'n' ) ( 'D' | 'd' ) { if ( input.LA(1)=='A'||input.LA(1)=='a' ) { input.consume(); @@ -656,8 +771,8 @@ public class FTSLexer extends Lexer { try { int _type = NOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:555:5: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:555:7: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:990:9: ( ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:991:9: ( 'N' | 'n' ) ( 'O' | 'o' ) ( 'T' | 't' ) { if ( input.LA(1)=='N'||input.LA(1)=='n' ) { input.consume(); @@ -705,8 +820,8 @@ public class FTSLexer extends Lexer { try { int _type = TILDA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:556:7: ( '~' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:556:9: '~' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1006:9: ( '~' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1007:9: '~' { match('~'); if (state.failed) return ; @@ -725,8 +840,8 @@ public class FTSLexer extends Lexer { try { int _type = LPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:557:8: ( '(' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:557:10: '(' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1011:9: ( '(' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1012:9: '(' { match('('); if (state.failed) return ; @@ -745,8 +860,8 @@ public class FTSLexer extends Lexer { try { int _type = RPAREN; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:558:8: ( ')' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:558:10: ')' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1016:9: ( ')' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1017:9: ')' { match(')'); if (state.failed) return ; @@ -765,8 +880,8 @@ public class FTSLexer extends Lexer { try { int _type = PLUS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:559:6: ( '+' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:559:8: '+' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1021:9: ( '+' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1022:9: '+' { match('+'); if (state.failed) return ; @@ -785,8 +900,8 @@ public class FTSLexer extends Lexer { try { int _type = MINUS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:560:7: ( '-' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:560:9: '-' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1026:9: ( '-' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1027:9: '-' { match('-'); if (state.failed) return ; @@ -805,8 +920,8 @@ public class FTSLexer extends Lexer { try { int _type = COLON; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:561:7: ( ':' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:561:9: ':' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1031:9: ( ':' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1032:9: ':' { match(':'); if (state.failed) return ; @@ -825,8 +940,8 @@ public class FTSLexer extends Lexer { try { int _type = STAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:562:6: ( '*' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:562:8: '*' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1036:9: ( '*' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1037:9: '*' { match('*'); if (state.failed) return ; @@ -845,8 +960,8 @@ public class FTSLexer extends Lexer { try { int _type = DOTDOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:563:9: ( '..' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:563:12: '..' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1041:9: ( '..' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1042:9: '..' { match(".."); if (state.failed) return ; @@ -866,8 +981,8 @@ public class FTSLexer extends Lexer { try { int _type = DOT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:564:5: ( '.' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:564:7: '.' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1046:9: ( '.' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1047:9: '.' { match('.'); if (state.failed) return ; @@ -886,8 +1001,8 @@ public class FTSLexer extends Lexer { try { int _type = AMP; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:565:5: ( '&' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:565:7: '&' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1051:9: ( '&' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1052:9: '&' { match('&'); if (state.failed) return ; @@ -906,8 +1021,8 @@ public class FTSLexer extends Lexer { try { int _type = EXCLAMATION; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:566:13: ( '!' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:566:16: '!' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1056:9: ( '!' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1057:9: '!' { match('!'); if (state.failed) return ; @@ -926,8 +1041,8 @@ public class FTSLexer extends Lexer { try { int _type = BAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:567:6: ( '|' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:567:9: '|' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1061:9: ( '|' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1062:9: '|' { match('|'); if (state.failed) return ; @@ -946,8 +1061,8 @@ public class FTSLexer extends Lexer { try { int _type = EQUALS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:568:9: ( '=' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:568:12: '=' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1066:9: ( '=' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1067:9: '=' { match('='); if (state.failed) return ; @@ -966,8 +1081,8 @@ public class FTSLexer extends Lexer { try { int _type = QUESTION_MARK; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:569:15: ( '?' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:569:17: '?' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1071:9: ( '?' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1072:9: '?' { match('?'); if (state.failed) return ; @@ -986,8 +1101,8 @@ public class FTSLexer extends Lexer { try { int _type = LCURL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:570:8: ( '{' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:570:11: '{' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1076:9: ( '{' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1077:9: '{' { match('{'); if (state.failed) return ; @@ -1006,8 +1121,8 @@ public class FTSLexer extends Lexer { try { int _type = RCURL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:571:8: ( '}' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:571:11: '}' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1081:9: ( '}' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1082:9: '}' { match('}'); if (state.failed) return ; @@ -1026,8 +1141,8 @@ public class FTSLexer extends Lexer { try { int _type = LSQUARE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:572:9: ( '[' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:572:12: '[' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1086:9: ( '[' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1087:9: '[' { match('['); if (state.failed) return ; @@ -1046,8 +1161,8 @@ public class FTSLexer extends Lexer { try { int _type = RSQUARE; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:573:9: ( ']' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:573:12: ']' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1091:9: ( ']' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1092:9: ']' { match(']'); if (state.failed) return ; @@ -1066,8 +1181,8 @@ public class FTSLexer extends Lexer { try { int _type = TO; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:574:5: ( ( 'T' | 't' ) ( 'O' | 'o' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:574:8: ( 'T' | 't' ) ( 'O' | 'o' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1096:9: ( ( 'T' | 't' ) ( 'O' | 'o' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1097:9: ( 'T' | 't' ) ( 'O' | 'o' ) { if ( input.LA(1)=='T'||input.LA(1)=='t' ) { input.consume(); @@ -1105,8 +1220,8 @@ public class FTSLexer extends Lexer { try { int _type = COMMA; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:575:8: ( ',' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:575:11: ',' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1108:9: ( ',' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1109:9: ',' { match(','); if (state.failed) return ; @@ -1125,8 +1240,8 @@ public class FTSLexer extends Lexer { try { int _type = CARAT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:576:8: ( '^' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:576:11: '^' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1113:9: ( '^' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1114:9: '^' { match('^'); if (state.failed) return ; @@ -1145,8 +1260,8 @@ public class FTSLexer extends Lexer { try { int _type = DOLLAR; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:577:9: ( '$' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:577:13: '$' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1118:9: ( '$' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1119:9: '$' { match('$'); if (state.failed) return ; @@ -1165,8 +1280,8 @@ public class FTSLexer extends Lexer { try { int _type = GT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:578:5: ( '>' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:578:8: '>' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1123:9: ( '>' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1124:9: '>' { match('>'); if (state.failed) return ; @@ -1185,8 +1300,8 @@ public class FTSLexer extends Lexer { try { int _type = LT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:579:5: ( '<' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:579:8: '<' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1128:9: ( '<' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1129:9: '<' { match('<'); if (state.failed) return ; @@ -1205,8 +1320,8 @@ public class FTSLexer extends Lexer { try { int _type = AT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:580:4: ( '@' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:580:7: '@' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1133:9: ( '@' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1134:9: '@' { match('@'); if (state.failed) return ; @@ -1225,8 +1340,8 @@ public class FTSLexer extends Lexer { try { int _type = PERCENT; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:581:9: ( '%' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:581:17: '%' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1138:9: ( '%' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1139:9: '%' { match('%'); if (state.failed) return ; @@ -1245,8 +1360,8 @@ public class FTSLexer extends Lexer { try { int _type = ID; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:6: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' | F_ESC )* ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:11: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' | F_ESC )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1148:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' | F_ESC )* ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1149:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' | F_ESC )* { if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) { input.consume(); @@ -1258,10 +1373,10 @@ public class FTSLexer extends Lexer { recover(mse); throw mse;} - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:34: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' | F_ESC )* - loop11: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1154:9: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '$' | '#' | F_ESC )* + loop13: do { - int alt11=8; + int alt13=8; switch ( input.LA(1) ) { case 'a': case 'b': @@ -1290,7 +1405,7 @@ public class FTSLexer extends Lexer { case 'y': case 'z': { - alt11=1; + alt13=1; } break; case 'A': @@ -1320,7 +1435,7 @@ public class FTSLexer extends Lexer { case 'Y': case 'Z': { - alt11=2; + alt13=2; } break; case '0': @@ -1334,77 +1449,77 @@ public class FTSLexer extends Lexer { case '8': case '9': { - alt11=3; + alt13=3; } break; case '_': { - alt11=4; + alt13=4; } break; case '$': { - alt11=5; + alt13=5; } break; case '#': { - alt11=6; + alt13=6; } break; case '\\': { - alt11=7; + alt13=7; } break; } - switch (alt11) { + switch (alt13) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:35: 'a' .. 'z' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1155:17: 'a' .. 'z' { matchRange('a','z'); if (state.failed) return ; } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:44: 'A' .. 'Z' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1156:19: 'A' .. 'Z' { matchRange('A','Z'); if (state.failed) return ; } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:53: '0' .. '9' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1157:19: '0' .. '9' { matchRange('0','9'); if (state.failed) return ; } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:62: '_' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1158:19: '_' { match('_'); if (state.failed) return ; } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:66: '$' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1159:19: '$' { match('$'); if (state.failed) return ; } break; case 6 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:70: '#' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1160:19: '#' { match('#'); if (state.failed) return ; } break; case 7 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:588:74: F_ESC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1161:19: F_ESC { mF_ESC(); if (state.failed) return ; @@ -1412,7 +1527,7 @@ public class FTSLexer extends Lexer { break; default : - break loop11; + break loop13; } } while (true); @@ -1432,19 +1547,19 @@ public class FTSLexer extends Lexer { try { int _type = DECIMAL_INTEGER_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:591:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:591:12: ( PLUS | MINUS )? DECIMAL_NUMERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1166:9: ( ( PLUS | MINUS )? DECIMAL_NUMERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1167:9: ( PLUS | MINUS )? DECIMAL_NUMERAL { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:591:12: ( PLUS | MINUS )? - int alt12=2; - int LA12_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1167:9: ( PLUS | MINUS )? + int alt14=2; + int LA14_0 = input.LA(1); - if ( (LA12_0=='+'||LA12_0=='-') ) { - alt12=1; + if ( (LA14_0=='+'||LA14_0=='-') ) { + alt14=1; } - switch (alt12) { + switch (alt14) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -1479,135 +1594,14 @@ public class FTSLexer extends Lexer { try { int _type = FTSWORD; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:594:9: ( ( F_ESC | INWORD )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:594:13: ( F_ESC | INWORD )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1175:9: ( ( F_ESC | INWORD )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1176:9: ( F_ESC | INWORD )+ { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:594:13: ( F_ESC | INWORD )+ - int cnt13=0; - loop13: - do { - int alt13=3; - int LA13_0 = input.LA(1); - - if ( (LA13_0=='\\') ) { - alt13=1; - } - else if ( ((LA13_0>='0' && LA13_0<='9')||(LA13_0>='A' && LA13_0<='Z')||(LA13_0>='a' && LA13_0<='z')||(LA13_0>='\u00C0' && LA13_0<='\u00D6')||(LA13_0>='\u00D8' && LA13_0<='\u00F6')||(LA13_0>='\u00F8' && LA13_0<='\u1FFF')||(LA13_0>='\u3040' && LA13_0<='\u318F')||(LA13_0>='\u3300' && LA13_0<='\u337F')||(LA13_0>='\u3400' && LA13_0<='\u3D2D')||(LA13_0>='\u4E00' && LA13_0<='\u9FFF')||(LA13_0>='\uAC00' && LA13_0<='\uD7AF')||(LA13_0>='\uF900' && LA13_0<='\uFAFF')) ) { - alt13=2; - } - - - switch (alt13) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:594:14: F_ESC - { - mF_ESC(); if (state.failed) return ; - - } - break; - case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:594:22: INWORD - { - mINWORD(); if (state.failed) return ; - - } - break; - - default : - if ( cnt13 >= 1 ) break loop13; - if (state.backtracking>0) {state.failed=true; return ;} - EarlyExitException eee = - new EarlyExitException(13, input); - throw eee; - } - cnt13++; - } while (true); - - - } - - state.type = _type; - state.channel = _channel; - } - finally { - } - } - // $ANTLR end "FTSWORD" - - // $ANTLR start "FTSPRE" - public final void mFTSPRE() throws RecognitionException { - try { - int _type = FTSPRE; - int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:596:9: ( ( F_ESC | INWORD )+ STAR ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:596:13: ( F_ESC | INWORD )+ STAR - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:596:13: ( F_ESC | INWORD )+ - int cnt14=0; - loop14: - do { - int alt14=3; - int LA14_0 = input.LA(1); - - if ( (LA14_0=='\\') ) { - alt14=1; - } - else if ( ((LA14_0>='0' && LA14_0<='9')||(LA14_0>='A' && LA14_0<='Z')||(LA14_0>='a' && LA14_0<='z')||(LA14_0>='\u00C0' && LA14_0<='\u00D6')||(LA14_0>='\u00D8' && LA14_0<='\u00F6')||(LA14_0>='\u00F8' && LA14_0<='\u1FFF')||(LA14_0>='\u3040' && LA14_0<='\u318F')||(LA14_0>='\u3300' && LA14_0<='\u337F')||(LA14_0>='\u3400' && LA14_0<='\u3D2D')||(LA14_0>='\u4E00' && LA14_0<='\u9FFF')||(LA14_0>='\uAC00' && LA14_0<='\uD7AF')||(LA14_0>='\uF900' && LA14_0<='\uFAFF')) ) { - alt14=2; - } - - - switch (alt14) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:596:14: F_ESC - { - mF_ESC(); if (state.failed) return ; - - } - break; - case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:596:22: INWORD - { - mINWORD(); if (state.failed) return ; - - } - break; - - default : - if ( cnt14 >= 1 ) break loop14; - if (state.backtracking>0) {state.failed=true; return ;} - EarlyExitException eee = - new EarlyExitException(14, input); - throw eee; - } - cnt14++; - } while (true); - - mSTAR(); if (state.failed) return ; - - } - - state.type = _type; - state.channel = _channel; - } - finally { - } - } - // $ANTLR end "FTSPRE" - - // $ANTLR start "FTSWILD" - public final void mFTSWILD() throws RecognitionException { - try { - int _type = FTSWILD; - int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:9: ( ( F_ESC | INWORD | STAR | QUESTION_MARK )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:12: ( F_ESC | INWORD | STAR | QUESTION_MARK )+ - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:12: ( F_ESC | INWORD | STAR | QUESTION_MARK )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1176:9: ( F_ESC | INWORD )+ int cnt15=0; loop15: do { - int alt15=5; + int alt15=3; int LA15_0 = input.LA(1); if ( (LA15_0=='\\') ) { @@ -1616,41 +1610,21 @@ public class FTSLexer extends Lexer { else if ( ((LA15_0>='0' && LA15_0<='9')||(LA15_0>='A' && LA15_0<='Z')||(LA15_0>='a' && LA15_0<='z')||(LA15_0>='\u00C0' && LA15_0<='\u00D6')||(LA15_0>='\u00D8' && LA15_0<='\u00F6')||(LA15_0>='\u00F8' && LA15_0<='\u1FFF')||(LA15_0>='\u3040' && LA15_0<='\u318F')||(LA15_0>='\u3300' && LA15_0<='\u337F')||(LA15_0>='\u3400' && LA15_0<='\u3D2D')||(LA15_0>='\u4E00' && LA15_0<='\u9FFF')||(LA15_0>='\uAC00' && LA15_0<='\uD7AF')||(LA15_0>='\uF900' && LA15_0<='\uFAFF')) ) { alt15=2; } - else if ( (LA15_0=='*') ) { - alt15=3; - } - else if ( (LA15_0=='?') ) { - alt15=4; - } switch (alt15) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:13: F_ESC + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1177:17: F_ESC { mF_ESC(); if (state.failed) return ; } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:21: INWORD + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1178:19: INWORD { mINWORD(); if (state.failed) return ; - } - break; - case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:30: STAR - { - mSTAR(); if (state.failed) return ; - - } - break; - case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:37: QUESTION_MARK - { - mQUESTION_MARK(); if (state.failed) return ; - } break; @@ -1665,6 +1639,147 @@ public class FTSLexer extends Lexer { } while (true); + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "FTSWORD" + + // $ANTLR start "FTSPRE" + public final void mFTSPRE() throws RecognitionException { + try { + int _type = FTSPRE; + int _channel = DEFAULT_TOKEN_CHANNEL; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1183:9: ( ( F_ESC | INWORD )+ STAR ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1184:9: ( F_ESC | INWORD )+ STAR + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1184:9: ( F_ESC | INWORD )+ + int cnt16=0; + loop16: + do { + int alt16=3; + int LA16_0 = input.LA(1); + + if ( (LA16_0=='\\') ) { + alt16=1; + } + else if ( ((LA16_0>='0' && LA16_0<='9')||(LA16_0>='A' && LA16_0<='Z')||(LA16_0>='a' && LA16_0<='z')||(LA16_0>='\u00C0' && LA16_0<='\u00D6')||(LA16_0>='\u00D8' && LA16_0<='\u00F6')||(LA16_0>='\u00F8' && LA16_0<='\u1FFF')||(LA16_0>='\u3040' && LA16_0<='\u318F')||(LA16_0>='\u3300' && LA16_0<='\u337F')||(LA16_0>='\u3400' && LA16_0<='\u3D2D')||(LA16_0>='\u4E00' && LA16_0<='\u9FFF')||(LA16_0>='\uAC00' && LA16_0<='\uD7AF')||(LA16_0>='\uF900' && LA16_0<='\uFAFF')) ) { + alt16=2; + } + + + switch (alt16) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1185:17: F_ESC + { + mF_ESC(); if (state.failed) return ; + + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1186:19: INWORD + { + mINWORD(); if (state.failed) return ; + + } + break; + + default : + if ( cnt16 >= 1 ) break loop16; + if (state.backtracking>0) {state.failed=true; return ;} + EarlyExitException eee = + new EarlyExitException(16, input); + throw eee; + } + cnt16++; + } while (true); + + mSTAR(); if (state.failed) return ; + + } + + state.type = _type; + state.channel = _channel; + } + finally { + } + } + // $ANTLR end "FTSPRE" + + // $ANTLR start "FTSWILD" + public final void mFTSWILD() throws RecognitionException { + try { + int _type = FTSWILD; + int _channel = DEFAULT_TOKEN_CHANNEL; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1192:9: ( ( F_ESC | INWORD | STAR | QUESTION_MARK )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1193:9: ( F_ESC | INWORD | STAR | QUESTION_MARK )+ + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1193:9: ( F_ESC | INWORD | STAR | QUESTION_MARK )+ + int cnt17=0; + loop17: + do { + int alt17=5; + int LA17_0 = input.LA(1); + + if ( (LA17_0=='\\') ) { + alt17=1; + } + else if ( ((LA17_0>='0' && LA17_0<='9')||(LA17_0>='A' && LA17_0<='Z')||(LA17_0>='a' && LA17_0<='z')||(LA17_0>='\u00C0' && LA17_0<='\u00D6')||(LA17_0>='\u00D8' && LA17_0<='\u00F6')||(LA17_0>='\u00F8' && LA17_0<='\u1FFF')||(LA17_0>='\u3040' && LA17_0<='\u318F')||(LA17_0>='\u3300' && LA17_0<='\u337F')||(LA17_0>='\u3400' && LA17_0<='\u3D2D')||(LA17_0>='\u4E00' && LA17_0<='\u9FFF')||(LA17_0>='\uAC00' && LA17_0<='\uD7AF')||(LA17_0>='\uF900' && LA17_0<='\uFAFF')) ) { + alt17=2; + } + else if ( (LA17_0=='*') ) { + alt17=3; + } + else if ( (LA17_0=='?') ) { + alt17=4; + } + + + switch (alt17) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1194:17: F_ESC + { + mF_ESC(); if (state.failed) return ; + + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1195:19: INWORD + { + mINWORD(); if (state.failed) return ; + + } + break; + case 3 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1196:19: STAR + { + mSTAR(); if (state.failed) return ; + + } + break; + case 4 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1197:19: QUESTION_MARK + { + mQUESTION_MARK(); if (state.failed) return ; + + } + break; + + default : + if ( cnt17 >= 1 ) break loop17; + if (state.backtracking>0) {state.failed=true; return ;} + EarlyExitException eee = + new EarlyExitException(17, input); + throw eee; + } + cnt17++; + } while (true); + + } state.type = _type; @@ -1678,36 +1793,36 @@ public class FTSLexer extends Lexer { // $ANTLR start "F_ESC" public final void mF_ESC() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:601:9: ( '\\\\' ( 'u' F_HEX F_HEX F_HEX F_HEX | . ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:601:12: '\\\\' ( 'u' F_HEX F_HEX F_HEX F_HEX | . ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1203:9: ( '\\\\' ( 'u' F_HEX F_HEX F_HEX F_HEX | . ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1204:9: '\\\\' ( 'u' F_HEX F_HEX F_HEX F_HEX | . ) { match('\\'); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:602:7: ( 'u' F_HEX F_HEX F_HEX F_HEX | . ) - int alt16=2; - int LA16_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1205:9: ( 'u' F_HEX F_HEX F_HEX F_HEX | . ) + int alt18=2; + int LA18_0 = input.LA(1); - if ( (LA16_0=='u') ) { - int LA16_1 = input.LA(2); + if ( (LA18_0=='u') ) { + int LA18_1 = input.LA(2); - if ( ((LA16_1>='0' && LA16_1<='9')||(LA16_1>='A' && LA16_1<='F')||(LA16_1>='a' && LA16_1<='f')) ) { - alt16=1; + if ( ((LA18_1>='0' && LA18_1<='9')||(LA18_1>='A' && LA18_1<='F')||(LA18_1>='a' && LA18_1<='f')) ) { + alt18=1; } else { - alt16=2;} + alt18=2;} } - else if ( ((LA16_0>='\u0000' && LA16_0<='t')||(LA16_0>='v' && LA16_0<='\uFFFF')) ) { - alt16=2; + else if ( ((LA18_0>='\u0000' && LA18_0<='t')||(LA18_0>='v' && LA18_0<='\uFFFF')) ) { + alt18=2; } else { if (state.backtracking>0) {state.failed=true; return ;} NoViableAltException nvae = - new NoViableAltException("", 16, 0, input); + new NoViableAltException("", 18, 0, input); throw nvae; } - switch (alt16) { + switch (alt18) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:604:7: 'u' F_HEX F_HEX F_HEX F_HEX + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1207:17: 'u' F_HEX F_HEX F_HEX F_HEX { match('u'); if (state.failed) return ; mF_HEX(); if (state.failed) return ; @@ -1718,7 +1833,7 @@ public class FTSLexer extends Lexer { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:606:8: . + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1209:19: . { matchAny(); if (state.failed) return ; @@ -1739,8 +1854,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "F_HEX" public final void mF_HEX() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:612:2: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1215:9: ( '0' .. '9' | 'a' .. 'f' | 'A' .. 'F' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='F')||(input.LA(1)>='a' && input.LA(1)<='f') ) { input.consume(); @@ -1764,8 +1879,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "INWORD" public final void mINWORD() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:619:2: ( '\\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:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1223:9: ( '\\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:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\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') ) { input.consume(); @@ -1791,22 +1906,22 @@ public class FTSLexer extends Lexer { try { int _type = FLOATING_POINT_LITERAL; int _channel = DEFAULT_TOKEN_CHANNEL; - Token d=null; - Token r=null; + CommonToken d=null; + CommonToken r=null; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:663:4: (d= START_RANGE_I r= DOTDOT | d= START_RANGE_F r= DOTDOT | ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT ) - int alt26=5; - alt26 = dfa26.predict(input); - switch (alt26) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1268:9: (d= START_RANGE_I r= DOTDOT | d= START_RANGE_F r= DOTDOT | ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? | ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? | ( PLUS | MINUS )? ( DIGIT )+ EXPONENT ) + int alt28=5; + alt28 = dfa28.predict(input); + switch (alt28) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:663:7: d= START_RANGE_I r= DOTDOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1269:9: d= START_RANGE_I r= DOTDOT { - int dStart1326 = getCharIndex(); + int dStart5073 = getCharIndex(); mSTART_RANGE_I(); if (state.failed) return ; - d = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, dStart1326, getCharIndex()-1); - int rStart1330 = getCharIndex(); + d = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, dStart5073, getCharIndex()-1); + int rStart5077 = getCharIndex(); mDOTDOT(); if (state.failed) return ; - r = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, rStart1330, getCharIndex()-1); + r = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, rStart5077, getCharIndex()-1); if ( state.backtracking==0 ) { d.setType(DECIMAL_INTEGER_LITERAL); @@ -1819,14 +1934,14 @@ public class FTSLexer extends Lexer { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:671:7: d= START_RANGE_F r= DOTDOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1276:11: d= START_RANGE_F r= DOTDOT { - int dStart1355 = getCharIndex(); + int dStart5102 = getCharIndex(); mSTART_RANGE_F(); if (state.failed) return ; - d = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, dStart1355, getCharIndex()-1); - int rStart1359 = getCharIndex(); + d = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, dStart5102, getCharIndex()-1); + int rStart5106 = getCharIndex(); mDOTDOT(); if (state.failed) return ; - r = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, rStart1359, getCharIndex()-1); + r = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, rStart5106, getCharIndex()-1); if ( state.backtracking==0 ) { d.setType(FLOATING_POINT_LITERAL); @@ -1839,18 +1954,18 @@ public class FTSLexer extends Lexer { } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:7: ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1284:9: ( PLUS | MINUS )? ( DIGIT )+ DOT ( DIGIT )* ( EXPONENT )? { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:7: ( PLUS | MINUS )? - int alt17=2; - int LA17_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1284:9: ( PLUS | MINUS )? + int alt19=2; + int LA19_0 = input.LA(1); - if ( (LA17_0=='+'||LA17_0=='-') ) { - alt17=1; + if ( (LA19_0=='+'||LA19_0=='-') ) { + alt19=1; } - switch (alt17) { + switch (alt19) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -1868,21 +1983,21 @@ public class FTSLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:23: ( DIGIT )+ - int cnt18=0; - loop18: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1288:9: ( DIGIT )+ + int cnt20=0; + loop20: do { - int alt18=2; - int LA18_0 = input.LA(1); + int alt20=2; + int LA20_0 = input.LA(1); - if ( ((LA18_0>='0' && LA18_0<='9')) ) { - alt18=1; + if ( ((LA20_0>='0' && LA20_0<='9')) ) { + alt20=1; } - switch (alt18) { + switch (alt20) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:23: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1288:9: DIGIT { mDIGIT(); if (state.failed) return ; @@ -1890,30 +2005,30 @@ public class FTSLexer extends Lexer { break; default : - if ( cnt18 >= 1 ) break loop18; + if ( cnt20 >= 1 ) break loop20; if (state.backtracking>0) {state.failed=true; return ;} EarlyExitException eee = - new EarlyExitException(18, input); + new EarlyExitException(20, input); throw eee; } - cnt18++; + cnt20++; } while (true); mDOT(); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:34: ( DIGIT )* - loop19: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1288:20: ( DIGIT )* + loop21: do { - int alt19=2; - int LA19_0 = input.LA(1); + int alt21=2; + int LA21_0 = input.LA(1); - if ( ((LA19_0>='0' && LA19_0<='9')) ) { - alt19=1; + if ( ((LA21_0>='0' && LA21_0<='9')) ) { + alt21=1; } - switch (alt19) { + switch (alt21) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:34: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1288:20: DIGIT { mDIGIT(); if (state.failed) return ; @@ -1921,20 +2036,20 @@ public class FTSLexer extends Lexer { break; default : - break loop19; + break loop21; } } while (true); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:41: ( EXPONENT )? - int alt20=2; - int LA20_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1288:27: ( EXPONENT )? + int alt22=2; + int LA22_0 = input.LA(1); - if ( (LA20_0=='E'||LA20_0=='e') ) { - alt20=1; + if ( (LA22_0=='E'||LA22_0=='e') ) { + alt22=1; } - switch (alt20) { + switch (alt22) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:679:41: EXPONENT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1288:27: EXPONENT { mEXPONENT(); if (state.failed) return ; @@ -1947,18 +2062,18 @@ public class FTSLexer extends Lexer { } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:680:7: ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1290:9: ( PLUS | MINUS )? DOT ( DIGIT )+ ( EXPONENT )? { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:680:7: ( PLUS | MINUS )? - int alt21=2; - int LA21_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1290:9: ( PLUS | MINUS )? + int alt23=2; + int LA23_0 = input.LA(1); - if ( (LA21_0=='+'||LA21_0=='-') ) { - alt21=1; + if ( (LA23_0=='+'||LA23_0=='-') ) { + alt23=1; } - switch (alt21) { + switch (alt23) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -1977,21 +2092,21 @@ public class FTSLexer extends Lexer { } mDOT(); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:680:27: ( DIGIT )+ - int cnt22=0; - loop22: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1294:13: ( DIGIT )+ + int cnt24=0; + loop24: do { - int alt22=2; - int LA22_0 = input.LA(1); + int alt24=2; + int LA24_0 = input.LA(1); - if ( ((LA22_0>='0' && LA22_0<='9')) ) { - alt22=1; + if ( ((LA24_0>='0' && LA24_0<='9')) ) { + alt24=1; } - switch (alt22) { + switch (alt24) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:680:27: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1294:13: DIGIT { mDIGIT(); if (state.failed) return ; @@ -1999,25 +2114,25 @@ public class FTSLexer extends Lexer { break; default : - if ( cnt22 >= 1 ) break loop22; + if ( cnt24 >= 1 ) break loop24; if (state.backtracking>0) {state.failed=true; return ;} EarlyExitException eee = - new EarlyExitException(22, input); + new EarlyExitException(24, input); throw eee; } - cnt22++; + cnt24++; } while (true); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:680:34: ( EXPONENT )? - int alt23=2; - int LA23_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1294:20: ( EXPONENT )? + int alt25=2; + int LA25_0 = input.LA(1); - if ( (LA23_0=='E'||LA23_0=='e') ) { - alt23=1; + if ( (LA25_0=='E'||LA25_0=='e') ) { + alt25=1; } - switch (alt23) { + switch (alt25) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:680:34: EXPONENT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1294:20: EXPONENT { mEXPONENT(); if (state.failed) return ; @@ -2030,18 +2145,18 @@ public class FTSLexer extends Lexer { } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:681:7: ( PLUS | MINUS )? ( DIGIT )+ EXPONENT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1296:9: ( PLUS | MINUS )? ( DIGIT )+ EXPONENT { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:681:7: ( PLUS | MINUS )? - int alt24=2; - int LA24_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1296:9: ( PLUS | MINUS )? + int alt26=2; + int LA26_0 = input.LA(1); - if ( (LA24_0=='+'||LA24_0=='-') ) { - alt24=1; + if ( (LA26_0=='+'||LA26_0=='-') ) { + alt26=1; } - switch (alt24) { + switch (alt26) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2059,21 +2174,21 @@ public class FTSLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:681:23: ( DIGIT )+ - int cnt25=0; - loop25: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1300:9: ( DIGIT )+ + int cnt27=0; + loop27: do { - int alt25=2; - int LA25_0 = input.LA(1); + int alt27=2; + int LA27_0 = input.LA(1); - if ( ((LA25_0>='0' && LA25_0<='9')) ) { - alt25=1; + if ( ((LA27_0>='0' && LA27_0<='9')) ) { + alt27=1; } - switch (alt25) { + switch (alt27) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:681:23: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1300:9: DIGIT { mDIGIT(); if (state.failed) return ; @@ -2081,13 +2196,13 @@ public class FTSLexer extends Lexer { break; default : - if ( cnt25 >= 1 ) break loop25; + if ( cnt27 >= 1 ) break loop27; if (state.backtracking>0) {state.failed=true; return ;} EarlyExitException eee = - new EarlyExitException(25, input); + new EarlyExitException(27, input); throw eee; } - cnt25++; + cnt27++; } while (true); mEXPONENT(); if (state.failed) return ; @@ -2107,83 +2222,10 @@ public class FTSLexer extends Lexer { // $ANTLR start "START_RANGE_I" public final void mSTART_RANGE_I() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:686:2: ( ( PLUS | MINUS )? ( DIGIT )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:686:5: ( PLUS | MINUS )? ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1305:9: ( ( PLUS | MINUS )? ( DIGIT )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1306:9: ( PLUS | MINUS )? ( DIGIT )+ { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:686:5: ( PLUS | MINUS )? - int alt27=2; - int LA27_0 = input.LA(1); - - if ( (LA27_0=='+'||LA27_0=='-') ) { - alt27=1; - } - switch (alt27) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: - { - if ( input.LA(1)=='+'||input.LA(1)=='-' ) { - input.consume(); - state.failed=false; - } - else { - if (state.backtracking>0) {state.failed=true; return ;} - MismatchedSetException mse = new MismatchedSetException(null,input); - recover(mse); - throw mse;} - - - } - break; - - } - - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:686:21: ( DIGIT )+ - int cnt28=0; - loop28: - do { - int alt28=2; - int LA28_0 = input.LA(1); - - if ( ((LA28_0>='0' && LA28_0<='9')) ) { - alt28=1; - } - - - switch (alt28) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:686:21: DIGIT - { - mDIGIT(); if (state.failed) return ; - - } - break; - - default : - if ( cnt28 >= 1 ) break loop28; - if (state.backtracking>0) {state.failed=true; return ;} - EarlyExitException eee = - new EarlyExitException(28, input); - throw eee; - } - cnt28++; - } while (true); - - - } - - } - finally { - } - } - // $ANTLR end "START_RANGE_I" - - // $ANTLR start "START_RANGE_F" - public final void mSTART_RANGE_F() throws RecognitionException { - try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:691:2: ( ( PLUS | MINUS )? ( DIGIT )+ DOT ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:691:5: ( PLUS | MINUS )? ( DIGIT )+ DOT - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:691:5: ( PLUS | MINUS )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1306:9: ( PLUS | MINUS )? int alt29=2; int LA29_0 = input.LA(1); @@ -2192,7 +2234,7 @@ public class FTSLexer extends Lexer { } switch (alt29) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2210,7 +2252,7 @@ public class FTSLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:691:21: ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1310:9: ( DIGIT )+ int cnt30=0; loop30: do { @@ -2224,7 +2266,7 @@ public class FTSLexer extends Lexer { switch (alt30) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:691:21: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1310:9: DIGIT { mDIGIT(); if (state.failed) return ; @@ -2241,6 +2283,79 @@ public class FTSLexer extends Lexer { cnt30++; } while (true); + + } + + } + finally { + } + } + // $ANTLR end "START_RANGE_I" + + // $ANTLR start "START_RANGE_F" + public final void mSTART_RANGE_F() throws RecognitionException { + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1315:9: ( ( PLUS | MINUS )? ( DIGIT )+ DOT ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1316:9: ( PLUS | MINUS )? ( DIGIT )+ DOT + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1316:9: ( PLUS | MINUS )? + int alt31=2; + int LA31_0 = input.LA(1); + + if ( (LA31_0=='+'||LA31_0=='-') ) { + alt31=1; + } + switch (alt31) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + { + if ( input.LA(1)=='+'||input.LA(1)=='-' ) { + input.consume(); + state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return ;} + MismatchedSetException mse = new MismatchedSetException(null,input); + recover(mse); + throw mse;} + + + } + break; + + } + + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1320:9: ( DIGIT )+ + int cnt32=0; + loop32: + do { + int alt32=2; + int LA32_0 = input.LA(1); + + if ( ((LA32_0>='0' && LA32_0<='9')) ) { + alt32=1; + } + + + switch (alt32) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1320:9: DIGIT + { + mDIGIT(); if (state.failed) return ; + + } + break; + + default : + if ( cnt32 >= 1 ) break loop32; + if (state.backtracking>0) {state.failed=true; return ;} + EarlyExitException eee = + new EarlyExitException(32, input); + throw eee; + } + cnt32++; + } while (true); + mDOT(); if (state.failed) return ; } @@ -2254,49 +2369,49 @@ public class FTSLexer extends Lexer { // $ANTLR start "DECIMAL_NUMERAL" public final void mDECIMAL_NUMERAL() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:700:4: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) - int alt32=2; - int LA32_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1328:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ( DIGIT )* ) + int alt34=2; + int LA34_0 = input.LA(1); - if ( (LA32_0=='0') ) { - alt32=1; + if ( (LA34_0=='0') ) { + alt34=1; } - else if ( ((LA32_0>='1' && LA32_0<='9')) ) { - alt32=2; + else if ( ((LA34_0>='1' && LA34_0<='9')) ) { + alt34=2; } else { if (state.backtracking>0) {state.failed=true; return ;} NoViableAltException nvae = - new NoViableAltException("", 32, 0, input); + new NoViableAltException("", 34, 0, input); throw nvae; } - switch (alt32) { + switch (alt34) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:700:7: ZERO_DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1329:9: ZERO_DIGIT { mZERO_DIGIT(); if (state.failed) return ; } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:701:7: NON_ZERO_DIGIT ( DIGIT )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1330:11: NON_ZERO_DIGIT ( DIGIT )* { mNON_ZERO_DIGIT(); if (state.failed) return ; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:701:22: ( DIGIT )* - loop31: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1330:26: ( DIGIT )* + loop33: do { - int alt31=2; - int LA31_0 = input.LA(1); + int alt33=2; + int LA33_0 = input.LA(1); - if ( ((LA31_0>='0' && LA31_0<='9')) ) { - alt31=1; + if ( ((LA33_0>='0' && LA33_0<='9')) ) { + alt33=1; } - switch (alt31) { + switch (alt33) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:701:22: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1330:26: DIGIT { mDIGIT(); if (state.failed) return ; @@ -2304,7 +2419,7 @@ public class FTSLexer extends Lexer { break; default : - break loop31; + break loop33; } } while (true); @@ -2322,8 +2437,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "DIGIT" public final void mDIGIT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:706:2: ( ZERO_DIGIT | NON_ZERO_DIGIT ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1335:9: ( ZERO_DIGIT | NON_ZERO_DIGIT ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( (input.LA(1)>='0' && input.LA(1)<='9') ) { input.consume(); @@ -2347,8 +2462,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "ZERO_DIGIT" public final void mZERO_DIGIT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:712:4: ( '0' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:712:7: '0' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1342:9: ( '0' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1343:9: '0' { match('0'); if (state.failed) return ; @@ -2363,8 +2478,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "NON_ZERO_DIGIT" public final void mNON_ZERO_DIGIT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:716:4: ( '1' .. '9' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:716:7: '1' .. '9' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1348:9: ( '1' .. '9' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1349:9: '1' .. '9' { matchRange('1','9'); if (state.failed) return ; @@ -2379,8 +2494,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "E" public final void mE() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:720:4: ( ( 'e' | 'E' ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:720:7: ( 'e' | 'E' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1354:9: ( ( 'e' | 'E' ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1355:9: ( 'e' | 'E' ) { if ( input.LA(1)=='E'||input.LA(1)=='e' ) { input.consume(); @@ -2404,8 +2519,8 @@ public class FTSLexer extends Lexer { // $ANTLR start "EXPONENT" public final void mEXPONENT() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:724:4: ( E SIGNED_INTEGER ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:724:7: E SIGNED_INTEGER + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1363:9: ( E SIGNED_INTEGER ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1364:9: E SIGNED_INTEGER { mE(); if (state.failed) return ; mSIGNED_INTEGER(); if (state.failed) return ; @@ -2421,19 +2536,19 @@ public class FTSLexer extends Lexer { // $ANTLR start "SIGNED_INTEGER" public final void mSIGNED_INTEGER() throws RecognitionException { try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:4: ( ( PLUS | MINUS )? ( DIGIT )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:7: ( PLUS | MINUS )? ( DIGIT )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1369:9: ( ( PLUS | MINUS )? ( DIGIT )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1370:9: ( PLUS | MINUS )? ( DIGIT )+ { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:7: ( PLUS | MINUS )? - int alt33=2; - int LA33_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1370:9: ( PLUS | MINUS )? + int alt35=2; + int LA35_0 = input.LA(1); - if ( (LA33_0=='+'||LA33_0=='-') ) { - alt33=1; + if ( (LA35_0=='+'||LA35_0=='-') ) { + alt35=1; } - switch (alt33) { + switch (alt35) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='+'||input.LA(1)=='-' ) { input.consume(); @@ -2451,21 +2566,21 @@ public class FTSLexer extends Lexer { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:23: ( DIGIT )+ - int cnt34=0; - loop34: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1374:9: ( DIGIT )+ + int cnt36=0; + loop36: do { - int alt34=2; - int LA34_0 = input.LA(1); + int alt36=2; + int LA36_0 = input.LA(1); - if ( ((LA34_0>='0' && LA34_0<='9')) ) { - alt34=1; + if ( ((LA36_0>='0' && LA36_0<='9')) ) { + alt36=1; } - switch (alt34) { + switch (alt36) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:23: DIGIT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1374:9: DIGIT { mDIGIT(); if (state.failed) return ; @@ -2473,13 +2588,13 @@ public class FTSLexer extends Lexer { break; default : - if ( cnt34 >= 1 ) break loop34; + if ( cnt36 >= 1 ) break loop36; if (state.backtracking>0) {state.failed=true; return ;} EarlyExitException eee = - new EarlyExitException(34, input); + new EarlyExitException(36, input); throw eee; } - cnt34++; + cnt36++; } while (true); @@ -2496,24 +2611,24 @@ public class FTSLexer extends Lexer { try { int _type = WS; int _channel = DEFAULT_TOKEN_CHANNEL; - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:736:4: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:736:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1383:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1384:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:736:6: ( ' ' | '\\t' | '\\r' | '\\n' )+ - int cnt35=0; - loop35: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1384:9: ( ' ' | '\\t' | '\\r' | '\\n' )+ + int cnt37=0; + loop37: do { - int alt35=2; - int LA35_0 = input.LA(1); + int alt37=2; + int LA37_0 = input.LA(1); - if ( ((LA35_0>='\t' && LA35_0<='\n')||LA35_0=='\r'||LA35_0==' ') ) { - alt35=1; + if ( ((LA37_0>='\t' && LA37_0<='\n')||LA37_0=='\r'||LA37_0==' ') ) { + alt37=1; } - switch (alt35) { + switch (alt37) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) { input.consume(); @@ -2530,13 +2645,13 @@ public class FTSLexer extends Lexer { break; default : - if ( cnt35 >= 1 ) break loop35; + if ( cnt37 >= 1 ) break loop37; if (state.backtracking>0) {state.failed=true; return ;} EarlyExitException eee = - new EarlyExitException(35, input); + new EarlyExitException(37, input); throw eee; } - cnt35++; + cnt37++; } while (true); if ( state.backtracking==0 ) { @@ -2554,271 +2669,271 @@ public class FTSLexer extends Lexer { // $ANTLR end "WS" public void mTokens() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:8: ( FTSPHRASE | URI | OR | AND | NOT | TILDA | LPAREN | RPAREN | PLUS | MINUS | COLON | STAR | DOTDOT | DOT | AMP | EXCLAMATION | BAR | EQUALS | QUESTION_MARK | LCURL | RCURL | LSQUARE | RSQUARE | TO | COMMA | CARAT | DOLLAR | GT | LT | AT | PERCENT | ID | DECIMAL_INTEGER_LITERAL | FTSWORD | FTSPRE | FTSWILD | FLOATING_POINT_LITERAL | WS ) - int alt36=38; - alt36 = dfa36.predict(input); - switch (alt36) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:8: ( FTSPHRASE | URI | OR | AND | NOT | TILDA | LPAREN | RPAREN | PLUS | MINUS | COLON | STAR | DOTDOT | DOT | AMP | EXCLAMATION | BAR | EQUALS | QUESTION_MARK | LCURL | RCURL | LSQUARE | RSQUARE | TO | COMMA | CARAT | DOLLAR | GT | LT | AT | PERCENT | ID | DECIMAL_INTEGER_LITERAL | FTSWORD | FTSPRE | FTSWILD | FLOATING_POINT_LITERAL | WS ) + int alt38=38; + alt38 = dfa38.predict(input); + switch (alt38) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:10: FTSPHRASE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:10: FTSPHRASE { mFTSPHRASE(); if (state.failed) return ; } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:20: URI + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:20: URI { mURI(); if (state.failed) return ; } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:24: OR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:24: OR { mOR(); if (state.failed) return ; } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:27: AND + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:27: AND { mAND(); if (state.failed) return ; } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:31: NOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:31: NOT { mNOT(); if (state.failed) return ; } break; case 6 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:35: TILDA + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:35: TILDA { mTILDA(); if (state.failed) return ; } break; case 7 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:41: LPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:41: LPAREN { mLPAREN(); if (state.failed) return ; } break; case 8 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:48: RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:48: RPAREN { mRPAREN(); if (state.failed) return ; } break; case 9 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:55: PLUS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:55: PLUS { mPLUS(); if (state.failed) return ; } break; case 10 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:60: MINUS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:60: MINUS { mMINUS(); if (state.failed) return ; } break; case 11 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:66: COLON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:66: COLON { mCOLON(); if (state.failed) return ; } break; case 12 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:72: STAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:72: STAR { mSTAR(); if (state.failed) return ; } break; case 13 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:77: DOTDOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:77: DOTDOT { mDOTDOT(); if (state.failed) return ; } break; case 14 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:84: DOT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:84: DOT { mDOT(); if (state.failed) return ; } break; case 15 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:88: AMP + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:88: AMP { mAMP(); if (state.failed) return ; } break; case 16 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:92: EXCLAMATION + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:92: EXCLAMATION { mEXCLAMATION(); if (state.failed) return ; } break; case 17 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:104: BAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:104: BAR { mBAR(); if (state.failed) return ; } break; case 18 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:108: EQUALS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:108: EQUALS { mEQUALS(); if (state.failed) return ; } break; case 19 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:115: QUESTION_MARK + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:115: QUESTION_MARK { mQUESTION_MARK(); if (state.failed) return ; } break; case 20 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:129: LCURL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:129: LCURL { mLCURL(); if (state.failed) return ; } break; case 21 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:135: RCURL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:135: RCURL { mRCURL(); if (state.failed) return ; } break; case 22 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:141: LSQUARE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:141: LSQUARE { mLSQUARE(); if (state.failed) return ; } break; case 23 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:149: RSQUARE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:149: RSQUARE { mRSQUARE(); if (state.failed) return ; } break; case 24 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:157: TO + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:157: TO { mTO(); if (state.failed) return ; } break; case 25 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:160: COMMA + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:160: COMMA { mCOMMA(); if (state.failed) return ; } break; case 26 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:166: CARAT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:166: CARAT { mCARAT(); if (state.failed) return ; } break; case 27 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:172: DOLLAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:172: DOLLAR { mDOLLAR(); if (state.failed) return ; } break; case 28 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:179: GT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:179: GT { mGT(); if (state.failed) return ; } break; case 29 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:182: LT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:182: LT { mLT(); if (state.failed) return ; } break; case 30 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:185: AT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:185: AT { mAT(); if (state.failed) return ; } break; case 31 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:188: PERCENT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:188: PERCENT { mPERCENT(); if (state.failed) return ; } break; case 32 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:196: ID + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:196: ID { mID(); if (state.failed) return ; } break; case 33 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:199: DECIMAL_INTEGER_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:199: DECIMAL_INTEGER_LITERAL { mDECIMAL_INTEGER_LITERAL(); if (state.failed) return ; } break; case 34 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:223: FTSWORD + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:223: FTSWORD { mFTSWORD(); if (state.failed) return ; } break; case 35 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:231: FTSPRE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:231: FTSPRE { mFTSPRE(); if (state.failed) return ; } break; case 36 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:238: FTSWILD + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:238: FTSWILD { mFTSWILD(); if (state.failed) return ; } break; case 37 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:246: FLOATING_POINT_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:246: FLOATING_POINT_LITERAL { mFLOATING_POINT_LITERAL(); if (state.failed) return ; } break; case 38 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:269: WS + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:1:269: WS { mWS(); if (state.failed) return ; @@ -2831,8 +2946,8 @@ public class FTSLexer extends Lexer { // $ANTLR start synpred1_FTS public final void synpred1_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:519:11: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:851:17: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<='.')||(input.LA(1)>='0' && input.LA(1)<='9')||input.LA(1)==';'||input.LA(1)=='='||(input.LA(1)>='@' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { input.consume(); @@ -2851,8 +2966,8 @@ public class FTSLexer extends Lexer { // $ANTLR start synpred2_FTS public final void synpred2_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:520:12: ( '//' ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:520:13: '//' + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:865:19: ( '//' ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:865:20: '//' { match("//"); if (state.failed) return ; @@ -2863,8 +2978,8 @@ public class FTSLexer extends Lexer { // $ANTLR start synpred3_FTS public final void synpred3_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:521:12: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:867:25: ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER | COLON ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { if ( input.LA(1)=='!'||input.LA(1)=='$'||(input.LA(1)>='&' && input.LA(1)<='.')||(input.LA(1)>='0' && input.LA(1)<=';')||input.LA(1)=='='||(input.LA(1)>='@' && input.LA(1)<='[')||input.LA(1)==']'||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z')||input.LA(1)=='~' ) { input.consume(); @@ -2925,233 +3040,247 @@ public class FTSLexer extends Lexer { } - protected DFA3 dfa3 = new DFA3(this); - protected DFA26 dfa26 = new DFA26(this); - protected DFA36 dfa36 = new DFA36(this); - static final String DFA3_eotS = - "\5\uffff"; - static final String DFA3_eofS = - "\5\uffff"; - static final String DFA3_minS = - "\2\41\1\uffff\1\0\1\uffff"; - static final String DFA3_maxS = - "\2\176\1\uffff\1\0\1\uffff"; - static final String DFA3_acceptS = - "\2\uffff\1\2\1\uffff\1\1"; - static final String DFA3_specialS = - "\3\uffff\1\0\1\uffff}>"; - static final String[] DFA3_transitionS = { - "\1\1\1\uffff\1\2\1\1\1\uffff\11\1\1\2\12\1\1\2\1\1\1\uffff"+ - "\1\1\1\uffff\1\2\34\1\1\uffff\1\1\1\uffff\1\1\1\uffff\32\1\2"+ - "\uffff\1\2\1\1", - "\1\1\1\uffff\1\2\1\1\1\uffff\11\1\1\2\12\1\1\3\1\1\1\uffff"+ - "\1\1\1\uffff\1\2\34\1\1\uffff\1\1\1\uffff\1\1\1\uffff\32\1\2"+ - "\uffff\1\2\1\1", + protected DFA5 dfa5 = new DFA5(this); + protected DFA28 dfa28 = new DFA28(this); + protected DFA38 dfa38 = new DFA38(this); + static final String DFA5_eotS = + "\11\uffff"; + static final String DFA5_eofS = + "\11\uffff"; + static final String DFA5_minS = + "\2\41\5\uffff\1\0\1\uffff"; + static final String DFA5_maxS = + "\2\176\5\uffff\1\0\1\uffff"; + static final String DFA5_acceptS = + "\2\uffff\5\2\1\uffff\1\1"; + static final String DFA5_specialS = + "\7\uffff\1\0\1\uffff}>"; + static final String[] DFA5_transitionS = { + "\1\1\1\uffff\1\5\1\1\1\uffff\11\1\1\2\12\1\1\3\1\1\1\uffff"+ + "\1\1\1\uffff\1\4\34\1\1\uffff\1\1\1\uffff\1\1\1\uffff\32\1\2"+ + "\uffff\1\6\1\1", + "\1\1\1\uffff\1\5\1\1\1\uffff\11\1\1\3\12\1\1\7\1\1\1\uffff"+ + "\1\1\1\uffff\1\4\34\1\1\uffff\1\1\1\uffff\1\1\1\uffff\32\1\2"+ + "\uffff\1\6\1\1", + "", + "", + "", + "", "", "\1\uffff", "" }; - static final short[] DFA3_eot = DFA.unpackEncodedString(DFA3_eotS); - static final short[] DFA3_eof = DFA.unpackEncodedString(DFA3_eofS); - static final char[] DFA3_min = DFA.unpackEncodedStringToUnsignedChars(DFA3_minS); - static final char[] DFA3_max = DFA.unpackEncodedStringToUnsignedChars(DFA3_maxS); - static final short[] DFA3_accept = DFA.unpackEncodedString(DFA3_acceptS); - static final short[] DFA3_special = DFA.unpackEncodedString(DFA3_specialS); - static final short[][] DFA3_transition; + static final short[] DFA5_eot = DFA.unpackEncodedString(DFA5_eotS); + static final short[] DFA5_eof = DFA.unpackEncodedString(DFA5_eofS); + static final char[] DFA5_min = DFA.unpackEncodedStringToUnsignedChars(DFA5_minS); + static final char[] DFA5_max = DFA.unpackEncodedStringToUnsignedChars(DFA5_maxS); + static final short[] DFA5_accept = DFA.unpackEncodedString(DFA5_acceptS); + static final short[] DFA5_special = DFA.unpackEncodedString(DFA5_specialS); + static final short[][] DFA5_transition; static { - int numStates = DFA3_transitionS.length; - DFA3_transition = new short[numStates][]; + int numStates = DFA5_transitionS.length; + DFA5_transition = new short[numStates][]; for (int i=0; i ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )?"; + return "850:9: ( ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )=> ( F_URI_ALPHA | F_URI_DIGIT | F_URI_OTHER )+ COLON )?"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { IntStream input = _input; int _s = s; switch ( s ) { case 0 : - int LA3_3 = input.LA(1); + int LA5_7 = input.LA(1); - int index3_3 = input.index(); + int index5_7 = input.index(); input.rewind(); s = -1; - if ( (synpred1_FTS()) ) {s = 4;} + if ( (synpred1_FTS()) ) {s = 8;} - else if ( (true) ) {s = 2;} + else if ( (true) ) {s = 6;} - input.seek(index3_3); + input.seek(index5_7); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 3, _s, input); + new NoViableAltException(getDescription(), 5, _s, input); error(nvae); throw nvae; } } - static final String DFA26_eotS = - "\4\uffff\1\7\1\uffff\1\11\3\uffff"; - static final String DFA26_eofS = - "\12\uffff"; - static final String DFA26_minS = - "\1\53\2\56\1\uffff\1\56\1\uffff\1\56\3\uffff"; - static final String DFA26_maxS = - "\2\71\1\145\1\uffff\1\56\1\uffff\1\56\3\uffff"; - static final String DFA26_acceptS = - "\3\uffff\1\4\1\uffff\1\5\1\uffff\1\3\1\2\1\1"; - static final String DFA26_specialS = - "\12\uffff}>"; - static final String[] DFA26_transitionS = { + static final String DFA28_eotS = + "\5\uffff\1\7\1\13\5\uffff"; + static final String DFA28_eofS = + "\14\uffff"; + static final String DFA28_minS = + "\1\53\2\56\2\uffff\2\56\5\uffff"; + static final String DFA28_maxS = + "\2\71\1\145\2\uffff\1\145\1\56\5\uffff"; + static final String DFA28_acceptS = + "\3\uffff\1\4\1\5\2\uffff\3\3\1\2\1\1"; + static final String DFA28_specialS = + "\14\uffff}>"; + static final String[] DFA28_transitionS = { "\1\1\1\uffff\1\1\1\3\1\uffff\12\2", "\1\3\1\uffff\12\2", - "\1\4\1\uffff\12\2\13\uffff\1\5\37\uffff\1\5", + "\1\5\1\uffff\12\2\13\uffff\1\4\37\uffff\1\4", + "", + "", + "\1\6\1\uffff\12\10\13\uffff\1\11\37\uffff\1\11", + "\1\12", "", - "\1\6", "", - "\1\10", "", "", "" }; - static final short[] DFA26_eot = DFA.unpackEncodedString(DFA26_eotS); - static final short[] DFA26_eof = DFA.unpackEncodedString(DFA26_eofS); - static final char[] DFA26_min = DFA.unpackEncodedStringToUnsignedChars(DFA26_minS); - static final char[] DFA26_max = DFA.unpackEncodedStringToUnsignedChars(DFA26_maxS); - static final short[] DFA26_accept = DFA.unpackEncodedString(DFA26_acceptS); - static final short[] DFA26_special = DFA.unpackEncodedString(DFA26_specialS); - static final short[][] DFA26_transition; + static final short[] DFA28_eot = DFA.unpackEncodedString(DFA28_eotS); + static final short[] DFA28_eof = DFA.unpackEncodedString(DFA28_eofS); + static final char[] DFA28_min = DFA.unpackEncodedStringToUnsignedChars(DFA28_minS); + static final char[] DFA28_max = DFA.unpackEncodedStringToUnsignedChars(DFA28_maxS); + static final short[] DFA28_accept = DFA.unpackEncodedString(DFA28_acceptS); + static final short[] DFA28_special = DFA.unpackEncodedString(DFA28_specialS); + static final short[][] DFA28_transition; static { - int numStates = DFA26_transitionS.length; - DFA26_transition = new short[numStates][]; + int numStates = DFA28_transitionS.length; + DFA28_transition = new short[numStates][]; for (int i=0; i"; - static final String[] DFA36_transitionS = { - "\2\44\2\uffff\1\44\22\uffff\1\44\1\17\1\1\1\uffff\1\31\1\35"+ - "\1\16\1\uffff\1\7\1\10\1\14\1\11\1\27\1\12\1\15\1\uffff\1\37"+ - "\11\40\1\13\1\uffff\1\33\1\21\1\32\1\22\1\34\1\4\14\36\1\5\1"+ - "\3\4\36\1\26\6\36\1\24\1\41\1\25\1\30\1\42\1\uffff\1\4\14\36"+ - "\1\5\1\3\4\36\1\26\6\36\1\2\1\20\1\23\1\6\101\uffff\27\43\1"+ - "\uffff\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff"+ - "\u0080\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff"+ - "\u2bb0\43\u2150\uffff\u0200\43", + "\35\1\36\1\37\4\uffff\1\40\1\uffff\1\46\1\24\6\2\1\uffff\1\40\3"+ + "\uffff\1\44\3\uffff\3\40\5\uffff\1\11\1\45\1\uffff\1\12\1\14\3\44"+ + "\1\15\1\16\1\45\1\23\2\uffff\1\41\1\45\5\uffff\1\42\1\3\2\uffff"+ + "\1\43\4\uffff\1\41\2\45\1\uffff\1\30\1\uffff\1\45\4\uffff\1\4\1"+ + "\5\1\42\14\uffff"; + static final String DFA38_specialS = + "\42\uffff\1\1\14\uffff\1\0\106\uffff}>"; + static final String[] DFA38_transitionS = { + "\2\45\2\uffff\1\45\22\uffff\1\45\1\20\1\1\1\uffff\1\32\1\36"+ + "\1\17\1\2\1\10\1\11\1\15\1\12\1\30\1\13\1\16\1\uffff\1\40\11"+ + "\41\1\14\1\uffff\1\34\1\22\1\33\1\23\1\35\1\5\14\37\1\6\1\4"+ + "\4\37\1\27\6\37\1\25\1\42\1\26\1\31\1\43\1\uffff\1\5\14\37\1"+ + "\6\1\4\4\37\1\27\6\37\1\3\1\21\1\24\1\7\101\uffff\27\44\1\uffff"+ + "\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170\uffff\u0080"+ + "\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0"+ + "\44\u2150\uffff\u0200\44", "", - "\1\46\1\uffff\2\46\1\uffff\26\46\1\uffff\1\46\1\uffff\35\46"+ - "\1\uffff\1\46\1\uffff\1\46\1\uffff\32\46\2\uffff\2\46", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\21\52\1\50\10\52"+ - "\1\uffff\1\54\4\uffff\21\51\1\47\10\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\15\52\1\60\14\52"+ - "\1\uffff\1\54\4\uffff\15\51\1\57\14\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\16\52\1\62\13\52"+ - "\1\uffff\1\54\4\uffff\16\51\1\61\13\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", + "", + "\1\47\1\uffff\1\53\1\47\1\uffff\11\47\1\50\12\47\1\51\1\47"+ + "\1\uffff\1\47\1\uffff\1\52\34\47\1\uffff\1\47\1\uffff\1\47\1"+ + "\uffff\32\47\2\uffff\1\54\1\47", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\21\64\1\63\10\64\1\uffff\1\57\2\uffff\1\66\1\uffff\21\60\1"+ + "\55\10\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\15\64\1\72\14\64\1\uffff\1\57\2\uffff\1\66\1\uffff\15\60\1"+ + "\71\14\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\16\64\1\74\13\64\1\uffff\1\57\2\uffff\1\66\1\uffff\16\60\1"+ + "\73\13\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", "", "", "", - "\1\66\1\uffff\1\63\11\65", - "\1\66\1\uffff\1\63\11\65", + "\1\77\1\uffff\1\75\11\100", + "\1\77\1\uffff\1\75\11\100", "", - "\1\56\5\uffff\12\56\5\uffff\1\56\1\uffff\32\56\1\uffff\1\56"+ - "\4\uffff\32\56\105\uffff\27\56\1\uffff\37\56\1\uffff\u1f08\56"+ - "\u1040\uffff\u0150\56\u0170\uffff\u0080\56\u0080\uffff\u092e"+ - "\56\u10d2\uffff\u5200\56\u0c00\uffff\u2bb0\56\u2150\uffff\u0200"+ - "\56", - "\1\71\1\uffff\12\66", + "\1\105\5\uffff\12\104\5\uffff\1\62\1\uffff\32\104\1\uffff"+ + "\1\103\4\uffff\32\104\105\uffff\27\104\1\uffff\37\104\1\uffff"+ + "\u1f08\104\u1040\uffff\u0150\104\u0170\uffff\u0080\104\u0080"+ + "\uffff\u092e\104\u10d2\uffff\u5200\104\u0c00\uffff\u2bb0\104"+ + "\u2150\uffff\u0200\104", + "\1\106\1\uffff\12\110", "", "", "", "", - "\1\56\5\uffff\12\56\5\uffff\1\56\1\uffff\32\56\1\uffff\1\56"+ - "\4\uffff\32\56\105\uffff\27\56\1\uffff\37\56\1\uffff\u1f08\56"+ - "\u1040\uffff\u0150\56\u0170\uffff\u0080\56\u0080\uffff\u092e"+ - "\56\u10d2\uffff\u5200\56\u0c00\uffff\u2bb0\56\u2150\uffff\u0200"+ - "\56", + "\1\105\5\uffff\12\104\5\uffff\1\62\1\uffff\32\104\1\uffff"+ + "\1\103\4\uffff\32\104\105\uffff\27\104\1\uffff\37\104\1\uffff"+ + "\u1f08\104\u1040\uffff\u0150\104\u0170\uffff\u0080\104\u0080"+ + "\uffff\u092e\104\u10d2\uffff\u5200\104\u0c00\uffff\u2bb0\104"+ + "\u2150\uffff\u0200\104", "", "", "", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\16\52\1\75\13\52"+ - "\1\uffff\1\54\4\uffff\16\51\1\74\13\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\16\64\1\113\13\64\1\uffff\1\57\2\uffff\1\66\1\uffff\16\60\1"+ + "\112\13\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", "", "", "", @@ -3159,280 +3288,299 @@ public class FTSLexer extends Lexer { "", "", "", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\1\55\3\uffff\1\66\1\uffff\12\100\5\uffff\1\56\1\uffff\4\43"+ - "\1\77\25\43\1\uffff\1\41\4\uffff\4\43\1\77\25\43\105\uffff\27"+ - "\43\1\uffff\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170"+ - "\uffff\u0080\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00"+ - "\uffff\u2bb0\43\u2150\uffff\u0200\43", - "\1\55\3\uffff\1\66\1\uffff\12\101\5\uffff\1\56\1\uffff\4\43"+ - "\1\77\25\43\1\uffff\1\41\4\uffff\4\43\1\77\25\43\105\uffff\27"+ - "\43\1\uffff\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170"+ - "\uffff\u0080\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00"+ - "\uffff\u2bb0\43\u2150\uffff\u0200\43", - "\165\103\1\102\uff8a\103", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\61\3\uffff\1\115\1\uffff\12\116\5\uffff\1\62\1\uffff\4"+ + "\44\1\117\25\44\1\uffff\1\42\4\uffff\4\44\1\117\25\44\105\uffff"+ + "\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\61\3\uffff\1\115\1\uffff\12\120\5\uffff\1\62\1\uffff\4"+ + "\44\1\117\25\44\1\uffff\1\42\4\uffff\4\44\1\117\25\44\105\uffff"+ + "\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\165\122\1\121\uff8a\122", "", - "\1\55\5\uffff\12\43\5\uffff\1\56\1\uffff\32\43\1\uffff\1\41"+ - "\4\uffff\32\43\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "", - "", - "", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\165\107\1\106\uff8a\107", - "\1\56\5\uffff\12\56\5\uffff\1\56\1\uffff\32\56\1\uffff\1\56"+ - "\4\uffff\32\56\105\uffff\27\56\1\uffff\37\56\1\uffff\u1f08\56"+ - "\u1040\uffff\u0150\56\u0170\uffff\u0080\56\u0080\uffff\u092e"+ - "\56\u10d2\uffff\u5200\56\u0c00\uffff\u2bb0\56\u2150\uffff\u0200"+ - "\56", - "", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\3\52\1\112\26\52"+ - "\1\uffff\1\54\4\uffff\3\51\1\111\26\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\3\52\1\112\26\52"+ - "\1\uffff\1\54\4\uffff\3\51\1\111\26\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\23\52\1\114\6\52"+ - "\1\uffff\1\54\4\uffff\23\51\1\113\6\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\23\52\1\114\6\52"+ - "\1\uffff\1\54\4\uffff\23\51\1\113\6\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\66\1\uffff\12\66\13\uffff\1\66\37\uffff\1\66", - "", - "\1\66\1\uffff\12\115\13\uffff\1\66\37\uffff\1\66", + "\1\61\5\uffff\12\44\5\uffff\1\62\1\uffff\32\44\1\uffff\1\42"+ + "\4\uffff\32\44\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44"+ + "\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e"+ + "\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200"+ + "\44", "", "", "", "", "", "", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "", - "\1\55\1\66\1\uffff\1\66\2\uffff\12\117\5\uffff\1\56\1\uffff"+ - "\32\43\1\uffff\1\41\4\uffff\32\43\105\uffff\27\43\1\uffff\37"+ - "\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\55\3\uffff\1\66\1\uffff\12\100\5\uffff\1\56\1\uffff\4\43"+ - "\1\77\25\43\1\uffff\1\41\4\uffff\4\43\1\77\25\43\105\uffff\27"+ - "\43\1\uffff\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170"+ - "\uffff\u0080\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00"+ - "\uffff\u2bb0\43\u2150\uffff\u0200\43", - "\1\55\3\uffff\1\66\1\uffff\12\101\5\uffff\1\56\1\uffff\4\43"+ - "\1\77\25\43\1\uffff\1\41\4\uffff\4\43\1\77\25\43\105\uffff\27"+ - "\43\1\uffff\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170"+ - "\uffff\u0080\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00"+ - "\uffff\u2bb0\43\u2150\uffff\u0200\43", - "\1\55\5\uffff\12\120\5\uffff\1\56\1\uffff\6\120\24\43\1\uffff"+ - "\1\41\4\uffff\6\120\24\43\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\43\5\uffff\1\56\1\uffff\32\43\1\uffff\1\41"+ - "\4\uffff\32\43\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", "", "", - "\1\55\5\uffff\12\123\5\uffff\1\56\1\uffff\6\122\24\52\1\uffff"+ - "\1\54\4\uffff\6\121\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", "", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\2\42\5\uffff\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52"+ - "\1\uffff\1\54\2\uffff\1\42\1\uffff\32\51\105\uffff\27\43\1\uffff"+ - "\37\43\1\uffff\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080"+ - "\43\u0080\uffff\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0"+ - "\43\u2150\uffff\u0200\43", - "\1\66\1\uffff\12\115\13\uffff\1\66\37\uffff\1\66", + "\165\126\1\125\uff8a\126", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\105\5\uffff\12\104\5\uffff\1\62\1\uffff\32\104\1\uffff"+ + "\1\103\4\uffff\32\104\105\uffff\27\104\1\uffff\37\104\1\uffff"+ + "\u1f08\104\u1040\uffff\u0150\104\u0170\uffff\u0080\104\u0080"+ + "\uffff\u092e\104\u10d2\uffff\u5200\104\u0c00\uffff\u2bb0\104"+ + "\u2150\uffff\u0200\104", "", - "\1\55\5\uffff\12\117\5\uffff\1\56\1\uffff\32\43\1\uffff\1"+ - "\41\4\uffff\32\43\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08"+ - "\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\1\55\5\uffff\12\126\5\uffff\1\56\1\uffff\6\126\24\43\1\uffff"+ - "\1\41\4\uffff\6\126\24\43\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\131\5\uffff\1\56\1\uffff\6\130\24\52\1\uffff"+ - "\1\54\4\uffff\6\127\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\131\5\uffff\1\56\1\uffff\6\130\24\52\1\uffff"+ - "\1\54\4\uffff\6\127\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\131\5\uffff\1\56\1\uffff\6\130\24\52\1\uffff"+ - "\1\54\4\uffff\6\127\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", "", "", - "\1\55\5\uffff\12\132\5\uffff\1\56\1\uffff\6\132\24\43\1\uffff"+ - "\1\41\4\uffff\6\132\24\43\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\135\5\uffff\1\56\1\uffff\6\134\24\52\1\uffff"+ - "\1\54\4\uffff\6\133\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\135\5\uffff\1\56\1\uffff\6\134\24\52\1\uffff"+ - "\1\54\4\uffff\6\133\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\135\5\uffff\1\56\1\uffff\6\134\24\52\1\uffff"+ - "\1\54\4\uffff\6\133\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\136\5\uffff\1\56\1\uffff\6\136\24\43\1\uffff"+ - "\1\41\4\uffff\6\136\24\43\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\141\5\uffff\1\56\1\uffff\6\140\24\52\1\uffff"+ - "\1\54\4\uffff\6\137\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\141\5\uffff\1\56\1\uffff\6\140\24\52\1\uffff"+ - "\1\54\4\uffff\6\137\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\141\5\uffff\1\56\1\uffff\6\140\24\52\1\uffff"+ - "\1\54\4\uffff\6\137\24\51\105\uffff\27\43\1\uffff\37\43\1\uffff"+ - "\u1f08\43\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff"+ - "\u092e\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff"+ - "\u0200\43", - "\1\55\5\uffff\12\43\5\uffff\1\56\1\uffff\32\43\1\uffff\1\41"+ - "\4\uffff\32\43\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43", - "\1\55\5\uffff\12\53\5\uffff\1\56\1\uffff\32\52\1\uffff\1\54"+ - "\4\uffff\32\51\105\uffff\27\43\1\uffff\37\43\1\uffff\u1f08\43"+ - "\u1040\uffff\u0150\43\u0170\uffff\u0080\43\u0080\uffff\u092e"+ - "\43\u10d2\uffff\u5200\43\u0c00\uffff\u2bb0\43\u2150\uffff\u0200"+ - "\43" + "", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\3\64\1\131\26\64\1\uffff\1\57\2\uffff\1\66\1\uffff\3\60\1\130"+ + "\26\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\3\64\1\131\26\64\1\uffff\1\57\2\uffff\1\66\1\uffff\3\60\1\130"+ + "\26\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\23\64\1\133\6\64\1\uffff\1\57\2\uffff\1\66\1\uffff\23\60\1"+ + "\132\6\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\23\64\1\133\6\64\1\uffff\1\57\2\uffff\1\66\1\uffff\23\60\1"+ + "\132\6\60\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040"+ + "\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2"+ + "\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\115\1\uffff\12\135\13\uffff\1\136\37\uffff\1\136", + "", + "", + "\1\115\1\uffff\12\137\13\uffff\1\136\37\uffff\1\136", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "", + "", + "\1\61\3\uffff\1\115\1\uffff\12\116\5\uffff\1\62\1\uffff\4"+ + "\44\1\117\25\44\1\uffff\1\42\4\uffff\4\44\1\117\25\44\105\uffff"+ + "\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\61\1\142\1\uffff\1\142\2\uffff\12\141\5\uffff\1\62\1\uffff"+ + "\32\44\1\uffff\1\42\4\uffff\32\44\105\uffff\27\44\1\uffff\37"+ + "\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170\uffff\u0080"+ + "\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0"+ + "\44\u2150\uffff\u0200\44", + "\1\61\3\uffff\1\115\1\uffff\12\120\5\uffff\1\62\1\uffff\4"+ + "\44\1\117\25\44\1\uffff\1\42\4\uffff\4\44\1\117\25\44\105\uffff"+ + "\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\61\5\uffff\12\143\5\uffff\1\62\1\uffff\6\143\24\44\1\uffff"+ + "\1\42\4\uffff\6\143\24\44\105\uffff\27\44\1\uffff\37\44\1\uffff"+ + "\u1f08\44\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff"+ + "\u092e\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff"+ + "\u0200\44", + "\1\61\5\uffff\12\44\5\uffff\1\62\1\uffff\32\44\1\uffff\1\42"+ + "\4\uffff\32\44\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44"+ + "\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e"+ + "\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200"+ + "\44", + "", + "", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\146\5\uffff\1\62\1\uffff"+ + "\6\145\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\144\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "", + "", + "", + "\1\115\1\uffff\12\137\13\uffff\1\136\37\uffff\1\136", + "", + "\1\61\5\uffff\12\141\5\uffff\1\62\1\uffff\32\44\1\uffff\1"+ + "\42\4\uffff\32\44\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08"+ + "\44\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e"+ + "\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200"+ + "\44", + "", + "\1\61\5\uffff\12\152\5\uffff\1\62\1\uffff\6\152\24\44\1\uffff"+ + "\1\42\4\uffff\6\152\24\44\105\uffff\27\44\1\uffff\37\44\1\uffff"+ + "\u1f08\44\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff"+ + "\u092e\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff"+ + "\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\155\5\uffff\1\62\1\uffff"+ + "\6\154\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\153\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\155\5\uffff\1\62\1\uffff"+ + "\6\154\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\153\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\155\5\uffff\1\62\1\uffff"+ + "\6\154\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\153\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "", + "", + "", + "\1\61\5\uffff\12\156\5\uffff\1\62\1\uffff\6\156\24\44\1\uffff"+ + "\1\42\4\uffff\6\156\24\44\105\uffff\27\44\1\uffff\37\44\1\uffff"+ + "\u1f08\44\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff"+ + "\u092e\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff"+ + "\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\161\5\uffff\1\62\1\uffff"+ + "\6\160\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\157\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\161\5\uffff\1\62\1\uffff"+ + "\6\160\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\157\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\161\5\uffff\1\62\1\uffff"+ + "\6\160\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\157\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\61\5\uffff\12\162\5\uffff\1\62\1\uffff\6\162\24\44\1\uffff"+ + "\1\42\4\uffff\6\162\24\44\105\uffff\27\44\1\uffff\37\44\1\uffff"+ + "\u1f08\44\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff"+ + "\u092e\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff"+ + "\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\165\5\uffff\1\62\1\uffff"+ + "\6\164\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\163\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\165\5\uffff\1\62\1\uffff"+ + "\6\164\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\163\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\165\5\uffff\1\62\1\uffff"+ + "\6\164\24\64\1\uffff\1\57\2\uffff\1\66\1\uffff\6\163\24\60\105"+ + "\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150"+ + "\44\u0170\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200"+ + "\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\61\5\uffff\12\44\5\uffff\1\62\1\uffff\32\44\1\uffff\1\42"+ + "\4\uffff\32\44\105\uffff\27\44\1\uffff\37\44\1\uffff\u1f08\44"+ + "\u1040\uffff\u0150\44\u0170\uffff\u0080\44\u0080\uffff\u092e"+ + "\44\u10d2\uffff\u5200\44\u0c00\uffff\u2bb0\44\u2150\uffff\u0200"+ + "\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44", + "\1\70\1\67\5\uffff\1\61\5\uffff\12\65\5\uffff\1\62\1\uffff"+ + "\32\64\1\uffff\1\57\2\uffff\1\66\1\uffff\32\60\105\uffff\27"+ + "\44\1\uffff\37\44\1\uffff\u1f08\44\u1040\uffff\u0150\44\u0170"+ + "\uffff\u0080\44\u0080\uffff\u092e\44\u10d2\uffff\u5200\44\u0c00"+ + "\uffff\u2bb0\44\u2150\uffff\u0200\44" }; - static final short[] DFA36_eot = DFA.unpackEncodedString(DFA36_eotS); - static final short[] DFA36_eof = DFA.unpackEncodedString(DFA36_eofS); - static final char[] DFA36_min = DFA.unpackEncodedStringToUnsignedChars(DFA36_minS); - static final char[] DFA36_max = DFA.unpackEncodedStringToUnsignedChars(DFA36_maxS); - static final short[] DFA36_accept = DFA.unpackEncodedString(DFA36_acceptS); - static final short[] DFA36_special = DFA.unpackEncodedString(DFA36_specialS); - static final short[][] DFA36_transition; + static final short[] DFA38_eot = DFA.unpackEncodedString(DFA38_eotS); + static final short[] DFA38_eof = DFA.unpackEncodedString(DFA38_eofS); + static final char[] DFA38_min = DFA.unpackEncodedStringToUnsignedChars(DFA38_minS); + static final char[] DFA38_max = DFA.unpackEncodedStringToUnsignedChars(DFA38_maxS); + static final short[] DFA38_accept = DFA.unpackEncodedString(DFA38_acceptS); + static final short[] DFA38_special = DFA.unpackEncodedString(DFA38_specialS); + static final short[][] DFA38_transition; static { - int numStates = DFA36_transitionS.length; - DFA36_transition = new short[numStates][]; + int numStates = DFA38_transitionS.length; + DFA38_transition = new short[numStates][]; for (int i=0; i='\u0000' && LA36_44<='t')||(LA36_44>='v' && LA36_44<='\uFFFF')) ) {s = 71;} + else if ( ((LA38_47>='\u0000' && LA38_47<='t')||(LA38_47>='v' && LA38_47<='\uFFFF')) ) {s = 86;} if ( s>=0 ) return s; break; case 1 : - int LA36_33 = input.LA(1); + int LA38_34 = input.LA(1); s = -1; - if ( (LA36_33=='u') ) {s = 66;} + if ( (LA38_34=='u') ) {s = 81;} - else if ( ((LA36_33>='\u0000' && LA36_33<='t')||(LA36_33>='v' && LA36_33<='\uFFFF')) ) {s = 67;} + else if ( ((LA38_34>='\u0000' && LA38_34<='t')||(LA38_34>='v' && LA38_34<='\uFFFF')) ) {s = 82;} if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 36, _s, input); + new NoViableAltException(getDescription(), 38, _s, input); error(nvae); throw nvae; } 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 635e091659..204816a67d 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTSParser.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTSParser.java @@ -1,6 +1,8 @@ -// $ANTLR !Unknown version! W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g 2009-10-28 12:52:46 +// $ANTLR 3.2 Sep 23, 2009 12:02:23 W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g 2010-02-08 11:27:43 + package org.alfresco.repo.search.impl.parsers; + import org.antlr.runtime.*; import java.util.Stack; import java.util.List; @@ -12,34 +14,34 @@ 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", "RANGE", "PROXIMITY", "DEFAULT", "MANDATORY", "OPTIONAL", "EXCLUDE", "FIELD_DISJUNCTION", "FIELD_CONJUNCTION", "FIELD_NEGATION", "FIELD_GROUP", "FIELD_DEFAULT", "FIELD_MANDATORY", "FIELD_OPTIONAL", "FIELD_EXCLUDE", "FG_TERM", "FG_EXACT_TERM", "FG_PHRASE", "FG_SYNONYM", "FG_PROXIMITY", "FG_RANGE", "FIELD_REF", "INCLUSIVE", "EXCLUSIVE", "QUALIFIER", "PREFIX", "NAME_SPACE", "BOOST", "FUZZY", "TEMPLATE", "PLUS", "BAR", "MINUS", "LPAREN", "RPAREN", "PERCENT", "COMMA", "TILDA", "DECIMAL_INTEGER_LITERAL", "CARAT", "COLON", "EQUALS", "FTSPHRASE", "STAR", "DOTDOT", "TO", "LSQUARE", "LT", "RSQUARE", "GT", "AT", "URI", "ID", "FTSWORD", "FTSPRE", "FTSWILD", "OR", "AND", "NOT", "FLOATING_POINT_LITERAL", "AMP", "EXCLAMATION", "F_ESC", "F_URI_ALPHA", "F_URI_DIGIT", "F_URI_OTHER", "F_HEX", "F_URI_ESC", "DOT", "QUESTION_MARK", "LCURL", "RCURL", "DOLLAR", "DECIMAL_NUMERAL", "INWORD", "START_RANGE_I", "START_RANGE_F", "DIGIT", "EXPONENT", "ZERO_DIGIT", "NON_ZERO_DIGIT", "E", "SIGNED_INTEGER", "WS" + "", "", "", "", "FTS", "DISJUNCTION", "CONJUNCTION", "NEGATION", "TERM", "EXACT_TERM", "PHRASE", "SYNONYM", "RANGE", "PROXIMITY", "DEFAULT", "MANDATORY", "OPTIONAL", "EXCLUDE", "FIELD_DISJUNCTION", "FIELD_CONJUNCTION", "FIELD_NEGATION", "FIELD_GROUP", "FIELD_DEFAULT", "FIELD_MANDATORY", "FIELD_OPTIONAL", "FIELD_EXCLUDE", "FG_TERM", "FG_EXACT_TERM", "FG_PHRASE", "FG_SYNONYM", "FG_PROXIMITY", "FG_RANGE", "FIELD_REF", "INCLUSIVE", "EXCLUSIVE", "QUALIFIER", "PREFIX", "NAME_SPACE", "BOOST", "FUZZY", "TEMPLATE", "PLUS", "BAR", "MINUS", "LPAREN", "RPAREN", "PERCENT", "COMMA", "TILDA", "DECIMAL_INTEGER_LITERAL", "CARAT", "COLON", "EQUALS", "FTSPHRASE", "ID", "FTSWORD", "FTSPRE", "FTSWILD", "NOT", "TO", "FLOATING_POINT_LITERAL", "STAR", "DOTDOT", "LSQUARE", "LT", "RSQUARE", "GT", "AT", "URI", "QUESTION_MARK", "OR", "AND", "AMP", "EXCLAMATION", "F_ESC", "F_URI_ALPHA", "F_URI_DIGIT", "F_URI_OTHER", "F_HEX", "F_URI_ESC", "DOT", "LCURL", "RCURL", "DOLLAR", "DECIMAL_NUMERAL", "INWORD", "START_RANGE_I", "START_RANGE_F", "DIGIT", "EXPONENT", "ZERO_DIGIT", "NON_ZERO_DIGIT", "E", "SIGNED_INTEGER", "WS" }; public static final int PREFIX=36; - public static final int LT=58; + public static final int LT=64; public static final int EXPONENT=89; - public static final int STAR=54; - public static final int LSQUARE=57; + public static final int STAR=61; + public static final int LSQUARE=63; public static final int FG_TERM=26; public static final int FUZZY=39; public static final int FIELD_DISJUNCTION=18; public static final int EQUALS=52; - public static final int F_URI_ALPHA=74; + public static final int F_URI_ALPHA=75; public static final int FG_EXACT_TERM=27; - public static final int NOT=69; + public static final int NOT=58; public static final int FIELD_EXCLUDE=25; public static final int EOF=-1; public static final int NAME_SPACE=37; public static final int RPAREN=45; - public static final int FLOATING_POINT_LITERAL=70; - public static final int EXCLAMATION=72; - public static final int QUESTION_MARK=80; + public static final int FLOATING_POINT_LITERAL=60; + public static final int EXCLAMATION=73; + public static final int QUESTION_MARK=69; public static final int ZERO_DIGIT=90; public static final int FIELD_OPTIONAL=24; public static final int SYNONYM=11; public static final int E=92; public static final int CONJUNCTION=6; - public static final int FTSWORD=64; - public static final int URI=62; + public static final int FTSWORD=55; + public static final int URI=68; public static final int DISJUNCTION=5; public static final int FTS=4; public static final int WS=94; @@ -47,65 +49,65 @@ public class FTSParser extends Parser { public static final int FTSPHRASE=53; public static final int FIELD_CONJUNCTION=19; public static final int INCLUSIVE=33; - public static final int OR=67; - public static final int GT=60; - public static final int F_HEX=77; + public static final int OR=70; + public static final int GT=66; + public static final int F_HEX=78; public static final int DECIMAL_INTEGER_LITERAL=49; - public static final int FTSPRE=65; + public static final int FTSPRE=56; public static final int FG_PHRASE=28; public static final int FIELD_NEGATION=20; public static final int TERM=8; public static final int DOLLAR=83; public static final int START_RANGE_I=86; - public static final int AMP=71; + public static final int AMP=72; public static final int FG_PROXIMITY=30; public static final int EXACT_TERM=9; public static final int START_RANGE_F=87; - public static final int DOTDOT=55; + public static final int DOTDOT=62; public static final int MANDATORY=15; public static final int EXCLUSIVE=34; - public static final int ID=63; - public static final int AND=68; + public static final int ID=54; + public static final int AND=71; public static final int LPAREN=44; public static final int BOOST=38; - public static final int AT=61; + public static final int AT=67; public static final int TILDA=48; public static final int DECIMAL_NUMERAL=84; public static final int COMMA=47; - public static final int F_URI_DIGIT=75; + public static final int F_URI_DIGIT=76; public static final int SIGNED_INTEGER=93; public static final int FIELD_DEFAULT=22; public static final int CARAT=50; public static final int PLUS=41; public static final int DIGIT=88; - public static final int DOT=79; - public static final int F_ESC=73; + public static final int DOT=80; + public static final int F_ESC=74; public static final int EXCLUDE=17; public static final int PERCENT=46; public static final int NON_ZERO_DIGIT=91; public static final int QUALIFIER=35; - public static final int TO=56; + public static final int TO=59; public static final int FIELD_GROUP=21; public static final int DEFAULT=14; public static final int INWORD=85; public static final int RANGE=12; public static final int MINUS=43; - public static final int RSQUARE=59; + public static final int RSQUARE=65; public static final int FIELD_REF=32; public static final int PROXIMITY=13; public static final int PHRASE=10; public static final int OPTIONAL=16; public static final int COLON=51; public static final int LCURL=81; - public static final int F_URI_OTHER=76; + public static final int F_URI_OTHER=77; public static final int NEGATION=7; - public static final int F_URI_ESC=78; + public static final int F_URI_ESC=79; public static final int TEMPLATE=40; public static final int RCURL=82; public static final int FIELD_MANDATORY=23; public static final int FG_RANGE=31; public static final int BAR=42; - public static final int FTSWILD=66; + public static final int FTSWILD=57; // delegates // delegators @@ -129,18 +131,28 @@ public class FTSParser extends Parser { } public String[] getTokenNames() { return FTSParser.tokenNames; } - public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g"; } + public String getGrammarFileName() { return "W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g"; } + public enum Mode + { + CMIS, DEFAULT_CONJUNCTION, DEFAULT_DISJUNCTION + } + private Stack paraphrases = new Stack(); - - private boolean defaultConjunction = true; private boolean defaultFieldConjunction = true; - - public boolean defaultConjunction() + + private Mode mode = Mode.DEFAULT_CONJUNCTION; + + public Mode getMode() { - return defaultConjunction; + return mode; + } + + public void setMode(Mode mode) + { + this.mode = mode; } public boolean defaultFieldConjunction() @@ -148,56 +160,136 @@ public class FTSParser extends Parser { return defaultFieldConjunction; } - public void setDefaultConjunction(boolean defaultConjunction) - { - this.defaultConjunction = defaultConjunction; - } - public void setDefaultFieldConjunction(boolean defaultFieldConjunction) { this.defaultFieldConjunction = defaultFieldConjunction; } - protected void mismatch(IntStream input, int ttype, BitSet follow) throws RecognitionException + protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow) throws RecognitionException { - throw new MismatchedTokenException(ttype, input); + throw new MismatchedTokenException(ttype, input); } - + public Object recoverFromMismatchedSet(IntStream input, RecognitionException e, BitSet follow) throws RecognitionException { - throw e; + throw e; } - public String getErrorMessage(RecognitionException e, String[] tokenNames) + public String getErrorMessage(RecognitionException e, String[] tokenNames) { - List stack = getRuleInvocationStack(e, this.getClass().getName()); - String msg = null; - if(e instanceof NoViableAltException) - { + List stack = getRuleInvocationStack(e, this.getClass().getName()); + String msg = e.getMessage(); + if ( e instanceof UnwantedTokenException ) + { + UnwantedTokenException ute = (UnwantedTokenException)e; + String tokenName=""; + if ( ute.expecting== Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[ute.expecting]; + } + msg = "extraneous input " + getTokenErrorDisplay(ute.getUnexpectedToken()) + + " expecting "+tokenName; + } + else if ( e instanceof MissingTokenException ) + { + MissingTokenException mte = (MissingTokenException)e; + String tokenName=""; + if ( mte.expecting== Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mte.expecting]; + } + msg = "missing " + tokenName+" at " + getTokenErrorDisplay(e.token) + + " (" + getLongTokenErrorDisplay(e.token) +")"; + } + else if ( e instanceof MismatchedTokenException ) + { + MismatchedTokenException mte = (MismatchedTokenException)e; + String tokenName=""; + if ( mte.expecting== Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mte.expecting]; + } + msg = "mismatched input " + getTokenErrorDisplay(e.token) + + " expecting " + tokenName +" (" + getLongTokenErrorDisplay(e.token) + ")"; + } + else if ( e instanceof MismatchedTreeNodeException ) + { + MismatchedTreeNodeException mtne = (MismatchedTreeNodeException)e; + String tokenName=""; + if ( mtne.expecting==Token.EOF ) + { + tokenName = "EOF"; + } + else + { + tokenName = tokenNames[mtne.expecting]; + } + msg = "mismatched tree node: " + mtne.node + " expecting " + tokenName; + } + else if ( e instanceof NoViableAltException ) + { NoViableAltException nvae = (NoViableAltException)e; - msg = "Syntax error at line "+nvae.line+ " position "+nvae.charPositionInLine+" at token " + nvae.token.getText() + - "\n\tNo viable alternative: token="+e.token+ - "\n\t\tDecision No ="+nvae.decisionNumber+ - "\n\t\tState No "+nvae.stateNumber+ - "\n\t\tDecision=<<"+nvae.grammarDecisionDescription+">>"; - } - else - { - msg = super.getErrorMessage(e, tokenNames); - } - if(paraphrases.size() > 0) - { - String paraphrase = (String)paraphrases.peek(); - msg = msg+"\n\t\tParaphrase: "+paraphrase; - } - - return msg+"\n\tStack\n\t\t"+stack; + msg = "no viable alternative at input " + getTokenErrorDisplay(e.token) + + "\n\t (decision=" + nvae.decisionNumber + + " state " + nvae.stateNumber + ")" + + " decision=<<" + nvae.grammarDecisionDescription + ">>"; + } + else if ( e instanceof EarlyExitException ) + { + //EarlyExitException eee = (EarlyExitException)e; + // for development, can add "(decision="+eee.decisionNumber+")" + msg = "required (...)+ loop did not match anything at input " + getTokenErrorDisplay(e.token); + } + else if ( e instanceof MismatchedSetException ) + { + MismatchedSetException mse = (MismatchedSetException)e; + msg = "mismatched input " + getTokenErrorDisplay(e.token) + + " expecting set " + mse.expecting; + } + else if ( e instanceof MismatchedNotSetException ) + { + MismatchedNotSetException mse = (MismatchedNotSetException)e; + msg = "mismatched input " + getTokenErrorDisplay(e.token) + + " expecting set " + mse.expecting; + } + else if ( e instanceof FailedPredicateException ) + { + FailedPredicateException fpe = (FailedPredicateException)e; + msg = "rule " + fpe.ruleName + " failed predicate: {" + fpe.predicateText + "}?"; + } + + if(paraphrases.size() > 0) + { + String paraphrase = (String)paraphrases.peek(); + msg = msg+" "+paraphrase; + } + return msg +"\n\t"+stack; + } + + public String getLongTokenErrorDisplay(Token t) + { + return t.toString(); } - public String getTokenErrorDisplay(Token t) + + public String getErrorString(RecognitionException e) { - return t.toString(); - } + String hdr = getErrorHeader(e); + String msg = getErrorMessage(e, this.getTokenNames()); + return hdr+" "+msg; + } public static class ftsQuery_return extends ParserRuleReturnScope { @@ -206,7 +298,7 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsQuery" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:210:1: ftsQuery : ftsImplicitConjunctionOrDisjunction EOF -> ftsImplicitConjunctionOrDisjunction ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:344:1: ftsQuery : ftsDisjunction EOF -> ftsDisjunction ; public final FTSParser.ftsQuery_return ftsQuery() throws RecognitionException { FTSParser.ftsQuery_return retval = new FTSParser.ftsQuery_return(); retval.start = input.LT(1); @@ -214,29 +306,29 @@ public class FTSParser extends Parser { Object root_0 = null; Token EOF2=null; - FTSParser.ftsImplicitConjunctionOrDisjunction_return ftsImplicitConjunctionOrDisjunction1 = null; + FTSParser.ftsDisjunction_return ftsDisjunction1 = null; Object EOF2_tree=null; RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF"); - RewriteRuleSubtreeStream stream_ftsImplicitConjunctionOrDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsImplicitConjunctionOrDisjunction"); + RewriteRuleSubtreeStream stream_ftsDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsDisjunction"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:211:6: ( ftsImplicitConjunctionOrDisjunction EOF -> ftsImplicitConjunctionOrDisjunction ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:211:9: ftsImplicitConjunctionOrDisjunction EOF + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:345:9: ( ftsDisjunction EOF -> ftsDisjunction ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:346:9: ftsDisjunction EOF { - pushFollow(FOLLOW_ftsImplicitConjunctionOrDisjunction_in_ftsQuery258); - ftsImplicitConjunctionOrDisjunction1=ftsImplicitConjunctionOrDisjunction(); + pushFollow(FOLLOW_ftsDisjunction_in_ftsQuery535); + ftsDisjunction1=ftsDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsImplicitConjunctionOrDisjunction.add(ftsImplicitConjunctionOrDisjunction1.getTree()); - EOF2=(Token)match(input,EOF,FOLLOW_EOF_in_ftsQuery260); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsDisjunction.add(ftsDisjunction1.getTree()); + EOF2=(Token)match(input,EOF,FOLLOW_EOF_in_ftsQuery537); if (state.failed) return retval; if ( state.backtracking==0 ) stream_EOF.add(EOF2); // AST REWRITE - // elements: ftsImplicitConjunctionOrDisjunction + // elements: ftsDisjunction // token labels: // rule labels: retval // token list labels: @@ -247,9 +339,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 212:3: -> ftsImplicitConjunctionOrDisjunction + // 347:17: -> ftsDisjunction { - adaptor.addChild(root_0, stream_ftsImplicitConjunctionOrDisjunction.nextTree()); + adaptor.addChild(root_0, stream_ftsDisjunction.nextTree()); } @@ -275,190 +367,84 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsQuery" - public static class ftsImplicitConjunctionOrDisjunction_return extends ParserRuleReturnScope { + public static class ftsDisjunction_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; - // $ANTLR start "ftsImplicitConjunctionOrDisjunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:218: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(); + // $ANTLR start "ftsDisjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:355:1: ftsDisjunction : ({...}? => cmisExplicitDisjunction | {...}? => ftsExplicitDisjunction | {...}? => ftsImplicitDisjunction ); + public final FTSParser.ftsDisjunction_return ftsDisjunction() throws RecognitionException { + FTSParser.ftsDisjunction_return retval = new FTSParser.ftsDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction3 = null; + FTSParser.cmisExplicitDisjunction_return cmisExplicitDisjunction3 = null; FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction4 = null; - FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction5 = null; - - FTSParser.ftsExplicitDisjunction_return ftsExplicitDisjunction6 = null; + FTSParser.ftsImplicitDisjunction_return ftsImplicitDisjunction5 = null; + - RewriteRuleSubtreeStream stream_ftsExplicitDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsExplicitDisjunction"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:219:2: ({...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) ) - int alt3=2; - alt3 = dfa3.predict(input); - switch (alt3) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:356:9: ({...}? => cmisExplicitDisjunction | {...}? => ftsExplicitDisjunction | {...}? => ftsImplicitDisjunction ) + int alt1=3; + alt1 = dfa1.predict(input); + switch (alt1) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:219:4: {...}? ftsExplicitDisjunction ( ftsExplicitDisjunction )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:357:9: {...}? => cmisExplicitDisjunction { - if ( !((defaultConjunction())) ) { + root_0 = (Object)adaptor.nil(); + + if ( !((getMode() == Mode.CMIS)) ) { if (state.backtracking>0) {state.failed=true; return retval;} - throw new FailedPredicateException(input, "ftsImplicitConjunctionOrDisjunction", "defaultConjunction()"); + throw new FailedPredicateException(input, "ftsDisjunction", "getMode() == Mode.CMIS"); } - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction284); - ftsExplicitDisjunction3=ftsExplicitDisjunction(); + pushFollow(FOLLOW_cmisExplicitDisjunction_in_ftsDisjunction596); + cmisExplicitDisjunction3=cmisExplicitDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction3.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:219:51: ( ftsExplicitDisjunction )* - loop1: - do { - int alt1=2; - int LA1_0 = input.LA(1); + if ( state.backtracking==0 ) adaptor.addChild(root_0, cmisExplicitDisjunction3.getTree()); - if ( ((LA1_0>=PLUS && LA1_0<=LPAREN)||LA1_0==PERCENT||(LA1_0>=TILDA && LA1_0<=DECIMAL_INTEGER_LITERAL)||(LA1_0>=EQUALS && LA1_0<=FTSPHRASE)||(LA1_0>=TO && LA1_0<=LT)||(LA1_0>=AT && LA1_0<=FLOATING_POINT_LITERAL)||LA1_0==EXCLAMATION) ) { - alt1=1; - } - - - switch (alt1) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:219:52: ftsExplicitDisjunction - { - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction287); - ftsExplicitDisjunction4=ftsExplicitDisjunction(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction4.getTree()); - - } - break; - - default : - break loop1; - } - } while (true); - - - - // AST REWRITE - // elements: ftsExplicitDisjunction - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 220:3: -> ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:220:6: ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); - - if ( !(stream_ftsExplicitDisjunction.hasNext()) ) { - throw new RewriteEarlyExitException(); - } - while ( stream_ftsExplicitDisjunction.hasNext() ) { - adaptor.addChild(root_1, stream_ftsExplicitDisjunction.nextTree()); - - } - stream_ftsExplicitDisjunction.reset(); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;} } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:221:5: ftsExplicitDisjunction ( ftsExplicitDisjunction )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:358:11: {...}? => ftsExplicitDisjunction { - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction306); - ftsExplicitDisjunction5=ftsExplicitDisjunction(); + root_0 = (Object)adaptor.nil(); + + if ( !((getMode() == Mode.DEFAULT_CONJUNCTION)) ) { + if (state.backtracking>0) {state.failed=true; return retval;} + throw new FailedPredicateException(input, "ftsDisjunction", "getMode() == Mode.DEFAULT_CONJUNCTION"); + } + pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsDisjunction611); + ftsExplicitDisjunction4=ftsExplicitDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction5.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:221:28: ( ftsExplicitDisjunction )* - loop2: - do { - int alt2=2; - int LA2_0 = input.LA(1); - - if ( ((LA2_0>=PLUS && LA2_0<=LPAREN)||LA2_0==PERCENT||(LA2_0>=TILDA && LA2_0<=DECIMAL_INTEGER_LITERAL)||(LA2_0>=EQUALS && LA2_0<=FTSPHRASE)||(LA2_0>=TO && LA2_0<=LT)||(LA2_0>=AT && LA2_0<=FLOATING_POINT_LITERAL)||LA2_0==EXCLAMATION) ) { - alt2=1; - } - - - switch (alt2) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:221:29: ftsExplicitDisjunction - { - pushFollow(FOLLOW_ftsExplicitDisjunction_in_ftsImplicitConjunctionOrDisjunction309); - ftsExplicitDisjunction6=ftsExplicitDisjunction(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsExplicitDisjunction.add(ftsExplicitDisjunction6.getTree()); - - } - break; - - default : - break loop2; - } - } while (true); - - - - // AST REWRITE - // elements: ftsExplicitDisjunction - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 222:3: -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:222:6: ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); - - if ( !(stream_ftsExplicitDisjunction.hasNext()) ) { - throw new RewriteEarlyExitException(); - } - while ( stream_ftsExplicitDisjunction.hasNext() ) { - adaptor.addChild(root_1, stream_ftsExplicitDisjunction.nextTree()); - - } - stream_ftsExplicitDisjunction.reset(); - - adaptor.addChild(root_0, root_1); - } + if ( state.backtracking==0 ) adaptor.addChild(root_0, ftsExplicitDisjunction4.getTree()); } + break; + case 3 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:359:11: {...}? => ftsImplicitDisjunction + { + root_0 = (Object)adaptor.nil(); + + if ( !((getMode() == Mode.DEFAULT_DISJUNCTION)) ) { + if (state.backtracking>0) {state.failed=true; return retval;} + throw new FailedPredicateException(input, "ftsDisjunction", "getMode() == Mode.DEFAULT_DISJUNCTION"); + } + pushFollow(FOLLOW_ftsImplicitDisjunction_in_ftsDisjunction626); + ftsImplicitDisjunction5=ftsImplicitDisjunction(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) adaptor.addChild(root_0, ftsImplicitDisjunction5.getTree()); - retval.tree = root_0;} } break; @@ -480,7 +466,7 @@ public class FTSParser extends Parser { } return retval; } - // $ANTLR end "ftsImplicitConjunctionOrDisjunction" + // $ANTLR end "ftsDisjunction" public static class ftsExplicitDisjunction_return extends ParserRuleReturnScope { Object tree; @@ -488,66 +474,72 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsExplicitDisjunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:229:1: ftsExplicitDisjunction : ftsExplictConjunction ( ( or )=> or ftsExplictConjunction )* -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:362:1: ftsExplicitDisjunction : ftsImplicitConjunction ( or ftsImplicitConjunction )* -> ^( DISJUNCTION ( ftsImplicitConjunction )+ ) ; 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; - FTSParser.ftsExplictConjunction_return ftsExplictConjunction7 = null; + FTSParser.ftsImplicitConjunction_return ftsImplicitConjunction6 = null; - FTSParser.or_return or8 = null; + FTSParser.or_return or7 = null; - FTSParser.ftsExplictConjunction_return ftsExplictConjunction9 = null; + FTSParser.ftsImplicitConjunction_return ftsImplicitConjunction8 = null; RewriteRuleSubtreeStream stream_or=new RewriteRuleSubtreeStream(adaptor,"rule or"); - RewriteRuleSubtreeStream stream_ftsExplictConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsExplictConjunction"); + RewriteRuleSubtreeStream stream_ftsImplicitConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsImplicitConjunction"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:230:2: ( ftsExplictConjunction ( ( or )=> or ftsExplictConjunction )* -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:230:4: ftsExplictConjunction ( ( or )=> or ftsExplictConjunction )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:363:9: ( ftsImplicitConjunction ( or ftsImplicitConjunction )* -> ^( DISJUNCTION ( ftsImplicitConjunction )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:364:9: ftsImplicitConjunction ( or ftsImplicitConjunction )* { - pushFollow(FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction336); - ftsExplictConjunction7=ftsExplictConjunction(); + pushFollow(FOLLOW_ftsImplicitConjunction_in_ftsExplicitDisjunction659); + ftsImplicitConjunction6=ftsImplicitConjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsExplictConjunction.add(ftsExplictConjunction7.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:230:26: ( ( or )=> or ftsExplictConjunction )* - loop4: + if ( state.backtracking==0 ) stream_ftsImplicitConjunction.add(ftsImplicitConjunction6.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:364:32: ( or ftsImplicitConjunction )* + loop2: do { - int alt4=2; - alt4 = dfa4.predict(input); - switch (alt4) { + int alt2=2; + int LA2_0 = input.LA(1); + + if ( (LA2_0==BAR||LA2_0==OR) ) { + alt2=1; + } + + + switch (alt2) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:230:27: ( or )=> or ftsExplictConjunction + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:364:33: or ftsImplicitConjunction { - pushFollow(FOLLOW_or_in_ftsExplicitDisjunction345); - or8=or(); + pushFollow(FOLLOW_or_in_ftsExplicitDisjunction662); + or7=or(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_or.add(or8.getTree()); - pushFollow(FOLLOW_ftsExplictConjunction_in_ftsExplicitDisjunction347); - ftsExplictConjunction9=ftsExplictConjunction(); + if ( state.backtracking==0 ) stream_or.add(or7.getTree()); + pushFollow(FOLLOW_ftsImplicitConjunction_in_ftsExplicitDisjunction664); + ftsImplicitConjunction8=ftsImplicitConjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsExplictConjunction.add(ftsExplictConjunction9.getTree()); + if ( state.backtracking==0 ) stream_ftsImplicitConjunction.add(ftsImplicitConjunction8.getTree()); } break; default : - break loop4; + break loop2; } } while (true); // AST REWRITE - // elements: ftsExplictConjunction + // elements: ftsImplicitConjunction // token labels: // rule labels: retval // token list labels: @@ -558,21 +550,21 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 231:3: -> ^( DISJUNCTION ( ftsExplictConjunction )+ ) + // 365:17: -> ^( DISJUNCTION ( ftsImplicitConjunction )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:231:6: ^( DISJUNCTION ( ftsExplictConjunction )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:366:25: ^( DISJUNCTION ( ftsImplicitConjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); - if ( !(stream_ftsExplictConjunction.hasNext()) ) { + if ( !(stream_ftsImplicitConjunction.hasNext()) ) { throw new RewriteEarlyExitException(); } - while ( stream_ftsExplictConjunction.hasNext() ) { - adaptor.addChild(root_1, stream_ftsExplictConjunction.nextTree()); + while ( stream_ftsImplicitConjunction.hasNext() ) { + adaptor.addChild(root_1, stream_ftsImplicitConjunction.nextTree()); } - stream_ftsExplictConjunction.reset(); + stream_ftsImplicitConjunction.reset(); adaptor.addChild(root_0, root_1); } @@ -601,65 +593,326 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsExplicitDisjunction" - public static class ftsExplictConjunction_return extends ParserRuleReturnScope { + public static class cmisExplicitDisjunction_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; - // $ANTLR start "ftsExplictConjunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:237:1: ftsExplictConjunction : ftsPrefixed ( ( and )=> and ftsPrefixed )* -> ^( CONJUNCTION ( ftsPrefixed )+ ) ; - public final FTSParser.ftsExplictConjunction_return ftsExplictConjunction() throws RecognitionException { - FTSParser.ftsExplictConjunction_return retval = new FTSParser.ftsExplictConjunction_return(); + // $ANTLR start "cmisExplicitDisjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:369:1: cmisExplicitDisjunction : cmisConjunction ( or cmisConjunction )* -> ^( DISJUNCTION ( cmisConjunction )+ ) ; + public final FTSParser.cmisExplicitDisjunction_return cmisExplicitDisjunction() throws RecognitionException { + FTSParser.cmisExplicitDisjunction_return retval = new FTSParser.cmisExplicitDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - FTSParser.ftsPrefixed_return ftsPrefixed10 = null; + FTSParser.cmisConjunction_return cmisConjunction9 = null; - FTSParser.and_return and11 = null; + FTSParser.or_return or10 = null; - FTSParser.ftsPrefixed_return ftsPrefixed12 = null; + FTSParser.cmisConjunction_return cmisConjunction11 = null; - RewriteRuleSubtreeStream stream_ftsPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule ftsPrefixed"); - RewriteRuleSubtreeStream stream_and=new RewriteRuleSubtreeStream(adaptor,"rule and"); + RewriteRuleSubtreeStream stream_cmisConjunction=new RewriteRuleSubtreeStream(adaptor,"rule cmisConjunction"); + RewriteRuleSubtreeStream stream_or=new RewriteRuleSubtreeStream(adaptor,"rule or"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:238:2: ( ftsPrefixed ( ( and )=> and ftsPrefixed )* -> ^( CONJUNCTION ( ftsPrefixed )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:238:4: ftsPrefixed ( ( and )=> and ftsPrefixed )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:370:9: ( cmisConjunction ( or cmisConjunction )* -> ^( DISJUNCTION ( cmisConjunction )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:371:9: cmisConjunction ( or cmisConjunction )* { - pushFollow(FOLLOW_ftsPrefixed_in_ftsExplictConjunction374); - ftsPrefixed10=ftsPrefixed(); + pushFollow(FOLLOW_cmisConjunction_in_cmisExplicitDisjunction748); + cmisConjunction9=cmisConjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsPrefixed.add(ftsPrefixed10.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:238:16: ( ( and )=> and ftsPrefixed )* + if ( state.backtracking==0 ) stream_cmisConjunction.add(cmisConjunction9.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:371:25: ( or cmisConjunction )* + loop3: + do { + int alt3=2; + int LA3_0 = input.LA(1); + + if ( (LA3_0==BAR||LA3_0==OR) ) { + alt3=1; + } + + + switch (alt3) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:371:26: or cmisConjunction + { + pushFollow(FOLLOW_or_in_cmisExplicitDisjunction751); + or10=or(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_or.add(or10.getTree()); + pushFollow(FOLLOW_cmisConjunction_in_cmisExplicitDisjunction753); + cmisConjunction11=cmisConjunction(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_cmisConjunction.add(cmisConjunction11.getTree()); + + } + break; + + default : + break loop3; + } + } while (true); + + + + // AST REWRITE + // elements: cmisConjunction + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 372:17: -> ^( DISJUNCTION ( cmisConjunction )+ ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:373:25: ^( DISJUNCTION ( cmisConjunction )+ ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); + + if ( !(stream_cmisConjunction.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_cmisConjunction.hasNext() ) { + adaptor.addChild(root_1, stream_cmisConjunction.nextTree()); + + } + stream_cmisConjunction.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "cmisExplicitDisjunction" + + public static class ftsImplicitDisjunction_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ftsImplicitDisjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:376:1: ftsImplicitDisjunction : ( ( or )? ftsExplicitConjunction )+ -> ^( DISJUNCTION ( ftsExplicitConjunction )+ ) ; + public final FTSParser.ftsImplicitDisjunction_return ftsImplicitDisjunction() throws RecognitionException { + FTSParser.ftsImplicitDisjunction_return retval = new FTSParser.ftsImplicitDisjunction_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.or_return or12 = null; + + FTSParser.ftsExplicitConjunction_return ftsExplicitConjunction13 = null; + + + RewriteRuleSubtreeStream stream_or=new RewriteRuleSubtreeStream(adaptor,"rule or"); + RewriteRuleSubtreeStream stream_ftsExplicitConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsExplicitConjunction"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:377:9: ( ( ( or )? ftsExplicitConjunction )+ -> ^( DISJUNCTION ( ftsExplicitConjunction )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:9: ( ( or )? ftsExplicitConjunction )+ + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:9: ( ( or )? ftsExplicitConjunction )+ + int cnt5=0; loop5: do { int alt5=2; alt5 = dfa5.predict(input); switch (alt5) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:238:17: ( and )=> and ftsPrefixed + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:10: ( or )? ftsExplicitConjunction { - pushFollow(FOLLOW_and_in_ftsExplictConjunction383); - and11=and(); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:10: ( or )? + int alt4=2; + alt4 = dfa4.predict(input); + switch (alt4) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:10: or + { + pushFollow(FOLLOW_or_in_ftsImplicitDisjunction838); + or12=or(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_or.add(or12.getTree()); + + } + break; + + } + + pushFollow(FOLLOW_ftsExplicitConjunction_in_ftsImplicitDisjunction841); + ftsExplicitConjunction13=ftsExplicitConjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_and.add(and11.getTree()); - pushFollow(FOLLOW_ftsPrefixed_in_ftsExplictConjunction385); - ftsPrefixed12=ftsPrefixed(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsPrefixed.add(ftsPrefixed12.getTree()); + if ( state.backtracking==0 ) stream_ftsExplicitConjunction.add(ftsExplicitConjunction13.getTree()); } break; default : - break loop5; + if ( cnt5 >= 1 ) break loop5; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(5, input); + throw eee; + } + cnt5++; + } while (true); + + + + // AST REWRITE + // elements: ftsExplicitConjunction + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 379:17: -> ^( DISJUNCTION ( ftsExplicitConjunction )+ ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:380:25: ^( DISJUNCTION ( ftsExplicitConjunction )+ ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DISJUNCTION, "DISJUNCTION"), root_1); + + if ( !(stream_ftsExplicitConjunction.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_ftsExplicitConjunction.hasNext() ) { + adaptor.addChild(root_1, stream_ftsExplicitConjunction.nextTree()); + + } + stream_ftsExplicitConjunction.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "ftsImplicitDisjunction" + + public static class ftsExplicitConjunction_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ftsExplicitConjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:387:1: ftsExplicitConjunction : ftsPrefixed ( and ftsPrefixed )* -> ^( CONJUNCTION ( ftsPrefixed )+ ) ; + public final FTSParser.ftsExplicitConjunction_return ftsExplicitConjunction() throws RecognitionException { + FTSParser.ftsExplicitConjunction_return retval = new FTSParser.ftsExplicitConjunction_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.ftsPrefixed_return ftsPrefixed14 = null; + + FTSParser.and_return and15 = null; + + FTSParser.ftsPrefixed_return ftsPrefixed16 = null; + + + RewriteRuleSubtreeStream stream_ftsPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule ftsPrefixed"); + RewriteRuleSubtreeStream stream_and=new RewriteRuleSubtreeStream(adaptor,"rule and"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:388:9: ( ftsPrefixed ( and ftsPrefixed )* -> ^( CONJUNCTION ( ftsPrefixed )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:389:9: ftsPrefixed ( and ftsPrefixed )* + { + pushFollow(FOLLOW_ftsPrefixed_in_ftsExplicitConjunction928); + ftsPrefixed14=ftsPrefixed(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsPrefixed.add(ftsPrefixed14.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:389:21: ( and ftsPrefixed )* + loop6: + do { + int alt6=2; + int LA6_0 = input.LA(1); + + if ( ((LA6_0>=AND && LA6_0<=AMP)) ) { + alt6=1; + } + + + switch (alt6) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:389:22: and ftsPrefixed + { + pushFollow(FOLLOW_and_in_ftsExplicitConjunction931); + and15=and(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_and.add(and15.getTree()); + pushFollow(FOLLOW_ftsPrefixed_in_ftsExplicitConjunction933); + ftsPrefixed16=ftsPrefixed(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsPrefixed.add(ftsPrefixed16.getTree()); + + } + break; + + default : + break loop6; } } while (true); @@ -677,9 +930,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 239:3: -> ^( CONJUNCTION ( ftsPrefixed )+ ) + // 390:17: -> ^( CONJUNCTION ( ftsPrefixed )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:239:6: ^( CONJUNCTION ( ftsPrefixed )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:391:25: ^( CONJUNCTION ( ftsPrefixed )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); @@ -718,7 +971,251 @@ public class FTSParser extends Parser { } return retval; } - // $ANTLR end "ftsExplictConjunction" + // $ANTLR end "ftsExplicitConjunction" + + public static class ftsImplicitConjunction_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ftsImplicitConjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:394:1: ftsImplicitConjunction : ( ( and )? ftsPrefixed )+ -> ^( CONJUNCTION ( ftsPrefixed )+ ) ; + public final FTSParser.ftsImplicitConjunction_return ftsImplicitConjunction() throws RecognitionException { + FTSParser.ftsImplicitConjunction_return retval = new FTSParser.ftsImplicitConjunction_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.and_return and17 = null; + + FTSParser.ftsPrefixed_return ftsPrefixed18 = null; + + + RewriteRuleSubtreeStream stream_ftsPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule ftsPrefixed"); + RewriteRuleSubtreeStream stream_and=new RewriteRuleSubtreeStream(adaptor,"rule and"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:395:9: ( ( ( and )? ftsPrefixed )+ -> ^( CONJUNCTION ( ftsPrefixed )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:396:9: ( ( and )? ftsPrefixed )+ + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:396:9: ( ( and )? ftsPrefixed )+ + int cnt8=0; + loop8: + do { + int alt8=2; + alt8 = dfa8.predict(input); + switch (alt8) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:396:10: ( and )? ftsPrefixed + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:396:10: ( and )? + int alt7=2; + alt7 = dfa7.predict(input); + switch (alt7) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:396:10: and + { + pushFollow(FOLLOW_and_in_ftsImplicitConjunction1018); + and17=and(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_and.add(and17.getTree()); + + } + break; + + } + + pushFollow(FOLLOW_ftsPrefixed_in_ftsImplicitConjunction1021); + ftsPrefixed18=ftsPrefixed(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsPrefixed.add(ftsPrefixed18.getTree()); + + } + break; + + default : + if ( cnt8 >= 1 ) break loop8; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(8, input); + throw eee; + } + cnt8++; + } while (true); + + + + // AST REWRITE + // elements: ftsPrefixed + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 397:17: -> ^( CONJUNCTION ( ftsPrefixed )+ ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:398:25: ^( CONJUNCTION ( ftsPrefixed )+ ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); + + if ( !(stream_ftsPrefixed.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_ftsPrefixed.hasNext() ) { + adaptor.addChild(root_1, stream_ftsPrefixed.nextTree()); + + } + stream_ftsPrefixed.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "ftsImplicitConjunction" + + public static class cmisConjunction_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "cmisConjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:401:1: cmisConjunction : ( cmisPrefixed )+ -> ^( CONJUNCTION ( cmisPrefixed )+ ) ; + public final FTSParser.cmisConjunction_return cmisConjunction() throws RecognitionException { + FTSParser.cmisConjunction_return retval = new FTSParser.cmisConjunction_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.cmisPrefixed_return cmisPrefixed19 = null; + + + RewriteRuleSubtreeStream stream_cmisPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule cmisPrefixed"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:402:9: ( ( cmisPrefixed )+ -> ^( CONJUNCTION ( cmisPrefixed )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:403:9: ( cmisPrefixed )+ + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:403:9: ( cmisPrefixed )+ + int cnt9=0; + loop9: + do { + int alt9=2; + int LA9_0 = input.LA(1); + + if ( (LA9_0==MINUS||LA9_0==DECIMAL_INTEGER_LITERAL||(LA9_0>=FTSPHRASE && LA9_0<=STAR)||LA9_0==QUESTION_MARK) ) { + alt9=1; + } + + + switch (alt9) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:403:9: cmisPrefixed + { + pushFollow(FOLLOW_cmisPrefixed_in_cmisConjunction1105); + cmisPrefixed19=cmisPrefixed(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_cmisPrefixed.add(cmisPrefixed19.getTree()); + + } + break; + + default : + if ( cnt9 >= 1 ) break loop9; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(9, input); + throw eee; + } + cnt9++; + } while (true); + + + + // AST REWRITE + // elements: cmisPrefixed + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 404:17: -> ^( CONJUNCTION ( cmisPrefixed )+ ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:405:25: ^( CONJUNCTION ( cmisPrefixed )+ ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONJUNCTION, "CONJUNCTION"), root_1); + + if ( !(stream_cmisPrefixed.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_cmisPrefixed.hasNext() ) { + adaptor.addChild(root_1, stream_cmisPrefixed.nextTree()); + + } + stream_cmisPrefixed.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "cmisConjunction" public static class ftsPrefixed_return extends ParserRuleReturnScope { Object tree; @@ -726,42 +1223,42 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsPrefixed" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:248:1: ftsPrefixed : ( ( not )=> not ftsTest ( boost )? -> ^( NEGATION ftsTest ( boost )? ) | ftsTest ( boost )? -> ^( DEFAULT ftsTest ( boost )? ) | PLUS ftsTest ( boost )? -> ^( MANDATORY ftsTest ( boost )? ) | BAR ftsTest ( boost )? -> ^( OPTIONAL ftsTest ( boost )? ) | MINUS ftsTest ( boost )? -> ^( EXCLUDE ftsTest ( boost )? ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:415:1: ftsPrefixed : ( ( not )=> not ftsTest ( boost )? -> ^( NEGATION ftsTest ( boost )? ) | ftsTest ( boost )? -> ^( DEFAULT ftsTest ( boost )? ) | PLUS ftsTest ( boost )? -> ^( MANDATORY ftsTest ( boost )? ) | BAR ftsTest ( boost )? -> ^( OPTIONAL ftsTest ( boost )? ) | MINUS ftsTest ( boost )? -> ^( EXCLUDE ftsTest ( boost )? ) ); public final FTSParser.ftsPrefixed_return ftsPrefixed() throws RecognitionException { FTSParser.ftsPrefixed_return retval = new FTSParser.ftsPrefixed_return(); retval.start = input.LT(1); Object root_0 = null; - Token PLUS18=null; - Token BAR21=null; - Token MINUS24=null; - FTSParser.not_return not13 = null; + Token PLUS25=null; + Token BAR28=null; + Token MINUS31=null; + FTSParser.not_return not20 = null; - FTSParser.ftsTest_return ftsTest14 = null; + FTSParser.ftsTest_return ftsTest21 = null; - FTSParser.boost_return boost15 = null; + FTSParser.boost_return boost22 = null; - FTSParser.ftsTest_return ftsTest16 = null; + FTSParser.ftsTest_return ftsTest23 = null; - FTSParser.boost_return boost17 = null; + FTSParser.boost_return boost24 = null; - FTSParser.ftsTest_return ftsTest19 = null; + FTSParser.ftsTest_return ftsTest26 = null; - FTSParser.boost_return boost20 = null; + FTSParser.boost_return boost27 = null; - FTSParser.ftsTest_return ftsTest22 = null; + FTSParser.ftsTest_return ftsTest29 = null; - FTSParser.boost_return boost23 = null; + FTSParser.boost_return boost30 = null; - FTSParser.ftsTest_return ftsTest25 = null; + FTSParser.ftsTest_return ftsTest32 = null; - FTSParser.boost_return boost26 = null; + FTSParser.boost_return boost33 = null; - Object PLUS18_tree=null; - Object BAR21_tree=null; - Object MINUS24_tree=null; + Object PLUS25_tree=null; + Object BAR28_tree=null; + Object MINUS31_tree=null; RewriteRuleTokenStream stream_PLUS=new RewriteRuleTokenStream(adaptor,"token PLUS"); RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS"); RewriteRuleTokenStream stream_BAR=new RewriteRuleTokenStream(adaptor,"token BAR"); @@ -769,42 +1266,42 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_ftsTest=new RewriteRuleSubtreeStream(adaptor,"rule ftsTest"); RewriteRuleSubtreeStream stream_boost=new RewriteRuleSubtreeStream(adaptor,"rule boost"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:249:6: ( ( not )=> not ftsTest ( boost )? -> ^( NEGATION ftsTest ( boost )? ) | ftsTest ( boost )? -> ^( DEFAULT ftsTest ( boost )? ) | PLUS ftsTest ( boost )? -> ^( MANDATORY ftsTest ( boost )? ) | BAR ftsTest ( boost )? -> ^( OPTIONAL ftsTest ( boost )? ) | MINUS ftsTest ( boost )? -> ^( EXCLUDE ftsTest ( boost )? ) ) - int alt11=5; - alt11 = dfa11.predict(input); - switch (alt11) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:416:9: ( ( not )=> not ftsTest ( boost )? -> ^( NEGATION ftsTest ( boost )? ) | ftsTest ( boost )? -> ^( DEFAULT ftsTest ( boost )? ) | PLUS ftsTest ( boost )? -> ^( MANDATORY ftsTest ( boost )? ) | BAR ftsTest ( boost )? -> ^( OPTIONAL ftsTest ( boost )? ) | MINUS ftsTest ( boost )? -> ^( EXCLUDE ftsTest ( boost )? ) ) + int alt15=5; + alt15 = dfa15.predict(input); + switch (alt15) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:249:8: ( not )=> not ftsTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:417:9: ( not )=> not ftsTest ( boost )? { - pushFollow(FOLLOW_not_in_ftsPrefixed426); - not13=not(); + pushFollow(FOLLOW_not_in_ftsPrefixed1197); + not20=not(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_not.add(not13.getTree()); - pushFollow(FOLLOW_ftsTest_in_ftsPrefixed428); - ftsTest14=ftsTest(); + if ( state.backtracking==0 ) stream_not.add(not20.getTree()); + pushFollow(FOLLOW_ftsTest_in_ftsPrefixed1199); + ftsTest21=ftsTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest14.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:249:30: ( boost )? - int alt6=2; - int LA6_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest21.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:417:30: ( boost )? + int alt10=2; + int LA10_0 = input.LA(1); - if ( (LA6_0==CARAT) ) { - alt6=1; + if ( (LA10_0==CARAT) ) { + alt10=1; } - switch (alt6) { + switch (alt10) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:249:30: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:417:30: boost { - pushFollow(FOLLOW_boost_in_ftsPrefixed431); - boost15=boost(); + pushFollow(FOLLOW_boost_in_ftsPrefixed1201); + boost22=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost15.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost22.getTree()); } break; @@ -814,7 +1311,7 @@ public class FTSParser extends Parser { // AST REWRITE - // elements: ftsTest, boost + // elements: boost, ftsTest // token labels: // rule labels: retval // token list labels: @@ -825,15 +1322,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 250:3: -> ^( NEGATION ftsTest ( boost )? ) + // 418:17: -> ^( NEGATION ftsTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:250:6: ^( NEGATION ftsTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:419:25: ^( NEGATION ftsTest ( boost )? ) { 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()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:250:26: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:419:44: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -849,31 +1346,31 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:251:8: ftsTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:420:11: ftsTest ( boost )? { - pushFollow(FOLLOW_ftsTest_in_ftsPrefixed455); - ftsTest16=ftsTest(); + pushFollow(FOLLOW_ftsTest_in_ftsPrefixed1265); + ftsTest23=ftsTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest16.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:251:17: ( boost )? - int alt7=2; - int LA7_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest23.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:420:19: ( boost )? + int alt11=2; + int LA11_0 = input.LA(1); - if ( (LA7_0==CARAT) ) { - alt7=1; + if ( (LA11_0==CARAT) ) { + alt11=1; } - switch (alt7) { + switch (alt11) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:251:17: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:420:19: boost { - pushFollow(FOLLOW_boost_in_ftsPrefixed458); - boost17=boost(); + pushFollow(FOLLOW_boost_in_ftsPrefixed1267); + boost24=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost17.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost24.getTree()); } break; @@ -894,15 +1391,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 252:3: -> ^( DEFAULT ftsTest ( boost )? ) + // 421:17: -> ^( DEFAULT ftsTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:252:6: ^( DEFAULT ftsTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:422:25: ^( DEFAULT ftsTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DEFAULT, "DEFAULT"), root_1); adaptor.addChild(root_1, stream_ftsTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:252:24: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:422:43: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -918,106 +1415,34 @@ public class FTSParser extends Parser { } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:253:11: PLUS ftsTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:423:11: PLUS ftsTest ( boost )? { - PLUS18=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsPrefixed484); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_PLUS.add(PLUS18); + PLUS25=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsPrefixed1331); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_PLUS.add(PLUS25); - pushFollow(FOLLOW_ftsTest_in_ftsPrefixed486); - ftsTest19=ftsTest(); + pushFollow(FOLLOW_ftsTest_in_ftsPrefixed1333); + ftsTest26=ftsTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest19.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:253:24: ( boost )? - int alt8=2; - int LA8_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest26.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:423:24: ( boost )? + int alt12=2; + int LA12_0 = input.LA(1); - if ( (LA8_0==CARAT) ) { - alt8=1; + if ( (LA12_0==CARAT) ) { + alt12=1; } - switch (alt8) { + switch (alt12) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:253:24: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:423:24: boost { - pushFollow(FOLLOW_boost_in_ftsPrefixed488); - boost20=boost(); + pushFollow(FOLLOW_boost_in_ftsPrefixed1335); + boost27=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost20.getTree()); - - } - break; - - } - - - - // AST REWRITE - // elements: boost, ftsTest - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 254:17: -> ^( MANDATORY ftsTest ( boost )? ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:254:20: ^( MANDATORY ftsTest ( boost )? ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(MANDATORY, "MANDATORY"), root_1); - - adaptor.addChild(root_1, stream_ftsTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:254:40: ( boost )? - if ( stream_boost.hasNext() ) { - adaptor.addChild(root_1, stream_boost.nextTree()); - - } - stream_boost.reset(); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;} - } - break; - case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:255:11: BAR ftsTest ( boost )? - { - BAR21=(Token)match(input,BAR,FOLLOW_BAR_in_ftsPrefixed528); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_BAR.add(BAR21); - - pushFollow(FOLLOW_ftsTest_in_ftsPrefixed530); - ftsTest22=ftsTest(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest22.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:255:23: ( boost )? - int alt9=2; - int LA9_0 = input.LA(1); - - if ( (LA9_0==CARAT) ) { - alt9=1; - } - switch (alt9) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:255:23: boost - { - pushFollow(FOLLOW_boost_in_ftsPrefixed532); - boost23=boost(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost23.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost27.getTree()); } break; @@ -1038,15 +1463,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 256:17: -> ^( OPTIONAL ftsTest ( boost )? ) + // 424:17: -> ^( MANDATORY ftsTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:256:20: ^( OPTIONAL ftsTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:425:25: ^( MANDATORY ftsTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTIONAL, "OPTIONAL"), root_1); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(MANDATORY, "MANDATORY"), root_1); adaptor.addChild(root_1, stream_ftsTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:256:39: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:425:45: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -1061,35 +1486,35 @@ public class FTSParser extends Parser { retval.tree = root_0;} } break; - case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:257:11: MINUS ftsTest ( boost )? + case 4 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:426:11: BAR ftsTest ( boost )? { - MINUS24=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsPrefixed572); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_MINUS.add(MINUS24); + BAR28=(Token)match(input,BAR,FOLLOW_BAR_in_ftsPrefixed1399); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BAR.add(BAR28); - pushFollow(FOLLOW_ftsTest_in_ftsPrefixed574); - ftsTest25=ftsTest(); + pushFollow(FOLLOW_ftsTest_in_ftsPrefixed1401); + ftsTest29=ftsTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest25.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:257:25: ( boost )? - int alt10=2; - int LA10_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest29.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:426:23: ( boost )? + int alt13=2; + int LA13_0 = input.LA(1); - if ( (LA10_0==CARAT) ) { - alt10=1; + if ( (LA13_0==CARAT) ) { + alt13=1; } - switch (alt10) { + switch (alt13) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:257:25: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:426:23: boost { - pushFollow(FOLLOW_boost_in_ftsPrefixed576); - boost26=boost(); + pushFollow(FOLLOW_boost_in_ftsPrefixed1403); + boost30=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost26.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost30.getTree()); } break; @@ -1110,15 +1535,87 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 258:17: -> ^( EXCLUDE ftsTest ( boost )? ) + // 427:17: -> ^( OPTIONAL ftsTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:258:20: ^( EXCLUDE ftsTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:428:25: ^( OPTIONAL ftsTest ( boost )? ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTIONAL, "OPTIONAL"), root_1); + + adaptor.addChild(root_1, stream_ftsTest.nextTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:428:44: ( boost )? + if ( stream_boost.hasNext() ) { + adaptor.addChild(root_1, stream_boost.nextTree()); + + } + stream_boost.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 5 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:429:11: MINUS ftsTest ( boost )? + { + MINUS31=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsPrefixed1467); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_MINUS.add(MINUS31); + + pushFollow(FOLLOW_ftsTest_in_ftsPrefixed1469); + ftsTest32=ftsTest(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsTest.add(ftsTest32.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:429:25: ( boost )? + int alt14=2; + int LA14_0 = input.LA(1); + + if ( (LA14_0==CARAT) ) { + alt14=1; + } + switch (alt14) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:429:25: boost + { + pushFollow(FOLLOW_boost_in_ftsPrefixed1471); + boost33=boost(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_boost.add(boost33.getTree()); + + } + break; + + } + + + + // AST REWRITE + // elements: ftsTest, boost + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 430:17: -> ^( EXCLUDE ftsTest ( boost )? ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:431:25: ^( EXCLUDE ftsTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXCLUDE, "EXCLUDE"), root_1); adaptor.addChild(root_1, stream_ftsTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:258:38: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:431:43: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -1154,112 +1651,60 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsPrefixed" - public static class ftsTest_return extends ParserRuleReturnScope { + public static class cmisPrefixed_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; - // $ANTLR start "ftsTest" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:264:1: ftsTest : ( ftsTerm ( ( fuzzy )=> fuzzy )? -> ^( TERM ftsTerm ( fuzzy )? ) | ftsExactTerm ( ( fuzzy )=> fuzzy )? -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) | ftsPhrase ( ( slop )=> slop )? -> ^( PHRASE ftsPhrase ( slop )? ) | ftsSynonym ( ( fuzzy )=> fuzzy )? -> ^( SYNONYM ftsSynonym ( fuzzy )? ) | ftsFieldGroupProximity -> ^( PROXIMITY ftsFieldGroupProximity ) | ftsRange -> ^( RANGE ftsRange ) | ftsFieldGroup -> ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction | template -> template ); - public final FTSParser.ftsTest_return ftsTest() throws RecognitionException { - FTSParser.ftsTest_return retval = new FTSParser.ftsTest_return(); + // $ANTLR start "cmisPrefixed" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:434:1: cmisPrefixed : ( cmisTest -> ^( DEFAULT cmisTest ) | MINUS cmisTest -> ^( EXCLUDE cmisTest ) ); + public final FTSParser.cmisPrefixed_return cmisPrefixed() throws RecognitionException { + FTSParser.cmisPrefixed_return retval = new FTSParser.cmisPrefixed_return(); retval.start = input.LT(1); Object root_0 = null; - Token LPAREN38=null; - Token RPAREN40=null; - FTSParser.ftsTerm_return ftsTerm27 = null; + Token MINUS35=null; + FTSParser.cmisTest_return cmisTest34 = null; - FTSParser.fuzzy_return fuzzy28 = null; - - FTSParser.ftsExactTerm_return ftsExactTerm29 = null; - - FTSParser.fuzzy_return fuzzy30 = null; - - FTSParser.ftsPhrase_return ftsPhrase31 = null; - - FTSParser.slop_return slop32 = null; - - FTSParser.ftsSynonym_return ftsSynonym33 = null; - - FTSParser.fuzzy_return fuzzy34 = null; - - FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity35 = null; - - FTSParser.ftsRange_return ftsRange36 = null; - - FTSParser.ftsFieldGroup_return ftsFieldGroup37 = null; - - FTSParser.ftsImplicitConjunctionOrDisjunction_return ftsImplicitConjunctionOrDisjunction39 = null; - - FTSParser.template_return template41 = null; + FTSParser.cmisTest_return cmisTest36 = null; - Object LPAREN38_tree=null; - Object RPAREN40_tree=null; - RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); - RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); - RewriteRuleSubtreeStream stream_template=new RewriteRuleSubtreeStream(adaptor,"rule template"); - RewriteRuleSubtreeStream stream_ftsFieldGroup=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroup"); - RewriteRuleSubtreeStream stream_ftsTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsTerm"); - RewriteRuleSubtreeStream stream_ftsExactTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsExactTerm"); - RewriteRuleSubtreeStream stream_ftsImplicitConjunctionOrDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsImplicitConjunctionOrDisjunction"); - RewriteRuleSubtreeStream stream_fuzzy=new RewriteRuleSubtreeStream(adaptor,"rule fuzzy"); - RewriteRuleSubtreeStream stream_ftsPhrase=new RewriteRuleSubtreeStream(adaptor,"rule ftsPhrase"); - RewriteRuleSubtreeStream stream_slop=new RewriteRuleSubtreeStream(adaptor,"rule slop"); - RewriteRuleSubtreeStream stream_ftsRange=new RewriteRuleSubtreeStream(adaptor,"rule ftsRange"); - RewriteRuleSubtreeStream stream_ftsSynonym=new RewriteRuleSubtreeStream(adaptor,"rule ftsSynonym"); - RewriteRuleSubtreeStream stream_ftsFieldGroupProximity=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupProximity"); + Object MINUS35_tree=null; + RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS"); + RewriteRuleSubtreeStream stream_cmisTest=new RewriteRuleSubtreeStream(adaptor,"rule cmisTest"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:265:6: ( ftsTerm ( ( fuzzy )=> fuzzy )? -> ^( TERM ftsTerm ( fuzzy )? ) | ftsExactTerm ( ( fuzzy )=> fuzzy )? -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) | ftsPhrase ( ( slop )=> slop )? -> ^( PHRASE ftsPhrase ( slop )? ) | ftsSynonym ( ( fuzzy )=> fuzzy )? -> ^( SYNONYM ftsSynonym ( fuzzy )? ) | ftsFieldGroupProximity -> ^( PROXIMITY ftsFieldGroupProximity ) | ftsRange -> ^( RANGE ftsRange ) | ftsFieldGroup -> ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction | template -> template ) - int alt16=9; - alt16 = dfa16.predict(input); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:435:9: ( cmisTest -> ^( DEFAULT cmisTest ) | MINUS cmisTest -> ^( EXCLUDE cmisTest ) ) + int alt16=2; + int LA16_0 = input.LA(1); + + if ( (LA16_0==DECIMAL_INTEGER_LITERAL||(LA16_0>=FTSPHRASE && LA16_0<=STAR)||LA16_0==QUESTION_MARK) ) { + alt16=1; + } + else if ( (LA16_0==MINUS) ) { + alt16=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 16, 0, input); + + throw nvae; + } switch (alt16) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:265:8: ftsTerm ( ( fuzzy )=> fuzzy )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:436:9: cmisTest { - pushFollow(FOLLOW_ftsTerm_in_ftsTest626); - ftsTerm27=ftsTerm(); + pushFollow(FOLLOW_cmisTest_in_cmisPrefixed1556); + cmisTest34=cmisTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTerm.add(ftsTerm27.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:265:16: ( ( fuzzy )=> fuzzy )? - int alt12=2; - int LA12_0 = input.LA(1); - - if ( (LA12_0==TILDA) ) { - int LA12_1 = input.LA(2); - - if ( (LA12_1==DECIMAL_INTEGER_LITERAL||LA12_1==FLOATING_POINT_LITERAL) ) { - int LA12_3 = input.LA(3); - - if ( (synpred4_FTS()) ) { - alt12=1; - } - } - } - switch (alt12) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:265:17: ( fuzzy )=> fuzzy - { - pushFollow(FOLLOW_fuzzy_in_ftsTest635); - fuzzy28=fuzzy(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy28.getTree()); - - } - break; - - } - + if ( state.backtracking==0 ) stream_cmisTest.add(cmisTest34.getTree()); // AST REWRITE - // elements: ftsTerm, fuzzy + // elements: cmisTest // token labels: // rule labels: retval // token list labels: @@ -1270,20 +1715,14 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 266:3: -> ^( TERM ftsTerm ( fuzzy )? ) + // 437:17: -> ^( DEFAULT cmisTest ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:266:6: ^( TERM ftsTerm ( fuzzy )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:438:25: ^( DEFAULT cmisTest ) { Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TERM, "TERM"), root_1); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DEFAULT, "DEFAULT"), root_1); - adaptor.addChild(root_1, stream_ftsTerm.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:266:21: ( fuzzy )? - if ( stream_fuzzy.hasNext() ) { - adaptor.addChild(root_1, stream_fuzzy.nextTree()); - - } - stream_fuzzy.reset(); + adaptor.addChild(root_1, stream_cmisTest.nextTree()); adaptor.addChild(root_0, root_1); } @@ -1294,49 +1733,21 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:267:4: ftsExactTerm ( ( fuzzy )=> fuzzy )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:11: MINUS cmisTest { - pushFollow(FOLLOW_ftsExactTerm_in_ftsTest655); - ftsExactTerm29=ftsExactTerm(); + MINUS35=(Token)match(input,MINUS,FOLLOW_MINUS_in_cmisPrefixed1616); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_MINUS.add(MINUS35); + + pushFollow(FOLLOW_cmisTest_in_cmisPrefixed1618); + cmisTest36=cmisTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsExactTerm.add(ftsExactTerm29.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:267:17: ( ( fuzzy )=> fuzzy )? - int alt13=2; - int LA13_0 = input.LA(1); - - if ( (LA13_0==TILDA) ) { - int LA13_1 = input.LA(2); - - if ( (LA13_1==DECIMAL_INTEGER_LITERAL||LA13_1==FLOATING_POINT_LITERAL) ) { - int LA13_3 = input.LA(3); - - if ( (synpred5_FTS()) ) { - alt13=1; - } - } - } - switch (alt13) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:267:18: ( fuzzy )=> fuzzy - { - pushFollow(FOLLOW_fuzzy_in_ftsTest664); - fuzzy30=fuzzy(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy30.getTree()); - - } - break; - - } - + if ( state.backtracking==0 ) stream_cmisTest.add(cmisTest36.getTree()); // AST REWRITE - // elements: fuzzy, ftsExactTerm + // elements: cmisTest // token labels: // rule labels: retval // token list labels: @@ -1347,15 +1758,197 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 268:3: -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) + // 440:17: -> ^( EXCLUDE cmisTest ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:268:6: ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:441:25: ^( EXCLUDE cmisTest ) { Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXACT_TERM, "EXACT_TERM"), root_1); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXCLUDE, "EXCLUDE"), root_1); - adaptor.addChild(root_1, stream_ftsExactTerm.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:268:32: ( fuzzy )? + adaptor.addChild(root_1, stream_cmisTest.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "cmisPrefixed" + + public static class ftsTest_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ftsTest" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:448:1: ftsTest : ( ( ftsFieldGroupProximity )=> ftsFieldGroupProximity -> ^( PROXIMITY ftsFieldGroupProximity ) | ftsTerm ( ( fuzzy )=> fuzzy )? -> ^( TERM ftsTerm ( fuzzy )? ) | ftsExactTerm ( ( fuzzy )=> fuzzy )? -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) | ftsPhrase ( ( slop )=> slop )? -> ^( PHRASE ftsPhrase ( slop )? ) | ftsSynonym ( ( fuzzy )=> fuzzy )? -> ^( SYNONYM ftsSynonym ( fuzzy )? ) | ftsRange -> ^( RANGE ftsRange ) | ftsFieldGroup -> ftsFieldGroup | LPAREN ftsDisjunction RPAREN -> ftsDisjunction | template -> template ); + 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 LPAREN48=null; + Token RPAREN50=null; + FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity37 = null; + + FTSParser.ftsTerm_return ftsTerm38 = null; + + FTSParser.fuzzy_return fuzzy39 = null; + + FTSParser.ftsExactTerm_return ftsExactTerm40 = null; + + FTSParser.fuzzy_return fuzzy41 = null; + + FTSParser.ftsPhrase_return ftsPhrase42 = null; + + FTSParser.slop_return slop43 = null; + + FTSParser.ftsSynonym_return ftsSynonym44 = null; + + FTSParser.fuzzy_return fuzzy45 = null; + + FTSParser.ftsRange_return ftsRange46 = null; + + FTSParser.ftsFieldGroup_return ftsFieldGroup47 = null; + + FTSParser.ftsDisjunction_return ftsDisjunction49 = null; + + FTSParser.template_return template51 = null; + + + Object LPAREN48_tree=null; + Object RPAREN50_tree=null; + RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); + RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); + RewriteRuleSubtreeStream stream_template=new RewriteRuleSubtreeStream(adaptor,"rule template"); + RewriteRuleSubtreeStream stream_ftsFieldGroup=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroup"); + RewriteRuleSubtreeStream stream_ftsTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsTerm"); + RewriteRuleSubtreeStream stream_ftsExactTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsExactTerm"); + RewriteRuleSubtreeStream stream_fuzzy=new RewriteRuleSubtreeStream(adaptor,"rule fuzzy"); + RewriteRuleSubtreeStream stream_ftsDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsDisjunction"); + RewriteRuleSubtreeStream stream_ftsPhrase=new RewriteRuleSubtreeStream(adaptor,"rule ftsPhrase"); + RewriteRuleSubtreeStream stream_slop=new RewriteRuleSubtreeStream(adaptor,"rule slop"); + RewriteRuleSubtreeStream stream_ftsRange=new RewriteRuleSubtreeStream(adaptor,"rule ftsRange"); + RewriteRuleSubtreeStream stream_ftsSynonym=new RewriteRuleSubtreeStream(adaptor,"rule ftsSynonym"); + RewriteRuleSubtreeStream stream_ftsFieldGroupProximity=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupProximity"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:449:9: ( ( ftsFieldGroupProximity )=> ftsFieldGroupProximity -> ^( PROXIMITY ftsFieldGroupProximity ) | ftsTerm ( ( fuzzy )=> fuzzy )? -> ^( TERM ftsTerm ( fuzzy )? ) | ftsExactTerm ( ( fuzzy )=> fuzzy )? -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) | ftsPhrase ( ( slop )=> slop )? -> ^( PHRASE ftsPhrase ( slop )? ) | ftsSynonym ( ( fuzzy )=> fuzzy )? -> ^( SYNONYM ftsSynonym ( fuzzy )? ) | ftsRange -> ^( RANGE ftsRange ) | ftsFieldGroup -> ftsFieldGroup | LPAREN ftsDisjunction RPAREN -> ftsDisjunction | template -> template ) + int alt21=9; + alt21 = dfa21.predict(input); + switch (alt21) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:450:9: ( ftsFieldGroupProximity )=> ftsFieldGroupProximity + { + pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsTest1708); + ftsFieldGroupProximity37=ftsFieldGroupProximity(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity37.getTree()); + + + // AST REWRITE + // elements: ftsFieldGroupProximity + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 451:17: -> ^( PROXIMITY ftsFieldGroupProximity ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:452:25: ^( PROXIMITY ftsFieldGroupProximity ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PROXIMITY, "PROXIMITY"), root_1); + + adaptor.addChild(root_1, stream_ftsFieldGroupProximity.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:453:11: ftsTerm ( ( fuzzy )=> fuzzy )? + { + pushFollow(FOLLOW_ftsTerm_in_ftsTest1768); + ftsTerm38=ftsTerm(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsTerm.add(ftsTerm38.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:453:19: ( ( fuzzy )=> fuzzy )? + int alt17=2; + alt17 = dfa17.predict(input); + switch (alt17) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:453:21: ( fuzzy )=> fuzzy + { + pushFollow(FOLLOW_fuzzy_in_ftsTest1778); + fuzzy39=fuzzy(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy39.getTree()); + + } + break; + + } + + + + // AST REWRITE + // elements: fuzzy, ftsTerm + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 454:17: -> ^( TERM ftsTerm ( fuzzy )? ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:455:25: ^( TERM ftsTerm ( fuzzy )? ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TERM, "TERM"), root_1); + + adaptor.addChild(root_1, stream_ftsTerm.nextTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:455:40: ( fuzzy )? if ( stream_fuzzy.hasNext() ) { adaptor.addChild(root_1, stream_fuzzy.nextTree()); @@ -1371,39 +1964,92 @@ public class FTSParser extends Parser { } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:269:11: ftsPhrase ( ( slop )=> slop )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:456:11: ftsExactTerm ( ( fuzzy )=> fuzzy )? { - pushFollow(FOLLOW_ftsPhrase_in_ftsTest691); - ftsPhrase31=ftsPhrase(); + pushFollow(FOLLOW_ftsExactTerm_in_ftsTest1843); + ftsExactTerm40=ftsExactTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsPhrase.add(ftsPhrase31.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:269:21: ( ( slop )=> slop )? - int alt14=2; - int LA14_0 = input.LA(1); - - if ( (LA14_0==TILDA) ) { - int LA14_1 = input.LA(2); - - if ( (LA14_1==DECIMAL_INTEGER_LITERAL) ) { - int LA14_3 = input.LA(3); - - if ( (synpred6_FTS()) ) { - alt14=1; - } - } - } - switch (alt14) { + if ( state.backtracking==0 ) stream_ftsExactTerm.add(ftsExactTerm40.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:456:24: ( ( fuzzy )=> fuzzy )? + int alt18=2; + alt18 = dfa18.predict(input); + switch (alt18) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:269:22: ( slop )=> slop + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:456:26: ( fuzzy )=> fuzzy { - pushFollow(FOLLOW_slop_in_ftsTest700); - slop32=slop(); + pushFollow(FOLLOW_fuzzy_in_ftsTest1853); + fuzzy41=fuzzy(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_slop.add(slop32.getTree()); + if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy41.getTree()); + + } + break; + + } + + + + // AST REWRITE + // elements: ftsExactTerm, fuzzy + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 457:17: -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:458:25: ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(EXACT_TERM, "EXACT_TERM"), root_1); + + adaptor.addChild(root_1, stream_ftsExactTerm.nextTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:458:51: ( fuzzy )? + if ( stream_fuzzy.hasNext() ) { + adaptor.addChild(root_1, stream_fuzzy.nextTree()); + + } + stream_fuzzy.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 4 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:459:11: ftsPhrase ( ( slop )=> slop )? + { + pushFollow(FOLLOW_ftsPhrase_in_ftsTest1918); + ftsPhrase42=ftsPhrase(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsPhrase.add(ftsPhrase42.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:459:21: ( ( slop )=> slop )? + int alt19=2; + alt19 = dfa19.predict(input); + switch (alt19) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:459:23: ( slop )=> slop + { + pushFollow(FOLLOW_slop_in_ftsTest1928); + slop43=slop(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_slop.add(slop43.getTree()); } break; @@ -1424,15 +2070,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 270:10: -> ^( PHRASE ftsPhrase ( slop )? ) + // 460:17: -> ^( PHRASE ftsPhrase ( slop )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:270:13: ^( PHRASE ftsPhrase ( slop )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:461:25: ^( PHRASE ftsPhrase ( slop )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PHRASE, "PHRASE"), root_1); adaptor.addChild(root_1, stream_ftsPhrase.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:270:32: ( slop )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:461:44: ( slop )? if ( stream_slop.hasNext() ) { adaptor.addChild(root_1, stream_slop.nextTree()); @@ -1447,40 +2093,28 @@ public class FTSParser extends Parser { retval.tree = root_0;} } break; - case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:271:11: ftsSynonym ( ( fuzzy )=> fuzzy )? + case 5 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:462:11: ftsSynonym ( ( fuzzy )=> fuzzy )? { - pushFollow(FOLLOW_ftsSynonym_in_ftsTest734); - ftsSynonym33=ftsSynonym(); + pushFollow(FOLLOW_ftsSynonym_in_ftsTest1993); + ftsSynonym44=ftsSynonym(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsSynonym.add(ftsSynonym33.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:271:22: ( ( fuzzy )=> fuzzy )? - int alt15=2; - int LA15_0 = input.LA(1); - - if ( (LA15_0==TILDA) ) { - int LA15_1 = input.LA(2); - - if ( (LA15_1==DECIMAL_INTEGER_LITERAL||LA15_1==FLOATING_POINT_LITERAL) ) { - int LA15_3 = input.LA(3); - - if ( (synpred7_FTS()) ) { - alt15=1; - } - } - } - switch (alt15) { + if ( state.backtracking==0 ) stream_ftsSynonym.add(ftsSynonym44.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:462:22: ( ( fuzzy )=> fuzzy )? + int alt20=2; + alt20 = dfa20.predict(input); + switch (alt20) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:271:23: ( fuzzy )=> fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:462:24: ( fuzzy )=> fuzzy { - pushFollow(FOLLOW_fuzzy_in_ftsTest743); - fuzzy34=fuzzy(); + pushFollow(FOLLOW_fuzzy_in_ftsTest2003); + fuzzy45=fuzzy(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy34.getTree()); + if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy45.getTree()); } break; @@ -1501,15 +2135,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 272:10: -> ^( SYNONYM ftsSynonym ( fuzzy )? ) + // 463:17: -> ^( SYNONYM ftsSynonym ( fuzzy )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:272:13: ^( SYNONYM ftsSynonym ( fuzzy )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:464:25: ^( SYNONYM ftsSynonym ( fuzzy )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SYNONYM, "SYNONYM"), root_1); adaptor.addChild(root_1, stream_ftsSynonym.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:272:34: ( fuzzy )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:464:46: ( fuzzy )? if ( stream_fuzzy.hasNext() ) { adaptor.addChild(root_1, stream_fuzzy.nextTree()); @@ -1521,58 +2155,18 @@ public class FTSParser extends Parser { } - retval.tree = root_0;} - } - break; - case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:273:8: ftsFieldGroupProximity - { - pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsTest775); - ftsFieldGroupProximity35=ftsFieldGroupProximity(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity35.getTree()); - - - // AST REWRITE - // elements: ftsFieldGroupProximity - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 274:10: -> ^( PROXIMITY ftsFieldGroupProximity ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:274:13: ^( PROXIMITY ftsFieldGroupProximity ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PROXIMITY, "PROXIMITY"), root_1); - - adaptor.addChild(root_1, stream_ftsFieldGroupProximity.nextTree()); - - adaptor.addChild(root_0, root_1); - } - - } - retval.tree = root_0;} } break; case 6 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:275:9: ftsRange + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:465:11: ftsRange { - pushFollow(FOLLOW_ftsRange_in_ftsTest803); - ftsRange36=ftsRange(); + pushFollow(FOLLOW_ftsRange_in_ftsTest2068); + ftsRange46=ftsRange(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsRange.add(ftsRange36.getTree()); + if ( state.backtracking==0 ) stream_ftsRange.add(ftsRange46.getTree()); // AST REWRITE @@ -1587,9 +2181,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 276:10: -> ^( RANGE ftsRange ) + // 466:17: -> ^( RANGE ftsRange ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:276:13: ^( RANGE ftsRange ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:467:25: ^( RANGE ftsRange ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(RANGE, "RANGE"), root_1); @@ -1605,14 +2199,14 @@ public class FTSParser extends Parser { } break; case 7 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:277:8: ftsFieldGroup + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:468:11: ftsFieldGroup { - pushFollow(FOLLOW_ftsFieldGroup_in_ftsTest830); - ftsFieldGroup37=ftsFieldGroup(); + pushFollow(FOLLOW_ftsFieldGroup_in_ftsTest2128); + ftsFieldGroup47=ftsFieldGroup(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroup.add(ftsFieldGroup37.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroup.add(ftsFieldGroup47.getTree()); // AST REWRITE @@ -1627,7 +2221,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 278:7: -> ftsFieldGroup + // 469:17: -> ftsFieldGroup { adaptor.addChild(root_0, stream_ftsFieldGroup.nextTree()); @@ -1637,24 +2231,24 @@ public class FTSParser extends Parser { } break; case 8 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:279:4: LPAREN ftsImplicitConjunctionOrDisjunction RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:470:11: LPAREN ftsDisjunction RPAREN { - LPAREN38=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsTest847); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN38); + LPAREN48=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsTest2160); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN48); - pushFollow(FOLLOW_ftsImplicitConjunctionOrDisjunction_in_ftsTest849); - ftsImplicitConjunctionOrDisjunction39=ftsImplicitConjunctionOrDisjunction(); + pushFollow(FOLLOW_ftsDisjunction_in_ftsTest2162); + ftsDisjunction49=ftsDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsImplicitConjunctionOrDisjunction.add(ftsImplicitConjunctionOrDisjunction39.getTree()); - RPAREN40=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsTest851); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN40); + if ( state.backtracking==0 ) stream_ftsDisjunction.add(ftsDisjunction49.getTree()); + RPAREN50=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsTest2164); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN50); // AST REWRITE - // elements: ftsImplicitConjunctionOrDisjunction + // elements: ftsDisjunction // token labels: // rule labels: retval // token list labels: @@ -1665,9 +2259,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 280:3: -> ftsImplicitConjunctionOrDisjunction + // 471:17: -> ftsDisjunction { - adaptor.addChild(root_0, stream_ftsImplicitConjunctionOrDisjunction.nextTree()); + adaptor.addChild(root_0, stream_ftsDisjunction.nextTree()); } @@ -1675,14 +2269,14 @@ public class FTSParser extends Parser { } break; case 9 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:281:4: template + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:472:11: template { - pushFollow(FOLLOW_template_in_ftsTest862); - template41=template(); + pushFollow(FOLLOW_template_in_ftsTest2196); + template51=template(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_template.add(template41.getTree()); + if ( state.backtracking==0 ) stream_template.add(template51.getTree()); // AST REWRITE @@ -1697,7 +2291,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 282:5: -> template + // 473:17: -> template { adaptor.addChild(root_0, stream_template.nextTree()); @@ -1727,81 +2321,235 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsTest" + public static class cmisTest_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "cmisTest" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:476:1: cmisTest : ( cmisTerm -> ^( TERM cmisTerm ) | cmisPhrase -> ^( PHRASE cmisPhrase ) ); + public final FTSParser.cmisTest_return cmisTest() throws RecognitionException { + FTSParser.cmisTest_return retval = new FTSParser.cmisTest_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.cmisTerm_return cmisTerm52 = null; + + FTSParser.cmisPhrase_return cmisPhrase53 = null; + + + RewriteRuleSubtreeStream stream_cmisPhrase=new RewriteRuleSubtreeStream(adaptor,"rule cmisPhrase"); + RewriteRuleSubtreeStream stream_cmisTerm=new RewriteRuleSubtreeStream(adaptor,"rule cmisTerm"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:477:9: ( cmisTerm -> ^( TERM cmisTerm ) | cmisPhrase -> ^( PHRASE cmisPhrase ) ) + int alt22=2; + int LA22_0 = input.LA(1); + + if ( (LA22_0==DECIMAL_INTEGER_LITERAL||(LA22_0>=ID && LA22_0<=STAR)||LA22_0==QUESTION_MARK) ) { + alt22=1; + } + else if ( (LA22_0==FTSPHRASE) ) { + alt22=2; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + NoViableAltException nvae = + new NoViableAltException("", 22, 0, input); + + throw nvae; + } + switch (alt22) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:478:9: cmisTerm + { + pushFollow(FOLLOW_cmisTerm_in_cmisTest2249); + cmisTerm52=cmisTerm(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_cmisTerm.add(cmisTerm52.getTree()); + + + // AST REWRITE + // elements: cmisTerm + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 479:17: -> ^( TERM cmisTerm ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:480:25: ^( TERM cmisTerm ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TERM, "TERM"), root_1); + + adaptor.addChild(root_1, stream_cmisTerm.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:481:11: cmisPhrase + { + pushFollow(FOLLOW_cmisPhrase_in_cmisTest2309); + cmisPhrase53=cmisPhrase(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_cmisPhrase.add(cmisPhrase53.getTree()); + + + // AST REWRITE + // elements: cmisPhrase + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 482:17: -> ^( PHRASE cmisPhrase ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:483:25: ^( PHRASE cmisPhrase ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PHRASE, "PHRASE"), root_1); + + adaptor.addChild(root_1, stream_cmisPhrase.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + + } + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "cmisTest" + public static class template_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; // $ANTLR start "template" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:285:1: template : ( PERCENT tempReference -> ^( TEMPLATE tempReference ) | PERCENT LPAREN ( tempReference ( COMMA )? )+ RPAREN -> ^( TEMPLATE ( tempReference )+ ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:486:1: template : ( PERCENT tempReference -> ^( TEMPLATE tempReference ) | PERCENT LPAREN ( tempReference ( COMMA )? )+ RPAREN -> ^( TEMPLATE ( tempReference )+ ) ); public final FTSParser.template_return template() throws RecognitionException { FTSParser.template_return retval = new FTSParser.template_return(); retval.start = input.LT(1); Object root_0 = null; - Token PERCENT42=null; - Token PERCENT44=null; - Token LPAREN45=null; - Token COMMA47=null; - Token RPAREN48=null; - FTSParser.tempReference_return tempReference43 = null; + Token PERCENT54=null; + Token PERCENT56=null; + Token LPAREN57=null; + Token COMMA59=null; + Token RPAREN60=null; + FTSParser.tempReference_return tempReference55 = null; - FTSParser.tempReference_return tempReference46 = null; + FTSParser.tempReference_return tempReference58 = null; - Object PERCENT42_tree=null; - Object PERCENT44_tree=null; - Object LPAREN45_tree=null; - Object COMMA47_tree=null; - Object RPAREN48_tree=null; + Object PERCENT54_tree=null; + Object PERCENT56_tree=null; + Object LPAREN57_tree=null; + Object COMMA59_tree=null; + Object RPAREN60_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_PERCENT=new RewriteRuleTokenStream(adaptor,"token PERCENT"); RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); RewriteRuleSubtreeStream stream_tempReference=new RewriteRuleSubtreeStream(adaptor,"rule tempReference"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:286:2: ( PERCENT tempReference -> ^( TEMPLATE tempReference ) | PERCENT LPAREN ( tempReference ( COMMA )? )+ RPAREN -> ^( TEMPLATE ( tempReference )+ ) ) - int alt19=2; - int LA19_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:487:9: ( PERCENT tempReference -> ^( TEMPLATE tempReference ) | PERCENT LPAREN ( tempReference ( COMMA )? )+ RPAREN -> ^( TEMPLATE ( tempReference )+ ) ) + int alt25=2; + int LA25_0 = input.LA(1); - if ( (LA19_0==PERCENT) ) { - int LA19_1 = input.LA(2); - - if ( (LA19_1==LPAREN) ) { - alt19=2; - } - else if ( ((LA19_1>=AT && LA19_1<=ID)) ) { - alt19=1; - } - else { + if ( (LA25_0==PERCENT) ) { + switch ( input.LA(2) ) { + case LPAREN: + { + alt25=2; + } + break; + case AT: + { + alt25=1; + } + break; + case ID: + { + alt25=1; + } + break; + case URI: + { + alt25=1; + } + break; + default: if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 19, 1, input); + new NoViableAltException("", 25, 1, input); throw nvae; } + } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 19, 0, input); + new NoViableAltException("", 25, 0, input); throw nvae; } - switch (alt19) { + switch (alt25) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:286:4: PERCENT tempReference + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:488:9: PERCENT tempReference { - PERCENT42=(Token)match(input,PERCENT,FOLLOW_PERCENT_in_template881); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_PERCENT.add(PERCENT42); + PERCENT54=(Token)match(input,PERCENT,FOLLOW_PERCENT_in_template2390); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_PERCENT.add(PERCENT54); - pushFollow(FOLLOW_tempReference_in_template883); - tempReference43=tempReference(); + pushFollow(FOLLOW_tempReference_in_template2392); + tempReference55=tempReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_tempReference.add(tempReference43.getTree()); + if ( state.backtracking==0 ) stream_tempReference.add(tempReference55.getTree()); // AST REWRITE @@ -1816,9 +2564,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 287:3: -> ^( TEMPLATE tempReference ) + // 489:17: -> ^( TEMPLATE tempReference ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:287:6: ^( TEMPLATE tempReference ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:490:25: ^( TEMPLATE tempReference ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TEMPLATE, "TEMPLATE"), root_1); @@ -1834,49 +2582,49 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:288:4: PERCENT LPAREN ( tempReference ( COMMA )? )+ RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:491:11: PERCENT LPAREN ( tempReference ( COMMA )? )+ RPAREN { - PERCENT44=(Token)match(input,PERCENT,FOLLOW_PERCENT_in_template898); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_PERCENT.add(PERCENT44); + PERCENT56=(Token)match(input,PERCENT,FOLLOW_PERCENT_in_template2452); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_PERCENT.add(PERCENT56); - LPAREN45=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_template900); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN45); + LPAREN57=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_template2454); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN57); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:288:19: ( tempReference ( COMMA )? )+ - int cnt18=0; - loop18: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:491:26: ( tempReference ( COMMA )? )+ + int cnt24=0; + loop24: do { - int alt18=2; - int LA18_0 = input.LA(1); + int alt24=2; + int LA24_0 = input.LA(1); - if ( ((LA18_0>=AT && LA18_0<=ID)) ) { - alt18=1; + if ( (LA24_0==ID||(LA24_0>=AT && LA24_0<=URI)) ) { + alt24=1; } - switch (alt18) { + switch (alt24) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:288:20: tempReference ( COMMA )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:491:27: tempReference ( COMMA )? { - pushFollow(FOLLOW_tempReference_in_template903); - tempReference46=tempReference(); + pushFollow(FOLLOW_tempReference_in_template2457); + tempReference58=tempReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_tempReference.add(tempReference46.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:288:34: ( COMMA )? - int alt17=2; - int LA17_0 = input.LA(1); + if ( state.backtracking==0 ) stream_tempReference.add(tempReference58.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:491:41: ( COMMA )? + int alt23=2; + int LA23_0 = input.LA(1); - if ( (LA17_0==COMMA) ) { - alt17=1; + if ( (LA23_0==COMMA) ) { + alt23=1; } - switch (alt17) { + switch (alt23) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:288:34: COMMA + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:491:41: COMMA { - COMMA47=(Token)match(input,COMMA,FOLLOW_COMMA_in_template905); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COMMA.add(COMMA47); + COMMA59=(Token)match(input,COMMA,FOLLOW_COMMA_in_template2459); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COMMA.add(COMMA59); } @@ -1889,17 +2637,17 @@ public class FTSParser extends Parser { break; default : - if ( cnt18 >= 1 ) break loop18; + if ( cnt24 >= 1 ) break loop24; if (state.backtracking>0) {state.failed=true; return retval;} EarlyExitException eee = - new EarlyExitException(18, input); + new EarlyExitException(24, input); throw eee; } - cnt18++; + cnt24++; } while (true); - RPAREN48=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_template910); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN48); + RPAREN60=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_template2464); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN60); @@ -1915,9 +2663,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 289:3: -> ^( TEMPLATE ( tempReference )+ ) + // 492:17: -> ^( TEMPLATE ( tempReference )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:289:6: ^( TEMPLATE ( tempReference )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:493:25: ^( TEMPLATE ( tempReference )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(TEMPLATE, "TEMPLATE"), root_1); @@ -1966,33 +2714,33 @@ public class FTSParser extends Parser { }; // $ANTLR start "fuzzy" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:294:1: fuzzy : TILDA number -> ^( FUZZY number ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:496:1: fuzzy : TILDA number -> ^( FUZZY number ) ; public final FTSParser.fuzzy_return fuzzy() throws RecognitionException { FTSParser.fuzzy_return retval = new FTSParser.fuzzy_return(); retval.start = input.LT(1); Object root_0 = null; - Token TILDA49=null; - FTSParser.number_return number50 = null; + Token TILDA61=null; + FTSParser.number_return number62 = null; - Object TILDA49_tree=null; + Object TILDA61_tree=null; RewriteRuleTokenStream stream_TILDA=new RewriteRuleTokenStream(adaptor,"token TILDA"); RewriteRuleSubtreeStream stream_number=new RewriteRuleSubtreeStream(adaptor,"rule number"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:295:2: ( TILDA number -> ^( FUZZY number ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:295:5: TILDA number + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:497:9: ( TILDA number -> ^( FUZZY number ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:498:9: TILDA number { - TILDA49=(Token)match(input,TILDA,FOLLOW_TILDA_in_fuzzy937); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_TILDA.add(TILDA49); + TILDA61=(Token)match(input,TILDA,FOLLOW_TILDA_in_fuzzy2546); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TILDA.add(TILDA61); - pushFollow(FOLLOW_number_in_fuzzy939); - number50=number(); + pushFollow(FOLLOW_number_in_fuzzy2548); + number62=number(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_number.add(number50.getTree()); + if ( state.backtracking==0 ) stream_number.add(number62.getTree()); // AST REWRITE @@ -2007,9 +2755,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 296:3: -> ^( FUZZY number ) + // 499:17: -> ^( FUZZY number ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:296:6: ^( FUZZY number ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:500:25: ^( FUZZY number ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUZZY, "FUZZY"), root_1); @@ -2049,30 +2797,30 @@ public class FTSParser extends Parser { }; // $ANTLR start "slop" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:299:1: slop : TILDA DECIMAL_INTEGER_LITERAL -> ^( FUZZY DECIMAL_INTEGER_LITERAL ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:503:1: slop : TILDA DECIMAL_INTEGER_LITERAL -> ^( FUZZY DECIMAL_INTEGER_LITERAL ) ; public final FTSParser.slop_return slop() throws RecognitionException { FTSParser.slop_return retval = new FTSParser.slop_return(); retval.start = input.LT(1); Object root_0 = null; - Token TILDA51=null; - Token DECIMAL_INTEGER_LITERAL52=null; + Token TILDA63=null; + Token DECIMAL_INTEGER_LITERAL64=null; - Object TILDA51_tree=null; - Object DECIMAL_INTEGER_LITERAL52_tree=null; + Object TILDA63_tree=null; + Object DECIMAL_INTEGER_LITERAL64_tree=null; RewriteRuleTokenStream stream_TILDA=new RewriteRuleTokenStream(adaptor,"token TILDA"); RewriteRuleTokenStream stream_DECIMAL_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_INTEGER_LITERAL"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:300:2: ( TILDA DECIMAL_INTEGER_LITERAL -> ^( FUZZY DECIMAL_INTEGER_LITERAL ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:300:5: TILDA DECIMAL_INTEGER_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:504:9: ( TILDA DECIMAL_INTEGER_LITERAL -> ^( FUZZY DECIMAL_INTEGER_LITERAL ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:505:9: TILDA DECIMAL_INTEGER_LITERAL { - TILDA51=(Token)match(input,TILDA,FOLLOW_TILDA_in_slop962); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_TILDA.add(TILDA51); + TILDA63=(Token)match(input,TILDA,FOLLOW_TILDA_in_slop2629); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TILDA.add(TILDA63); - DECIMAL_INTEGER_LITERAL52=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_slop964); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL52); + DECIMAL_INTEGER_LITERAL64=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_slop2631); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL64); @@ -2088,9 +2836,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 301:3: -> ^( FUZZY DECIMAL_INTEGER_LITERAL ) + // 506:17: -> ^( FUZZY DECIMAL_INTEGER_LITERAL ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:301:6: ^( FUZZY DECIMAL_INTEGER_LITERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:507:25: ^( FUZZY DECIMAL_INTEGER_LITERAL ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FUZZY, "FUZZY"), root_1); @@ -2130,33 +2878,33 @@ public class FTSParser extends Parser { }; // $ANTLR start "boost" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:304:1: boost : CARAT number -> ^( BOOST number ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:510:1: boost : CARAT number -> ^( BOOST number ) ; public final FTSParser.boost_return boost() throws RecognitionException { FTSParser.boost_return retval = new FTSParser.boost_return(); retval.start = input.LT(1); Object root_0 = null; - Token CARAT53=null; - FTSParser.number_return number54 = null; + Token CARAT65=null; + FTSParser.number_return number66 = null; - Object CARAT53_tree=null; + Object CARAT65_tree=null; RewriteRuleTokenStream stream_CARAT=new RewriteRuleTokenStream(adaptor,"token CARAT"); RewriteRuleSubtreeStream stream_number=new RewriteRuleSubtreeStream(adaptor,"rule number"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:305:2: ( CARAT number -> ^( BOOST number ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:305:5: CARAT number + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:511:9: ( CARAT number -> ^( BOOST number ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:512:9: CARAT number { - CARAT53=(Token)match(input,CARAT,FOLLOW_CARAT_in_boost986); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_CARAT.add(CARAT53); + CARAT65=(Token)match(input,CARAT,FOLLOW_CARAT_in_boost2712); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_CARAT.add(CARAT65); - pushFollow(FOLLOW_number_in_boost988); - number54=number(); + pushFollow(FOLLOW_number_in_boost2714); + number66=number(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_number.add(number54.getTree()); + if ( state.backtracking==0 ) stream_number.add(number66.getTree()); // AST REWRITE @@ -2171,9 +2919,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 306:3: -> ^( BOOST number ) + // 513:17: -> ^( BOOST number ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:306:6: ^( BOOST number ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:514:25: ^( BOOST number ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(BOOST, "BOOST"), root_1); @@ -2213,53 +2961,42 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsTerm" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:309:1: ftsTerm : ( fieldReference COLON )? ftsWord -> ftsWord ( fieldReference )? ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:517:1: ftsTerm : ( fieldReference COLON )? ftsWord -> ftsWord ( fieldReference )? ; 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 COLON56=null; - FTSParser.fieldReference_return fieldReference55 = null; + Token COLON68=null; + FTSParser.fieldReference_return fieldReference67 = null; - FTSParser.ftsWord_return ftsWord57 = null; + FTSParser.ftsWord_return ftsWord69 = null; - Object COLON56_tree=null; + Object COLON68_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_ftsWord=new RewriteRuleSubtreeStream(adaptor,"rule ftsWord"); RewriteRuleSubtreeStream stream_fieldReference=new RewriteRuleSubtreeStream(adaptor,"rule fieldReference"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:310:2: ( ( fieldReference COLON )? ftsWord -> ftsWord ( fieldReference )? ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:310:4: ( fieldReference COLON )? ftsWord + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:518:9: ( ( fieldReference COLON )? ftsWord -> ftsWord ( fieldReference )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:519:9: ( fieldReference COLON )? ftsWord { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:310:4: ( fieldReference COLON )? - int alt20=2; - int LA20_0 = input.LA(1); - - if ( ((LA20_0>=AT && LA20_0<=URI)) ) { - alt20=1; - } - else if ( (LA20_0==ID) ) { - int LA20_2 = input.LA(2); - - if ( (LA20_2==COLON) ) { - alt20=1; - } - } - switch (alt20) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:519:9: ( fieldReference COLON )? + int alt26=2; + alt26 = dfa26.predict(input); + switch (alt26) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:310:5: fieldReference COLON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:519:10: fieldReference COLON { - pushFollow(FOLLOW_fieldReference_in_ftsTerm1010); - fieldReference55=fieldReference(); + pushFollow(FOLLOW_fieldReference_in_ftsTerm2796); + fieldReference67=fieldReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference55.getTree()); - COLON56=(Token)match(input,COLON,FOLLOW_COLON_in_ftsTerm1012); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COLON.add(COLON56); + if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference67.getTree()); + COLON68=(Token)match(input,COLON,FOLLOW_COLON_in_ftsTerm2798); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COLON.add(COLON68); } @@ -2267,16 +3004,16 @@ public class FTSParser extends Parser { } - pushFollow(FOLLOW_ftsWord_in_ftsTerm1016); - ftsWord57=ftsWord(); + pushFollow(FOLLOW_ftsWord_in_ftsTerm2802); + ftsWord69=ftsWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsWord.add(ftsWord57.getTree()); + if ( state.backtracking==0 ) stream_ftsWord.add(ftsWord69.getTree()); // AST REWRITE - // elements: fieldReference, ftsWord + // elements: ftsWord, fieldReference // token labels: // rule labels: retval // token list labels: @@ -2287,10 +3024,10 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 311:3: -> ftsWord ( fieldReference )? + // 520:17: -> ftsWord ( fieldReference )? { adaptor.addChild(root_0, stream_ftsWord.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:311:14: ( fieldReference )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:520:28: ( fieldReference )? if ( stream_fieldReference.hasNext() ) { adaptor.addChild(root_0, stream_fieldReference.nextTree()); @@ -2321,39 +3058,108 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsTerm" + public static class cmisTerm_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "cmisTerm" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:523:1: cmisTerm : ftsWord -> ftsWord ; + public final FTSParser.cmisTerm_return cmisTerm() throws RecognitionException { + FTSParser.cmisTerm_return retval = new FTSParser.cmisTerm_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.ftsWord_return ftsWord70 = null; + + + RewriteRuleSubtreeStream stream_ftsWord=new RewriteRuleSubtreeStream(adaptor,"rule ftsWord"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:524:9: ( ftsWord -> ftsWord ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:525:9: ftsWord + { + pushFollow(FOLLOW_ftsWord_in_cmisTerm2858); + ftsWord70=ftsWord(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsWord.add(ftsWord70.getTree()); + + + // AST REWRITE + // elements: ftsWord + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 526:17: -> ftsWord + { + adaptor.addChild(root_0, stream_ftsWord.nextTree()); + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "cmisTerm" + public static class ftsExactTerm_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; // $ANTLR start "ftsExactTerm" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:314:1: ftsExactTerm : EQUALS ftsTerm -> ftsTerm ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:529:1: ftsExactTerm : EQUALS 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 EQUALS58=null; - FTSParser.ftsTerm_return ftsTerm59 = null; + Token EQUALS71=null; + FTSParser.ftsTerm_return ftsTerm72 = null; - Object EQUALS58_tree=null; + Object EQUALS71_tree=null; RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS"); RewriteRuleSubtreeStream stream_ftsTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsTerm"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:315:2: ( EQUALS ftsTerm -> ftsTerm ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:315:4: EQUALS ftsTerm + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:530:9: ( EQUALS ftsTerm -> ftsTerm ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:531:9: EQUALS ftsTerm { - EQUALS58=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_ftsExactTerm1037); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_EQUALS.add(EQUALS58); + EQUALS71=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_ftsExactTerm2911); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_EQUALS.add(EQUALS71); - pushFollow(FOLLOW_ftsTerm_in_ftsExactTerm1039); - ftsTerm59=ftsTerm(); + pushFollow(FOLLOW_ftsTerm_in_ftsExactTerm2913); + ftsTerm72=ftsTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTerm.add(ftsTerm59.getTree()); + if ( state.backtracking==0 ) stream_ftsTerm.add(ftsTerm72.getTree()); // AST REWRITE @@ -2368,7 +3174,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 316:3: -> ftsTerm + // 532:17: -> ftsTerm { adaptor.addChild(root_0, stream_ftsTerm.nextTree()); @@ -2402,46 +3208,46 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsPhrase" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:319:1: ftsPhrase : ( fieldReference COLON )? FTSPHRASE -> FTSPHRASE ( fieldReference )? ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:535:1: ftsPhrase : ( fieldReference COLON )? FTSPHRASE -> FTSPHRASE ( fieldReference )? ; 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 COLON61=null; - Token FTSPHRASE62=null; - FTSParser.fieldReference_return fieldReference60 = null; + Token COLON74=null; + Token FTSPHRASE75=null; + FTSParser.fieldReference_return fieldReference73 = null; - Object COLON61_tree=null; - Object FTSPHRASE62_tree=null; + Object COLON74_tree=null; + Object FTSPHRASE75_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleTokenStream stream_FTSPHRASE=new RewriteRuleTokenStream(adaptor,"token FTSPHRASE"); RewriteRuleSubtreeStream stream_fieldReference=new RewriteRuleSubtreeStream(adaptor,"rule fieldReference"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:320:2: ( ( fieldReference COLON )? FTSPHRASE -> FTSPHRASE ( fieldReference )? ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:320:6: ( fieldReference COLON )? FTSPHRASE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:536:9: ( ( fieldReference COLON )? FTSPHRASE -> FTSPHRASE ( fieldReference )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:537:9: ( fieldReference COLON )? FTSPHRASE { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:320:6: ( fieldReference COLON )? - int alt21=2; - int LA21_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:537:9: ( fieldReference COLON )? + int alt27=2; + int LA27_0 = input.LA(1); - if ( ((LA21_0>=AT && LA21_0<=ID)) ) { - alt21=1; + if ( (LA27_0==ID||(LA27_0>=AT && LA27_0<=URI)) ) { + alt27=1; } - switch (alt21) { + switch (alt27) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:320:7: fieldReference COLON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:537:10: fieldReference COLON { - pushFollow(FOLLOW_fieldReference_in_ftsPhrase1060); - fieldReference60=fieldReference(); + pushFollow(FOLLOW_fieldReference_in_ftsPhrase2967); + fieldReference73=fieldReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference60.getTree()); - COLON61=(Token)match(input,COLON,FOLLOW_COLON_in_ftsPhrase1062); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COLON.add(COLON61); + if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference73.getTree()); + COLON74=(Token)match(input,COLON,FOLLOW_COLON_in_ftsPhrase2969); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COLON.add(COLON74); } @@ -2449,13 +3255,13 @@ public class FTSParser extends Parser { } - FTSPHRASE62=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsPhrase1066); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_FTSPHRASE.add(FTSPHRASE62); + FTSPHRASE75=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsPhrase2973); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_FTSPHRASE.add(FTSPHRASE75); // AST REWRITE - // elements: FTSPHRASE, fieldReference + // elements: fieldReference, FTSPHRASE // token labels: // rule labels: retval // token list labels: @@ -2466,10 +3272,10 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 321:3: -> FTSPHRASE ( fieldReference )? + // 538:17: -> FTSPHRASE ( fieldReference )? { adaptor.addChild(root_0, stream_FTSPHRASE.nextNode()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:321:16: ( fieldReference )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:538:30: ( fieldReference )? if ( stream_fieldReference.hasNext() ) { adaptor.addChild(root_0, stream_fieldReference.nextTree()); @@ -2500,39 +3306,106 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsPhrase" + public static class cmisPhrase_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "cmisPhrase" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:541:1: cmisPhrase : FTSPHRASE -> FTSPHRASE ; + public final FTSParser.cmisPhrase_return cmisPhrase() throws RecognitionException { + FTSParser.cmisPhrase_return retval = new FTSParser.cmisPhrase_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + Token FTSPHRASE76=null; + + Object FTSPHRASE76_tree=null; + RewriteRuleTokenStream stream_FTSPHRASE=new RewriteRuleTokenStream(adaptor,"token FTSPHRASE"); + + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:542:9: ( FTSPHRASE -> FTSPHRASE ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:543:9: FTSPHRASE + { + FTSPHRASE76=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_cmisPhrase3029); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_FTSPHRASE.add(FTSPHRASE76); + + + + // AST REWRITE + // elements: FTSPHRASE + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 544:17: -> FTSPHRASE + { + adaptor.addChild(root_0, stream_FTSPHRASE.nextNode()); + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "cmisPhrase" + public static class ftsSynonym_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; // $ANTLR start "ftsSynonym" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:324:1: ftsSynonym : TILDA ftsTerm -> ftsTerm ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:547: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 TILDA63=null; - FTSParser.ftsTerm_return ftsTerm64 = null; + Token TILDA77=null; + FTSParser.ftsTerm_return ftsTerm78 = null; - Object TILDA63_tree=null; + Object TILDA77_tree=null; RewriteRuleTokenStream stream_TILDA=new RewriteRuleTokenStream(adaptor,"token TILDA"); RewriteRuleSubtreeStream stream_ftsTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsTerm"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:325:2: ( TILDA ftsTerm -> ftsTerm ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:325:4: TILDA ftsTerm + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:548:9: ( TILDA ftsTerm -> ftsTerm ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:549:9: TILDA ftsTerm { - TILDA63=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsSynonym1087); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_TILDA.add(TILDA63); + TILDA77=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsSynonym3082); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TILDA.add(TILDA77); - pushFollow(FOLLOW_ftsTerm_in_ftsSynonym1089); - ftsTerm64=ftsTerm(); + pushFollow(FOLLOW_ftsTerm_in_ftsSynonym3084); + ftsTerm78=ftsTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsTerm.add(ftsTerm64.getTree()); + if ( state.backtracking==0 ) stream_ftsTerm.add(ftsTerm78.getTree()); // AST REWRITE @@ -2547,7 +3420,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 326:3: -> ftsTerm + // 550:17: -> ftsTerm { adaptor.addChild(root_0, stream_ftsTerm.nextTree()); @@ -2581,53 +3454,63 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsRange" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:329:1: ftsRange : ( fieldReference COLON )? ftsFieldGroupRange -> ftsFieldGroupRange ( fieldReference )? ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:553:1: ftsRange : ( fieldReference COLON )? ftsFieldGroupRange -> ftsFieldGroupRange ( fieldReference )? ; public final FTSParser.ftsRange_return ftsRange() throws RecognitionException { FTSParser.ftsRange_return retval = new FTSParser.ftsRange_return(); retval.start = input.LT(1); Object root_0 = null; - Token COLON66=null; - FTSParser.fieldReference_return fieldReference65 = null; + Token COLON80=null; + FTSParser.fieldReference_return fieldReference79 = null; - FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange67 = null; + FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange81 = null; - Object COLON66_tree=null; + Object COLON80_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_ftsFieldGroupRange=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupRange"); RewriteRuleSubtreeStream stream_fieldReference=new RewriteRuleSubtreeStream(adaptor,"rule fieldReference"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:330:2: ( ( fieldReference COLON )? ftsFieldGroupRange -> ftsFieldGroupRange ( fieldReference )? ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:330:5: ( fieldReference COLON )? ftsFieldGroupRange + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:554:9: ( ( fieldReference COLON )? ftsFieldGroupRange -> ftsFieldGroupRange ( fieldReference )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:555:9: ( fieldReference COLON )? ftsFieldGroupRange { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:330:5: ( fieldReference COLON )? - int alt22=2; - int LA22_0 = input.LA(1); - - if ( ((LA22_0>=AT && LA22_0<=URI)) ) { - alt22=1; - } - else if ( (LA22_0==ID) ) { - int LA22_2 = input.LA(2); - - if ( (LA22_2==COLON) ) { - alt22=1; - } - } - switch (alt22) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:330:6: fieldReference COLON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:555:9: ( fieldReference COLON )? + int alt28=2; + switch ( input.LA(1) ) { + case AT: { - pushFollow(FOLLOW_fieldReference_in_ftsRange1109); - fieldReference65=fieldReference(); + alt28=1; + } + break; + case ID: + { + int LA28_2 = input.LA(2); + + if ( (LA28_2==COLON) ) { + alt28=1; + } + } + break; + case URI: + { + alt28=1; + } + break; + } + + switch (alt28) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:555:10: fieldReference COLON + { + pushFollow(FOLLOW_fieldReference_in_ftsRange3138); + fieldReference79=fieldReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference65.getTree()); - COLON66=(Token)match(input,COLON,FOLLOW_COLON_in_ftsRange1111); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COLON.add(COLON66); + if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference79.getTree()); + COLON80=(Token)match(input,COLON,FOLLOW_COLON_in_ftsRange3140); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COLON.add(COLON80); } @@ -2635,16 +3518,16 @@ public class FTSParser extends Parser { } - pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsRange1115); - ftsFieldGroupRange67=ftsFieldGroupRange(); + pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsRange3144); + ftsFieldGroupRange81=ftsFieldGroupRange(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupRange.add(ftsFieldGroupRange67.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroupRange.add(ftsFieldGroupRange81.getTree()); // AST REWRITE - // elements: ftsFieldGroupRange, fieldReference + // elements: fieldReference, ftsFieldGroupRange // token labels: // rule labels: retval // token list labels: @@ -2655,10 +3538,10 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 331:5: -> ftsFieldGroupRange ( fieldReference )? + // 556:17: -> ftsFieldGroupRange ( fieldReference )? { adaptor.addChild(root_0, stream_ftsFieldGroupRange.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:331:27: ( fieldReference )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:556:39: ( fieldReference )? if ( stream_fieldReference.hasNext() ) { adaptor.addChild(root_0, stream_fieldReference.nextTree()); @@ -2695,58 +3578,58 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroup" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:334:1: ftsFieldGroup : fieldReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ^( FIELD_GROUP fieldReference ftsFieldGroupImplicitConjunctionOrDisjunction ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:559:1: ftsFieldGroup : fieldReference COLON LPAREN ftsFieldGroupDisjunction RPAREN -> ^( FIELD_GROUP fieldReference ftsFieldGroupDisjunction ) ; 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 COLON69=null; - Token LPAREN70=null; - Token RPAREN72=null; - FTSParser.fieldReference_return fieldReference68 = null; + Token COLON83=null; + Token LPAREN84=null; + Token RPAREN86=null; + FTSParser.fieldReference_return fieldReference82 = null; - FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return ftsFieldGroupImplicitConjunctionOrDisjunction71 = null; + FTSParser.ftsFieldGroupDisjunction_return ftsFieldGroupDisjunction85 = null; - Object COLON69_tree=null; - Object LPAREN70_tree=null; - Object RPAREN72_tree=null; + Object COLON83_tree=null; + Object LPAREN84_tree=null; + Object RPAREN86_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_ftsFieldGroupImplicitConjunctionOrDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupImplicitConjunctionOrDisjunction"); RewriteRuleSubtreeStream stream_fieldReference=new RewriteRuleSubtreeStream(adaptor,"rule fieldReference"); + RewriteRuleSubtreeStream stream_ftsFieldGroupDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupDisjunction"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:335:2: ( fieldReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ^( FIELD_GROUP fieldReference ftsFieldGroupImplicitConjunctionOrDisjunction ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:335:4: fieldReference COLON LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:560:9: ( fieldReference COLON LPAREN ftsFieldGroupDisjunction RPAREN -> ^( FIELD_GROUP fieldReference ftsFieldGroupDisjunction ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:561:9: fieldReference COLON LPAREN ftsFieldGroupDisjunction RPAREN { - pushFollow(FOLLOW_fieldReference_in_ftsFieldGroup1138); - fieldReference68=fieldReference(); + pushFollow(FOLLOW_fieldReference_in_ftsFieldGroup3200); + fieldReference82=fieldReference(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference68.getTree()); - COLON69=(Token)match(input,COLON,FOLLOW_COLON_in_ftsFieldGroup1140); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COLON.add(COLON69); + if ( state.backtracking==0 ) stream_fieldReference.add(fieldReference82.getTree()); + COLON83=(Token)match(input,COLON,FOLLOW_COLON_in_ftsFieldGroup3202); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COLON.add(COLON83); - LPAREN70=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroup1142); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN70); + LPAREN84=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroup3204); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN84); - pushFollow(FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroup1144); - ftsFieldGroupImplicitConjunctionOrDisjunction71=ftsFieldGroupImplicitConjunctionOrDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupDisjunction_in_ftsFieldGroup3206); + ftsFieldGroupDisjunction85=ftsFieldGroupDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupImplicitConjunctionOrDisjunction.add(ftsFieldGroupImplicitConjunctionOrDisjunction71.getTree()); - RPAREN72=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroup1146); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN72); + if ( state.backtracking==0 ) stream_ftsFieldGroupDisjunction.add(ftsFieldGroupDisjunction85.getTree()); + RPAREN86=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroup3208); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN86); // AST REWRITE - // elements: ftsFieldGroupImplicitConjunctionOrDisjunction, fieldReference + // elements: ftsFieldGroupDisjunction, fieldReference // token labels: // rule labels: retval // token list labels: @@ -2757,15 +3640,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 336:3: -> ^( FIELD_GROUP fieldReference ftsFieldGroupImplicitConjunctionOrDisjunction ) + // 562:17: -> ^( FIELD_GROUP fieldReference ftsFieldGroupDisjunction ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:336:6: ^( FIELD_GROUP fieldReference ftsFieldGroupImplicitConjunctionOrDisjunction ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:563:25: ^( FIELD_GROUP fieldReference ftsFieldGroupDisjunction ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_GROUP, "FIELD_GROUP"), root_1); adaptor.addChild(root_1, stream_fieldReference.nextTree()); - adaptor.addChild(root_1, stream_ftsFieldGroupImplicitConjunctionOrDisjunction.nextTree()); + adaptor.addChild(root_1, stream_ftsFieldGroupDisjunction.nextTree()); adaptor.addChild(root_0, root_1); } @@ -2794,190 +3677,64 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsFieldGroup" - public static class ftsFieldGroupImplicitConjunctionOrDisjunction_return extends ParserRuleReturnScope { + public static class ftsFieldGroupDisjunction_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; - // $ANTLR start "ftsFieldGroupImplicitConjunctionOrDisjunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:339: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(); + // $ANTLR start "ftsFieldGroupDisjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:566:1: ftsFieldGroupDisjunction : ({...}? => ftsFieldGroupExplicitDisjunction | {...}? => ftsFieldGroupImplicitDisjunction ); + public final FTSParser.ftsFieldGroupDisjunction_return ftsFieldGroupDisjunction() throws RecognitionException { + FTSParser.ftsFieldGroupDisjunction_return retval = new FTSParser.ftsFieldGroupDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction73 = null; + FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction87 = null; + + FTSParser.ftsFieldGroupImplicitDisjunction_return ftsFieldGroupImplicitDisjunction88 = null; - FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction74 = null; - - FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction75 = null; - - FTSParser.ftsFieldGroupExplicitDisjunction_return ftsFieldGroupExplicitDisjunction76 = null; - RewriteRuleSubtreeStream stream_ftsFieldGroupExplicitDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupExplicitDisjunction"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:340:2: ({...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) | ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) ) - int alt25=2; - alt25 = dfa25.predict(input); - switch (alt25) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:567:9: ({...}? => ftsFieldGroupExplicitDisjunction | {...}? => ftsFieldGroupImplicitDisjunction ) + int alt29=2; + alt29 = dfa29.predict(input); + switch (alt29) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:340:4: {...}? ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:568:9: {...}? => ftsFieldGroupExplicitDisjunction { - if ( !((defaultFieldConjunction())) ) { + root_0 = (Object)adaptor.nil(); + + if ( !((defaultFieldConjunction() == true)) ) { if (state.backtracking>0) {state.failed=true; return retval;} - throw new FailedPredicateException(input, "ftsFieldGroupImplicitConjunctionOrDisjunction", "defaultFieldConjunction()"); + throw new FailedPredicateException(input, "ftsFieldGroupDisjunction", "defaultFieldConjunction() == true"); } - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction1172); - ftsFieldGroupExplicitDisjunction73=ftsFieldGroupExplicitDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupDisjunction3294); + ftsFieldGroupExplicitDisjunction87=ftsFieldGroupExplicitDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction73.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:340:66: ( ftsFieldGroupExplicitDisjunction )* - loop23: - do { - int alt23=2; - int LA23_0 = input.LA(1); + if ( state.backtracking==0 ) adaptor.addChild(root_0, ftsFieldGroupExplicitDisjunction87.getTree()); - if ( ((LA23_0>=PLUS && LA23_0<=LPAREN)||(LA23_0>=TILDA && LA23_0<=DECIMAL_INTEGER_LITERAL)||(LA23_0>=EQUALS && LA23_0<=FTSPHRASE)||(LA23_0>=TO && LA23_0<=LT)||(LA23_0>=ID && LA23_0<=FLOATING_POINT_LITERAL)||LA23_0==EXCLAMATION) ) { - alt23=1; - } - - - switch (alt23) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:340:67: ftsFieldGroupExplicitDisjunction - { - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction1175); - ftsFieldGroupExplicitDisjunction74=ftsFieldGroupExplicitDisjunction(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction74.getTree()); - - } - break; - - default : - break loop23; - } - } while (true); - - - - // AST REWRITE - // elements: ftsFieldGroupExplicitDisjunction - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 341:3: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:341:6: ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_CONJUNCTION, "FIELD_CONJUNCTION"), root_1); - - if ( !(stream_ftsFieldGroupExplicitDisjunction.hasNext()) ) { - throw new RewriteEarlyExitException(); - } - while ( stream_ftsFieldGroupExplicitDisjunction.hasNext() ) { - adaptor.addChild(root_1, stream_ftsFieldGroupExplicitDisjunction.nextTree()); - - } - stream_ftsFieldGroupExplicitDisjunction.reset(); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;} } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:342:4: ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:569:11: {...}? => ftsFieldGroupImplicitDisjunction { - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction1193); - ftsFieldGroupExplicitDisjunction75=ftsFieldGroupExplicitDisjunction(); + root_0 = (Object)adaptor.nil(); + + if ( !((defaultFieldConjunction() == false)) ) { + if (state.backtracking>0) {state.failed=true; return retval;} + throw new FailedPredicateException(input, "ftsFieldGroupDisjunction", "defaultFieldConjunction() == false"); + } + pushFollow(FOLLOW_ftsFieldGroupImplicitDisjunction_in_ftsFieldGroupDisjunction3309); + ftsFieldGroupImplicitDisjunction88=ftsFieldGroupImplicitDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction75.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:342:37: ( ftsFieldGroupExplicitDisjunction )* - loop24: - do { - int alt24=2; - int LA24_0 = input.LA(1); + if ( state.backtracking==0 ) adaptor.addChild(root_0, ftsFieldGroupImplicitDisjunction88.getTree()); - if ( ((LA24_0>=PLUS && LA24_0<=LPAREN)||(LA24_0>=TILDA && LA24_0<=DECIMAL_INTEGER_LITERAL)||(LA24_0>=EQUALS && LA24_0<=FTSPHRASE)||(LA24_0>=TO && LA24_0<=LT)||(LA24_0>=ID && LA24_0<=FLOATING_POINT_LITERAL)||LA24_0==EXCLAMATION) ) { - alt24=1; - } - - - switch (alt24) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:342:38: ftsFieldGroupExplicitDisjunction - { - pushFollow(FOLLOW_ftsFieldGroupExplicitDisjunction_in_ftsFieldGroupImplicitConjunctionOrDisjunction1196); - ftsFieldGroupExplicitDisjunction76=ftsFieldGroupExplicitDisjunction(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupExplicitDisjunction.add(ftsFieldGroupExplicitDisjunction76.getTree()); - - } - break; - - default : - break loop24; - } - } while (true); - - - - // AST REWRITE - // elements: ftsFieldGroupExplicitDisjunction - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 343:3: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:343:6: ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_DISJUNCTION, "FIELD_DISJUNCTION"), root_1); - - if ( !(stream_ftsFieldGroupExplicitDisjunction.hasNext()) ) { - throw new RewriteEarlyExitException(); - } - while ( stream_ftsFieldGroupExplicitDisjunction.hasNext() ) { - adaptor.addChild(root_1, stream_ftsFieldGroupExplicitDisjunction.nextTree()); - - } - stream_ftsFieldGroupExplicitDisjunction.reset(); - - adaptor.addChild(root_0, root_1); - } - - } - - retval.tree = root_0;} } break; @@ -2999,7 +3756,7 @@ public class FTSParser extends Parser { } return retval; } - // $ANTLR end "ftsFieldGroupImplicitConjunctionOrDisjunction" + // $ANTLR end "ftsFieldGroupDisjunction" public static class ftsFieldGroupExplicitDisjunction_return extends ParserRuleReturnScope { Object tree; @@ -3007,66 +3764,72 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupExplicitDisjunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:346:1: ftsFieldGroupExplicitDisjunction : ftsFieldGroupExplictConjunction ( ( or )=> or ftsFieldGroupExplictConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:572:1: ftsFieldGroupExplicitDisjunction : ftsFieldGroupImplicitConjunction ( or ftsFieldGroupImplicitConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupImplicitConjunction )+ ) ; 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; - FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction77 = null; + FTSParser.ftsFieldGroupImplicitConjunction_return ftsFieldGroupImplicitConjunction89 = null; - FTSParser.or_return or78 = null; + FTSParser.or_return or90 = null; - FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction79 = null; + FTSParser.ftsFieldGroupImplicitConjunction_return ftsFieldGroupImplicitConjunction91 = null; - RewriteRuleSubtreeStream stream_ftsFieldGroupExplictConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupExplictConjunction"); + RewriteRuleSubtreeStream stream_ftsFieldGroupImplicitConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupImplicitConjunction"); RewriteRuleSubtreeStream stream_or=new RewriteRuleSubtreeStream(adaptor,"rule or"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:347:2: ( ftsFieldGroupExplictConjunction ( ( or )=> or ftsFieldGroupExplictConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:347:4: ftsFieldGroupExplictConjunction ( ( or )=> or ftsFieldGroupExplictConjunction )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:573:9: ( ftsFieldGroupImplicitConjunction ( or ftsFieldGroupImplicitConjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupImplicitConjunction )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:574:9: ftsFieldGroupImplicitConjunction ( or ftsFieldGroupImplicitConjunction )* { - pushFollow(FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction1221); - ftsFieldGroupExplictConjunction77=ftsFieldGroupExplictConjunction(); + pushFollow(FOLLOW_ftsFieldGroupImplicitConjunction_in_ftsFieldGroupExplicitDisjunction3342); + ftsFieldGroupImplicitConjunction89=ftsFieldGroupImplicitConjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupExplictConjunction.add(ftsFieldGroupExplictConjunction77.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:347:36: ( ( or )=> or ftsFieldGroupExplictConjunction )* - loop26: + if ( state.backtracking==0 ) stream_ftsFieldGroupImplicitConjunction.add(ftsFieldGroupImplicitConjunction89.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:574:42: ( or ftsFieldGroupImplicitConjunction )* + loop30: do { - int alt26=2; - alt26 = dfa26.predict(input); - switch (alt26) { + int alt30=2; + int LA30_0 = input.LA(1); + + if ( (LA30_0==BAR||LA30_0==OR) ) { + alt30=1; + } + + + switch (alt30) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:347:37: ( or )=> or ftsFieldGroupExplictConjunction + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:574:43: or ftsFieldGroupImplicitConjunction { - pushFollow(FOLLOW_or_in_ftsFieldGroupExplicitDisjunction1230); - or78=or(); + pushFollow(FOLLOW_or_in_ftsFieldGroupExplicitDisjunction3345); + or90=or(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_or.add(or78.getTree()); - pushFollow(FOLLOW_ftsFieldGroupExplictConjunction_in_ftsFieldGroupExplicitDisjunction1232); - ftsFieldGroupExplictConjunction79=ftsFieldGroupExplictConjunction(); + if ( state.backtracking==0 ) stream_or.add(or90.getTree()); + pushFollow(FOLLOW_ftsFieldGroupImplicitConjunction_in_ftsFieldGroupExplicitDisjunction3347); + ftsFieldGroupImplicitConjunction91=ftsFieldGroupImplicitConjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupExplictConjunction.add(ftsFieldGroupExplictConjunction79.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroupImplicitConjunction.add(ftsFieldGroupImplicitConjunction91.getTree()); } break; default : - break loop26; + break loop30; } } while (true); // AST REWRITE - // elements: ftsFieldGroupExplictConjunction + // elements: ftsFieldGroupImplicitConjunction // token labels: // rule labels: retval // token list labels: @@ -3077,21 +3840,21 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 348:3: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) + // 575:17: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupImplicitConjunction )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:348:6: ^( FIELD_DISJUNCTION ( ftsFieldGroupExplictConjunction )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:576:25: ^( FIELD_DISJUNCTION ( ftsFieldGroupImplicitConjunction )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_DISJUNCTION, "FIELD_DISJUNCTION"), root_1); - if ( !(stream_ftsFieldGroupExplictConjunction.hasNext()) ) { + if ( !(stream_ftsFieldGroupImplicitConjunction.hasNext()) ) { throw new RewriteEarlyExitException(); } - while ( stream_ftsFieldGroupExplictConjunction.hasNext() ) { - adaptor.addChild(root_1, stream_ftsFieldGroupExplictConjunction.nextTree()); + while ( stream_ftsFieldGroupImplicitConjunction.hasNext() ) { + adaptor.addChild(root_1, stream_ftsFieldGroupImplicitConjunction.nextTree()); } - stream_ftsFieldGroupExplictConjunction.reset(); + stream_ftsFieldGroupImplicitConjunction.reset(); adaptor.addChild(root_0, root_1); } @@ -3120,65 +3883,201 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsFieldGroupExplicitDisjunction" - public static class ftsFieldGroupExplictConjunction_return extends ParserRuleReturnScope { + public static class ftsFieldGroupImplicitDisjunction_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; - // $ANTLR start "ftsFieldGroupExplictConjunction" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:351:1: ftsFieldGroupExplictConjunction : ftsFieldGroupPrefixed ( ( and )=> and ftsFieldGroupPrefixed )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) ; - public final FTSParser.ftsFieldGroupExplictConjunction_return ftsFieldGroupExplictConjunction() throws RecognitionException { - FTSParser.ftsFieldGroupExplictConjunction_return retval = new FTSParser.ftsFieldGroupExplictConjunction_return(); + // $ANTLR start "ftsFieldGroupImplicitDisjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:579:1: ftsFieldGroupImplicitDisjunction : ( ( or )? ftsFieldGroupExplicitConjunction )+ -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitConjunction )+ ) ; + public final FTSParser.ftsFieldGroupImplicitDisjunction_return ftsFieldGroupImplicitDisjunction() throws RecognitionException { + FTSParser.ftsFieldGroupImplicitDisjunction_return retval = new FTSParser.ftsFieldGroupImplicitDisjunction_return(); retval.start = input.LT(1); Object root_0 = null; - FTSParser.ftsFieldGroupPrefixed_return ftsFieldGroupPrefixed80 = null; + FTSParser.or_return or92 = null; - FTSParser.and_return and81 = null; - - FTSParser.ftsFieldGroupPrefixed_return ftsFieldGroupPrefixed82 = null; + FTSParser.ftsFieldGroupExplicitConjunction_return ftsFieldGroupExplicitConjunction93 = null; - RewriteRuleSubtreeStream stream_ftsFieldGroupPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupPrefixed"); - RewriteRuleSubtreeStream stream_and=new RewriteRuleSubtreeStream(adaptor,"rule and"); + RewriteRuleSubtreeStream stream_or=new RewriteRuleSubtreeStream(adaptor,"rule or"); + RewriteRuleSubtreeStream stream_ftsFieldGroupExplicitConjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupExplicitConjunction"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:352:2: ( ftsFieldGroupPrefixed ( ( and )=> and ftsFieldGroupPrefixed )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:352:4: ftsFieldGroupPrefixed ( ( and )=> and ftsFieldGroupPrefixed )* + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:580:9: ( ( ( or )? ftsFieldGroupExplicitConjunction )+ -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitConjunction )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:581:9: ( ( or )? ftsFieldGroupExplicitConjunction )+ { - pushFollow(FOLLOW_ftsFieldGroupPrefixed_in_ftsFieldGroupExplictConjunction1257); - ftsFieldGroupPrefixed80=ftsFieldGroupPrefixed(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupPrefixed.add(ftsFieldGroupPrefixed80.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:352:26: ( ( and )=> and ftsFieldGroupPrefixed )* - loop27: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:581:9: ( ( or )? ftsFieldGroupExplicitConjunction )+ + int cnt32=0; + loop32: do { - int alt27=2; - alt27 = dfa27.predict(input); - switch (alt27) { + int alt32=2; + alt32 = dfa32.predict(input); + switch (alt32) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:352:27: ( and )=> and ftsFieldGroupPrefixed + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:581:10: ( or )? ftsFieldGroupExplicitConjunction { - pushFollow(FOLLOW_and_in_ftsFieldGroupExplictConjunction1266); - and81=and(); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:581:10: ( or )? + int alt31=2; + alt31 = dfa31.predict(input); + switch (alt31) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:581:10: or + { + pushFollow(FOLLOW_or_in_ftsFieldGroupImplicitDisjunction3432); + or92=or(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_or.add(or92.getTree()); + + } + break; + + } + + pushFollow(FOLLOW_ftsFieldGroupExplicitConjunction_in_ftsFieldGroupImplicitDisjunction3435); + ftsFieldGroupExplicitConjunction93=ftsFieldGroupExplicitConjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_and.add(and81.getTree()); - pushFollow(FOLLOW_ftsFieldGroupPrefixed_in_ftsFieldGroupExplictConjunction1268); - ftsFieldGroupPrefixed82=ftsFieldGroupPrefixed(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupPrefixed.add(ftsFieldGroupPrefixed82.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroupExplicitConjunction.add(ftsFieldGroupExplicitConjunction93.getTree()); } break; default : - break loop27; + if ( cnt32 >= 1 ) break loop32; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(32, input); + throw eee; + } + cnt32++; + } while (true); + + + + // AST REWRITE + // elements: ftsFieldGroupExplicitConjunction + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 582:17: -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitConjunction )+ ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:583:25: ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitConjunction )+ ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_DISJUNCTION, "FIELD_DISJUNCTION"), root_1); + + if ( !(stream_ftsFieldGroupExplicitConjunction.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_ftsFieldGroupExplicitConjunction.hasNext() ) { + adaptor.addChild(root_1, stream_ftsFieldGroupExplicitConjunction.nextTree()); + + } + stream_ftsFieldGroupExplicitConjunction.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "ftsFieldGroupImplicitDisjunction" + + public static class ftsFieldGroupExplicitConjunction_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ftsFieldGroupExplicitConjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:590:1: ftsFieldGroupExplicitConjunction : ftsFieldGroupPrefixed ( and ftsFieldGroupPrefixed )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) ; + public final FTSParser.ftsFieldGroupExplicitConjunction_return ftsFieldGroupExplicitConjunction() throws RecognitionException { + FTSParser.ftsFieldGroupExplicitConjunction_return retval = new FTSParser.ftsFieldGroupExplicitConjunction_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.ftsFieldGroupPrefixed_return ftsFieldGroupPrefixed94 = null; + + FTSParser.and_return and95 = null; + + FTSParser.ftsFieldGroupPrefixed_return ftsFieldGroupPrefixed96 = null; + + + RewriteRuleSubtreeStream stream_ftsFieldGroupPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupPrefixed"); + RewriteRuleSubtreeStream stream_and=new RewriteRuleSubtreeStream(adaptor,"rule and"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:591:9: ( ftsFieldGroupPrefixed ( and ftsFieldGroupPrefixed )* -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:592:9: ftsFieldGroupPrefixed ( and ftsFieldGroupPrefixed )* + { + pushFollow(FOLLOW_ftsFieldGroupPrefixed_in_ftsFieldGroupExplicitConjunction3522); + ftsFieldGroupPrefixed94=ftsFieldGroupPrefixed(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsFieldGroupPrefixed.add(ftsFieldGroupPrefixed94.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:592:31: ( and ftsFieldGroupPrefixed )* + loop33: + do { + int alt33=2; + int LA33_0 = input.LA(1); + + if ( ((LA33_0>=AND && LA33_0<=AMP)) ) { + alt33=1; + } + + + switch (alt33) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:592:32: and ftsFieldGroupPrefixed + { + pushFollow(FOLLOW_and_in_ftsFieldGroupExplicitConjunction3525); + and95=and(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_and.add(and95.getTree()); + pushFollow(FOLLOW_ftsFieldGroupPrefixed_in_ftsFieldGroupExplicitConjunction3527); + ftsFieldGroupPrefixed96=ftsFieldGroupPrefixed(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsFieldGroupPrefixed.add(ftsFieldGroupPrefixed96.getTree()); + + } + break; + + default : + break loop33; } } while (true); @@ -3196,9 +4095,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 353:3: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) + // 593:17: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:353:6: ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:594:25: ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_CONJUNCTION, "FIELD_CONJUNCTION"), root_1); @@ -3237,7 +4136,137 @@ public class FTSParser extends Parser { } return retval; } - // $ANTLR end "ftsFieldGroupExplictConjunction" + // $ANTLR end "ftsFieldGroupExplicitConjunction" + + public static class ftsFieldGroupImplicitConjunction_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ftsFieldGroupImplicitConjunction" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:597:1: ftsFieldGroupImplicitConjunction : ( ( and )? ftsFieldGroupPrefixed )+ -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) ; + public final FTSParser.ftsFieldGroupImplicitConjunction_return ftsFieldGroupImplicitConjunction() throws RecognitionException { + FTSParser.ftsFieldGroupImplicitConjunction_return retval = new FTSParser.ftsFieldGroupImplicitConjunction_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + FTSParser.and_return and97 = null; + + FTSParser.ftsFieldGroupPrefixed_return ftsFieldGroupPrefixed98 = null; + + + RewriteRuleSubtreeStream stream_ftsFieldGroupPrefixed=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupPrefixed"); + RewriteRuleSubtreeStream stream_and=new RewriteRuleSubtreeStream(adaptor,"rule and"); + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:598:9: ( ( ( and )? ftsFieldGroupPrefixed )+ -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:599:9: ( ( and )? ftsFieldGroupPrefixed )+ + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:599:9: ( ( and )? ftsFieldGroupPrefixed )+ + int cnt35=0; + loop35: + do { + int alt35=2; + alt35 = dfa35.predict(input); + switch (alt35) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:599:10: ( and )? ftsFieldGroupPrefixed + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:599:10: ( and )? + int alt34=2; + alt34 = dfa34.predict(input); + switch (alt34) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:599:10: and + { + pushFollow(FOLLOW_and_in_ftsFieldGroupImplicitConjunction3612); + and97=and(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_and.add(and97.getTree()); + + } + break; + + } + + pushFollow(FOLLOW_ftsFieldGroupPrefixed_in_ftsFieldGroupImplicitConjunction3615); + ftsFieldGroupPrefixed98=ftsFieldGroupPrefixed(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsFieldGroupPrefixed.add(ftsFieldGroupPrefixed98.getTree()); + + } + break; + + default : + if ( cnt35 >= 1 ) break loop35; + if (state.backtracking>0) {state.failed=true; return retval;} + EarlyExitException eee = + new EarlyExitException(35, input); + throw eee; + } + cnt35++; + } while (true); + + + + // AST REWRITE + // elements: ftsFieldGroupPrefixed + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 600:17: -> ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:601:25: ^( FIELD_CONJUNCTION ( ftsFieldGroupPrefixed )+ ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_CONJUNCTION, "FIELD_CONJUNCTION"), root_1); + + if ( !(stream_ftsFieldGroupPrefixed.hasNext()) ) { + throw new RewriteEarlyExitException(); + } + while ( stream_ftsFieldGroupPrefixed.hasNext() ) { + adaptor.addChild(root_1, stream_ftsFieldGroupPrefixed.nextTree()); + + } + stream_ftsFieldGroupPrefixed.reset(); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "ftsFieldGroupImplicitConjunction" public static class ftsFieldGroupPrefixed_return extends ParserRuleReturnScope { Object tree; @@ -3245,42 +4274,42 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupPrefixed" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:357:1: ftsFieldGroupPrefixed : ( ( not )=> not ftsFieldGroupTest ( boost )? -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) | ftsFieldGroupTest ( boost )? -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) | PLUS ftsFieldGroupTest ( boost )? -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) | BAR ftsFieldGroupTest ( boost )? -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) | MINUS ftsFieldGroupTest ( boost )? -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:604:1: ftsFieldGroupPrefixed : ( ( not )=> not ftsFieldGroupTest ( boost )? -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) | ftsFieldGroupTest ( boost )? -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) | PLUS ftsFieldGroupTest ( boost )? -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) | BAR ftsFieldGroupTest ( boost )? -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) | MINUS ftsFieldGroupTest ( boost )? -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) ); public final FTSParser.ftsFieldGroupPrefixed_return ftsFieldGroupPrefixed() throws RecognitionException { FTSParser.ftsFieldGroupPrefixed_return retval = new FTSParser.ftsFieldGroupPrefixed_return(); retval.start = input.LT(1); Object root_0 = null; - Token PLUS88=null; - Token BAR91=null; - Token MINUS94=null; - FTSParser.not_return not83 = null; + Token PLUS104=null; + Token BAR107=null; + Token MINUS110=null; + FTSParser.not_return not99 = null; - FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest84 = null; + FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest100 = null; - FTSParser.boost_return boost85 = null; + FTSParser.boost_return boost101 = null; - FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest86 = null; + FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest102 = null; - FTSParser.boost_return boost87 = null; + FTSParser.boost_return boost103 = null; - FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest89 = null; + FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest105 = null; - FTSParser.boost_return boost90 = null; + FTSParser.boost_return boost106 = null; - FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest92 = null; + FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest108 = null; - FTSParser.boost_return boost93 = null; + FTSParser.boost_return boost109 = null; - FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest95 = null; + FTSParser.ftsFieldGroupTest_return ftsFieldGroupTest111 = null; - FTSParser.boost_return boost96 = null; + FTSParser.boost_return boost112 = null; - Object PLUS88_tree=null; - Object BAR91_tree=null; - Object MINUS94_tree=null; + Object PLUS104_tree=null; + Object BAR107_tree=null; + Object MINUS110_tree=null; RewriteRuleTokenStream stream_PLUS=new RewriteRuleTokenStream(adaptor,"token PLUS"); RewriteRuleTokenStream stream_MINUS=new RewriteRuleTokenStream(adaptor,"token MINUS"); RewriteRuleTokenStream stream_BAR=new RewriteRuleTokenStream(adaptor,"token BAR"); @@ -3288,42 +4317,42 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_boost=new RewriteRuleSubtreeStream(adaptor,"rule boost"); RewriteRuleSubtreeStream stream_ftsFieldGroupTest=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTest"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:358:2: ( ( not )=> not ftsFieldGroupTest ( boost )? -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) | ftsFieldGroupTest ( boost )? -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) | PLUS ftsFieldGroupTest ( boost )? -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) | BAR ftsFieldGroupTest ( boost )? -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) | MINUS ftsFieldGroupTest ( boost )? -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) ) - int alt33=5; - alt33 = dfa33.predict(input); - switch (alt33) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:605:9: ( ( not )=> not ftsFieldGroupTest ( boost )? -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) | ftsFieldGroupTest ( boost )? -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) | PLUS ftsFieldGroupTest ( boost )? -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) | BAR ftsFieldGroupTest ( boost )? -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) | MINUS ftsFieldGroupTest ( boost )? -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) ) + int alt41=5; + alt41 = dfa41.predict(input); + switch (alt41) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:358:4: ( not )=> not ftsFieldGroupTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:606:9: ( not )=> not ftsFieldGroupTest ( boost )? { - pushFollow(FOLLOW_not_in_ftsFieldGroupPrefixed1303); - not83=not(); + pushFollow(FOLLOW_not_in_ftsFieldGroupPrefixed3705); + not99=not(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_not.add(not83.getTree()); - pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed1305); - ftsFieldGroupTest84=ftsFieldGroupTest(); + if ( state.backtracking==0 ) stream_not.add(not99.getTree()); + pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed3707); + ftsFieldGroupTest100=ftsFieldGroupTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest84.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:358:35: ( boost )? - int alt28=2; - int LA28_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest100.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:606:40: ( boost )? + int alt36=2; + int LA36_0 = input.LA(1); - if ( (LA28_0==CARAT) ) { - alt28=1; + if ( (LA36_0==CARAT) ) { + alt36=1; } - switch (alt28) { + switch (alt36) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:358:35: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:606:40: boost { - pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed1307); - boost85=boost(); + pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed3709); + boost101=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost85.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost101.getTree()); } break; @@ -3344,15 +4373,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 359:3: -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) + // 607:17: -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:359:6: ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:608:25: ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_NEGATION, "FIELD_NEGATION"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:359:41: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:608:60: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -3368,31 +4397,31 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:360:8: ftsFieldGroupTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:609:11: ftsFieldGroupTest ( boost )? { - pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed1330); - ftsFieldGroupTest86=ftsFieldGroupTest(); + pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed3773); + ftsFieldGroupTest102=ftsFieldGroupTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest86.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:360:26: ( boost )? - int alt29=2; - int LA29_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest102.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:609:29: ( boost )? + int alt37=2; + int LA37_0 = input.LA(1); - if ( (LA29_0==CARAT) ) { - alt29=1; + if ( (LA37_0==CARAT) ) { + alt37=1; } - switch (alt29) { + switch (alt37) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:360:26: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:609:29: boost { - pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed1332); - boost87=boost(); + pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed3775); + boost103=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost87.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost103.getTree()); } break; @@ -3413,15 +4442,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 361:3: -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) + // 610:17: -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:361:6: ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:611:25: ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_DEFAULT, "FIELD_DEFAULT"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:361:40: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:611:59: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -3437,34 +4466,34 @@ public class FTSParser extends Parser { } break; case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:362:7: PLUS ftsFieldGroupTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:612:11: PLUS ftsFieldGroupTest ( boost )? { - PLUS88=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsFieldGroupPrefixed1354); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_PLUS.add(PLUS88); + PLUS104=(Token)match(input,PLUS,FOLLOW_PLUS_in_ftsFieldGroupPrefixed3839); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_PLUS.add(PLUS104); - pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed1356); - ftsFieldGroupTest89=ftsFieldGroupTest(); + pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed3841); + ftsFieldGroupTest105=ftsFieldGroupTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest89.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:362:30: ( boost )? - int alt30=2; - int LA30_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest105.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:612:34: ( boost )? + int alt38=2; + int LA38_0 = input.LA(1); - if ( (LA30_0==CARAT) ) { - alt30=1; + if ( (LA38_0==CARAT) ) { + alt38=1; } - switch (alt30) { + switch (alt38) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:362:30: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:612:34: boost { - pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed1358); - boost90=boost(); + pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed3843); + boost106=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost90.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost106.getTree()); } break; @@ -3485,15 +4514,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 363:17: -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) + // 613:17: -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:363:20: ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:614:25: ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_MANDATORY, "FIELD_MANDATORY"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:363:56: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:614:61: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -3509,34 +4538,34 @@ public class FTSParser extends Parser { } break; case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:364:11: BAR ftsFieldGroupTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:615:11: BAR ftsFieldGroupTest ( boost )? { - BAR91=(Token)match(input,BAR,FOLLOW_BAR_in_ftsFieldGroupPrefixed1398); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_BAR.add(BAR91); + BAR107=(Token)match(input,BAR,FOLLOW_BAR_in_ftsFieldGroupPrefixed3907); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_BAR.add(BAR107); - pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed1400); - ftsFieldGroupTest92=ftsFieldGroupTest(); + pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed3909); + ftsFieldGroupTest108=ftsFieldGroupTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest92.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:364:33: ( boost )? - int alt31=2; - int LA31_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest108.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:615:33: ( boost )? + int alt39=2; + int LA39_0 = input.LA(1); - if ( (LA31_0==CARAT) ) { - alt31=1; + if ( (LA39_0==CARAT) ) { + alt39=1; } - switch (alt31) { + switch (alt39) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:364:33: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:615:33: boost { - pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed1402); - boost93=boost(); + pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed3911); + boost109=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost93.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost109.getTree()); } break; @@ -3546,7 +4575,7 @@ public class FTSParser extends Parser { // AST REWRITE - // elements: boost, ftsFieldGroupTest + // elements: ftsFieldGroupTest, boost // token labels: // rule labels: retval // token list labels: @@ -3557,15 +4586,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 365:17: -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) + // 616:17: -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:365:20: ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:617:25: ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_OPTIONAL, "FIELD_OPTIONAL"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:365:55: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:617:60: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -3581,34 +4610,34 @@ public class FTSParser extends Parser { } break; case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:366:11: MINUS ftsFieldGroupTest ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:618:11: MINUS ftsFieldGroupTest ( boost )? { - MINUS94=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsFieldGroupPrefixed1442); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_MINUS.add(MINUS94); + MINUS110=(Token)match(input,MINUS,FOLLOW_MINUS_in_ftsFieldGroupPrefixed3975); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_MINUS.add(MINUS110); - pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed1444); - ftsFieldGroupTest95=ftsFieldGroupTest(); + pushFollow(FOLLOW_ftsFieldGroupTest_in_ftsFieldGroupPrefixed3977); + ftsFieldGroupTest111=ftsFieldGroupTest(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest95.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:366:35: ( boost )? - int alt32=2; - int LA32_0 = input.LA(1); + if ( state.backtracking==0 ) stream_ftsFieldGroupTest.add(ftsFieldGroupTest111.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:618:35: ( boost )? + int alt40=2; + int LA40_0 = input.LA(1); - if ( (LA32_0==CARAT) ) { - alt32=1; + if ( (LA40_0==CARAT) ) { + alt40=1; } - switch (alt32) { + switch (alt40) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:366:35: boost + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:618:35: boost { - pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed1446); - boost96=boost(); + pushFollow(FOLLOW_boost_in_ftsFieldGroupPrefixed3979); + boost112=boost(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_boost.add(boost96.getTree()); + if ( state.backtracking==0 ) stream_boost.add(boost112.getTree()); } break; @@ -3629,15 +4658,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 367:17: -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) + // 619:17: -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:367:20: ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:620:25: ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_EXCLUDE, "FIELD_EXCLUDE"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupTest.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:367:54: ( boost )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:620:59: ( boost )? if ( stream_boost.hasNext() ) { adaptor.addChild(root_1, stream_boost.nextTree()); @@ -3679,100 +4708,69 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupTest" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:371:1: ftsFieldGroupTest : ( ftsFieldGroupTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) | ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) | ftsFieldGroupPhrase ( ( slop )=> slop )? -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) | ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:623:1: ftsFieldGroupTest : ( ( ftsFieldGroupProximity )=> ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) | ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) | ftsFieldGroupPhrase ( ( slop )=> slop )? -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) | ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupDisjunction RPAREN -> ftsFieldGroupDisjunction ); 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 LPAREN107=null; - Token RPAREN109=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm97 = null; + Token LPAREN123=null; + Token RPAREN125=null; + FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity113 = null; - FTSParser.fuzzy_return fuzzy98 = null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm114 = null; - FTSParser.ftsFieldGroupExactTerm_return ftsFieldGroupExactTerm99 = null; + FTSParser.fuzzy_return fuzzy115 = null; - FTSParser.fuzzy_return fuzzy100 = null; + FTSParser.ftsFieldGroupExactTerm_return ftsFieldGroupExactTerm116 = null; - FTSParser.ftsFieldGroupPhrase_return ftsFieldGroupPhrase101 = null; + FTSParser.fuzzy_return fuzzy117 = null; - FTSParser.slop_return slop102 = null; + FTSParser.ftsFieldGroupPhrase_return ftsFieldGroupPhrase118 = null; - FTSParser.ftsFieldGroupSynonym_return ftsFieldGroupSynonym103 = null; + FTSParser.slop_return slop119 = null; - FTSParser.fuzzy_return fuzzy104 = null; + FTSParser.ftsFieldGroupSynonym_return ftsFieldGroupSynonym120 = null; - FTSParser.ftsFieldGroupProximity_return ftsFieldGroupProximity105 = null; + FTSParser.fuzzy_return fuzzy121 = null; - FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange106 = null; + FTSParser.ftsFieldGroupRange_return ftsFieldGroupRange122 = null; - FTSParser.ftsFieldGroupImplicitConjunctionOrDisjunction_return ftsFieldGroupImplicitConjunctionOrDisjunction108 = null; + FTSParser.ftsFieldGroupDisjunction_return ftsFieldGroupDisjunction124 = null; - Object LPAREN107_tree=null; - Object RPAREN109_tree=null; + Object LPAREN123_tree=null; + Object RPAREN125_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"); RewriteRuleSubtreeStream stream_ftsFieldGroupPhrase=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupPhrase"); - RewriteRuleSubtreeStream stream_ftsFieldGroupImplicitConjunctionOrDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupImplicitConjunctionOrDisjunction"); RewriteRuleSubtreeStream stream_fuzzy=new RewriteRuleSubtreeStream(adaptor,"rule fuzzy"); RewriteRuleSubtreeStream stream_slop=new RewriteRuleSubtreeStream(adaptor,"rule slop"); RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); RewriteRuleSubtreeStream stream_ftsFieldGroupSynonym=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupSynonym"); RewriteRuleSubtreeStream stream_ftsFieldGroupExactTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupExactTerm"); + RewriteRuleSubtreeStream stream_ftsFieldGroupDisjunction=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupDisjunction"); RewriteRuleSubtreeStream stream_ftsFieldGroupProximity=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupProximity"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:372:2: ( ftsFieldGroupTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) | ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) | ftsFieldGroupPhrase ( ( slop )=> slop )? -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) | ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction ) - int alt38=7; - alt38 = dfa38.predict(input); - switch (alt38) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:624:9: ( ( ftsFieldGroupProximity )=> ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) | ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) | ftsFieldGroupPhrase ( ( slop )=> slop )? -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) | ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupDisjunction RPAREN -> ftsFieldGroupDisjunction ) + int alt46=7; + alt46 = dfa46.predict(input); + switch (alt46) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:372:4: ftsFieldGroupTerm ( ( fuzzy )=> fuzzy )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:625:9: ( ftsFieldGroupProximity )=> ftsFieldGroupProximity { - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupTest1490); - ftsFieldGroupTerm97=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsFieldGroupTest4070); + ftsFieldGroupProximity113=ftsFieldGroupProximity(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm97.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:372:22: ( ( fuzzy )=> fuzzy )? - int alt34=2; - int LA34_0 = input.LA(1); - - if ( (LA34_0==TILDA) ) { - int LA34_1 = input.LA(2); - - if ( (LA34_1==DECIMAL_INTEGER_LITERAL||LA34_1==FLOATING_POINT_LITERAL) ) { - int LA34_3 = input.LA(3); - - if ( (synpred11_FTS()) ) { - alt34=1; - } - } - } - switch (alt34) { - case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:372:23: ( fuzzy )=> fuzzy - { - pushFollow(FOLLOW_fuzzy_in_ftsFieldGroupTest1499); - fuzzy98=fuzzy(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy98.getTree()); - - } - break; - - } - + if ( state.backtracking==0 ) stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity113.getTree()); // AST REWRITE - // elements: ftsFieldGroupTerm, fuzzy + // elements: ftsFieldGroupProximity // token labels: // rule labels: retval // token list labels: @@ -3783,15 +4781,74 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 373:3: -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) + // 626:17: -> ^( FG_PROXIMITY ftsFieldGroupProximity ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:373:6: ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:627:25: ^( FG_PROXIMITY ftsFieldGroupProximity ) + { + Object root_1 = (Object)adaptor.nil(); + root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_PROXIMITY, "FG_PROXIMITY"), root_1); + + adaptor.addChild(root_1, stream_ftsFieldGroupProximity.nextTree()); + + adaptor.addChild(root_0, root_1); + } + + } + + retval.tree = root_0;} + } + break; + case 2 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:628:11: ftsFieldGroupTerm ( ( fuzzy )=> fuzzy )? + { + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupTest4130); + ftsFieldGroupTerm114=ftsFieldGroupTerm(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm114.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:628:29: ( ( fuzzy )=> fuzzy )? + int alt42=2; + alt42 = dfa42.predict(input); + switch (alt42) { + case 1 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:628:31: ( fuzzy )=> fuzzy + { + pushFollow(FOLLOW_fuzzy_in_ftsFieldGroupTest4140); + fuzzy115=fuzzy(); + + state._fsp--; + if (state.failed) return retval; + if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy115.getTree()); + + } + break; + + } + + + + // AST REWRITE + // elements: fuzzy, ftsFieldGroupTerm + // token labels: + // rule labels: retval + // token list labels: + // rule list labels: + // wildcard labels: + if ( state.backtracking==0 ) { + retval.tree = root_0; + RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); + + root_0 = (Object)adaptor.nil(); + // 629:17: -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) + { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:630:25: ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_TERM, "FG_TERM"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupTerm.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:373:34: ( fuzzy )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:630:53: ( fuzzy )? if ( stream_fuzzy.hasNext() ) { adaptor.addChild(root_1, stream_fuzzy.nextTree()); @@ -3806,40 +4863,28 @@ public class FTSParser extends Parser { retval.tree = root_0;} } break; - case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:374:4: ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? + case 3 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:631:11: ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? { - pushFollow(FOLLOW_ftsFieldGroupExactTerm_in_ftsFieldGroupTest1519); - ftsFieldGroupExactTerm99=ftsFieldGroupExactTerm(); + pushFollow(FOLLOW_ftsFieldGroupExactTerm_in_ftsFieldGroupTest4205); + ftsFieldGroupExactTerm116=ftsFieldGroupExactTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupExactTerm.add(ftsFieldGroupExactTerm99.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:374:27: ( ( fuzzy )=> fuzzy )? - int alt35=2; - int LA35_0 = input.LA(1); - - if ( (LA35_0==TILDA) ) { - int LA35_1 = input.LA(2); - - if ( (LA35_1==DECIMAL_INTEGER_LITERAL||LA35_1==FLOATING_POINT_LITERAL) ) { - int LA35_3 = input.LA(3); - - if ( (synpred12_FTS()) ) { - alt35=1; - } - } - } - switch (alt35) { + if ( state.backtracking==0 ) stream_ftsFieldGroupExactTerm.add(ftsFieldGroupExactTerm116.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:631:34: ( ( fuzzy )=> fuzzy )? + int alt43=2; + alt43 = dfa43.predict(input); + switch (alt43) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:374:28: ( fuzzy )=> fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:631:36: ( fuzzy )=> fuzzy { - pushFollow(FOLLOW_fuzzy_in_ftsFieldGroupTest1528); - fuzzy100=fuzzy(); + pushFollow(FOLLOW_fuzzy_in_ftsFieldGroupTest4215); + fuzzy117=fuzzy(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy100.getTree()); + if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy117.getTree()); } break; @@ -3860,15 +4905,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 375:3: -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) + // 632:17: -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:375:6: ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:633:25: ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_EXACT_TERM, "FG_EXACT_TERM"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupExactTerm.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:375:45: ( fuzzy )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:633:64: ( fuzzy )? if ( stream_fuzzy.hasNext() ) { adaptor.addChild(root_1, stream_fuzzy.nextTree()); @@ -3883,40 +4928,28 @@ public class FTSParser extends Parser { retval.tree = root_0;} } break; - case 3 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:376:4: ftsFieldGroupPhrase ( ( slop )=> slop )? + case 4 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:634:11: ftsFieldGroupPhrase ( ( slop )=> slop )? { - pushFollow(FOLLOW_ftsFieldGroupPhrase_in_ftsFieldGroupTest1548); - ftsFieldGroupPhrase101=ftsFieldGroupPhrase(); + pushFollow(FOLLOW_ftsFieldGroupPhrase_in_ftsFieldGroupTest4280); + ftsFieldGroupPhrase118=ftsFieldGroupPhrase(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupPhrase.add(ftsFieldGroupPhrase101.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:376:24: ( ( slop )=> slop )? - int alt36=2; - int LA36_0 = input.LA(1); - - if ( (LA36_0==TILDA) ) { - int LA36_1 = input.LA(2); - - if ( (LA36_1==DECIMAL_INTEGER_LITERAL) ) { - int LA36_3 = input.LA(3); - - if ( (synpred13_FTS()) ) { - alt36=1; - } - } - } - switch (alt36) { + if ( state.backtracking==0 ) stream_ftsFieldGroupPhrase.add(ftsFieldGroupPhrase118.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:634:31: ( ( slop )=> slop )? + int alt44=2; + alt44 = dfa44.predict(input); + switch (alt44) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:376:25: ( slop )=> slop + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:634:33: ( slop )=> slop { - pushFollow(FOLLOW_slop_in_ftsFieldGroupTest1557); - slop102=slop(); + pushFollow(FOLLOW_slop_in_ftsFieldGroupTest4290); + slop119=slop(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_slop.add(slop102.getTree()); + if ( state.backtracking==0 ) stream_slop.add(slop119.getTree()); } break; @@ -3937,15 +4970,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 377:3: -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) + // 635:17: -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:377:6: ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:636:25: ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_PHRASE, "FG_PHRASE"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupPhrase.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:377:38: ( slop )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:636:57: ( slop )? if ( stream_slop.hasNext() ) { adaptor.addChild(root_1, stream_slop.nextTree()); @@ -3960,40 +4993,28 @@ public class FTSParser extends Parser { retval.tree = root_0;} } break; - case 4 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:4: ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? + case 5 : + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:637:11: ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? { - pushFollow(FOLLOW_ftsFieldGroupSynonym_in_ftsFieldGroupTest1579); - ftsFieldGroupSynonym103=ftsFieldGroupSynonym(); + pushFollow(FOLLOW_ftsFieldGroupSynonym_in_ftsFieldGroupTest4355); + ftsFieldGroupSynonym120=ftsFieldGroupSynonym(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupSynonym.add(ftsFieldGroupSynonym103.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:25: ( ( fuzzy )=> fuzzy )? - int alt37=2; - int LA37_0 = input.LA(1); - - if ( (LA37_0==TILDA) ) { - int LA37_1 = input.LA(2); - - if ( (LA37_1==DECIMAL_INTEGER_LITERAL||LA37_1==FLOATING_POINT_LITERAL) ) { - int LA37_3 = input.LA(3); - - if ( (synpred14_FTS()) ) { - alt37=1; - } - } - } - switch (alt37) { + if ( state.backtracking==0 ) stream_ftsFieldGroupSynonym.add(ftsFieldGroupSynonym120.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:637:32: ( ( fuzzy )=> fuzzy )? + int alt45=2; + alt45 = dfa45.predict(input); + switch (alt45) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:26: ( fuzzy )=> fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:637:34: ( fuzzy )=> fuzzy { - pushFollow(FOLLOW_fuzzy_in_ftsFieldGroupTest1588); - fuzzy104=fuzzy(); + pushFollow(FOLLOW_fuzzy_in_ftsFieldGroupTest4365); + fuzzy121=fuzzy(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy104.getTree()); + if ( state.backtracking==0 ) stream_fuzzy.add(fuzzy121.getTree()); } break; @@ -4003,7 +5024,7 @@ public class FTSParser extends Parser { // AST REWRITE - // elements: fuzzy, ftsFieldGroupSynonym + // elements: ftsFieldGroupSynonym, fuzzy // token labels: // rule labels: retval // token list labels: @@ -4014,15 +5035,15 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 379:3: -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) + // 638:17: -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:379:6: ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:639:25: ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_SYNONYM, "FG_SYNONYM"), root_1); adaptor.addChild(root_1, stream_ftsFieldGroupSynonym.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:379:40: ( fuzzy )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:639:59: ( fuzzy )? if ( stream_fuzzy.hasNext() ) { adaptor.addChild(root_1, stream_fuzzy.nextTree()); @@ -4034,58 +5055,18 @@ public class FTSParser extends Parser { } - retval.tree = root_0;} - } - break; - case 5 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:380:6: ftsFieldGroupProximity - { - pushFollow(FOLLOW_ftsFieldGroupProximity_in_ftsFieldGroupTest1610); - ftsFieldGroupProximity105=ftsFieldGroupProximity(); - - state._fsp--; - if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupProximity.add(ftsFieldGroupProximity105.getTree()); - - - // AST REWRITE - // elements: ftsFieldGroupProximity - // token labels: - // rule labels: retval - // token list labels: - // rule list labels: - // wildcard labels: - if ( state.backtracking==0 ) { - retval.tree = root_0; - RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); - - root_0 = (Object)adaptor.nil(); - // 381:3: -> ^( FG_PROXIMITY ftsFieldGroupProximity ) - { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:381:6: ^( FG_PROXIMITY ftsFieldGroupProximity ) - { - Object root_1 = (Object)adaptor.nil(); - root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_PROXIMITY, "FG_PROXIMITY"), root_1); - - adaptor.addChild(root_1, stream_ftsFieldGroupProximity.nextTree()); - - adaptor.addChild(root_0, root_1); - } - - } - retval.tree = root_0;} } break; case 6 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:382:9: ftsFieldGroupRange + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:640:11: ftsFieldGroupRange { - pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsFieldGroupTest1630); - ftsFieldGroupRange106=ftsFieldGroupRange(); + pushFollow(FOLLOW_ftsFieldGroupRange_in_ftsFieldGroupTest4430); + ftsFieldGroupRange122=ftsFieldGroupRange(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupRange.add(ftsFieldGroupRange106.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroupRange.add(ftsFieldGroupRange122.getTree()); // AST REWRITE @@ -4100,9 +5081,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 383:10: -> ^( FG_RANGE ftsFieldGroupRange ) + // 641:17: -> ^( FG_RANGE ftsFieldGroupRange ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:383:13: ^( FG_RANGE ftsFieldGroupRange ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:642:25: ^( FG_RANGE ftsFieldGroupRange ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FG_RANGE, "FG_RANGE"), root_1); @@ -4118,24 +5099,24 @@ public class FTSParser extends Parser { } break; case 7 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:384:5: LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:643:11: LPAREN ftsFieldGroupDisjunction RPAREN { - LPAREN107=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroupTest1653); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN107); + LPAREN123=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_ftsFieldGroupTest4490); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN123); - pushFollow(FOLLOW_ftsFieldGroupImplicitConjunctionOrDisjunction_in_ftsFieldGroupTest1655); - ftsFieldGroupImplicitConjunctionOrDisjunction108=ftsFieldGroupImplicitConjunctionOrDisjunction(); + pushFollow(FOLLOW_ftsFieldGroupDisjunction_in_ftsFieldGroupTest4492); + ftsFieldGroupDisjunction124=ftsFieldGroupDisjunction(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupImplicitConjunctionOrDisjunction.add(ftsFieldGroupImplicitConjunctionOrDisjunction108.getTree()); - RPAREN109=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroupTest1657); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN109); + if ( state.backtracking==0 ) stream_ftsFieldGroupDisjunction.add(ftsFieldGroupDisjunction124.getTree()); + RPAREN125=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_ftsFieldGroupTest4494); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN125); // AST REWRITE - // elements: ftsFieldGroupImplicitConjunctionOrDisjunction + // elements: ftsFieldGroupDisjunction // token labels: // rule labels: retval // token list labels: @@ -4146,9 +5127,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 385:3: -> ftsFieldGroupImplicitConjunctionOrDisjunction + // 644:17: -> ftsFieldGroupDisjunction { - adaptor.addChild(root_0, stream_ftsFieldGroupImplicitConjunctionOrDisjunction.nextTree()); + adaptor.addChild(root_0, stream_ftsFieldGroupDisjunction.nextTree()); } @@ -4182,29 +5163,29 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupTerm" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:388:1: ftsFieldGroupTerm : ftsWord ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:647: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; - FTSParser.ftsWord_return ftsWord110 = null; + FTSParser.ftsWord_return ftsWord126 = null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:389:2: ( ftsWord ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:389:4: ftsWord + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:648:9: ( ftsWord ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:649:9: ftsWord { root_0 = (Object)adaptor.nil(); - pushFollow(FOLLOW_ftsWord_in_ftsFieldGroupTerm1677); - ftsWord110=ftsWord(); + pushFollow(FOLLOW_ftsWord_in_ftsFieldGroupTerm4547); + ftsWord126=ftsWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) adaptor.addChild(root_0, ftsWord110.getTree()); + if ( state.backtracking==0 ) adaptor.addChild(root_0, ftsWord126.getTree()); } @@ -4233,33 +5214,33 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupExactTerm" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:392:1: ftsFieldGroupExactTerm : EQUALS ftsFieldGroupTerm -> ftsFieldGroupTerm ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:652:1: ftsFieldGroupExactTerm : EQUALS 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 EQUALS111=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm112 = null; + Token EQUALS127=null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm128 = null; - Object EQUALS111_tree=null; + Object EQUALS127_tree=null; RewriteRuleTokenStream stream_EQUALS=new RewriteRuleTokenStream(adaptor,"token EQUALS"); RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:393:2: ( EQUALS ftsFieldGroupTerm -> ftsFieldGroupTerm ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:393:4: EQUALS ftsFieldGroupTerm + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:653:9: ( EQUALS ftsFieldGroupTerm -> ftsFieldGroupTerm ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:654:9: EQUALS ftsFieldGroupTerm { - EQUALS111=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_ftsFieldGroupExactTerm1689); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_EQUALS.add(EQUALS111); + EQUALS127=(Token)match(input,EQUALS,FOLLOW_EQUALS_in_ftsFieldGroupExactTerm4580); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_EQUALS.add(EQUALS127); - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupExactTerm1691); - ftsFieldGroupTerm112=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupExactTerm4582); + ftsFieldGroupTerm128=ftsFieldGroupTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm112.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm128.getTree()); // AST REWRITE @@ -4274,7 +5255,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 394:3: -> ftsFieldGroupTerm + // 655:17: -> ftsFieldGroupTerm { adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); @@ -4308,27 +5289,27 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupPhrase" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:397:1: ftsFieldGroupPhrase : FTSPHRASE ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:658: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 FTSPHRASE113=null; + Token FTSPHRASE129=null; - Object FTSPHRASE113_tree=null; + Object FTSPHRASE129_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:398:2: ( FTSPHRASE ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:398:6: FTSPHRASE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:659:9: ( FTSPHRASE ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:660:9: FTSPHRASE { root_0 = (Object)adaptor.nil(); - FTSPHRASE113=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsFieldGroupPhrase1711); if (state.failed) return retval; + FTSPHRASE129=(Token)match(input,FTSPHRASE,FOLLOW_FTSPHRASE_in_ftsFieldGroupPhrase4635); if (state.failed) return retval; if ( state.backtracking==0 ) { - FTSPHRASE113_tree = (Object)adaptor.create(FTSPHRASE113); - adaptor.addChild(root_0, FTSPHRASE113_tree); + FTSPHRASE129_tree = (Object)adaptor.create(FTSPHRASE129); + adaptor.addChild(root_0, FTSPHRASE129_tree); } } @@ -4358,33 +5339,33 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupSynonym" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:401:1: ftsFieldGroupSynonym : TILDA ftsFieldGroupTerm -> ftsFieldGroupTerm ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:663: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 TILDA114=null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm115 = null; + Token TILDA130=null; + FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm131 = null; - Object TILDA114_tree=null; + Object TILDA130_tree=null; RewriteRuleTokenStream stream_TILDA=new RewriteRuleTokenStream(adaptor,"token TILDA"); RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:402:2: ( TILDA ftsFieldGroupTerm -> ftsFieldGroupTerm ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:402:4: TILDA ftsFieldGroupTerm + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:664:9: ( TILDA ftsFieldGroupTerm -> ftsFieldGroupTerm ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:665:9: TILDA ftsFieldGroupTerm { - TILDA114=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsFieldGroupSynonym1723); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_TILDA.add(TILDA114); + TILDA130=(Token)match(input,TILDA,FOLLOW_TILDA_in_ftsFieldGroupSynonym4668); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TILDA.add(TILDA130); - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupSynonym1725); - ftsFieldGroupTerm115=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupSynonym4670); + ftsFieldGroupTerm131=ftsFieldGroupTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm115.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm131.getTree()); // AST REWRITE @@ -4399,7 +5380,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 403:3: -> ftsFieldGroupTerm + // 666:17: -> ftsFieldGroupTerm { adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); @@ -4433,78 +5414,72 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupProximity" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:406:1: ftsFieldGroupProximity : ftsFieldGroupTerm ( proximityGroup ftsFieldGroupTerm )+ -> ftsFieldGroupTerm ( proximityGroup ftsFieldGroupTerm )+ ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:669:1: ftsFieldGroupProximity : ftsFieldGroupProximityTerm ( ( proximityGroup )=> proximityGroup ftsFieldGroupProximityTerm )+ -> ftsFieldGroupProximityTerm ( proximityGroup ftsFieldGroupProximityTerm )+ ; 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; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm116 = null; + FTSParser.ftsFieldGroupProximityTerm_return ftsFieldGroupProximityTerm132 = null; - FTSParser.proximityGroup_return proximityGroup117 = null; + FTSParser.proximityGroup_return proximityGroup133 = null; - FTSParser.ftsFieldGroupTerm_return ftsFieldGroupTerm118 = null; + FTSParser.ftsFieldGroupProximityTerm_return ftsFieldGroupProximityTerm134 = null; - RewriteRuleSubtreeStream stream_ftsFieldGroupTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupTerm"); RewriteRuleSubtreeStream stream_proximityGroup=new RewriteRuleSubtreeStream(adaptor,"rule proximityGroup"); + RewriteRuleSubtreeStream stream_ftsFieldGroupProximityTerm=new RewriteRuleSubtreeStream(adaptor,"rule ftsFieldGroupProximityTerm"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:407:2: ( ftsFieldGroupTerm ( proximityGroup ftsFieldGroupTerm )+ -> ftsFieldGroupTerm ( proximityGroup ftsFieldGroupTerm )+ ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:407:4: ftsFieldGroupTerm ( proximityGroup ftsFieldGroupTerm )+ + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:670:9: ( ftsFieldGroupProximityTerm ( ( proximityGroup )=> proximityGroup ftsFieldGroupProximityTerm )+ -> ftsFieldGroupProximityTerm ( proximityGroup ftsFieldGroupProximityTerm )+ ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:671:9: ftsFieldGroupProximityTerm ( ( proximityGroup )=> proximityGroup ftsFieldGroupProximityTerm )+ { - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity1743); - ftsFieldGroupTerm116=ftsFieldGroupTerm(); + pushFollow(FOLLOW_ftsFieldGroupProximityTerm_in_ftsFieldGroupProximity4723); + ftsFieldGroupProximityTerm132=ftsFieldGroupProximityTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm116.getTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:407:22: ( proximityGroup ftsFieldGroupTerm )+ - int cnt39=0; - loop39: + if ( state.backtracking==0 ) stream_ftsFieldGroupProximityTerm.add(ftsFieldGroupProximityTerm132.getTree()); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:671:36: ( ( proximityGroup )=> proximityGroup ftsFieldGroupProximityTerm )+ + int cnt47=0; + loop47: do { - int alt39=2; - int LA39_0 = input.LA(1); - - if ( (LA39_0==STAR) ) { - alt39=1; - } - - - switch (alt39) { + int alt47=2; + alt47 = dfa47.predict(input); + switch (alt47) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:407:23: proximityGroup ftsFieldGroupTerm + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:671:38: ( proximityGroup )=> proximityGroup ftsFieldGroupProximityTerm { - pushFollow(FOLLOW_proximityGroup_in_ftsFieldGroupProximity1746); - proximityGroup117=proximityGroup(); + pushFollow(FOLLOW_proximityGroup_in_ftsFieldGroupProximity4733); + proximityGroup133=proximityGroup(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_proximityGroup.add(proximityGroup117.getTree()); - pushFollow(FOLLOW_ftsFieldGroupTerm_in_ftsFieldGroupProximity1748); - ftsFieldGroupTerm118=ftsFieldGroupTerm(); + if ( state.backtracking==0 ) stream_proximityGroup.add(proximityGroup133.getTree()); + pushFollow(FOLLOW_ftsFieldGroupProximityTerm_in_ftsFieldGroupProximity4735); + ftsFieldGroupProximityTerm134=ftsFieldGroupProximityTerm(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsFieldGroupTerm.add(ftsFieldGroupTerm118.getTree()); + if ( state.backtracking==0 ) stream_ftsFieldGroupProximityTerm.add(ftsFieldGroupProximityTerm134.getTree()); } break; default : - if ( cnt39 >= 1 ) break loop39; + if ( cnt47 >= 1 ) break loop47; if (state.backtracking>0) {state.failed=true; return retval;} EarlyExitException eee = - new EarlyExitException(39, input); + new EarlyExitException(47, input); throw eee; } - cnt39++; + cnt47++; } while (true); // AST REWRITE - // elements: ftsFieldGroupTerm, proximityGroup, ftsFieldGroupTerm + // elements: ftsFieldGroupProximityTerm, proximityGroup, ftsFieldGroupProximityTerm // token labels: // rule labels: retval // token list labels: @@ -4515,18 +5490,18 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 408:3: -> ftsFieldGroupTerm ( proximityGroup ftsFieldGroupTerm )+ + // 672:17: -> ftsFieldGroupProximityTerm ( proximityGroup ftsFieldGroupProximityTerm )+ { - adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); - if ( !(stream_ftsFieldGroupTerm.hasNext()||stream_proximityGroup.hasNext()) ) { + adaptor.addChild(root_0, stream_ftsFieldGroupProximityTerm.nextTree()); + if ( !(stream_ftsFieldGroupProximityTerm.hasNext()||stream_proximityGroup.hasNext()) ) { throw new RewriteEarlyExitException(); } - while ( stream_ftsFieldGroupTerm.hasNext()||stream_proximityGroup.hasNext() ) { + while ( stream_ftsFieldGroupProximityTerm.hasNext()||stream_proximityGroup.hasNext() ) { adaptor.addChild(root_0, stream_proximityGroup.nextTree()); - adaptor.addChild(root_0, stream_ftsFieldGroupTerm.nextTree()); + adaptor.addChild(root_0, stream_ftsFieldGroupProximityTerm.nextTree()); } - stream_ftsFieldGroupTerm.reset(); + stream_ftsFieldGroupProximityTerm.reset(); stream_proximityGroup.reset(); } @@ -4553,67 +5528,124 @@ public class FTSParser extends Parser { } // $ANTLR end "ftsFieldGroupProximity" + public static class ftsFieldGroupProximityTerm_return extends ParserRuleReturnScope { + Object tree; + public Object getTree() { return tree; } + }; + + // $ANTLR start "ftsFieldGroupProximityTerm" + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:675:1: ftsFieldGroupProximityTerm : ( ID | FTSWORD | FTSPRE | FTSWILD | NOT | TO | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ); + public final FTSParser.ftsFieldGroupProximityTerm_return ftsFieldGroupProximityTerm() throws RecognitionException { + FTSParser.ftsFieldGroupProximityTerm_return retval = new FTSParser.ftsFieldGroupProximityTerm_return(); + retval.start = input.LT(1); + + Object root_0 = null; + + Token set135=null; + + Object set135_tree=null; + + try { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:676:9: ( ID | FTSWORD | FTSPRE | FTSWILD | NOT | TO | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + { + root_0 = (Object)adaptor.nil(); + + set135=(Token)input.LT(1); + if ( input.LA(1)==DECIMAL_INTEGER_LITERAL||(input.LA(1)>=ID && input.LA(1)<=FLOATING_POINT_LITERAL) ) { + input.consume(); + if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set135)); + state.errorRecovery=false;state.failed=false; + } + else { + if (state.backtracking>0) {state.failed=true; return retval;} + MismatchedSetException mse = new MismatchedSetException(null,input); + throw mse; + } + + + } + + retval.stop = input.LT(-1); + + if ( state.backtracking==0 ) { + + 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 "ftsFieldGroupProximityTerm" + public static class proximityGroup_return extends ParserRuleReturnScope { Object tree; public Object getTree() { return tree; } }; // $ANTLR start "proximityGroup" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:411:1: proximityGroup : STAR ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? -> ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:687:1: proximityGroup : STAR ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? -> ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) ; public final FTSParser.proximityGroup_return proximityGroup() throws RecognitionException { FTSParser.proximityGroup_return retval = new FTSParser.proximityGroup_return(); retval.start = input.LT(1); Object root_0 = null; - Token STAR119=null; - Token LPAREN120=null; - Token DECIMAL_INTEGER_LITERAL121=null; - Token RPAREN122=null; + Token STAR136=null; + Token LPAREN137=null; + Token DECIMAL_INTEGER_LITERAL138=null; + Token RPAREN139=null; - Object STAR119_tree=null; - Object LPAREN120_tree=null; - Object DECIMAL_INTEGER_LITERAL121_tree=null; - Object RPAREN122_tree=null; + Object STAR136_tree=null; + Object LPAREN137_tree=null; + Object DECIMAL_INTEGER_LITERAL138_tree=null; + Object RPAREN139_tree=null; RewriteRuleTokenStream stream_RPAREN=new RewriteRuleTokenStream(adaptor,"token RPAREN"); RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR"); RewriteRuleTokenStream stream_DECIMAL_INTEGER_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_INTEGER_LITERAL"); RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:412:4: ( STAR ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? -> ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:412:7: STAR ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:688:9: ( STAR ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? -> ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:689:9: STAR ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? { - STAR119=(Token)match(input,STAR,FOLLOW_STAR_in_proximityGroup1778); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_STAR.add(STAR119); + STAR136=(Token)match(input,STAR,FOLLOW_STAR_in_proximityGroup4914); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_STAR.add(STAR136); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:412:12: ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? - int alt41=2; - int LA41_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:689:14: ( LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN )? + int alt49=2; + int LA49_0 = input.LA(1); - if ( (LA41_0==LPAREN) ) { - alt41=1; + if ( (LA49_0==LPAREN) ) { + alt49=1; } - switch (alt41) { + switch (alt49) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:412:14: LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:689:15: LPAREN ( DECIMAL_INTEGER_LITERAL )? RPAREN { - LPAREN120=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_proximityGroup1782); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN120); + LPAREN137=(Token)match(input,LPAREN,FOLLOW_LPAREN_in_proximityGroup4917); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LPAREN.add(LPAREN137); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:412:21: ( DECIMAL_INTEGER_LITERAL )? - int alt40=2; - int LA40_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:689:22: ( DECIMAL_INTEGER_LITERAL )? + int alt48=2; + int LA48_0 = input.LA(1); - if ( (LA40_0==DECIMAL_INTEGER_LITERAL) ) { - alt40=1; + if ( (LA48_0==DECIMAL_INTEGER_LITERAL) ) { + alt48=1; } - switch (alt40) { + switch (alt48) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:412:21: DECIMAL_INTEGER_LITERAL + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:689:22: DECIMAL_INTEGER_LITERAL { - DECIMAL_INTEGER_LITERAL121=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_proximityGroup1784); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL121); + DECIMAL_INTEGER_LITERAL138=(Token)match(input,DECIMAL_INTEGER_LITERAL,FOLLOW_DECIMAL_INTEGER_LITERAL_in_proximityGroup4919); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DECIMAL_INTEGER_LITERAL.add(DECIMAL_INTEGER_LITERAL138); } @@ -4621,8 +5653,8 @@ public class FTSParser extends Parser { } - RPAREN122=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_proximityGroup1787); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN122); + RPAREN139=(Token)match(input,RPAREN,FOLLOW_RPAREN_in_proximityGroup4922); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RPAREN.add(RPAREN139); } @@ -4644,14 +5676,14 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 413:5: -> ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) + // 690:17: -> ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:413:8: ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:691:25: ^( PROXIMITY ( DECIMAL_INTEGER_LITERAL )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PROXIMITY, "PROXIMITY"), root_1); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:413:20: ( DECIMAL_INTEGER_LITERAL )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:691:37: ( DECIMAL_INTEGER_LITERAL )? if ( stream_DECIMAL_INTEGER_LITERAL.hasNext() ) { adaptor.addChild(root_1, stream_DECIMAL_INTEGER_LITERAL.nextNode()); @@ -4691,72 +5723,72 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsFieldGroupRange" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:416:1: ftsFieldGroupRange : ( ftsRangeWord DOTDOT ftsRangeWord -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE | range_left ftsRangeWord TO ftsRangeWord range_right -> range_left ftsRangeWord ftsRangeWord range_right ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:694:1: ftsFieldGroupRange : ( ftsRangeWord DOTDOT ftsRangeWord -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE | range_left ftsRangeWord TO ftsRangeWord range_right -> range_left ftsRangeWord ftsRangeWord range_right ); 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 DOTDOT124=null; - Token TO128=null; - FTSParser.ftsRangeWord_return ftsRangeWord123 = null; + Token DOTDOT141=null; + Token TO145=null; + FTSParser.ftsRangeWord_return ftsRangeWord140 = null; - FTSParser.ftsRangeWord_return ftsRangeWord125 = null; + FTSParser.ftsRangeWord_return ftsRangeWord142 = null; - FTSParser.range_left_return range_left126 = null; + FTSParser.range_left_return range_left143 = null; - FTSParser.ftsRangeWord_return ftsRangeWord127 = null; + FTSParser.ftsRangeWord_return ftsRangeWord144 = null; - FTSParser.ftsRangeWord_return ftsRangeWord129 = null; + FTSParser.ftsRangeWord_return ftsRangeWord146 = null; - FTSParser.range_right_return range_right130 = null; + FTSParser.range_right_return range_right147 = null; - Object DOTDOT124_tree=null; - Object TO128_tree=null; + Object DOTDOT141_tree=null; + Object TO145_tree=null; RewriteRuleTokenStream stream_DOTDOT=new RewriteRuleTokenStream(adaptor,"token DOTDOT"); RewriteRuleTokenStream stream_TO=new RewriteRuleTokenStream(adaptor,"token TO"); RewriteRuleSubtreeStream stream_range_left=new RewriteRuleSubtreeStream(adaptor,"rule range_left"); RewriteRuleSubtreeStream stream_range_right=new RewriteRuleSubtreeStream(adaptor,"rule range_right"); RewriteRuleSubtreeStream stream_ftsRangeWord=new RewriteRuleSubtreeStream(adaptor,"rule ftsRangeWord"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:417:9: ( ftsRangeWord DOTDOT ftsRangeWord -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE | range_left ftsRangeWord TO ftsRangeWord range_right -> range_left ftsRangeWord ftsRangeWord range_right ) - int alt42=2; - int LA42_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:695:9: ( ftsRangeWord DOTDOT ftsRangeWord -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE | range_left ftsRangeWord TO ftsRangeWord range_right -> range_left ftsRangeWord ftsRangeWord range_right ) + int alt50=2; + int LA50_0 = input.LA(1); - if ( (LA42_0==DECIMAL_INTEGER_LITERAL||LA42_0==FTSPHRASE||(LA42_0>=ID && LA42_0<=FTSWILD)||LA42_0==FLOATING_POINT_LITERAL) ) { - alt42=1; + if ( (LA50_0==DECIMAL_INTEGER_LITERAL||(LA50_0>=FTSPHRASE && LA50_0<=FTSWILD)||LA50_0==FLOATING_POINT_LITERAL) ) { + alt50=1; } - else if ( ((LA42_0>=LSQUARE && LA42_0<=LT)) ) { - alt42=2; + else if ( ((LA50_0>=LSQUARE && LA50_0<=LT)) ) { + alt50=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 42, 0, input); + new NoViableAltException("", 50, 0, input); throw nvae; } - switch (alt42) { + switch (alt50) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:417:11: ftsRangeWord DOTDOT ftsRangeWord + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:696:9: ftsRangeWord DOTDOT ftsRangeWord { - pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange1823); - ftsRangeWord123=ftsRangeWord(); + pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange5006); + ftsRangeWord140=ftsRangeWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord123.getTree()); - DOTDOT124=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_ftsFieldGroupRange1825); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_DOTDOT.add(DOTDOT124); + if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord140.getTree()); + DOTDOT141=(Token)match(input,DOTDOT,FOLLOW_DOTDOT_in_ftsFieldGroupRange5008); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_DOTDOT.add(DOTDOT141); - pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange1827); - ftsRangeWord125=ftsRangeWord(); + pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange5010); + ftsRangeWord142=ftsRangeWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord125.getTree()); + if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord142.getTree()); // AST REWRITE @@ -4771,7 +5803,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 418:3: -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE + // 697:17: -> INCLUSIVE ftsRangeWord ftsRangeWord INCLUSIVE { adaptor.addChild(root_0, (Object)adaptor.create(INCLUSIVE, "INCLUSIVE")); adaptor.addChild(root_0, stream_ftsRangeWord.nextTree()); @@ -4784,39 +5816,39 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:419:4: range_left ftsRangeWord TO ftsRangeWord range_right + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:698:11: range_left ftsRangeWord TO ftsRangeWord range_right { - pushFollow(FOLLOW_range_left_in_ftsFieldGroupRange1844); - range_left126=range_left(); + pushFollow(FOLLOW_range_left_in_ftsFieldGroupRange5048); + range_left143=range_left(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_range_left.add(range_left126.getTree()); - pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange1846); - ftsRangeWord127=ftsRangeWord(); + if ( state.backtracking==0 ) stream_range_left.add(range_left143.getTree()); + pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange5050); + ftsRangeWord144=ftsRangeWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord127.getTree()); - TO128=(Token)match(input,TO,FOLLOW_TO_in_ftsFieldGroupRange1848); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_TO.add(TO128); + if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord144.getTree()); + TO145=(Token)match(input,TO,FOLLOW_TO_in_ftsFieldGroupRange5052); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_TO.add(TO145); - pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange1850); - ftsRangeWord129=ftsRangeWord(); + pushFollow(FOLLOW_ftsRangeWord_in_ftsFieldGroupRange5054); + ftsRangeWord146=ftsRangeWord(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord129.getTree()); - pushFollow(FOLLOW_range_right_in_ftsFieldGroupRange1852); - range_right130=range_right(); + if ( state.backtracking==0 ) stream_ftsRangeWord.add(ftsRangeWord146.getTree()); + pushFollow(FOLLOW_range_right_in_ftsFieldGroupRange5056); + range_right147=range_right(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_range_right.add(range_right130.getTree()); + if ( state.backtracking==0 ) stream_range_right.add(range_right147.getTree()); // AST REWRITE - // elements: ftsRangeWord, range_right, range_left, ftsRangeWord + // elements: range_right, ftsRangeWord, range_left, ftsRangeWord // token labels: // rule labels: retval // token list labels: @@ -4827,7 +5859,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 420:3: -> range_left ftsRangeWord ftsRangeWord range_right + // 699:17: -> range_left ftsRangeWord ftsRangeWord range_right { adaptor.addChild(root_0, stream_range_left.nextTree()); adaptor.addChild(root_0, stream_ftsRangeWord.nextTree()); @@ -4866,45 +5898,45 @@ public class FTSParser extends Parser { }; // $ANTLR start "range_left" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:423:1: range_left : ( LSQUARE -> INCLUSIVE | LT -> EXCLUSIVE ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:702:1: range_left : ( LSQUARE -> INCLUSIVE | LT -> EXCLUSIVE ); public final FTSParser.range_left_return range_left() throws RecognitionException { FTSParser.range_left_return retval = new FTSParser.range_left_return(); retval.start = input.LT(1); Object root_0 = null; - Token LSQUARE131=null; - Token LT132=null; + Token LSQUARE148=null; + Token LT149=null; - Object LSQUARE131_tree=null; - Object LT132_tree=null; + Object LSQUARE148_tree=null; + Object LT149_tree=null; RewriteRuleTokenStream stream_LT=new RewriteRuleTokenStream(adaptor,"token LT"); RewriteRuleTokenStream stream_LSQUARE=new RewriteRuleTokenStream(adaptor,"token LSQUARE"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:424:2: ( LSQUARE -> INCLUSIVE | LT -> EXCLUSIVE ) - int alt43=2; - int LA43_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:703:9: ( LSQUARE -> INCLUSIVE | LT -> EXCLUSIVE ) + int alt51=2; + int LA51_0 = input.LA(1); - if ( (LA43_0==LSQUARE) ) { - alt43=1; + if ( (LA51_0==LSQUARE) ) { + alt51=1; } - else if ( (LA43_0==LT) ) { - alt43=2; + else if ( (LA51_0==LT) ) { + alt51=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 43, 0, input); + new NoViableAltException("", 51, 0, input); throw nvae; } - switch (alt43) { + switch (alt51) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:424:10: LSQUARE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:704:9: LSQUARE { - LSQUARE131=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_range_left1882); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE131); + LSQUARE148=(Token)match(input,LSQUARE,FOLLOW_LSQUARE_in_range_left5115); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LSQUARE.add(LSQUARE148); @@ -4920,7 +5952,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 425:3: -> INCLUSIVE + // 705:17: -> INCLUSIVE { adaptor.addChild(root_0, (Object)adaptor.create(INCLUSIVE, "INCLUSIVE")); @@ -4930,10 +5962,10 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:426:4: LT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:706:11: LT { - LT132=(Token)match(input,LT,FOLLOW_LT_in_range_left1893); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_LT.add(LT132); + LT149=(Token)match(input,LT,FOLLOW_LT_in_range_left5147); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_LT.add(LT149); @@ -4949,7 +5981,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 427:3: -> EXCLUSIVE + // 707:17: -> EXCLUSIVE { adaptor.addChild(root_0, (Object)adaptor.create(EXCLUSIVE, "EXCLUSIVE")); @@ -4985,45 +6017,45 @@ public class FTSParser extends Parser { }; // $ANTLR start "range_right" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:430:1: range_right : ( RSQUARE -> INCLUSIVE | GT -> EXCLUSIVE ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:710:1: range_right : ( RSQUARE -> INCLUSIVE | GT -> EXCLUSIVE ); public final FTSParser.range_right_return range_right() throws RecognitionException { FTSParser.range_right_return retval = new FTSParser.range_right_return(); retval.start = input.LT(1); Object root_0 = null; - Token RSQUARE133=null; - Token GT134=null; + Token RSQUARE150=null; + Token GT151=null; - Object RSQUARE133_tree=null; - Object GT134_tree=null; + Object RSQUARE150_tree=null; + Object GT151_tree=null; RewriteRuleTokenStream stream_GT=new RewriteRuleTokenStream(adaptor,"token GT"); RewriteRuleTokenStream stream_RSQUARE=new RewriteRuleTokenStream(adaptor,"token RSQUARE"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:431:2: ( RSQUARE -> INCLUSIVE | GT -> EXCLUSIVE ) - int alt44=2; - int LA44_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:711:9: ( RSQUARE -> INCLUSIVE | GT -> EXCLUSIVE ) + int alt52=2; + int LA52_0 = input.LA(1); - if ( (LA44_0==RSQUARE) ) { - alt44=1; + if ( (LA52_0==RSQUARE) ) { + alt52=1; } - else if ( (LA44_0==GT) ) { - alt44=2; + else if ( (LA52_0==GT) ) { + alt52=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 44, 0, input); + new NoViableAltException("", 52, 0, input); throw nvae; } - switch (alt44) { + switch (alt52) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:431:10: RSQUARE + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:712:9: RSQUARE { - RSQUARE133=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_range_right1917); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE133); + RSQUARE150=(Token)match(input,RSQUARE,FOLLOW_RSQUARE_in_range_right5200); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_RSQUARE.add(RSQUARE150); @@ -5039,7 +6071,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 432:3: -> INCLUSIVE + // 713:17: -> INCLUSIVE { adaptor.addChild(root_0, (Object)adaptor.create(INCLUSIVE, "INCLUSIVE")); @@ -5049,10 +6081,10 @@ public class FTSParser extends Parser { } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:433:4: GT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:714:11: GT { - GT134=(Token)match(input,GT,FOLLOW_GT_in_range_right1928); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_GT.add(GT134); + GT151=(Token)match(input,GT,FOLLOW_GT_in_range_right5232); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_GT.add(GT151); @@ -5068,7 +6100,7 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 434:3: -> EXCLUSIVE + // 715:17: -> EXCLUSIVE { adaptor.addChild(root_0, (Object)adaptor.create(EXCLUSIVE, "EXCLUSIVE")); @@ -5104,43 +6136,43 @@ public class FTSParser extends Parser { }; // $ANTLR start "fieldReference" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:438:1: fieldReference : ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:720:1: fieldReference : ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ; public final FTSParser.fieldReference_return fieldReference() throws RecognitionException { FTSParser.fieldReference_return retval = new FTSParser.fieldReference_return(); retval.start = input.LT(1); Object root_0 = null; - Token AT135=null; - FTSParser.prefix_return prefix136 = null; + Token AT152=null; + FTSParser.prefix_return prefix153 = null; - FTSParser.uri_return uri137 = null; + FTSParser.uri_return uri154 = null; - FTSParser.identifier_return identifier138 = null; + FTSParser.identifier_return identifier155 = null; - Object AT135_tree=null; + Object AT152_tree=null; RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT"); RewriteRuleSubtreeStream stream_prefix=new RewriteRuleSubtreeStream(adaptor,"rule prefix"); RewriteRuleSubtreeStream stream_uri=new RewriteRuleSubtreeStream(adaptor,"rule uri"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:2: ( ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:5: ( AT )? ( prefix | uri )? identifier + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:721:9: ( ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:722:9: ( AT )? ( prefix | uri )? identifier { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:5: ( AT )? - int alt45=2; - int LA45_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:722:9: ( AT )? + int alt53=2; + int LA53_0 = input.LA(1); - if ( (LA45_0==AT) ) { - alt45=1; + if ( (LA53_0==AT) ) { + alt53=1; } - switch (alt45) { + switch (alt53) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:5: AT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:722:9: AT { - AT135=(Token)match(input,AT,FOLLOW_AT_in_fieldReference1950); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_AT.add(AT135); + AT152=(Token)match(input,AT,FOLLOW_AT_in_fieldReference5288); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_AT.add(AT152); } @@ -5148,66 +6180,47 @@ public class FTSParser extends Parser { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:9: ( prefix | uri )? - int alt46=3; - int LA46_0 = input.LA(1); - - if ( (LA46_0==ID) ) { - int LA46_1 = input.LA(2); - - if ( (LA46_1==COLON) ) { - int LA46_3 = input.LA(3); - - if ( (LA46_3==ID) ) { - int LA46_5 = input.LA(4); - - if ( (LA46_5==COLON) ) { - alt46=1; - } - } - } - } - else if ( (LA46_0==URI) ) { - alt46=2; - } - switch (alt46) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:723:9: ( prefix | uri )? + int alt54=3; + alt54 = dfa54.predict(input); + switch (alt54) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:10: prefix + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:724:17: prefix { - pushFollow(FOLLOW_prefix_in_fieldReference1954); - prefix136=prefix(); + pushFollow(FOLLOW_prefix_in_fieldReference5317); + prefix153=prefix(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_prefix.add(prefix136.getTree()); + if ( state.backtracking==0 ) stream_prefix.add(prefix153.getTree()); } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:439:17: uri + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:725:19: uri { - pushFollow(FOLLOW_uri_in_fieldReference1956); - uri137=uri(); + pushFollow(FOLLOW_uri_in_fieldReference5337); + uri154=uri(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_uri.add(uri137.getTree()); + if ( state.backtracking==0 ) stream_uri.add(uri154.getTree()); } break; } - pushFollow(FOLLOW_identifier_in_fieldReference1960); - identifier138=identifier(); + pushFollow(FOLLOW_identifier_in_fieldReference5358); + identifier155=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier138.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier155.getTree()); // AST REWRITE - // elements: prefix, uri, identifier + // elements: identifier, uri, prefix // token labels: // rule labels: retval // token list labels: @@ -5218,21 +6231,21 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 440:7: -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) + // 728:17: -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:440:10: ^( FIELD_REF identifier ( prefix )? ( uri )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:25: ^( FIELD_REF identifier ( prefix )? ( uri )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_REF, "FIELD_REF"), root_1); adaptor.addChild(root_1, stream_identifier.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:440:33: ( prefix )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:48: ( prefix )? if ( stream_prefix.hasNext() ) { adaptor.addChild(root_1, stream_prefix.nextTree()); } stream_prefix.reset(); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:440:41: ( uri )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:729:56: ( uri )? if ( stream_uri.hasNext() ) { adaptor.addChild(root_1, stream_uri.nextTree()); @@ -5272,43 +6285,43 @@ public class FTSParser extends Parser { }; // $ANTLR start "tempReference" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:443:1: tempReference : ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:732:1: tempReference : ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ; public final FTSParser.tempReference_return tempReference() throws RecognitionException { FTSParser.tempReference_return retval = new FTSParser.tempReference_return(); retval.start = input.LT(1); Object root_0 = null; - Token AT139=null; - FTSParser.prefix_return prefix140 = null; + Token AT156=null; + FTSParser.prefix_return prefix157 = null; - FTSParser.uri_return uri141 = null; + FTSParser.uri_return uri158 = null; - FTSParser.identifier_return identifier142 = null; + FTSParser.identifier_return identifier159 = null; - Object AT139_tree=null; + Object AT156_tree=null; RewriteRuleTokenStream stream_AT=new RewriteRuleTokenStream(adaptor,"token AT"); RewriteRuleSubtreeStream stream_prefix=new RewriteRuleSubtreeStream(adaptor,"rule prefix"); RewriteRuleSubtreeStream stream_uri=new RewriteRuleSubtreeStream(adaptor,"rule uri"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:444:2: ( ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:444:5: ( AT )? ( prefix | uri )? identifier + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:733:9: ( ( AT )? ( prefix | uri )? identifier -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:734:9: ( AT )? ( prefix | uri )? identifier { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:444:5: ( AT )? - int alt47=2; - int LA47_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:734:9: ( AT )? + int alt55=2; + int LA55_0 = input.LA(1); - if ( (LA47_0==AT) ) { - alt47=1; + if ( (LA55_0==AT) ) { + alt55=1; } - switch (alt47) { + switch (alt55) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:444:5: AT + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:734:9: AT { - AT139=(Token)match(input,AT,FOLLOW_AT_in_tempReference1993); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_AT.add(AT139); + AT156=(Token)match(input,AT,FOLLOW_AT_in_tempReference5445); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_AT.add(AT156); } @@ -5316,58 +6329,47 @@ public class FTSParser extends Parser { } - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:444:9: ( prefix | uri )? - int alt48=3; - int LA48_0 = input.LA(1); - - if ( (LA48_0==ID) ) { - int LA48_1 = input.LA(2); - - if ( (LA48_1==COLON) ) { - alt48=1; - } - } - else if ( (LA48_0==URI) ) { - alt48=2; - } - switch (alt48) { + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:735:9: ( prefix | uri )? + int alt56=3; + alt56 = dfa56.predict(input); + switch (alt56) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:444:10: prefix + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:736:17: prefix { - pushFollow(FOLLOW_prefix_in_tempReference1997); - prefix140=prefix(); + pushFollow(FOLLOW_prefix_in_tempReference5474); + prefix157=prefix(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_prefix.add(prefix140.getTree()); + if ( state.backtracking==0 ) stream_prefix.add(prefix157.getTree()); } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:444:17: uri + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:737:19: uri { - pushFollow(FOLLOW_uri_in_tempReference1999); - uri141=uri(); + pushFollow(FOLLOW_uri_in_tempReference5494); + uri158=uri(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_uri.add(uri141.getTree()); + if ( state.backtracking==0 ) stream_uri.add(uri158.getTree()); } break; } - pushFollow(FOLLOW_identifier_in_tempReference2003); - identifier142=identifier(); + pushFollow(FOLLOW_identifier_in_tempReference5515); + identifier159=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier142.getTree()); + if ( state.backtracking==0 ) stream_identifier.add(identifier159.getTree()); // AST REWRITE - // elements: identifier, uri, prefix + // elements: uri, identifier, prefix // token labels: // rule labels: retval // token list labels: @@ -5378,21 +6380,21 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 445:7: -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) + // 740:17: -> ^( FIELD_REF identifier ( prefix )? ( uri )? ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:445:10: ^( FIELD_REF identifier ( prefix )? ( uri )? ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:741:25: ^( FIELD_REF identifier ( prefix )? ( uri )? ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(FIELD_REF, "FIELD_REF"), root_1); adaptor.addChild(root_1, stream_identifier.nextTree()); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:445:33: ( prefix )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:741:48: ( prefix )? if ( stream_prefix.hasNext() ) { adaptor.addChild(root_1, stream_prefix.nextTree()); } stream_prefix.reset(); - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:445:41: ( uri )? + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:741:56: ( uri )? if ( stream_uri.hasNext() ) { adaptor.addChild(root_1, stream_uri.nextTree()); @@ -5432,32 +6434,32 @@ public class FTSParser extends Parser { }; // $ANTLR start "prefix" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:448:1: prefix : identifier COLON -> ^( PREFIX identifier ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:744:1: prefix : identifier COLON -> ^( PREFIX identifier ) ; public final FTSParser.prefix_return prefix() throws RecognitionException { FTSParser.prefix_return retval = new FTSParser.prefix_return(); retval.start = input.LT(1); Object root_0 = null; - Token COLON144=null; - FTSParser.identifier_return identifier143 = null; + Token COLON161=null; + FTSParser.identifier_return identifier160 = null; - Object COLON144_tree=null; + Object COLON161_tree=null; RewriteRuleTokenStream stream_COLON=new RewriteRuleTokenStream(adaptor,"token COLON"); RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:449:2: ( identifier COLON -> ^( PREFIX identifier ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:449:5: identifier COLON + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:745:9: ( identifier COLON -> ^( PREFIX identifier ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:746:9: identifier COLON { - pushFollow(FOLLOW_identifier_in_prefix2036); - identifier143=identifier(); + pushFollow(FOLLOW_identifier_in_prefix5602); + identifier160=identifier(); state._fsp--; if (state.failed) return retval; - if ( state.backtracking==0 ) stream_identifier.add(identifier143.getTree()); - COLON144=(Token)match(input,COLON,FOLLOW_COLON_in_prefix2038); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_COLON.add(COLON144); + if ( state.backtracking==0 ) stream_identifier.add(identifier160.getTree()); + COLON161=(Token)match(input,COLON,FOLLOW_COLON_in_prefix5604); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_COLON.add(COLON161); @@ -5473,9 +6475,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 450:3: -> ^( PREFIX identifier ) + // 747:17: -> ^( PREFIX identifier ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:450:6: ^( PREFIX identifier ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:748:25: ^( PREFIX identifier ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(PREFIX, "PREFIX"), root_1); @@ -5515,24 +6517,24 @@ public class FTSParser extends Parser { }; // $ANTLR start "uri" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:453:1: uri : URI -> ^( NAME_SPACE URI ) ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:751:1: uri : URI -> ^( NAME_SPACE URI ) ; public final FTSParser.uri_return uri() throws RecognitionException { FTSParser.uri_return retval = new FTSParser.uri_return(); retval.start = input.LT(1); Object root_0 = null; - Token URI145=null; + Token URI162=null; - Object URI145_tree=null; + Object URI162_tree=null; RewriteRuleTokenStream stream_URI=new RewriteRuleTokenStream(adaptor,"token URI"); try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:454:4: ( URI -> ^( NAME_SPACE URI ) ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:454:7: URI + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:752:9: ( URI -> ^( NAME_SPACE URI ) ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:753:9: URI { - URI145=(Token)match(input,URI,FOLLOW_URI_in_uri2064); if (state.failed) return retval; - if ( state.backtracking==0 ) stream_URI.add(URI145); + URI162=(Token)match(input,URI,FOLLOW_URI_in_uri5685); if (state.failed) return retval; + if ( state.backtracking==0 ) stream_URI.add(URI162); @@ -5548,9 +6550,9 @@ public class FTSParser extends Parser { RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.tree:null); root_0 = (Object)adaptor.nil(); - // 455:5: -> ^( NAME_SPACE URI ) + // 754:17: -> ^( NAME_SPACE URI ) { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:455:8: ^( NAME_SPACE URI ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:755:25: ^( NAME_SPACE URI ) { Object root_1 = (Object)adaptor.nil(); root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NAME_SPACE, "NAME_SPACE"), root_1); @@ -5590,27 +6592,27 @@ public class FTSParser extends Parser { }; // $ANTLR start "identifier" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:458:1: identifier : ID ; + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:758: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 ID146=null; + Token ID163=null; - Object ID146_tree=null; + Object ID163_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:459:2: ( ID ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:459:4: ID + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:759:9: ( ID ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:760:9: ID { root_0 = (Object)adaptor.nil(); - ID146=(Token)match(input,ID,FOLLOW_ID_in_identifier2090); if (state.failed) return retval; + ID163=(Token)match(input,ID,FOLLOW_ID_in_identifier5766); if (state.failed) return retval; if ( state.backtracking==0 ) { - ID146_tree = (Object)adaptor.create(ID146); - adaptor.addChild(root_0, ID146_tree); + ID163_tree = (Object)adaptor.create(ID163); + adaptor.addChild(root_0, ID163_tree); } } @@ -5640,27 +6642,27 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsWord" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:462:1: ftsWord : ( ID | FTSWORD | FTSPRE | FTSWILD | OR | AND | NOT | TO | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:763:1: ftsWord : ( ID | FTSWORD | FTSPRE | FTSWILD | NOT | TO | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | STAR | QUESTION_MARK ); 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 set147=null; + Token set164=null; - Object set147_tree=null; + Object set164_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:463:6: ( ID | FTSWORD | FTSPRE | FTSWILD | OR | AND | NOT | TO | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:764:9: ( ID | FTSWORD | FTSPRE | FTSWILD | NOT | TO | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL | STAR | QUESTION_MARK ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { root_0 = (Object)adaptor.nil(); - set147=(Token)input.LT(1); - if ( input.LA(1)==DECIMAL_INTEGER_LITERAL||input.LA(1)==TO||(input.LA(1)>=ID && input.LA(1)<=FLOATING_POINT_LITERAL) ) { + set164=(Token)input.LT(1); + if ( input.LA(1)==DECIMAL_INTEGER_LITERAL||(input.LA(1)>=ID && input.LA(1)<=STAR)||input.LA(1)==QUESTION_MARK ) { input.consume(); - if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set147)); + if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set164)); state.errorRecovery=false;state.failed=false; } else { @@ -5697,27 +6699,27 @@ public class FTSParser extends Parser { }; // $ANTLR start "number" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:475:1: number : ( DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:777:1: number : ( DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ); public final FTSParser.number_return number() throws RecognitionException { FTSParser.number_return retval = new FTSParser.number_return(); retval.start = input.LT(1); Object root_0 = null; - Token set148=null; + Token set165=null; - Object set148_tree=null; + Object set165_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:476:6: ( DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:778:9: ( DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { root_0 = (Object)adaptor.nil(); - set148=(Token)input.LT(1); + set165=(Token)input.LT(1); if ( input.LA(1)==DECIMAL_INTEGER_LITERAL||input.LA(1)==FLOATING_POINT_LITERAL ) { input.consume(); - if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set148)); + if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set165)); state.errorRecovery=false;state.failed=false; } else { @@ -5754,27 +6756,27 @@ public class FTSParser extends Parser { }; // $ANTLR start "ftsRangeWord" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:480:1: ftsRangeWord : ( ID | FTSWORD | FTSPRE | FTSWILD | FTSPHRASE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:783:1: ftsRangeWord : ( ID | FTSWORD | FTSPRE | FTSWILD | FTSPHRASE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ); public final FTSParser.ftsRangeWord_return ftsRangeWord() throws RecognitionException { FTSParser.ftsRangeWord_return retval = new FTSParser.ftsRangeWord_return(); retval.start = input.LT(1); Object root_0 = null; - Token set149=null; + Token set166=null; - Object set149_tree=null; + Object set166_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:481:6: ( ID | FTSWORD | FTSPRE | FTSWILD | FTSPHRASE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:784:9: ( ID | FTSWORD | FTSPRE | FTSWILD | FTSPHRASE | DECIMAL_INTEGER_LITERAL | FLOATING_POINT_LITERAL ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { root_0 = (Object)adaptor.nil(); - set149=(Token)input.LT(1); - if ( input.LA(1)==DECIMAL_INTEGER_LITERAL||input.LA(1)==FTSPHRASE||(input.LA(1)>=ID && input.LA(1)<=FTSWILD)||input.LA(1)==FLOATING_POINT_LITERAL ) { + set166=(Token)input.LT(1); + if ( input.LA(1)==DECIMAL_INTEGER_LITERAL||(input.LA(1)>=FTSPHRASE && input.LA(1)<=FTSWILD)||input.LA(1)==FLOATING_POINT_LITERAL ) { input.consume(); - if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set149)); + if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set166)); state.errorRecovery=false;state.failed=false; } else { @@ -5811,67 +6813,67 @@ public class FTSParser extends Parser { }; // $ANTLR start "or" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:490:1: or : ( OR | BAR BAR ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:796:1: or : ( OR | BAR BAR ); public final FTSParser.or_return or() throws RecognitionException { FTSParser.or_return retval = new FTSParser.or_return(); retval.start = input.LT(1); Object root_0 = null; - Token OR150=null; - Token BAR151=null; - Token BAR152=null; + Token OR167=null; + Token BAR168=null; + Token BAR169=null; - Object OR150_tree=null; - Object BAR151_tree=null; - Object BAR152_tree=null; + Object OR167_tree=null; + Object BAR168_tree=null; + Object BAR169_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:491:6: ( OR | BAR BAR ) - int alt49=2; - int LA49_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:797:9: ( OR | BAR BAR ) + int alt57=2; + int LA57_0 = input.LA(1); - if ( (LA49_0==OR) ) { - alt49=1; + if ( (LA57_0==OR) ) { + alt57=1; } - else if ( (LA49_0==BAR) ) { - alt49=2; + else if ( (LA57_0==BAR) ) { + alt57=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 49, 0, input); + new NoViableAltException("", 57, 0, input); throw nvae; } - switch (alt49) { + switch (alt57) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:491:11: OR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:798:9: OR { root_0 = (Object)adaptor.nil(); - OR150=(Token)match(input,OR,FOLLOW_OR_in_or2374); if (state.failed) return retval; + OR167=(Token)match(input,OR,FOLLOW_OR_in_or6092); if (state.failed) return retval; if ( state.backtracking==0 ) { - OR150_tree = (Object)adaptor.create(OR150); - adaptor.addChild(root_0, OR150_tree); + OR167_tree = (Object)adaptor.create(OR167); + adaptor.addChild(root_0, OR167_tree); } } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:492:8: BAR BAR + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:799:11: BAR BAR { root_0 = (Object)adaptor.nil(); - BAR151=(Token)match(input,BAR,FOLLOW_BAR_in_or2383); if (state.failed) return retval; + BAR168=(Token)match(input,BAR,FOLLOW_BAR_in_or6104); if (state.failed) return retval; if ( state.backtracking==0 ) { - BAR151_tree = (Object)adaptor.create(BAR151); - adaptor.addChild(root_0, BAR151_tree); + BAR168_tree = (Object)adaptor.create(BAR168); + adaptor.addChild(root_0, BAR168_tree); } - BAR152=(Token)match(input,BAR,FOLLOW_BAR_in_or2385); if (state.failed) return retval; + BAR169=(Token)match(input,BAR,FOLLOW_BAR_in_or6106); if (state.failed) return retval; if ( state.backtracking==0 ) { - BAR152_tree = (Object)adaptor.create(BAR152); - adaptor.addChild(root_0, BAR152_tree); + BAR169_tree = (Object)adaptor.create(BAR169); + adaptor.addChild(root_0, BAR169_tree); } } @@ -5903,67 +6905,67 @@ public class FTSParser extends Parser { }; // $ANTLR start "and" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:495:1: and : ( AND | AMP AMP ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:802:1: and : ( AND | AMP AMP ); public final FTSParser.and_return and() throws RecognitionException { FTSParser.and_return retval = new FTSParser.and_return(); retval.start = input.LT(1); Object root_0 = null; - Token AND153=null; - Token AMP154=null; - Token AMP155=null; + Token AND170=null; + Token AMP171=null; + Token AMP172=null; - Object AND153_tree=null; - Object AMP154_tree=null; - Object AMP155_tree=null; + Object AND170_tree=null; + Object AMP171_tree=null; + Object AMP172_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:496:6: ( AND | AMP AMP ) - int alt50=2; - int LA50_0 = input.LA(1); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:803:9: ( AND | AMP AMP ) + int alt58=2; + int LA58_0 = input.LA(1); - if ( (LA50_0==AND) ) { - alt50=1; + if ( (LA58_0==AND) ) { + alt58=1; } - else if ( (LA50_0==AMP) ) { - alt50=2; + else if ( (LA58_0==AMP) ) { + alt58=2; } else { if (state.backtracking>0) {state.failed=true; return retval;} NoViableAltException nvae = - new NoViableAltException("", 50, 0, input); + new NoViableAltException("", 58, 0, input); throw nvae; } - switch (alt50) { + switch (alt58) { case 1 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:496:8: AND + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:804:9: AND { root_0 = (Object)adaptor.nil(); - AND153=(Token)match(input,AND,FOLLOW_AND_in_and2409); if (state.failed) return retval; + AND170=(Token)match(input,AND,FOLLOW_AND_in_and6139); if (state.failed) return retval; if ( state.backtracking==0 ) { - AND153_tree = (Object)adaptor.create(AND153); - adaptor.addChild(root_0, AND153_tree); + AND170_tree = (Object)adaptor.create(AND170); + adaptor.addChild(root_0, AND170_tree); } } break; case 2 : - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:497:8: AMP AMP + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:805:11: AMP AMP { root_0 = (Object)adaptor.nil(); - AMP154=(Token)match(input,AMP,FOLLOW_AMP_in_and2418); if (state.failed) return retval; + AMP171=(Token)match(input,AMP,FOLLOW_AMP_in_and6151); if (state.failed) return retval; if ( state.backtracking==0 ) { - AMP154_tree = (Object)adaptor.create(AMP154); - adaptor.addChild(root_0, AMP154_tree); + AMP171_tree = (Object)adaptor.create(AMP171); + adaptor.addChild(root_0, AMP171_tree); } - AMP155=(Token)match(input,AMP,FOLLOW_AMP_in_and2420); if (state.failed) return retval; + AMP172=(Token)match(input,AMP,FOLLOW_AMP_in_and6153); if (state.failed) return retval; if ( state.backtracking==0 ) { - AMP155_tree = (Object)adaptor.create(AMP155); - adaptor.addChild(root_0, AMP155_tree); + AMP172_tree = (Object)adaptor.create(AMP172); + adaptor.addChild(root_0, AMP172_tree); } } @@ -5995,27 +6997,27 @@ public class FTSParser extends Parser { }; // $ANTLR start "not" - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:500:1: not : ( NOT | EXCLAMATION ); + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:808:1: not : ( NOT | EXCLAMATION ); public final FTSParser.not_return not() throws RecognitionException { FTSParser.not_return retval = new FTSParser.not_return(); retval.start = input.LT(1); Object root_0 = null; - Token set156=null; + Token set173=null; - Object set156_tree=null; + Object set173_tree=null; try { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:501:6: ( NOT | EXCLAMATION ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:809:9: ( NOT | EXCLAMATION ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g: { root_0 = (Object)adaptor.nil(); - set156=(Token)input.LT(1); + set173=(Token)input.LT(1); if ( input.LA(1)==NOT||input.LA(1)==EXCLAMATION ) { input.consume(); - if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set156)); + if ( state.backtracking==0 ) adaptor.addChild(root_0, (Object)adaptor.create(set173)); state.errorRecovery=false;state.failed=false; } else { @@ -6048,11 +7050,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred1_FTS public final void synpred1_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:230:27: ( or ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:230:28: or + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:417:9: ( not ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:417:10: not { - pushFollow(FOLLOW_or_in_synpred1_FTS340); - or(); + pushFollow(FOLLOW_not_in_synpred1_FTS1192); + not(); state._fsp--; if (state.failed) return ; @@ -6063,11 +7065,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred2_FTS public final void synpred2_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:238:17: ( and ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:238:18: and + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:450:9: ( ftsFieldGroupProximity ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:450:10: ftsFieldGroupProximity { - pushFollow(FOLLOW_and_in_synpred2_FTS378); - and(); + pushFollow(FOLLOW_ftsFieldGroupProximity_in_synpred2_FTS1703); + ftsFieldGroupProximity(); state._fsp--; if (state.failed) return ; @@ -6078,11 +7080,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred3_FTS public final void synpred3_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:249:8: ( not ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:249:9: not + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:453:21: ( fuzzy ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:453:22: fuzzy { - pushFollow(FOLLOW_not_in_synpred3_FTS421); - not(); + pushFollow(FOLLOW_fuzzy_in_synpred3_FTS1773); + fuzzy(); state._fsp--; if (state.failed) return ; @@ -6093,10 +7095,10 @@ public class FTSParser extends Parser { // $ANTLR start synpred4_FTS public final void synpred4_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:265:17: ( fuzzy ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:265:18: fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:456:26: ( fuzzy ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:456:27: fuzzy { - pushFollow(FOLLOW_fuzzy_in_synpred4_FTS630); + pushFollow(FOLLOW_fuzzy_in_synpred4_FTS1848); fuzzy(); state._fsp--; @@ -6108,11 +7110,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred5_FTS public final void synpred5_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:267:18: ( fuzzy ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:267:19: fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:459:23: ( slop ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:459:24: slop { - pushFollow(FOLLOW_fuzzy_in_synpred5_FTS659); - fuzzy(); + pushFollow(FOLLOW_slop_in_synpred5_FTS1923); + slop(); state._fsp--; if (state.failed) return ; @@ -6123,11 +7125,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred6_FTS public final void synpred6_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:269:22: ( slop ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:269:23: slop + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:462:24: ( fuzzy ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:462:25: fuzzy { - pushFollow(FOLLOW_slop_in_synpred6_FTS695); - slop(); + pushFollow(FOLLOW_fuzzy_in_synpred6_FTS1998); + fuzzy(); state._fsp--; if (state.failed) return ; @@ -6138,11 +7140,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred7_FTS public final void synpred7_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:271:23: ( fuzzy ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:271:24: fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:606:9: ( not ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:606:10: not { - pushFollow(FOLLOW_fuzzy_in_synpred7_FTS738); - fuzzy(); + pushFollow(FOLLOW_not_in_synpred7_FTS3700); + not(); state._fsp--; if (state.failed) return ; @@ -6153,11 +7155,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred8_FTS public final void synpred8_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:347:37: ( or ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:347:38: or + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:625:9: ( ftsFieldGroupProximity ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:625:10: ftsFieldGroupProximity { - pushFollow(FOLLOW_or_in_synpred8_FTS1225); - or(); + pushFollow(FOLLOW_ftsFieldGroupProximity_in_synpred8_FTS4065); + ftsFieldGroupProximity(); state._fsp--; if (state.failed) return ; @@ -6168,11 +7170,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred9_FTS public final void synpred9_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:352:27: ( and ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:352:28: and + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:628:31: ( fuzzy ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:628:32: fuzzy { - pushFollow(FOLLOW_and_in_synpred9_FTS1261); - and(); + pushFollow(FOLLOW_fuzzy_in_synpred9_FTS4135); + fuzzy(); state._fsp--; if (state.failed) return ; @@ -6183,11 +7185,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred10_FTS public final void synpred10_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:358:4: ( not ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:358:5: not + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:631:36: ( fuzzy ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:631:37: fuzzy { - pushFollow(FOLLOW_not_in_synpred10_FTS1298); - not(); + pushFollow(FOLLOW_fuzzy_in_synpred10_FTS4210); + fuzzy(); state._fsp--; if (state.failed) return ; @@ -6198,11 +7200,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred11_FTS public final void synpred11_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:372:23: ( fuzzy ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:372:24: fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:634:33: ( slop ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:634:34: slop { - pushFollow(FOLLOW_fuzzy_in_synpred11_FTS1494); - fuzzy(); + pushFollow(FOLLOW_slop_in_synpred11_FTS4285); + slop(); state._fsp--; if (state.failed) return ; @@ -6213,10 +7215,10 @@ public class FTSParser extends Parser { // $ANTLR start synpred12_FTS public final void synpred12_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:374:28: ( fuzzy ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:374:29: fuzzy + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:637:34: ( fuzzy ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:637:35: fuzzy { - pushFollow(FOLLOW_fuzzy_in_synpred12_FTS1523); + pushFollow(FOLLOW_fuzzy_in_synpred12_FTS4360); fuzzy(); state._fsp--; @@ -6228,11 +7230,11 @@ public class FTSParser extends Parser { // $ANTLR start synpred13_FTS public final void synpred13_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:376:25: ( slop ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:376:26: slop + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:671:38: ( proximityGroup ) + // W:\\alfresco\\BRANCHES\\DEV\\CMIS_10\\root\\projects\\repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:671:39: proximityGroup { - pushFollow(FOLLOW_slop_in_synpred13_FTS1552); - slop(); + pushFollow(FOLLOW_proximityGroup_in_synpred13_FTS4728); + proximityGroup(); state._fsp--; if (state.failed) return ; @@ -6241,21 +7243,6 @@ public class FTSParser extends Parser { } // $ANTLR end synpred13_FTS - // $ANTLR start synpred14_FTS - public final void synpred14_FTS_fragment() throws RecognitionException { - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:26: ( fuzzy ) - // W:\\alfresco\\BRANCHES\\DEV\\CMIS063\\root\\projects\\Repository\\source\\java\\org\\alfresco\\repo\\search\\impl\\parsers\\FTS.g:378:27: fuzzy - { - pushFollow(FOLLOW_fuzzy_in_synpred14_FTS1583); - fuzzy(); - - state._fsp--; - if (state.failed) return ; - - } - } - // $ANTLR end synpred14_FTS - // Delegated rules public final boolean synpred10_FTS() { @@ -6286,20 +7273,6 @@ public class FTSParser extends Parser { state.failed=false; return success; } - public final boolean synpred14_FTS() { - state.backtracking++; - int start = input.mark(); - try { - synpred14_FTS_fragment(); // can never throw exception - } catch (RecognitionException re) { - System.err.println("impossible: "+re); - } - boolean success = !state.failed; - input.rewind(start); - state.backtracking--; - state.failed=false; - return success; - } public final boolean synpred2_FTS() { state.backtracking++; int start = input.mark(); @@ -6456,36 +7429,55 @@ public class FTSParser extends Parser { } - protected DFA3 dfa3 = new DFA3(this); - protected DFA4 dfa4 = new DFA4(this); + protected DFA1 dfa1 = new DFA1(this); protected DFA5 dfa5 = new DFA5(this); - protected DFA11 dfa11 = new DFA11(this); - protected DFA16 dfa16 = new DFA16(this); - protected DFA25 dfa25 = new DFA25(this); + protected DFA4 dfa4 = new DFA4(this); + protected DFA8 dfa8 = new DFA8(this); + protected DFA7 dfa7 = new DFA7(this); + protected DFA15 dfa15 = new DFA15(this); + protected DFA21 dfa21 = new DFA21(this); + protected DFA17 dfa17 = new DFA17(this); + protected DFA18 dfa18 = new DFA18(this); + protected DFA19 dfa19 = new DFA19(this); + protected DFA20 dfa20 = new DFA20(this); protected DFA26 dfa26 = new DFA26(this); - protected DFA27 dfa27 = new DFA27(this); - protected DFA33 dfa33 = new DFA33(this); - protected DFA38 dfa38 = new DFA38(this); - static final String DFA3_eotS = - "\24\uffff"; - static final String DFA3_eofS = - "\24\uffff"; - static final String DFA3_minS = - "\1\51\21\0\2\uffff"; - static final String DFA3_maxS = - "\1\110\21\0\2\uffff"; - static final String DFA3_acceptS = - "\22\uffff\1\1\1\2"; - static final String DFA3_specialS = - "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+ - "\14\1\15\1\16\1\17\1\20\2\uffff}>"; - static final String[] DFA3_transitionS = { - "\1\17\1\20\1\21\1\15\1\uffff\1\16\1\uffff\1\11\1\6\2\uffff"+ - "\1\7\1\10\2\uffff\1\12\1\13\1\14\2\uffff\1\2\1\4\1\3\3\6\2\12"+ - "\1\1\1\6\1\uffff\1\5", + protected DFA29 dfa29 = new DFA29(this); + protected DFA32 dfa32 = new DFA32(this); + protected DFA31 dfa31 = new DFA31(this); + protected DFA35 dfa35 = new DFA35(this); + protected DFA34 dfa34 = new DFA34(this); + protected DFA41 dfa41 = new DFA41(this); + protected DFA46 dfa46 = new DFA46(this); + protected DFA42 dfa42 = new DFA42(this); + protected DFA43 dfa43 = new DFA43(this); + protected DFA44 dfa44 = new DFA44(this); + protected DFA45 dfa45 = new DFA45(this); + protected DFA47 dfa47 = new DFA47(this); + protected DFA54 dfa54 = new DFA54(this); + protected DFA56 dfa56 = new DFA56(this); + static final String DFA1_eotS = + "\27\uffff"; + static final String DFA1_eofS = + "\27\uffff"; + static final String DFA1_minS = + "\1\51\3\0\2\uffff\17\0\2\uffff"; + static final String DFA1_maxS = + "\1\111\3\0\2\uffff\17\0\2\uffff"; + static final String DFA1_acceptS = + "\4\uffff\2\2\17\uffff\1\3\1\1"; + static final String DFA1_specialS = + "\1\0\1\1\1\2\1\3\2\uffff\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+ + "\14\1\15\1\16\1\17\1\20\1\21\1\22\2\uffff}>"; + static final String[] DFA1_transitionS = { + "\1\23\1\24\1\3\1\21\1\uffff\1\22\1\uffff\1\15\1\12\2\uffff"+ + "\1\14\1\2\1\6\3\12\1\1\1\16\1\12\1\10\1\uffff\1\17\1\20\2\uffff"+ + "\1\11\1\13\1\10\1\25\1\4\1\5\1\7", "\1\uffff", "\1\uffff", "\1\uffff", + "", + "", + "\1\uffff", "\1\uffff", "\1\uffff", "\1\uffff", @@ -6504,432 +7496,403 @@ public class FTSParser extends Parser { "" }; - static final short[] DFA3_eot = DFA.unpackEncodedString(DFA3_eotS); - static final short[] DFA3_eof = DFA.unpackEncodedString(DFA3_eofS); - static final char[] DFA3_min = DFA.unpackEncodedStringToUnsignedChars(DFA3_minS); - static final char[] DFA3_max = DFA.unpackEncodedStringToUnsignedChars(DFA3_maxS); - static final short[] DFA3_accept = DFA.unpackEncodedString(DFA3_acceptS); - static final short[] DFA3_special = DFA.unpackEncodedString(DFA3_specialS); - static final short[][] DFA3_transition; + static final short[] DFA1_eot = DFA.unpackEncodedString(DFA1_eotS); + static final short[] DFA1_eof = DFA.unpackEncodedString(DFA1_eofS); + static final char[] DFA1_min = DFA.unpackEncodedStringToUnsignedChars(DFA1_minS); + static final char[] DFA1_max = DFA.unpackEncodedStringToUnsignedChars(DFA1_maxS); + static final short[] DFA1_accept = DFA.unpackEncodedString(DFA1_acceptS); + static final short[] DFA1_special = DFA.unpackEncodedString(DFA1_specialS); + static final short[][] DFA1_transition; static { - int numStates = DFA3_transitionS.length; - DFA3_transition = new short[numStates][]; + int numStates = DFA1_transitionS.length; + DFA1_transition = new short[numStates][]; for (int i=0; i ^( CONJUNCTION ( ftsExplicitDisjunction )+ ) | ftsExplicitDisjunction ( ftsExplicitDisjunction )* -> ^( DISJUNCTION ( ftsExplicitDisjunction )+ ) );"; + return "355:1: ftsDisjunction : ({...}? => cmisExplicitDisjunction | {...}? => ftsExplicitDisjunction | {...}? => ftsImplicitDisjunction );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA3_1 = input.LA(1); + int LA1_0 = input.LA(1); - int index3_1 = input.index(); + int index1_0 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( (LA1_0==NOT) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.CMIS)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 1;} - else if ( (true) ) {s = 19;} + else if ( (LA1_0==FTSPHRASE) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.CMIS)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 2;} + + else if ( (LA1_0==MINUS) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.CMIS)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 3;} + + else if ( (LA1_0==AND) && ((getMode() == Mode.DEFAULT_CONJUNCTION))) {s = 4;} + + else if ( (LA1_0==AMP) && ((getMode() == Mode.DEFAULT_CONJUNCTION))) {s = 5;} + + else if ( (LA1_0==ID) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.CMIS)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 6;} + + else if ( (LA1_0==EXCLAMATION) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 7;} + + else if ( (LA1_0==STAR||LA1_0==QUESTION_MARK) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.CMIS)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 8;} + + else if ( (LA1_0==AT) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 9;} + + else if ( (LA1_0==DECIMAL_INTEGER_LITERAL||(LA1_0>=FTSWORD && LA1_0<=FTSWILD)||LA1_0==FLOATING_POINT_LITERAL) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.CMIS)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 10;} + + else if ( (LA1_0==URI) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 11;} + + else if ( (LA1_0==EQUALS) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 12;} + + else if ( (LA1_0==TILDA) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 13;} + + else if ( (LA1_0==TO) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.CMIS)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 14;} + + else if ( (LA1_0==LSQUARE) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 15;} + + else if ( (LA1_0==LT) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 16;} + + else if ( (LA1_0==LPAREN) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 17;} + + else if ( (LA1_0==PERCENT) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 18;} + + else if ( (LA1_0==PLUS) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 19;} + + else if ( (LA1_0==BAR) && (((getMode() == Mode.DEFAULT_DISJUNCTION)||(getMode() == Mode.DEFAULT_CONJUNCTION)))) {s = 20;} + + else if ( (LA1_0==OR) && ((getMode() == Mode.DEFAULT_DISJUNCTION))) {s = 21;} - input.seek(index3_1); + input.seek(index1_0); if ( s>=0 ) return s; break; case 1 : - int LA3_2 = input.LA(1); + int LA1_1 = input.LA(1); - int index3_2 = input.index(); + int index1_1 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.CMIS)) ) {s = 22;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_2); + input.seek(index1_1); if ( s>=0 ) return s; break; case 2 : - int LA3_3 = input.LA(1); + int LA1_2 = input.LA(1); - int index3_3 = input.index(); + int index1_2 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.CMIS)) ) {s = 22;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_3); + input.seek(index1_2); if ( s>=0 ) return s; break; case 3 : - int LA3_4 = input.LA(1); + int LA1_3 = input.LA(1); - int index3_4 = input.index(); + int index1_3 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.CMIS)) ) {s = 22;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_4); + input.seek(index1_3); if ( s>=0 ) return s; break; case 4 : - int LA3_5 = input.LA(1); + int LA1_6 = input.LA(1); - int index3_5 = input.index(); + int index1_6 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.CMIS)) ) {s = 22;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_5); + input.seek(index1_6); if ( s>=0 ) return s; break; case 5 : - int LA3_6 = input.LA(1); + int LA1_7 = input.LA(1); - int index3_6 = input.index(); + int index1_7 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_6); + input.seek(index1_7); if ( s>=0 ) return s; break; case 6 : - int LA3_7 = input.LA(1); + int LA1_8 = input.LA(1); - int index3_7 = input.index(); + int index1_8 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.CMIS)) ) {s = 22;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_7); + input.seek(index1_8); if ( s>=0 ) return s; break; case 7 : - int LA3_8 = input.LA(1); + int LA1_9 = input.LA(1); - int index3_8 = input.index(); + int index1_9 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_8); + input.seek(index1_9); if ( s>=0 ) return s; break; case 8 : - int LA3_9 = input.LA(1); + int LA1_10 = input.LA(1); - int index3_9 = input.index(); + int index1_10 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.CMIS)) ) {s = 22;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_9); + input.seek(index1_10); if ( s>=0 ) return s; break; case 9 : - int LA3_10 = input.LA(1); + int LA1_11 = input.LA(1); - int index3_10 = input.index(); + int index1_11 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_10); + input.seek(index1_11); if ( s>=0 ) return s; break; case 10 : - int LA3_11 = input.LA(1); + int LA1_12 = input.LA(1); - int index3_11 = input.index(); + int index1_12 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_11); + input.seek(index1_12); if ( s>=0 ) return s; break; case 11 : - int LA3_12 = input.LA(1); + int LA1_13 = input.LA(1); - int index3_12 = input.index(); + int index1_13 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_12); + input.seek(index1_13); if ( s>=0 ) return s; break; case 12 : - int LA3_13 = input.LA(1); + int LA1_14 = input.LA(1); - int index3_13 = input.index(); + int index1_14 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.CMIS)) ) {s = 22;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_13); + input.seek(index1_14); if ( s>=0 ) return s; break; case 13 : - int LA3_14 = input.LA(1); + int LA1_15 = input.LA(1); - int index3_14 = input.index(); + int index1_15 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_14); + input.seek(index1_15); if ( s>=0 ) return s; break; case 14 : - int LA3_15 = input.LA(1); + int LA1_16 = input.LA(1); - int index3_15 = input.index(); + int index1_16 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_15); + input.seek(index1_16); if ( s>=0 ) return s; break; case 15 : - int LA3_16 = input.LA(1); + int LA1_17 = input.LA(1); - int index3_16 = input.index(); + int index1_17 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_16); + input.seek(index1_17); if ( s>=0 ) return s; break; case 16 : - int LA3_17 = input.LA(1); + int LA1_18 = input.LA(1); - int index3_17 = input.index(); + int index1_18 = input.index(); input.rewind(); s = -1; - if ( ((defaultConjunction())) ) {s = 18;} + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} - else if ( (true) ) {s = 19;} + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} - input.seek(index3_17); + input.seek(index1_18); + if ( s>=0 ) return s; + break; + case 17 : + int LA1_19 = input.LA(1); + + + int index1_19 = input.index(); + input.rewind(); + s = -1; + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} + + + input.seek(index1_19); + if ( s>=0 ) return s; + break; + case 18 : + int LA1_20 = input.LA(1); + + + int index1_20 = input.index(); + input.rewind(); + s = -1; + if ( ((getMode() == Mode.DEFAULT_CONJUNCTION)) ) {s = 5;} + + else if ( ((getMode() == Mode.DEFAULT_DISJUNCTION)) ) {s = 21;} + + + input.seek(index1_20); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 3, _s, input); - error(nvae); - throw nvae; - } - } - static final String DFA4_eotS = - "\26\uffff"; - static final String DFA4_eofS = - "\1\1\25\uffff"; - static final String DFA4_minS = - "\1\51\11\uffff\1\0\5\uffff\1\0\5\uffff"; - static final String DFA4_maxS = - "\1\110\11\uffff\1\0\5\uffff\1\0\5\uffff"; - static final String DFA4_acceptS = - "\1\uffff\1\2\23\uffff\1\1"; - static final String DFA4_specialS = - "\12\uffff\1\0\5\uffff\1\1\5\uffff}>"; - static final String[] DFA4_transitionS = { - "\1\1\1\20\4\1\1\uffff\2\1\2\uffff\2\1\2\uffff\3\1\2\uffff\6"+ - "\1\1\12\3\1\1\uffff\1\1", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "\1\uffff", - "", - "", - "", - "", - "", - "\1\uffff", - "", - "", - "", - "", - "" - }; - - static final short[] DFA4_eot = DFA.unpackEncodedString(DFA4_eotS); - static final short[] DFA4_eof = DFA.unpackEncodedString(DFA4_eofS); - static final char[] DFA4_min = DFA.unpackEncodedStringToUnsignedChars(DFA4_minS); - static final char[] DFA4_max = DFA.unpackEncodedStringToUnsignedChars(DFA4_maxS); - static final short[] DFA4_accept = DFA.unpackEncodedString(DFA4_acceptS); - static final short[] DFA4_special = DFA.unpackEncodedString(DFA4_specialS); - static final short[][] DFA4_transition; - - static { - int numStates = DFA4_transitionS.length; - DFA4_transition = new short[numStates][]; - for (int i=0; i or ftsExplictConjunction )*"; - } - public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { - TokenStream input = (TokenStream)_input; - int _s = s; - switch ( s ) { - case 0 : - int LA4_10 = input.LA(1); - - - int index4_10 = input.index(); - input.rewind(); - s = -1; - if ( (synpred1_FTS()) ) {s = 21;} - - else if ( (true) ) {s = 1;} - - - input.seek(index4_10); - if ( s>=0 ) return s; - break; - case 1 : - int LA4_16 = input.LA(1); - - - int index4_16 = input.index(); - input.rewind(); - s = -1; - if ( (synpred1_FTS()) ) {s = 21;} - - else if ( (true) ) {s = 1;} - - - input.seek(index4_16); - if ( s>=0 ) return s; - break; - } - if (state.backtracking>0) {state.failed=true; return -1;} - NoViableAltException nvae = - new NoViableAltException(getDescription(), 4, _s, input); + new NoViableAltException(getDescription(), 1, _s, input); error(nvae); throw nvae; } } static final String DFA5_eotS = - "\27\uffff"; + "\26\uffff"; static final String DFA5_eofS = - "\1\1\26\uffff"; + "\1\1\25\uffff"; static final String DFA5_minS = - "\1\51\13\uffff\1\0\12\uffff"; + "\1\51\25\uffff"; static final String DFA5_maxS = - "\1\110\13\uffff\1\0\12\uffff"; + "\1\111\25\uffff"; static final String DFA5_acceptS = - "\1\uffff\1\2\24\uffff\1\1"; + "\1\uffff\2\2\23\1"; static final String DFA5_specialS = - "\1\0\13\uffff\1\1\12\uffff}>"; + "\26\uffff}>"; static final String[] DFA5_transitionS = { - "\6\1\1\uffff\2\1\2\uffff\2\1\2\uffff\3\1\2\uffff\7\1\1\14\2"+ - "\1\1\26\1\1", + "\1\24\1\4\1\25\1\22\1\2\1\23\1\uffff\1\16\1\11\2\uffff\1\14"+ + "\1\15\1\7\3\11\1\5\1\17\1\11\1\13\1\uffff\1\20\1\21\2\uffff"+ + "\1\10\1\12\1\13\1\3\2\uffff\1\6", "", "", "", @@ -6941,7 +7904,6 @@ public class FTSParser extends Parser { "", "", "", - "\1\uffff", "", "", "", @@ -6984,68 +7946,44 @@ public class FTSParser extends Parser { this.transition = DFA5_transition; } public String getDescription() { - return "()* loopback of 238:16: ( ( and )=> and ftsPrefixed )*"; - } - public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { - TokenStream input = (TokenStream)_input; - int _s = s; - switch ( s ) { - case 0 : - int LA5_0 = input.LA(1); - - - int index5_0 = input.index(); - input.rewind(); - s = -1; - if ( (LA5_0==EOF||(LA5_0>=PLUS && LA5_0<=PERCENT)||(LA5_0>=TILDA && LA5_0<=DECIMAL_INTEGER_LITERAL)||(LA5_0>=EQUALS && LA5_0<=FTSPHRASE)||(LA5_0>=TO && LA5_0<=LT)||(LA5_0>=AT && LA5_0<=OR)||(LA5_0>=NOT && LA5_0<=FLOATING_POINT_LITERAL)||LA5_0==EXCLAMATION) ) {s = 1;} - - else if ( (LA5_0==AND) ) {s = 12;} - - else if ( (LA5_0==AMP) && (synpred2_FTS())) {s = 22;} - - - input.seek(index5_0); - if ( s>=0 ) return s; - break; - case 1 : - int LA5_12 = input.LA(1); - - - int index5_12 = input.index(); - input.rewind(); - s = -1; - if ( (synpred2_FTS()) ) {s = 22;} - - else if ( (true) ) {s = 1;} - - - input.seek(index5_12); - if ( s>=0 ) return s; - break; - } - if (state.backtracking>0) {state.failed=true; return -1;} - NoViableAltException nvae = - new NoViableAltException(getDescription(), 5, _s, input); - error(nvae); - throw nvae; + return "()+ loopback of 378:9: ( ( or )? ftsExplicitConjunction )+"; } } - static final String DFA11_eotS = - "\22\uffff"; - static final String DFA11_eofS = - "\22\uffff"; - static final String DFA11_minS = - "\1\51\1\0\20\uffff"; - static final String DFA11_maxS = - "\1\110\1\0\20\uffff"; - static final String DFA11_acceptS = - "\2\uffff\1\2\2\uffff\1\1\11\uffff\1\3\1\4\1\5"; - static final String DFA11_specialS = - "\1\0\1\1\20\uffff}>"; - static final String[] DFA11_transitionS = { - "\1\17\1\20\1\21\1\2\1\uffff\1\2\1\uffff\2\2\2\uffff\2\2\2\uffff"+ - "\3\2\2\uffff\10\2\1\1\1\2\1\uffff\1\5", - "\1\uffff", + static final String DFA4_eotS = + "\42\uffff"; + static final String DFA4_eofS = + "\42\uffff"; + static final String DFA4_minS = + "\1\51\1\uffff\1\52\37\uffff"; + static final String DFA4_maxS = + "\1\111\1\uffff\1\105\37\uffff"; + static final String DFA4_acceptS = + "\1\uffff\1\1\1\uffff\21\2\1\1\15\2"; + static final String DFA4_specialS = + "\42\uffff}>"; + static final String[] DFA4_transitionS = { + "\1\22\1\2\1\23\1\20\1\uffff\1\21\1\uffff\1\14\1\7\2\uffff\1"+ + "\12\1\13\1\5\3\7\1\3\1\15\1\7\1\11\1\uffff\1\16\1\17\2\uffff"+ + "\1\6\1\10\1\11\1\1\2\uffff\1\4", + "", + "\1\24\1\uffff\1\40\1\uffff\1\41\1\uffff\1\34\1\27\2\uffff"+ + "\1\32\1\33\1\25\3\27\2\35\1\27\1\31\1\uffff\1\36\1\37\2\uffff"+ + "\1\26\1\30\1\31", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", "", "", "", @@ -7064,469 +8002,1132 @@ public class FTSParser extends Parser { "" }; - static final short[] DFA11_eot = DFA.unpackEncodedString(DFA11_eotS); - static final short[] DFA11_eof = DFA.unpackEncodedString(DFA11_eofS); - static final char[] DFA11_min = DFA.unpackEncodedStringToUnsignedChars(DFA11_minS); - static final char[] DFA11_max = DFA.unpackEncodedStringToUnsignedChars(DFA11_maxS); - static final short[] DFA11_accept = DFA.unpackEncodedString(DFA11_acceptS); - static final short[] DFA11_special = DFA.unpackEncodedString(DFA11_specialS); - static final short[][] DFA11_transition; + static final short[] DFA4_eot = DFA.unpackEncodedString(DFA4_eotS); + static final short[] DFA4_eof = DFA.unpackEncodedString(DFA4_eofS); + static final char[] DFA4_min = DFA.unpackEncodedStringToUnsignedChars(DFA4_minS); + static final char[] DFA4_max = DFA.unpackEncodedStringToUnsignedChars(DFA4_maxS); + static final short[] DFA4_accept = DFA.unpackEncodedString(DFA4_acceptS); + static final short[] DFA4_special = DFA.unpackEncodedString(DFA4_specialS); + static final short[][] DFA4_transition; static { - int numStates = DFA11_transitionS.length; - DFA11_transition = new short[numStates][]; + int numStates = DFA4_transitionS.length; + DFA4_transition = new short[numStates][]; for (int i=0; i not ftsTest ( boost )? -> ^( NEGATION ftsTest ( boost )? ) | ftsTest ( boost )? -> ^( DEFAULT ftsTest ( boost )? ) | PLUS ftsTest ( boost )? -> ^( MANDATORY ftsTest ( boost )? ) | BAR ftsTest ( boost )? -> ^( OPTIONAL ftsTest ( boost )? ) | MINUS ftsTest ( boost )? -> ^( EXCLUDE ftsTest ( boost )? ) );"; + return "378:10: ( or )?"; + } + } + static final String DFA8_eotS = + "\46\uffff"; + static final String DFA8_eofS = + "\1\3\45\uffff"; + static final String DFA8_minS = + "\1\51\1\uffff\1\52\43\uffff"; + static final String DFA8_maxS = + "\1\111\1\uffff\1\105\43\uffff"; + static final String DFA8_acceptS = + "\1\uffff\1\2\1\uffff\2\2\23\1\1\2\15\1"; + static final String DFA8_specialS = + "\46\uffff}>"; + static final String[] DFA8_transitionS = { + "\1\26\1\2\1\27\1\24\1\4\1\25\1\uffff\1\20\1\13\2\uffff\1\16"+ + "\1\17\1\11\3\13\1\7\1\21\1\13\1\15\1\uffff\1\22\1\23\2\uffff"+ + "\1\12\1\14\1\15\1\1\1\5\1\6\1\10", + "", + "\1\30\1\uffff\1\44\1\uffff\1\45\1\uffff\1\40\1\33\2\uffff"+ + "\1\36\1\37\1\31\3\33\2\41\1\33\1\35\1\uffff\1\42\1\43\2\uffff"+ + "\1\32\1\34\1\35", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA8_eot = DFA.unpackEncodedString(DFA8_eotS); + static final short[] DFA8_eof = DFA.unpackEncodedString(DFA8_eofS); + static final char[] DFA8_min = DFA.unpackEncodedStringToUnsignedChars(DFA8_minS); + static final char[] DFA8_max = DFA.unpackEncodedStringToUnsignedChars(DFA8_maxS); + static final short[] DFA8_accept = DFA.unpackEncodedString(DFA8_acceptS); + static final short[] DFA8_special = DFA.unpackEncodedString(DFA8_specialS); + static final short[][] DFA8_transition; + + static { + int numStates = DFA8_transitionS.length; + DFA8_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA7_transitionS = { + "\1\22\1\23\1\24\1\20\1\uffff\1\21\1\uffff\1\14\1\7\2\uffff"+ + "\1\12\1\13\1\5\3\7\1\3\1\15\1\7\1\11\1\uffff\1\16\1\17\2\uffff"+ + "\1\6\1\10\1\11\1\uffff\1\1\1\2\1\4", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA7_eot = DFA.unpackEncodedString(DFA7_eotS); + static final short[] DFA7_eof = DFA.unpackEncodedString(DFA7_eofS); + static final char[] DFA7_min = DFA.unpackEncodedStringToUnsignedChars(DFA7_minS); + static final char[] DFA7_max = DFA.unpackEncodedStringToUnsignedChars(DFA7_maxS); + static final short[] DFA7_accept = DFA.unpackEncodedString(DFA7_acceptS); + static final short[] DFA7_special = DFA.unpackEncodedString(DFA7_specialS); + static final short[][] DFA7_transition; + + static { + int numStates = DFA7_transitionS.length; + DFA7_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA15_transitionS = { + "\1\20\1\21\1\22\1\16\1\uffff\1\17\1\uffff\1\12\1\5\2\uffff"+ + "\1\10\1\11\1\3\3\5\1\1\1\13\1\5\1\7\1\uffff\1\14\1\15\2\uffff"+ + "\1\4\1\6\1\7\3\uffff\1\2", + "\1\uffff", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS); + static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS); + static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS); + static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS); + static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS); + static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS); + static final short[][] DFA15_transition; + + static { + int numStates = DFA15_transitionS.length; + DFA15_transition = new short[numStates][]; + for (int i=0; i not ftsTest ( boost )? -> ^( NEGATION ftsTest ( boost )? ) | ftsTest ( boost )? -> ^( DEFAULT ftsTest ( boost )? ) | PLUS ftsTest ( boost )? -> ^( MANDATORY ftsTest ( boost )? ) | BAR ftsTest ( boost )? -> ^( OPTIONAL ftsTest ( boost )? ) | MINUS ftsTest ( boost )? -> ^( EXCLUDE ftsTest ( boost )? ) );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA11_0 = input.LA(1); + int LA15_0 = input.LA(1); - int index11_0 = input.index(); + int index15_0 = input.index(); input.rewind(); s = -1; - if ( (LA11_0==NOT) ) {s = 1;} + if ( (LA15_0==NOT) ) {s = 1;} - else if ( (LA11_0==LPAREN||LA11_0==PERCENT||(LA11_0>=TILDA && LA11_0<=DECIMAL_INTEGER_LITERAL)||(LA11_0>=EQUALS && LA11_0<=FTSPHRASE)||(LA11_0>=TO && LA11_0<=LT)||(LA11_0>=AT && LA11_0<=AND)||LA11_0==FLOATING_POINT_LITERAL) ) {s = 2;} + else if ( (LA15_0==EXCLAMATION) && (synpred1_FTS())) {s = 2;} - else if ( (LA11_0==EXCLAMATION) && (synpred3_FTS())) {s = 5;} + else if ( (LA15_0==ID) ) {s = 3;} - else if ( (LA11_0==PLUS) ) {s = 15;} + else if ( (LA15_0==AT) ) {s = 4;} - else if ( (LA11_0==BAR) ) {s = 16;} + else if ( (LA15_0==DECIMAL_INTEGER_LITERAL||(LA15_0>=FTSWORD && LA15_0<=FTSWILD)||LA15_0==FLOATING_POINT_LITERAL) ) {s = 5;} - else if ( (LA11_0==MINUS) ) {s = 17;} + else if ( (LA15_0==URI) ) {s = 6;} + + else if ( (LA15_0==STAR||LA15_0==QUESTION_MARK) ) {s = 7;} + + else if ( (LA15_0==EQUALS) ) {s = 8;} + + else if ( (LA15_0==FTSPHRASE) ) {s = 9;} + + else if ( (LA15_0==TILDA) ) {s = 10;} + + else if ( (LA15_0==TO) ) {s = 11;} + + else if ( (LA15_0==LSQUARE) ) {s = 12;} + + else if ( (LA15_0==LT) ) {s = 13;} + + else if ( (LA15_0==LPAREN) ) {s = 14;} + + else if ( (LA15_0==PERCENT) ) {s = 15;} + + else if ( (LA15_0==PLUS) ) {s = 16;} + + else if ( (LA15_0==BAR) ) {s = 17;} + + else if ( (LA15_0==MINUS) ) {s = 18;} - input.seek(index11_0); + input.seek(index15_0); if ( s>=0 ) return s; break; case 1 : - int LA11_1 = input.LA(1); + int LA15_1 = input.LA(1); - int index11_1 = input.index(); + int index15_1 = input.index(); input.rewind(); s = -1; - if ( (synpred3_FTS()) ) {s = 5;} + if ( (synpred1_FTS()) ) {s = 2;} - else if ( (true) ) {s = 2;} + else if ( (true) ) {s = 15;} - input.seek(index11_1); + input.seek(index15_1); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 11, _s, input); + new NoViableAltException(getDescription(), 15, _s, input); error(nvae); throw nvae; } } - static final String DFA16_eotS = - "\26\uffff"; - static final String DFA16_eofS = - "\2\uffff\1\15\1\uffff\1\15\1\uffff\1\21\1\uffff\1\15\12\uffff\2"+ - "\15\1\uffff"; - static final String DFA16_minS = - "\1\54\1\76\1\51\1\77\1\51\1\uffff\1\51\1\uffff\1\51\3\uffff\1\63"+ - "\1\uffff\1\54\1\uffff\1\63\2\uffff\2\51\1\54"; - static final String DFA16_maxS = - "\1\106\1\77\1\110\1\77\1\110\1\uffff\1\110\1\uffff\1\110\3\uffff"+ - "\1\63\1\uffff\1\106\1\uffff\1\63\2\uffff\2\110\1\106"; - static final String DFA16_acceptS = - "\5\uffff\1\2\1\uffff\1\4\1\uffff\1\6\1\10\1\11\1\uffff\1\1\1\uffff"+ - "\1\5\1\uffff\1\3\1\7\3\uffff"; - static final String DFA16_specialS = - "\26\uffff}>"; - static final String[] DFA16_transitionS = { - "\1\12\1\uffff\1\13\1\uffff\1\7\1\4\2\uffff\1\5\1\6\2\uffff"+ - "\1\10\2\11\2\uffff\1\1\1\3\1\2\3\4\3\10\1\4", - "\1\3\1\14", - "\6\15\1\uffff\3\15\1\16\2\15\1\17\1\11\3\15\2\uffff\14\15", - "\1\20", - "\6\15\1\uffff\3\15\1\uffff\2\15\1\17\1\11\3\15\2\uffff\14"+ - "\15", + static final String DFA21_eotS = + "\162\uffff"; + static final String DFA21_eofS = + "\1\uffff\1\24\1\uffff\1\24\3\uffff\1\57\1\uffff\1\24\4\uffff\1"+ + "\24\76\uffff\2\24\36\uffff\1\24\4\uffff"; + static final String DFA21_minS = + "\1\54\1\51\1\66\1\51\1\66\2\uffff\1\51\1\uffff\1\51\4\uffff\1\51"+ + "\1\54\31\uffff\2\63\34\uffff\4\0\1\51\1\uffff\2\51\1\54\12\uffff"+ + "\1\51\22\uffff\1\51\4\uffff"; + static final String DFA21_maxS = + "\1\105\1\111\1\104\1\111\1\66\2\uffff\1\111\1\uffff\1\111\4\uffff"+ + "\1\111\1\105\31\uffff\2\63\34\uffff\4\0\1\111\1\uffff\2\111\1\105"+ + "\12\uffff\1\111\22\uffff\1\111\4\uffff"; + static final String DFA21_acceptS = + "\5\uffff\1\2\1\3\1\uffff\1\5\1\uffff\2\6\1\10\1\11\2\uffff\30\2"+ + "\1\6\2\uffff\30\4\4\2\5\uffff\1\7\3\uffff\1\1\11\2\1\uffff\14\2"+ + "\1\1\5\2\1\uffff\4\2"; + static final String DFA21_specialS = + "\107\uffff\1\1\1\4\1\2\1\0\1\3\46\uffff}>"; + static final String[] DFA21_transitionS = { + "\1\14\1\uffff\1\15\1\uffff\1\10\1\3\2\uffff\1\6\1\7\1\1\3\3"+ + "\2\11\1\3\1\5\1\uffff\1\12\1\13\2\uffff\1\2\1\4\1\5", + "\1\46\1\27\1\47\1\44\1\25\1\45\1\uffff\1\20\1\34\1\21\1\17"+ + "\1\37\1\40\1\32\3\34\1\30\1\41\1\34\1\16\1\50\1\42\1\43\2\uffff"+ + "\1\33\1\35\1\36\1\26\1\22\1\23\1\31", + "\1\51\15\uffff\1\4", + "\1\46\1\27\1\47\1\44\1\25\1\45\1\uffff\1\20\1\34\1\21\1\uffff"+ + "\1\37\1\40\1\32\3\34\1\30\1\41\1\34\1\16\1\50\1\42\1\43\2\uffff"+ + "\1\33\1\35\1\36\1\26\1\22\1\23\1\31", + "\1\52", + "", + "", + "\1\101\1\62\1\102\1\77\1\60\1\100\1\uffff\1\53\1\67\1\54\1"+ + "\uffff\1\72\1\73\1\65\3\67\1\63\1\74\1\67\1\71\1\50\1\75\1\76"+ + "\2\uffff\1\66\1\70\1\71\1\61\1\55\1\56\1\64", + "", + "\1\46\1\27\1\47\1\44\1\25\1\45\1\uffff\1\20\1\34\1\21\1\uffff"+ + "\1\37\1\40\1\32\3\34\1\30\1\41\1\34\1\16\1\uffff\1\42\1\43\2"+ + "\uffff\1\33\1\35\1\36\1\26\1\22\1\23\1\31", + "", + "", + "", + "", + "\1\46\1\27\1\47\1\113\1\25\1\45\1\uffff\1\103\1\111\1\104"+ + "\1\uffff\1\37\1\40\1\110\3\111\1\107\1\112\1\111\1\36\1\uffff"+ + "\1\42\1\43\2\uffff\1\33\1\35\1\36\1\26\1\105\1\106\1\31", + "\1\114\4\uffff\1\116\3\uffff\1\7\1\115\3\116\2\5\1\116\1\5"+ + "\1\uffff\1\12\1\13\4\uffff\1\5", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\17", + "\1\117", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", "", - "\6\21\1\uffff\3\21\1\uffff\2\21\1\uffff\1\11\3\21\2\uffff"+ - "\14\21", "", - "\6\15\1\uffff\3\15\1\uffff\2\15\1\17\1\uffff\3\15\2\uffff"+ - "\14\15", "", "", "", - "\1\16", "", - "\1\22\4\uffff\1\24\3\uffff\1\6\2\uffff\1\15\2\11\4\uffff\1"+ - "\23\3\24\3\15\1\24", - "", - "\1\25", "", "", - "\6\15\1\uffff\3\15\1\25\2\15\1\uffff\1\11\3\15\2\uffff\14"+ - "\15", - "\6\15\1\uffff\3\15\1\uffff\2\15\1\uffff\1\11\3\15\2\uffff"+ - "\14\15", - "\1\22\4\uffff\1\24\3\uffff\1\6\2\uffff\1\15\2\11\4\uffff\4"+ - "\24\3\15\1\24" - }; - - static final short[] DFA16_eot = DFA.unpackEncodedString(DFA16_eotS); - static final short[] DFA16_eof = DFA.unpackEncodedString(DFA16_eofS); - static final char[] DFA16_min = DFA.unpackEncodedStringToUnsignedChars(DFA16_minS); - static final char[] DFA16_max = DFA.unpackEncodedStringToUnsignedChars(DFA16_maxS); - static final short[] DFA16_accept = DFA.unpackEncodedString(DFA16_acceptS); - static final short[] DFA16_special = DFA.unpackEncodedString(DFA16_specialS); - static final short[][] DFA16_transition; - - static { - int numStates = DFA16_transitionS.length; - DFA16_transition = new short[numStates][]; - for (int i=0; i fuzzy )? -> ^( TERM ftsTerm ( fuzzy )? ) | ftsExactTerm ( ( fuzzy )=> fuzzy )? -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) | ftsPhrase ( ( slop )=> slop )? -> ^( PHRASE ftsPhrase ( slop )? ) | ftsSynonym ( ( fuzzy )=> fuzzy )? -> ^( SYNONYM ftsSynonym ( fuzzy )? ) | ftsFieldGroupProximity -> ^( PROXIMITY ftsFieldGroupProximity ) | ftsRange -> ^( RANGE ftsRange ) | ftsFieldGroup -> ftsFieldGroup | LPAREN ftsImplicitConjunctionOrDisjunction RPAREN -> ftsImplicitConjunctionOrDisjunction | template -> template );"; - } - } - static final String DFA25_eotS = - "\20\uffff"; - static final String DFA25_eofS = - "\20\uffff"; - static final String DFA25_minS = - "\1\51\15\0\2\uffff"; - static final String DFA25_maxS = - "\1\110\15\0\2\uffff"; - static final String DFA25_acceptS = - "\16\uffff\1\1\1\2"; - static final String DFA25_specialS = - "\1\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+ - "\14\2\uffff}>"; - static final String[] DFA25_transitionS = { - "\1\13\1\14\1\15\1\12\3\uffff\1\6\1\3\2\uffff\1\4\1\5\2\uffff"+ - "\1\7\1\10\1\11\4\uffff\4\3\2\7\1\1\1\3\1\uffff\1\2", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", - "\1\uffff", "\1\uffff", "\1\uffff", "\1\uffff", "\1\uffff", + "\1\143\1\144\1\123\1\141\1\147\1\142\1\uffff\1\135\1\132\2"+ + "\uffff\1\134\1\122\1\126\3\146\1\121\1\136\1\146\1\130\1\uffff"+ + "\1\137\1\140\2\uffff\1\131\1\133\1\130\1\145\1\124\1\125\1\127", + "", + "\1\46\1\27\1\47\1\44\1\25\1\45\1\uffff\1\20\1\34\1\21\1\117"+ + "\1\37\1\40\1\32\3\34\1\30\1\41\1\34\1\36\1\50\1\42\1\43\2\uffff"+ + "\1\33\1\35\1\36\1\26\1\22\1\23\1\31", + "\1\46\1\27\1\47\1\44\1\25\1\45\1\uffff\1\20\1\34\1\21\1\uffff"+ + "\1\37\1\40\1\32\3\34\1\30\1\41\1\34\1\36\1\50\1\42\1\43\2\uffff"+ + "\1\33\1\35\1\36\1\26\1\22\1\23\1\31", + "\1\114\4\uffff\1\116\3\uffff\1\7\4\116\2\5\1\116\1\5\1\uffff"+ + "\1\12\1\13\4\uffff\1\5", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\143\1\157\1\123\1\141\1\155\1\142\1\uffff\1\151\1\146\1"+ + "\152\1\uffff\1\134\1\122\1\126\3\146\1\121\1\136\1\146\1\160"+ + "\1\150\1\137\1\140\2\uffff\1\131\1\133\1\130\1\156\1\153\1\154"+ + "\1\127", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\46\1\27\1\47\1\44\1\25\1\45\1\uffff\1\161\1\111\1\104\1"+ + "\uffff\1\37\1\40\1\110\3\111\1\107\1\112\1\111\1\36\1\uffff"+ + "\1\42\1\43\2\uffff\1\33\1\35\1\36\1\26\1\105\1\106\1\31", + "", + "", "", "" }; - static final short[] DFA25_eot = DFA.unpackEncodedString(DFA25_eotS); - static final short[] DFA25_eof = DFA.unpackEncodedString(DFA25_eofS); - static final char[] DFA25_min = DFA.unpackEncodedStringToUnsignedChars(DFA25_minS); - static final char[] DFA25_max = DFA.unpackEncodedStringToUnsignedChars(DFA25_maxS); - static final short[] DFA25_accept = DFA.unpackEncodedString(DFA25_acceptS); - static final short[] DFA25_special = DFA.unpackEncodedString(DFA25_specialS); - static final short[][] DFA25_transition; + static final short[] DFA21_eot = DFA.unpackEncodedString(DFA21_eotS); + static final short[] DFA21_eof = DFA.unpackEncodedString(DFA21_eofS); + static final char[] DFA21_min = DFA.unpackEncodedStringToUnsignedChars(DFA21_minS); + static final char[] DFA21_max = DFA.unpackEncodedStringToUnsignedChars(DFA21_maxS); + static final short[] DFA21_accept = DFA.unpackEncodedString(DFA21_acceptS); + static final short[] DFA21_special = DFA.unpackEncodedString(DFA21_specialS); + static final short[][] DFA21_transition; static { - int numStates = DFA25_transitionS.length; - DFA25_transition = new short[numStates][]; + int numStates = DFA21_transitionS.length; + DFA21_transition = new short[numStates][]; for (int i=0; i ^( FIELD_CONJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) | ftsFieldGroupExplicitDisjunction ( ftsFieldGroupExplicitDisjunction )* -> ^( FIELD_DISJUNCTION ( ftsFieldGroupExplicitDisjunction )+ ) );"; + return "448:1: ftsTest : ( ( ftsFieldGroupProximity )=> ftsFieldGroupProximity -> ^( PROXIMITY ftsFieldGroupProximity ) | ftsTerm ( ( fuzzy )=> fuzzy )? -> ^( TERM ftsTerm ( fuzzy )? ) | ftsExactTerm ( ( fuzzy )=> fuzzy )? -> ^( EXACT_TERM ftsExactTerm ( fuzzy )? ) | ftsPhrase ( ( slop )=> slop )? -> ^( PHRASE ftsPhrase ( slop )? ) | ftsSynonym ( ( fuzzy )=> fuzzy )? -> ^( SYNONYM ftsSynonym ( fuzzy )? ) | ftsRange -> ^( RANGE ftsRange ) | ftsFieldGroup -> ftsFieldGroup | LPAREN ftsDisjunction RPAREN -> ftsDisjunction | template -> template );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA25_1 = input.LA(1); + int LA21_74 = input.LA(1); - int index25_1 = input.index(); + int index21_74 = input.index(); input.rewind(); s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} + if ( (synpred2_FTS()) ) {s = 80;} - else if ( (true) ) {s = 15;} + else if ( (true) ) {s = 70;} - input.seek(index25_1); + input.seek(index21_74); if ( s>=0 ) return s; break; case 1 : - int LA25_2 = input.LA(1); + int LA21_71 = input.LA(1); - int index25_2 = input.index(); + int index21_71 = input.index(); input.rewind(); s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} + if ( (synpred2_FTS()) ) {s = 80;} - else if ( (true) ) {s = 15;} + else if ( (true) ) {s = 70;} - input.seek(index25_2); + input.seek(index21_71); if ( s>=0 ) return s; break; case 2 : - int LA25_3 = input.LA(1); + int LA21_73 = input.LA(1); - int index25_3 = input.index(); + int index21_73 = input.index(); input.rewind(); s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} + if ( (synpred2_FTS()) ) {s = 80;} - else if ( (true) ) {s = 15;} + else if ( (true) ) {s = 70;} - input.seek(index25_3); + input.seek(index21_73); if ( s>=0 ) return s; break; case 3 : - int LA25_4 = input.LA(1); + int LA21_75 = input.LA(1); - int index25_4 = input.index(); + int index21_75 = input.index(); input.rewind(); s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} + if ( (LA21_75==NOT) ) {s = 81;} - else if ( (true) ) {s = 15;} + else if ( (LA21_75==FTSPHRASE) ) {s = 82;} + + else if ( (LA21_75==MINUS) ) {s = 83;} + + else if ( (LA21_75==AND) ) {s = 84;} + + else if ( (LA21_75==AMP) ) {s = 85;} + + else if ( (LA21_75==ID) ) {s = 86;} + + else if ( (LA21_75==EXCLAMATION) ) {s = 87;} + + else if ( (LA21_75==STAR||LA21_75==QUESTION_MARK) ) {s = 88;} + + else if ( (LA21_75==AT) ) {s = 89;} + + else if ( (LA21_75==DECIMAL_INTEGER_LITERAL) ) {s = 90;} + + else if ( (LA21_75==URI) ) {s = 91;} + + else if ( (LA21_75==EQUALS) ) {s = 92;} + + else if ( (LA21_75==TILDA) ) {s = 93;} + + else if ( (LA21_75==TO) ) {s = 94;} + + else if ( (LA21_75==LSQUARE) ) {s = 95;} + + else if ( (LA21_75==LT) ) {s = 96;} + + else if ( (LA21_75==LPAREN) ) {s = 97;} + + else if ( (LA21_75==PERCENT) ) {s = 98;} + + else if ( (LA21_75==PLUS) ) {s = 99;} + + else if ( (LA21_75==BAR) ) {s = 100;} + + else if ( (LA21_75==OR) ) {s = 101;} + + else if ( ((LA21_75>=FTSWORD && LA21_75<=FTSWILD)||LA21_75==FLOATING_POINT_LITERAL) ) {s = 102;} + + else if ( (LA21_75==RPAREN) && (synpred2_FTS())) {s = 103;} - input.seek(index25_4); + input.seek(index21_75); if ( s>=0 ) return s; break; case 4 : - int LA25_5 = input.LA(1); + int LA21_72 = input.LA(1); - int index25_5 = input.index(); + int index21_72 = input.index(); input.rewind(); s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} + if ( (synpred2_FTS()) ) {s = 80;} - else if ( (true) ) {s = 15;} + else if ( (true) ) {s = 70;} - input.seek(index25_5); - if ( s>=0 ) return s; - break; - case 5 : - int LA25_6 = input.LA(1); - - - int index25_6 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_6); - if ( s>=0 ) return s; - break; - case 6 : - int LA25_7 = input.LA(1); - - - int index25_7 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_7); - if ( s>=0 ) return s; - break; - case 7 : - int LA25_8 = input.LA(1); - - - int index25_8 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_8); - if ( s>=0 ) return s; - break; - case 8 : - int LA25_9 = input.LA(1); - - - int index25_9 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_9); - if ( s>=0 ) return s; - break; - case 9 : - int LA25_10 = input.LA(1); - - - int index25_10 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_10); - if ( s>=0 ) return s; - break; - case 10 : - int LA25_11 = input.LA(1); - - - int index25_11 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_11); - if ( s>=0 ) return s; - break; - case 11 : - int LA25_12 = input.LA(1); - - - int index25_12 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_12); - if ( s>=0 ) return s; - break; - case 12 : - int LA25_13 = input.LA(1); - - - int index25_13 = input.index(); - input.rewind(); - s = -1; - if ( ((defaultFieldConjunction())) ) {s = 14;} - - else if ( (true) ) {s = 15;} - - - input.seek(index25_13); + input.seek(index21_72); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 25, _s, input); + new NoViableAltException(getDescription(), 21, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA17_eotS = + "\37\uffff"; + static final String DFA17_eofS = + "\1\5\36\uffff"; + static final String DFA17_minS = + "\1\51\1\61\32\uffff\1\0\2\uffff"; + static final String DFA17_maxS = + "\1\111\1\105\32\uffff\1\0\2\uffff"; + static final String DFA17_acceptS = + "\2\uffff\32\2\1\uffff\1\2\1\1"; + static final String DFA17_specialS = + "\34\uffff\1\0\2\uffff}>"; + static final String[] DFA17_transitionS = { + "\1\27\1\10\1\30\1\25\1\6\1\26\1\uffff\1\1\1\15\1\2\1\uffff"+ + "\1\20\1\21\1\13\3\15\1\11\1\22\1\15\1\17\1\uffff\1\23\1\24\2"+ + "\uffff\1\14\1\16\1\17\1\7\1\3\1\4\1\12", + "\1\34\4\uffff\1\32\5\35\1\34\1\35\5\uffff\1\31\1\33\1\35", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "" + }; + + static final short[] DFA17_eot = DFA.unpackEncodedString(DFA17_eotS); + static final short[] DFA17_eof = DFA.unpackEncodedString(DFA17_eofS); + static final char[] DFA17_min = DFA.unpackEncodedStringToUnsignedChars(DFA17_minS); + static final char[] DFA17_max = DFA.unpackEncodedStringToUnsignedChars(DFA17_maxS); + static final short[] DFA17_accept = DFA.unpackEncodedString(DFA17_acceptS); + static final short[] DFA17_special = DFA.unpackEncodedString(DFA17_specialS); + static final short[][] DFA17_transition; + + static { + int numStates = DFA17_transitionS.length; + DFA17_transition = new short[numStates][]; + for (int i=0; i fuzzy )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA17_28 = input.LA(1); + + + int index17_28 = input.index(); + input.rewind(); + s = -1; + if ( (synpred3_FTS()) ) {s = 30;} + + else if ( (true) ) {s = 29;} + + + input.seek(index17_28); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 17, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA18_eotS = + "\37\uffff"; + static final String DFA18_eofS = + "\1\5\36\uffff"; + static final String DFA18_minS = + "\1\51\1\61\32\uffff\1\0\2\uffff"; + static final String DFA18_maxS = + "\1\111\1\105\32\uffff\1\0\2\uffff"; + static final String DFA18_acceptS = + "\2\uffff\32\2\1\uffff\1\2\1\1"; + static final String DFA18_specialS = + "\34\uffff\1\0\2\uffff}>"; + static final String[] DFA18_transitionS = { + "\1\27\1\10\1\30\1\25\1\6\1\26\1\uffff\1\1\1\15\1\2\1\uffff"+ + "\1\20\1\21\1\13\3\15\1\11\1\22\1\15\1\17\1\uffff\1\23\1\24\2"+ + "\uffff\1\14\1\16\1\17\1\7\1\3\1\4\1\12", + "\1\34\4\uffff\1\32\5\35\1\34\1\35\5\uffff\1\31\1\33\1\35", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "" + }; + + static final short[] DFA18_eot = DFA.unpackEncodedString(DFA18_eotS); + static final short[] DFA18_eof = DFA.unpackEncodedString(DFA18_eofS); + static final char[] DFA18_min = DFA.unpackEncodedStringToUnsignedChars(DFA18_minS); + static final char[] DFA18_max = DFA.unpackEncodedStringToUnsignedChars(DFA18_maxS); + static final short[] DFA18_accept = DFA.unpackEncodedString(DFA18_acceptS); + static final short[] DFA18_special = DFA.unpackEncodedString(DFA18_specialS); + static final short[][] DFA18_transition; + + static { + int numStates = DFA18_transitionS.length; + DFA18_transition = new short[numStates][]; + for (int i=0; i fuzzy )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA18_28 = input.LA(1); + + + int index18_28 = input.index(); + input.rewind(); + s = -1; + if ( (synpred4_FTS()) ) {s = 30;} + + else if ( (true) ) {s = 29;} + + + input.seek(index18_28); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 18, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA19_eotS = + "\37\uffff"; + static final String DFA19_eofS = + "\1\5\36\uffff"; + static final String DFA19_minS = + "\1\51\1\61\27\uffff\1\0\5\uffff"; + static final String DFA19_maxS = + "\1\111\1\105\27\uffff\1\0\5\uffff"; + static final String DFA19_acceptS = + "\2\uffff\27\2\1\uffff\4\2\1\1"; + static final String DFA19_specialS = + "\31\uffff\1\0\5\uffff}>"; + static final String[] DFA19_transitionS = { + "\1\27\1\10\1\30\1\25\1\6\1\26\1\uffff\1\1\1\15\1\2\1\uffff"+ + "\1\20\1\21\1\13\3\15\1\11\1\22\1\15\1\17\1\uffff\1\23\1\24\2"+ + "\uffff\1\14\1\16\1\17\1\7\1\3\1\4\1\12", + "\1\31\4\uffff\1\33\7\35\5\uffff\1\32\1\34\1\35", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "", + "", + "", + "" + }; + + static final short[] DFA19_eot = DFA.unpackEncodedString(DFA19_eotS); + static final short[] DFA19_eof = DFA.unpackEncodedString(DFA19_eofS); + static final char[] DFA19_min = DFA.unpackEncodedStringToUnsignedChars(DFA19_minS); + static final char[] DFA19_max = DFA.unpackEncodedStringToUnsignedChars(DFA19_maxS); + static final short[] DFA19_accept = DFA.unpackEncodedString(DFA19_acceptS); + static final short[] DFA19_special = DFA.unpackEncodedString(DFA19_specialS); + static final short[][] DFA19_transition; + + static { + int numStates = DFA19_transitionS.length; + DFA19_transition = new short[numStates][]; + for (int i=0; i slop )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA19_25 = input.LA(1); + + + int index19_25 = input.index(); + input.rewind(); + s = -1; + if ( (synpred5_FTS()) ) {s = 30;} + + else if ( (true) ) {s = 29;} + + + input.seek(index19_25); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 19, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA20_eotS = + "\37\uffff"; + static final String DFA20_eofS = + "\1\5\36\uffff"; + static final String DFA20_minS = + "\1\51\1\61\32\uffff\1\0\2\uffff"; + static final String DFA20_maxS = + "\1\111\1\105\32\uffff\1\0\2\uffff"; + static final String DFA20_acceptS = + "\2\uffff\32\2\1\uffff\1\2\1\1"; + static final String DFA20_specialS = + "\34\uffff\1\0\2\uffff}>"; + static final String[] DFA20_transitionS = { + "\1\27\1\10\1\30\1\25\1\6\1\26\1\uffff\1\1\1\15\1\2\1\uffff"+ + "\1\20\1\21\1\13\3\15\1\11\1\22\1\15\1\17\1\uffff\1\23\1\24\2"+ + "\uffff\1\14\1\16\1\17\1\7\1\3\1\4\1\12", + "\1\34\4\uffff\1\32\5\35\1\34\1\35\5\uffff\1\31\1\33\1\35", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "" + }; + + static final short[] DFA20_eot = DFA.unpackEncodedString(DFA20_eotS); + static final short[] DFA20_eof = DFA.unpackEncodedString(DFA20_eofS); + static final char[] DFA20_min = DFA.unpackEncodedStringToUnsignedChars(DFA20_minS); + static final char[] DFA20_max = DFA.unpackEncodedStringToUnsignedChars(DFA20_maxS); + static final short[] DFA20_accept = DFA.unpackEncodedString(DFA20_acceptS); + static final short[] DFA20_special = DFA.unpackEncodedString(DFA20_specialS); + static final short[][] DFA20_transition; + + static { + int numStates = DFA20_transitionS.length; + DFA20_transition = new short[numStates][]; + for (int i=0; i fuzzy )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA20_28 = input.LA(1); + + + int index20_28 = input.index(); + input.rewind(); + s = -1; + if ( (synpred6_FTS()) ) {s = 30;} + + else if ( (true) ) {s = 29;} + + + input.seek(index20_28); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 20, _s, input); error(nvae); throw nvae; } } static final String DFA26_eotS = - "\21\uffff"; + "\36\uffff"; static final String DFA26_eofS = - "\21\uffff"; + "\2\uffff\1\11\33\uffff"; static final String DFA26_minS = - "\1\51\6\uffff\1\0\4\uffff\1\0\4\uffff"; + "\1\61\1\uffff\1\51\33\uffff"; static final String DFA26_maxS = - "\1\110\6\uffff\1\0\4\uffff\1\0\4\uffff"; + "\1\105\1\uffff\1\111\33\uffff"; static final String DFA26_acceptS = - "\1\uffff\1\2\16\uffff\1\1"; + "\1\uffff\1\1\1\uffff\1\1\31\2\1\1"; static final String DFA26_specialS = - "\7\uffff\1\0\4\uffff\1\1\4\uffff}>"; + "\36\uffff}>"; static final String[] DFA26_transitionS = { - "\1\1\1\14\3\1\2\uffff\2\1\2\uffff\2\1\2\uffff\3\1\4\uffff\4"+ - "\1\1\7\3\1\1\uffff\1\1", + "\1\4\4\uffff\1\2\7\4\5\uffff\1\1\1\3\1\4", + "", + "\1\33\1\14\1\34\1\31\1\12\1\32\1\uffff\1\5\1\21\1\6\1\35\1"+ + "\24\1\25\1\17\3\21\1\15\1\26\1\21\1\23\1\uffff\1\27\1\30\2\uffff"+ + "\1\20\1\22\1\23\1\13\1\7\1\10\1\16", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", "", "", "", "", "", "", - "\1\uffff", "", "", "", "", - "\1\uffff", "", "", "", @@ -7563,65 +9164,360 @@ public class FTSParser extends Parser { this.transition = DFA26_transition; } public String getDescription() { - return "()* loopback of 347:36: ( ( or )=> or ftsFieldGroupExplictConjunction )*"; + return "519:9: ( fieldReference COLON )?"; + } + } + static final String DFA29_eotS = + "\22\uffff"; + static final String DFA29_eofS = + "\22\uffff"; + static final String DFA29_minS = + "\1\51\2\uffff\16\0\1\uffff"; + static final String DFA29_maxS = + "\1\111\2\uffff\16\0\1\uffff"; + static final String DFA29_acceptS = + "\1\uffff\2\1\16\uffff\1\2"; + static final String DFA29_specialS = + "\1\0\2\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1"+ + "\14\1\15\1\16\1\uffff}>"; + static final String[] DFA29_transitionS = { + "\1\16\1\17\1\20\1\15\3\uffff\1\11\1\5\2\uffff\1\7\1\10\4\5"+ + "\1\3\1\12\1\5\1\6\1\uffff\1\13\1\14\4\uffff\1\6\1\21\1\1\1\2"+ + "\1\4", + "", + "", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "" + }; + + static final short[] DFA29_eot = DFA.unpackEncodedString(DFA29_eotS); + static final short[] DFA29_eof = DFA.unpackEncodedString(DFA29_eofS); + static final char[] DFA29_min = DFA.unpackEncodedStringToUnsignedChars(DFA29_minS); + static final char[] DFA29_max = DFA.unpackEncodedStringToUnsignedChars(DFA29_maxS); + static final short[] DFA29_accept = DFA.unpackEncodedString(DFA29_acceptS); + static final short[] DFA29_special = DFA.unpackEncodedString(DFA29_specialS); + static final short[][] DFA29_transition; + + static { + int numStates = DFA29_transitionS.length; + DFA29_transition = new short[numStates][]; + for (int i=0; i ftsFieldGroupExplicitDisjunction | {...}? => ftsFieldGroupImplicitDisjunction );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA26_7 = input.LA(1); + int LA29_0 = input.LA(1); - int index26_7 = input.index(); + int index29_0 = input.index(); input.rewind(); s = -1; - if ( (synpred8_FTS()) ) {s = 16;} + if ( (LA29_0==AND) && ((defaultFieldConjunction() == true))) {s = 1;} - else if ( (true) ) {s = 1;} + else if ( (LA29_0==AMP) && ((defaultFieldConjunction() == true))) {s = 2;} + + else if ( (LA29_0==NOT) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 3;} + + else if ( (LA29_0==EXCLAMATION) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 4;} + + else if ( (LA29_0==DECIMAL_INTEGER_LITERAL||(LA29_0>=ID && LA29_0<=FTSWILD)||LA29_0==FLOATING_POINT_LITERAL) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 5;} + + else if ( (LA29_0==STAR||LA29_0==QUESTION_MARK) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 6;} + + else if ( (LA29_0==EQUALS) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 7;} + + else if ( (LA29_0==FTSPHRASE) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 8;} + + else if ( (LA29_0==TILDA) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 9;} + + else if ( (LA29_0==TO) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 10;} + + else if ( (LA29_0==LSQUARE) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 11;} + + else if ( (LA29_0==LT) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 12;} + + else if ( (LA29_0==LPAREN) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 13;} + + else if ( (LA29_0==PLUS) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 14;} + + else if ( (LA29_0==BAR) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 15;} + + else if ( (LA29_0==MINUS) && (((defaultFieldConjunction() == false)||(defaultFieldConjunction() == true)))) {s = 16;} + + else if ( (LA29_0==OR) && ((defaultFieldConjunction() == false))) {s = 17;} - input.seek(index26_7); + input.seek(index29_0); if ( s>=0 ) return s; break; case 1 : - int LA26_12 = input.LA(1); + int LA29_3 = input.LA(1); - int index26_12 = input.index(); + int index29_3 = input.index(); input.rewind(); s = -1; - if ( (synpred8_FTS()) ) {s = 16;} + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} - else if ( (true) ) {s = 1;} + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} - input.seek(index26_12); + input.seek(index29_3); + if ( s>=0 ) return s; + break; + case 2 : + int LA29_4 = input.LA(1); + + + int index29_4 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_4); + if ( s>=0 ) return s; + break; + case 3 : + int LA29_5 = input.LA(1); + + + int index29_5 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_5); + if ( s>=0 ) return s; + break; + case 4 : + int LA29_6 = input.LA(1); + + + int index29_6 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_6); + if ( s>=0 ) return s; + break; + case 5 : + int LA29_7 = input.LA(1); + + + int index29_7 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_7); + if ( s>=0 ) return s; + break; + case 6 : + int LA29_8 = input.LA(1); + + + int index29_8 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_8); + if ( s>=0 ) return s; + break; + case 7 : + int LA29_9 = input.LA(1); + + + int index29_9 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_9); + if ( s>=0 ) return s; + break; + case 8 : + int LA29_10 = input.LA(1); + + + int index29_10 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_10); + if ( s>=0 ) return s; + break; + case 9 : + int LA29_11 = input.LA(1); + + + int index29_11 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_11); + if ( s>=0 ) return s; + break; + case 10 : + int LA29_12 = input.LA(1); + + + int index29_12 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_12); + if ( s>=0 ) return s; + break; + case 11 : + int LA29_13 = input.LA(1); + + + int index29_13 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_13); + if ( s>=0 ) return s; + break; + case 12 : + int LA29_14 = input.LA(1); + + + int index29_14 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_14); + if ( s>=0 ) return s; + break; + case 13 : + int LA29_15 = input.LA(1); + + + int index29_15 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_15); + if ( s>=0 ) return s; + break; + case 14 : + int LA29_16 = input.LA(1); + + + int index29_16 = input.index(); + input.rewind(); + s = -1; + if ( ((defaultFieldConjunction() == true)) ) {s = 2;} + + else if ( ((defaultFieldConjunction() == false)) ) {s = 17;} + + + input.seek(index29_16); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 26, _s, input); + new NoViableAltException(getDescription(), 29, _s, input); error(nvae); throw nvae; } } - static final String DFA27_eotS = - "\22\uffff"; - static final String DFA27_eofS = - "\22\uffff"; - static final String DFA27_minS = - "\1\51\10\uffff\1\0\10\uffff"; - static final String DFA27_maxS = - "\1\110\10\uffff\1\0\10\uffff"; - static final String DFA27_acceptS = - "\1\uffff\1\2\17\uffff\1\1"; - static final String DFA27_specialS = - "\1\0\10\uffff\1\1\10\uffff}>"; - static final String[] DFA27_transitionS = { - "\5\1\2\uffff\2\1\2\uffff\2\1\2\uffff\3\1\4\uffff\5\1\1\11\2"+ - "\1\1\21\1\1", + static final String DFA32_eotS = + "\21\uffff"; + static final String DFA32_eofS = + "\21\uffff"; + static final String DFA32_minS = + "\1\51\20\uffff"; + static final String DFA32_maxS = + "\1\111\20\uffff"; + static final String DFA32_acceptS = + "\1\uffff\1\2\17\1"; + static final String DFA32_specialS = + "\21\uffff}>"; + static final String[] DFA32_transitionS = { + "\1\17\1\3\1\20\1\16\1\1\2\uffff\1\12\1\6\2\uffff\1\10\1\11"+ + "\4\6\1\4\1\13\1\6\1\7\1\uffff\1\14\1\15\4\uffff\1\7\1\2\2\uffff"+ + "\1\5", "", "", "", @@ -7630,7 +9526,6 @@ public class FTSParser extends Parser { "", "", "", - "\1\uffff", "", "", "", @@ -7641,97 +9536,278 @@ public class FTSParser extends Parser { "" }; - static final short[] DFA27_eot = DFA.unpackEncodedString(DFA27_eotS); - static final short[] DFA27_eof = DFA.unpackEncodedString(DFA27_eofS); - static final char[] DFA27_min = DFA.unpackEncodedStringToUnsignedChars(DFA27_minS); - static final char[] DFA27_max = DFA.unpackEncodedStringToUnsignedChars(DFA27_maxS); - static final short[] DFA27_accept = DFA.unpackEncodedString(DFA27_acceptS); - static final short[] DFA27_special = DFA.unpackEncodedString(DFA27_specialS); - static final short[][] DFA27_transition; + static final short[] DFA32_eot = DFA.unpackEncodedString(DFA32_eotS); + static final short[] DFA32_eof = DFA.unpackEncodedString(DFA32_eofS); + static final char[] DFA32_min = DFA.unpackEncodedStringToUnsignedChars(DFA32_minS); + static final char[] DFA32_max = DFA.unpackEncodedStringToUnsignedChars(DFA32_maxS); + static final short[] DFA32_accept = DFA.unpackEncodedString(DFA32_acceptS); + static final short[] DFA32_special = DFA.unpackEncodedString(DFA32_specialS); + static final short[][] DFA32_transition; static { - int numStates = DFA27_transitionS.length; - DFA27_transition = new short[numStates][]; + int numStates = DFA32_transitionS.length; + DFA32_transition = new short[numStates][]; for (int i=0; i and ftsFieldGroupPrefixed )*"; - } - public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { - TokenStream input = (TokenStream)_input; - int _s = s; - switch ( s ) { - case 0 : - int LA27_0 = input.LA(1); - - - int index27_0 = input.index(); - input.rewind(); - s = -1; - if ( ((LA27_0>=PLUS && LA27_0<=RPAREN)||(LA27_0>=TILDA && LA27_0<=DECIMAL_INTEGER_LITERAL)||(LA27_0>=EQUALS && LA27_0<=FTSPHRASE)||(LA27_0>=TO && LA27_0<=LT)||(LA27_0>=ID && LA27_0<=OR)||(LA27_0>=NOT && LA27_0<=FLOATING_POINT_LITERAL)||LA27_0==EXCLAMATION) ) {s = 1;} - - else if ( (LA27_0==AND) ) {s = 9;} - - else if ( (LA27_0==AMP) && (synpred9_FTS())) {s = 17;} - - - input.seek(index27_0); - if ( s>=0 ) return s; - break; - case 1 : - int LA27_9 = input.LA(1); - - - int index27_9 = input.index(); - input.rewind(); - s = -1; - if ( (synpred9_FTS()) ) {s = 17;} - - else if ( (true) ) {s = 1;} - - - input.seek(index27_9); - if ( s>=0 ) return s; - break; - } - if (state.backtracking>0) {state.failed=true; return -1;} - NoViableAltException nvae = - new NoViableAltException(getDescription(), 27, _s, input); - error(nvae); - throw nvae; + return "()+ loopback of 581:9: ( ( or )? ftsFieldGroupExplicitConjunction )+"; } } - static final String DFA33_eotS = - "\16\uffff"; - static final String DFA33_eofS = - "\16\uffff"; - static final String DFA33_minS = - "\1\51\1\0\14\uffff"; - static final String DFA33_maxS = - "\1\110\1\0\14\uffff"; - static final String DFA33_acceptS = - "\2\uffff\1\1\1\2\7\uffff\1\3\1\4\1\5"; - static final String DFA33_specialS = - "\1\0\1\1\14\uffff}>"; - static final String[] DFA33_transitionS = { - "\1\13\1\14\1\15\1\3\3\uffff\2\3\2\uffff\2\3\2\uffff\3\3\4\uffff"+ - "\6\3\1\1\1\3\1\uffff\1\2", + static final String DFA31_eotS = + "\32\uffff"; + static final String DFA31_eofS = + "\32\uffff"; + static final String DFA31_minS = + "\1\51\1\uffff\1\52\27\uffff"; + static final String DFA31_maxS = + "\1\111\1\uffff\1\105\27\uffff"; + static final String DFA31_acceptS = + "\1\uffff\1\1\1\uffff\15\2\1\1\11\2"; + static final String DFA31_specialS = + "\32\uffff}>"; + static final String[] DFA31_transitionS = { + "\1\16\1\2\1\17\1\15\3\uffff\1\11\1\5\2\uffff\1\7\1\10\4\5\1"+ + "\3\1\12\1\5\1\6\1\uffff\1\13\1\14\4\uffff\1\6\1\1\2\uffff\1"+ + "\4", + "", + "\1\20\1\uffff\1\31\3\uffff\1\25\1\21\2\uffff\1\23\1\24\4\21"+ + "\2\26\1\21\1\22\1\uffff\1\27\1\30\4\uffff\1\22", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA31_eot = DFA.unpackEncodedString(DFA31_eotS); + static final short[] DFA31_eof = DFA.unpackEncodedString(DFA31_eofS); + static final char[] DFA31_min = DFA.unpackEncodedStringToUnsignedChars(DFA31_minS); + static final char[] DFA31_max = DFA.unpackEncodedStringToUnsignedChars(DFA31_maxS); + static final short[] DFA31_accept = DFA.unpackEncodedString(DFA31_acceptS); + static final short[] DFA31_special = DFA.unpackEncodedString(DFA31_specialS); + static final short[][] DFA31_transition; + + static { + int numStates = DFA31_transitionS.length; + DFA31_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA35_transitionS = { + "\1\21\1\2\1\22\1\20\1\3\2\uffff\1\14\1\10\2\uffff\1\12\1\13"+ + "\4\10\1\6\1\15\1\10\1\11\1\uffff\1\16\1\17\4\uffff\1\11\1\1"+ + "\1\4\1\5\1\7", + "", + "\1\23\1\uffff\1\34\3\uffff\1\30\1\24\2\uffff\1\26\1\27\4\24"+ + "\2\31\1\24\1\25\1\uffff\1\32\1\33\4\uffff\1\25", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA35_eot = DFA.unpackEncodedString(DFA35_eotS); + static final short[] DFA35_eof = DFA.unpackEncodedString(DFA35_eofS); + static final char[] DFA35_min = DFA.unpackEncodedStringToUnsignedChars(DFA35_minS); + static final char[] DFA35_max = DFA.unpackEncodedStringToUnsignedChars(DFA35_maxS); + static final short[] DFA35_accept = DFA.unpackEncodedString(DFA35_acceptS); + static final short[] DFA35_special = DFA.unpackEncodedString(DFA35_specialS); + static final short[][] DFA35_transition; + + static { + int numStates = DFA35_transitionS.length; + DFA35_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA34_transitionS = { + "\1\16\1\17\1\20\1\15\3\uffff\1\11\1\5\2\uffff\1\7\1\10\4\5"+ + "\1\3\1\12\1\5\1\6\1\uffff\1\13\1\14\4\uffff\1\6\1\uffff\1\1"+ + "\1\2\1\4", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA34_eot = DFA.unpackEncodedString(DFA34_eotS); + static final short[] DFA34_eof = DFA.unpackEncodedString(DFA34_eofS); + static final char[] DFA34_min = DFA.unpackEncodedStringToUnsignedChars(DFA34_minS); + static final char[] DFA34_max = DFA.unpackEncodedStringToUnsignedChars(DFA34_maxS); + static final short[] DFA34_accept = DFA.unpackEncodedString(DFA34_acceptS); + static final short[] DFA34_special = DFA.unpackEncodedString(DFA34_specialS); + static final short[][] DFA34_transition; + + static { + int numStates = DFA34_transitionS.length; + DFA34_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA41_transitionS = { + "\1\14\1\15\1\16\1\13\3\uffff\1\7\1\3\2\uffff\1\5\1\6\4\3\1"+ + "\1\1\10\1\3\1\4\1\uffff\1\11\1\12\4\uffff\1\4\3\uffff\1\2", "\1\uffff", "", "", @@ -7744,113 +9820,222 @@ public class FTSParser extends Parser { "", "", "", + "", "" }; - static final short[] DFA33_eot = DFA.unpackEncodedString(DFA33_eotS); - static final short[] DFA33_eof = DFA.unpackEncodedString(DFA33_eofS); - static final char[] DFA33_min = DFA.unpackEncodedStringToUnsignedChars(DFA33_minS); - static final char[] DFA33_max = DFA.unpackEncodedStringToUnsignedChars(DFA33_maxS); - static final short[] DFA33_accept = DFA.unpackEncodedString(DFA33_acceptS); - static final short[] DFA33_special = DFA.unpackEncodedString(DFA33_specialS); - static final short[][] DFA33_transition; + 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 = DFA33_transitionS.length; - DFA33_transition = new short[numStates][]; + int numStates = DFA41_transitionS.length; + DFA41_transition = new short[numStates][]; for (int i=0; i not ftsFieldGroupTest ( boost )? -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) | ftsFieldGroupTest ( boost )? -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) | PLUS ftsFieldGroupTest ( boost )? -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) | BAR ftsFieldGroupTest ( boost )? -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) | MINUS ftsFieldGroupTest ( boost )? -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) );"; + return "604:1: ftsFieldGroupPrefixed : ( ( not )=> not ftsFieldGroupTest ( boost )? -> ^( FIELD_NEGATION ftsFieldGroupTest ( boost )? ) | ftsFieldGroupTest ( boost )? -> ^( FIELD_DEFAULT ftsFieldGroupTest ( boost )? ) | PLUS ftsFieldGroupTest ( boost )? -> ^( FIELD_MANDATORY ftsFieldGroupTest ( boost )? ) | BAR ftsFieldGroupTest ( boost )? -> ^( FIELD_OPTIONAL ftsFieldGroupTest ( boost )? ) | MINUS ftsFieldGroupTest ( boost )? -> ^( FIELD_EXCLUDE ftsFieldGroupTest ( boost )? ) );"; } public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { TokenStream input = (TokenStream)_input; int _s = s; switch ( s ) { case 0 : - int LA33_0 = input.LA(1); + int LA41_0 = input.LA(1); - int index33_0 = input.index(); + int index41_0 = input.index(); input.rewind(); s = -1; - if ( (LA33_0==NOT) ) {s = 1;} + if ( (LA41_0==NOT) ) {s = 1;} - else if ( (LA33_0==EXCLAMATION) && (synpred10_FTS())) {s = 2;} + else if ( (LA41_0==EXCLAMATION) && (synpred7_FTS())) {s = 2;} - else if ( (LA33_0==LPAREN||(LA33_0>=TILDA && LA33_0<=DECIMAL_INTEGER_LITERAL)||(LA33_0>=EQUALS && LA33_0<=FTSPHRASE)||(LA33_0>=TO && LA33_0<=LT)||(LA33_0>=ID && LA33_0<=AND)||LA33_0==FLOATING_POINT_LITERAL) ) {s = 3;} + else if ( (LA41_0==DECIMAL_INTEGER_LITERAL||(LA41_0>=ID && LA41_0<=FTSWILD)||LA41_0==FLOATING_POINT_LITERAL) ) {s = 3;} - else if ( (LA33_0==PLUS) ) {s = 11;} + else if ( (LA41_0==STAR||LA41_0==QUESTION_MARK) ) {s = 4;} - else if ( (LA33_0==BAR) ) {s = 12;} + else if ( (LA41_0==EQUALS) ) {s = 5;} - else if ( (LA33_0==MINUS) ) {s = 13;} + else if ( (LA41_0==FTSPHRASE) ) {s = 6;} + + else if ( (LA41_0==TILDA) ) {s = 7;} + + else if ( (LA41_0==TO) ) {s = 8;} + + else if ( (LA41_0==LSQUARE) ) {s = 9;} + + else if ( (LA41_0==LT) ) {s = 10;} + + else if ( (LA41_0==LPAREN) ) {s = 11;} + + else if ( (LA41_0==PLUS) ) {s = 12;} + + else if ( (LA41_0==BAR) ) {s = 13;} + + else if ( (LA41_0==MINUS) ) {s = 14;} - input.seek(index33_0); + input.seek(index41_0); if ( s>=0 ) return s; break; case 1 : - int LA33_1 = input.LA(1); + int LA41_1 = input.LA(1); - int index33_1 = input.index(); + int index41_1 = input.index(); input.rewind(); s = -1; - if ( (synpred10_FTS()) ) {s = 2;} + if ( (synpred7_FTS()) ) {s = 2;} - else if ( (true) ) {s = 3;} + else if ( (true) ) {s = 11;} - input.seek(index33_1); + input.seek(index41_1); if ( s>=0 ) return s; break; } if (state.backtracking>0) {state.failed=true; return -1;} NoViableAltException nvae = - new NoViableAltException(getDescription(), 33, _s, input); + new NoViableAltException(getDescription(), 41, _s, input); error(nvae); throw nvae; } } - static final String DFA38_eotS = - "\13\uffff"; - static final String DFA38_eofS = - "\13\uffff"; - static final String DFA38_minS = - "\1\54\1\51\1\uffff\1\51\1\uffff\1\51\5\uffff"; - static final String DFA38_maxS = - "\1\106\1\110\1\uffff\1\110\1\uffff\1\110\5\uffff"; - static final String DFA38_acceptS = - "\2\uffff\1\2\1\uffff\1\4\1\uffff\1\6\1\7\1\5\1\1\1\3"; - static final String DFA38_specialS = - "\13\uffff}>"; - static final String[] DFA38_transitionS = { - "\1\7\3\uffff\1\4\1\1\2\uffff\1\2\1\3\2\uffff\1\5\2\6\4\uffff"+ - "\4\1\3\5\1\1", - "\5\11\2\uffff\3\11\1\uffff\2\11\1\10\1\6\3\11\4\uffff\12\11", + static final String DFA46_eotS = + "\130\uffff"; + static final String DFA46_eofS = + "\130\uffff"; + static final String DFA46_minS = + "\1\54\1\51\2\uffff\1\51\1\uffff\1\51\3\uffff\1\51\53\uffff\3\0"+ + "\1\51\1\uffff\1\51\26\uffff\1\51\5\uffff"; + static final String DFA46_maxS = + "\1\105\1\111\2\uffff\1\111\1\uffff\1\111\3\uffff\1\111\53\uffff"+ + "\3\0\1\111\1\uffff\1\111\26\uffff\1\111\5\uffff"; + static final String DFA46_acceptS = + "\2\uffff\1\2\1\3\1\uffff\1\5\1\uffff\2\6\1\7\1\uffff\1\6\23\2\23"+ + "\4\4\2\4\uffff\1\1\1\uffff\1\1\25\2\1\uffff\5\2"; + static final String DFA46_specialS = + "\66\uffff\1\2\1\0\1\1\1\3\36\uffff}>"; + static final String[] DFA46_transitionS = { + "\1\11\3\uffff\1\5\1\1\2\uffff\1\3\1\4\4\1\2\6\1\1\1\2\1\uffff"+ + "\1\7\1\10\4\uffff\1\2", + "\1\35\1\22\1\36\1\34\1\20\2\uffff\1\14\1\25\1\15\1\uffff\1"+ + "\27\1\30\4\25\1\23\1\31\1\25\1\12\1\13\1\32\1\33\4\uffff\1\26"+ + "\1\21\1\16\1\17\1\24", "", - "\5\12\2\uffff\3\12\1\uffff\2\12\1\uffff\1\6\3\12\4\uffff\12"+ - "\12", "", - "\5\11\2\uffff\3\11\1\uffff\2\11\1\10\1\uffff\3\11\4\uffff"+ - "\12\11", + "\1\60\1\45\1\61\1\57\1\43\2\uffff\1\37\1\50\1\40\1\uffff\1"+ + "\52\1\53\4\50\1\46\1\54\1\50\1\51\1\13\1\55\1\56\4\uffff\1\51"+ + "\1\44\1\41\1\42\1\47", + "", + "\1\35\1\22\1\36\1\34\1\20\2\uffff\1\14\1\25\1\15\1\uffff\1"+ + "\27\1\30\4\25\1\23\1\31\1\25\1\12\1\uffff\1\32\1\33\4\uffff"+ + "\1\26\1\21\1\16\1\17\1\24", + "", + "", + "", + "\1\35\1\22\1\36\1\71\1\20\2\uffff\1\62\1\67\1\63\1\uffff\1"+ + "\27\1\30\4\67\1\66\1\70\1\67\1\26\1\uffff\1\32\1\33\4\uffff"+ + "\1\26\1\21\1\64\1\65\1\24", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "\1\uffff", + "\1\uffff", + "\1\112\1\113\1\114\1\111\1\74\2\uffff\1\105\1\73\2\uffff\1"+ + "\103\1\104\4\101\1\77\1\106\1\101\1\102\1\uffff\1\107\1\110"+ + "\4\uffff\1\102\1\115\1\75\1\76\1\100", + "", + "\1\112\1\121\1\114\1\111\1\122\2\uffff\1\116\1\101\1\117\1"+ + "\uffff\1\103\1\104\4\101\1\77\1\106\1\101\1\125\1\126\1\107"+ + "\1\110\4\uffff\1\102\1\120\1\123\1\124\1\100", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\35\1\22\1\36\1\34\1\20\2\uffff\1\127\1\67\1\63\1\uffff"+ + "\1\27\1\30\4\67\1\66\1\70\1\67\1\26\1\uffff\1\32\1\33\4\uffff"+ + "\1\26\1\21\1\64\1\65\1\24", "", "", "", @@ -7858,210 +10043,1151 @@ public class FTSParser extends Parser { "" }; - static final short[] DFA38_eot = DFA.unpackEncodedString(DFA38_eotS); - static final short[] DFA38_eof = DFA.unpackEncodedString(DFA38_eofS); - static final char[] DFA38_min = DFA.unpackEncodedStringToUnsignedChars(DFA38_minS); - static final char[] DFA38_max = DFA.unpackEncodedStringToUnsignedChars(DFA38_maxS); - static final short[] DFA38_accept = DFA.unpackEncodedString(DFA38_acceptS); - static final short[] DFA38_special = DFA.unpackEncodedString(DFA38_specialS); - static final short[][] DFA38_transition; + static final short[] DFA46_eot = DFA.unpackEncodedString(DFA46_eotS); + static final short[] DFA46_eof = DFA.unpackEncodedString(DFA46_eofS); + static final char[] DFA46_min = DFA.unpackEncodedStringToUnsignedChars(DFA46_minS); + static final char[] DFA46_max = DFA.unpackEncodedStringToUnsignedChars(DFA46_maxS); + static final short[] DFA46_accept = DFA.unpackEncodedString(DFA46_acceptS); + static final short[] DFA46_special = DFA.unpackEncodedString(DFA46_specialS); + static final short[][] DFA46_transition; static { - int numStates = DFA38_transitionS.length; - DFA38_transition = new short[numStates][]; + int numStates = DFA46_transitionS.length; + DFA46_transition = new short[numStates][]; for (int i=0; i fuzzy )? -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) | ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) | ftsFieldGroupPhrase ( ( slop )=> slop )? -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) | ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) | ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupImplicitConjunctionOrDisjunction RPAREN -> ftsFieldGroupImplicitConjunctionOrDisjunction );"; + return "623:1: ftsFieldGroupTest : ( ( ftsFieldGroupProximity )=> ftsFieldGroupProximity -> ^( FG_PROXIMITY ftsFieldGroupProximity ) | ftsFieldGroupTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_TERM ftsFieldGroupTerm ( fuzzy )? ) | ftsFieldGroupExactTerm ( ( fuzzy )=> fuzzy )? -> ^( FG_EXACT_TERM ftsFieldGroupExactTerm ( fuzzy )? ) | ftsFieldGroupPhrase ( ( slop )=> slop )? -> ^( FG_PHRASE ftsFieldGroupPhrase ( slop )? ) | ftsFieldGroupSynonym ( ( fuzzy )=> fuzzy )? -> ^( FG_SYNONYM ftsFieldGroupSynonym ( fuzzy )? ) | ftsFieldGroupRange -> ^( FG_RANGE ftsFieldGroupRange ) | LPAREN ftsFieldGroupDisjunction RPAREN -> ftsFieldGroupDisjunction );"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA46_55 = input.LA(1); + + + int index46_55 = input.index(); + input.rewind(); + s = -1; + if ( (synpred8_FTS()) ) {s = 58;} + + else if ( (true) ) {s = 53;} + + + input.seek(index46_55); + if ( s>=0 ) return s; + break; + case 1 : + int LA46_56 = input.LA(1); + + + int index46_56 = input.index(); + input.rewind(); + s = -1; + if ( (synpred8_FTS()) ) {s = 58;} + + else if ( (true) ) {s = 53;} + + + input.seek(index46_56); + if ( s>=0 ) return s; + break; + case 2 : + int LA46_54 = input.LA(1); + + + int index46_54 = input.index(); + input.rewind(); + s = -1; + if ( (synpred8_FTS()) ) {s = 58;} + + else if ( (true) ) {s = 53;} + + + input.seek(index46_54); + if ( s>=0 ) return s; + break; + case 3 : + int LA46_57 = input.LA(1); + + + int index46_57 = input.index(); + input.rewind(); + s = -1; + if ( (LA46_57==DECIMAL_INTEGER_LITERAL) ) {s = 59;} + + else if ( (LA46_57==RPAREN) && (synpred8_FTS())) {s = 60;} + + else if ( (LA46_57==AND) ) {s = 61;} + + else if ( (LA46_57==AMP) ) {s = 62;} + + else if ( (LA46_57==NOT) ) {s = 63;} + + else if ( (LA46_57==EXCLAMATION) ) {s = 64;} + + else if ( ((LA46_57>=ID && LA46_57<=FTSWILD)||LA46_57==FLOATING_POINT_LITERAL) ) {s = 65;} + + else if ( (LA46_57==STAR||LA46_57==QUESTION_MARK) ) {s = 66;} + + else if ( (LA46_57==EQUALS) ) {s = 67;} + + else if ( (LA46_57==FTSPHRASE) ) {s = 68;} + + else if ( (LA46_57==TILDA) ) {s = 69;} + + else if ( (LA46_57==TO) ) {s = 70;} + + else if ( (LA46_57==LSQUARE) ) {s = 71;} + + else if ( (LA46_57==LT) ) {s = 72;} + + else if ( (LA46_57==LPAREN) ) {s = 73;} + + else if ( (LA46_57==PLUS) ) {s = 74;} + + else if ( (LA46_57==BAR) ) {s = 75;} + + else if ( (LA46_57==MINUS) ) {s = 76;} + + else if ( (LA46_57==OR) ) {s = 77;} + + + input.seek(index46_57); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 46, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA42_eotS = + "\27\uffff"; + static final String DFA42_eofS = + "\27\uffff"; + static final String DFA42_minS = + "\1\51\1\61\22\uffff\1\0\2\uffff"; + static final String DFA42_maxS = + "\1\111\1\105\22\uffff\1\0\2\uffff"; + static final String DFA42_acceptS = + "\2\uffff\22\2\1\uffff\1\2\1\1"; + static final String DFA42_specialS = + "\24\uffff\1\0\2\uffff}>"; + static final String[] DFA42_transitionS = { + "\1\22\1\7\1\23\1\21\1\5\2\uffff\1\1\1\12\1\2\1\uffff\1\14\1"+ + "\15\4\12\1\10\1\16\1\12\1\13\1\uffff\1\17\1\20\4\uffff\1\13"+ + "\1\6\1\3\1\4\1\11", + "\1\24\4\uffff\6\25\1\24\1\25\7\uffff\1\25", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "" + }; + + static final short[] DFA42_eot = DFA.unpackEncodedString(DFA42_eotS); + static final short[] DFA42_eof = DFA.unpackEncodedString(DFA42_eofS); + static final char[] DFA42_min = DFA.unpackEncodedStringToUnsignedChars(DFA42_minS); + static final char[] DFA42_max = DFA.unpackEncodedStringToUnsignedChars(DFA42_maxS); + static final short[] DFA42_accept = DFA.unpackEncodedString(DFA42_acceptS); + static final short[] DFA42_special = DFA.unpackEncodedString(DFA42_specialS); + static final short[][] DFA42_transition; + + static { + int numStates = DFA42_transitionS.length; + DFA42_transition = new short[numStates][]; + for (int i=0; i fuzzy )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA42_20 = input.LA(1); + + + int index42_20 = input.index(); + input.rewind(); + s = -1; + if ( (synpred9_FTS()) ) {s = 22;} + + else if ( (true) ) {s = 21;} + + + input.seek(index42_20); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 42, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA43_eotS = + "\27\uffff"; + static final String DFA43_eofS = + "\27\uffff"; + static final String DFA43_minS = + "\1\51\1\61\22\uffff\1\0\2\uffff"; + static final String DFA43_maxS = + "\1\111\1\105\22\uffff\1\0\2\uffff"; + static final String DFA43_acceptS = + "\2\uffff\22\2\1\uffff\1\2\1\1"; + static final String DFA43_specialS = + "\24\uffff\1\0\2\uffff}>"; + static final String[] DFA43_transitionS = { + "\1\22\1\7\1\23\1\21\1\5\2\uffff\1\1\1\12\1\2\1\uffff\1\14\1"+ + "\15\4\12\1\10\1\16\1\12\1\13\1\uffff\1\17\1\20\4\uffff\1\13"+ + "\1\6\1\3\1\4\1\11", + "\1\24\4\uffff\6\25\1\24\1\25\7\uffff\1\25", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "" + }; + + static final short[] DFA43_eot = DFA.unpackEncodedString(DFA43_eotS); + static final short[] DFA43_eof = DFA.unpackEncodedString(DFA43_eofS); + static final char[] DFA43_min = DFA.unpackEncodedStringToUnsignedChars(DFA43_minS); + static final char[] DFA43_max = DFA.unpackEncodedStringToUnsignedChars(DFA43_maxS); + static final short[] DFA43_accept = DFA.unpackEncodedString(DFA43_acceptS); + static final short[] DFA43_special = DFA.unpackEncodedString(DFA43_specialS); + static final short[][] DFA43_transition; + + static { + int numStates = DFA43_transitionS.length; + DFA43_transition = new short[numStates][]; + for (int i=0; i fuzzy )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA43_20 = input.LA(1); + + + int index43_20 = input.index(); + input.rewind(); + s = -1; + if ( (synpred10_FTS()) ) {s = 22;} + + else if ( (true) ) {s = 21;} + + + input.seek(index43_20); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 43, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA44_eotS = + "\27\uffff"; + static final String DFA44_eofS = + "\27\uffff"; + static final String DFA44_minS = + "\1\51\1\61\22\uffff\1\0\2\uffff"; + static final String DFA44_maxS = + "\1\111\1\105\22\uffff\1\0\2\uffff"; + static final String DFA44_acceptS = + "\2\uffff\22\2\1\uffff\1\2\1\1"; + static final String DFA44_specialS = + "\24\uffff\1\0\2\uffff}>"; + static final String[] DFA44_transitionS = { + "\1\22\1\7\1\23\1\21\1\5\2\uffff\1\1\1\12\1\2\1\uffff\1\14\1"+ + "\15\4\12\1\10\1\16\1\12\1\13\1\uffff\1\17\1\20\4\uffff\1\13"+ + "\1\6\1\3\1\4\1\11", + "\1\24\4\uffff\10\25\7\uffff\1\25", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "" + }; + + static final short[] DFA44_eot = DFA.unpackEncodedString(DFA44_eotS); + static final short[] DFA44_eof = DFA.unpackEncodedString(DFA44_eofS); + static final char[] DFA44_min = DFA.unpackEncodedStringToUnsignedChars(DFA44_minS); + static final char[] DFA44_max = DFA.unpackEncodedStringToUnsignedChars(DFA44_maxS); + static final short[] DFA44_accept = DFA.unpackEncodedString(DFA44_acceptS); + static final short[] DFA44_special = DFA.unpackEncodedString(DFA44_specialS); + static final short[][] DFA44_transition; + + static { + int numStates = DFA44_transitionS.length; + DFA44_transition = new short[numStates][]; + for (int i=0; i slop )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA44_20 = input.LA(1); + + + int index44_20 = input.index(); + input.rewind(); + s = -1; + if ( (synpred11_FTS()) ) {s = 22;} + + else if ( (true) ) {s = 21;} + + + input.seek(index44_20); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 44, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA45_eotS = + "\27\uffff"; + static final String DFA45_eofS = + "\27\uffff"; + static final String DFA45_minS = + "\1\51\1\61\22\uffff\1\0\2\uffff"; + static final String DFA45_maxS = + "\1\111\1\105\22\uffff\1\0\2\uffff"; + static final String DFA45_acceptS = + "\2\uffff\22\2\1\uffff\1\2\1\1"; + static final String DFA45_specialS = + "\24\uffff\1\0\2\uffff}>"; + static final String[] DFA45_transitionS = { + "\1\22\1\7\1\23\1\21\1\5\2\uffff\1\1\1\12\1\2\1\uffff\1\14\1"+ + "\15\4\12\1\10\1\16\1\12\1\13\1\uffff\1\17\1\20\4\uffff\1\13"+ + "\1\6\1\3\1\4\1\11", + "\1\24\4\uffff\6\25\1\24\1\25\7\uffff\1\25", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\uffff", + "", + "" + }; + + static final short[] DFA45_eot = DFA.unpackEncodedString(DFA45_eotS); + static final short[] DFA45_eof = DFA.unpackEncodedString(DFA45_eofS); + static final char[] DFA45_min = DFA.unpackEncodedStringToUnsignedChars(DFA45_minS); + static final char[] DFA45_max = DFA.unpackEncodedStringToUnsignedChars(DFA45_maxS); + static final short[] DFA45_accept = DFA.unpackEncodedString(DFA45_acceptS); + static final short[] DFA45_special = DFA.unpackEncodedString(DFA45_specialS); + static final short[][] DFA45_transition; + + static { + int numStates = DFA45_transitionS.length; + DFA45_transition = new short[numStates][]; + for (int i=0; i fuzzy )?"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA45_20 = input.LA(1); + + + int index45_20 = input.index(); + input.rewind(); + s = -1; + if ( (synpred12_FTS()) ) {s = 22;} + + else if ( (true) ) {s = 21;} + + + input.seek(index45_20); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 45, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA47_eotS = + "\104\uffff"; + static final String DFA47_eofS = + "\1\4\15\uffff\1\42\61\uffff\1\42\3\uffff"; + static final String DFA47_minS = + "\1\51\15\uffff\1\51\13\uffff\1\51\1\0\4\uffff\2\0\1\uffff\1\0\11"+ + "\uffff\1\51\22\uffff\1\51\3\uffff"; + static final String DFA47_maxS = + "\1\111\15\uffff\1\111\13\uffff\1\111\1\0\4\uffff\2\0\1\uffff\1"+ + "\0\11\uffff\1\111\22\uffff\1\111\3\uffff"; + static final String DFA47_acceptS = + "\1\uffff\15\2\1\uffff\13\2\2\uffff\4\2\2\uffff\1\2\1\uffff\11\2"+ + "\1\uffff\14\2\1\1\5\2\1\uffff\3\2"; + static final String DFA47_specialS = + "\32\uffff\1\1\1\4\4\uffff\1\3\1\2\1\uffff\1\0\40\uffff}>"; + static final String[] DFA47_transitionS = { + "\1\27\1\7\1\30\1\25\1\5\1\26\1\uffff\1\21\1\14\1\1\1\uffff"+ + "\1\17\1\20\1\12\3\14\1\10\1\22\1\14\1\16\1\uffff\1\23\1\24\2"+ + "\uffff\1\13\1\15\1\31\1\6\1\2\1\3\1\11", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\27\1\7\1\30\1\32\1\5\1\26\1\uffff\1\34\1\43\1\35\1\uffff"+ + "\1\17\1\20\1\40\3\43\1\33\1\41\1\43\1\31\1\uffff\1\23\1\24\2"+ + "\uffff\1\13\1\15\1\31\1\6\1\36\1\37\1\11", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\66\1\67\1\46\1\64\1\72\1\65\1\uffff\1\60\1\55\2\uffff\1"+ + "\57\1\45\1\51\3\71\1\44\1\61\1\71\1\53\1\uffff\1\62\1\63\2\uffff"+ + "\1\54\1\56\1\53\1\70\1\47\1\50\1\52", + "\1\uffff", + "", + "", + "", + "", + "\1\uffff", + "\1\uffff", + "", + "\1\uffff", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\66\1\77\1\46\1\64\1\100\1\65\1\uffff\1\74\1\71\1\75\1\uffff"+ + "\1\57\1\45\1\51\3\71\1\44\1\61\1\71\1\103\1\73\1\62\1\63\2\uffff"+ + "\1\54\1\56\1\53\1\76\1\101\1\102\1\52", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "\1\27\1\7\1\30\1\25\1\5\1\26\1\uffff\1\21\1\43\1\35\1\uffff"+ + "\1\17\1\20\1\40\3\43\1\33\1\41\1\43\1\31\1\uffff\1\23\1\24\2"+ + "\uffff\1\13\1\15\1\31\1\6\1\36\1\37\1\11", + "", + "", + "" + }; + + static final short[] DFA47_eot = DFA.unpackEncodedString(DFA47_eotS); + static final short[] DFA47_eof = DFA.unpackEncodedString(DFA47_eofS); + static final char[] DFA47_min = DFA.unpackEncodedStringToUnsignedChars(DFA47_minS); + static final char[] DFA47_max = DFA.unpackEncodedStringToUnsignedChars(DFA47_maxS); + static final short[] DFA47_accept = DFA.unpackEncodedString(DFA47_acceptS); + static final short[] DFA47_special = DFA.unpackEncodedString(DFA47_specialS); + static final short[][] DFA47_transition; + + static { + int numStates = DFA47_transitionS.length; + DFA47_transition = new short[numStates][]; + for (int i=0; i proximityGroup ftsFieldGroupProximityTerm )+"; + } + public int specialStateTransition(int s, IntStream _input) throws NoViableAltException { + TokenStream input = (TokenStream)_input; + int _s = s; + switch ( s ) { + case 0 : + int LA47_35 = input.LA(1); + + + int index47_35 = input.index(); + input.rewind(); + s = -1; + if ( (synpred13_FTS()) ) {s = 58;} + + else if ( (true) ) {s = 57;} + + + input.seek(index47_35); + if ( s>=0 ) return s; + break; + case 1 : + int LA47_26 = input.LA(1); + + + int index47_26 = input.index(); + input.rewind(); + s = -1; + if ( (LA47_26==NOT) ) {s = 36;} + + else if ( (LA47_26==FTSPHRASE) ) {s = 37;} + + else if ( (LA47_26==MINUS) ) {s = 38;} + + else if ( (LA47_26==AND) ) {s = 39;} + + else if ( (LA47_26==AMP) ) {s = 40;} + + else if ( (LA47_26==ID) ) {s = 41;} + + else if ( (LA47_26==EXCLAMATION) ) {s = 42;} + + else if ( (LA47_26==STAR||LA47_26==QUESTION_MARK) ) {s = 43;} + + else if ( (LA47_26==AT) ) {s = 44;} + + else if ( (LA47_26==DECIMAL_INTEGER_LITERAL) ) {s = 45;} + + else if ( (LA47_26==URI) ) {s = 46;} + + else if ( (LA47_26==EQUALS) ) {s = 47;} + + else if ( (LA47_26==TILDA) ) {s = 48;} + + else if ( (LA47_26==TO) ) {s = 49;} + + else if ( (LA47_26==LSQUARE) ) {s = 50;} + + else if ( (LA47_26==LT) ) {s = 51;} + + else if ( (LA47_26==LPAREN) ) {s = 52;} + + else if ( (LA47_26==PERCENT) ) {s = 53;} + + else if ( (LA47_26==PLUS) ) {s = 54;} + + else if ( (LA47_26==BAR) ) {s = 55;} + + else if ( (LA47_26==OR) ) {s = 56;} + + else if ( ((LA47_26>=FTSWORD && LA47_26<=FTSWILD)||LA47_26==FLOATING_POINT_LITERAL) ) {s = 57;} + + else if ( (LA47_26==RPAREN) && (synpred13_FTS())) {s = 58;} + + + input.seek(index47_26); + if ( s>=0 ) return s; + break; + case 2 : + int LA47_33 = input.LA(1); + + + int index47_33 = input.index(); + input.rewind(); + s = -1; + if ( (synpred13_FTS()) ) {s = 58;} + + else if ( (true) ) {s = 57;} + + + input.seek(index47_33); + if ( s>=0 ) return s; + break; + case 3 : + int LA47_32 = input.LA(1); + + + int index47_32 = input.index(); + input.rewind(); + s = -1; + if ( (synpred13_FTS()) ) {s = 58;} + + else if ( (true) ) {s = 57;} + + + input.seek(index47_32); + if ( s>=0 ) return s; + break; + case 4 : + int LA47_27 = input.LA(1); + + + int index47_27 = input.index(); + input.rewind(); + s = -1; + if ( (synpred13_FTS()) ) {s = 58;} + + else if ( (true) ) {s = 57;} + + + input.seek(index47_27); + if ( s>=0 ) return s; + break; + } + if (state.backtracking>0) {state.failed=true; return -1;} + NoViableAltException nvae = + new NoViableAltException(getDescription(), 47, _s, input); + error(nvae); + throw nvae; + } + } + static final String DFA54_eotS = + "\45\uffff"; + static final String DFA54_eofS = + "\6\uffff\1\21\36\uffff"; + static final String DFA54_minS = + "\1\66\1\63\1\uffff\1\54\2\uffff\1\51\36\uffff"; + static final String DFA54_maxS = + "\1\104\1\63\1\uffff\1\105\2\uffff\1\111\36\uffff"; + static final String DFA54_acceptS = + "\2\uffff\1\2\1\uffff\2\3\1\uffff\5\3\1\1\30\3"; + static final String DFA54_specialS = + "\45\uffff}>"; + static final String[] DFA54_transitionS = { + "\1\1\15\uffff\1\2", + "\1\3", + "", + "\1\4\4\uffff\1\7\3\uffff\1\5\1\6\3\7\2\10\1\7\1\10\1\uffff"+ + "\1\11\1\12\4\uffff\1\10", + "", + "", + "\1\43\1\24\1\44\1\41\1\22\1\42\1\uffff\1\15\1\31\1\16\1\14"+ + "\1\34\1\35\1\27\3\31\1\25\1\36\1\31\1\33\1\13\1\37\1\40\2\uffff"+ + "\1\30\1\32\1\33\1\23\1\17\1\20\1\26", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA54_eot = DFA.unpackEncodedString(DFA54_eotS); + static final short[] DFA54_eof = DFA.unpackEncodedString(DFA54_eofS); + static final char[] DFA54_min = DFA.unpackEncodedStringToUnsignedChars(DFA54_minS); + static final char[] DFA54_max = DFA.unpackEncodedStringToUnsignedChars(DFA54_maxS); + static final short[] DFA54_accept = DFA.unpackEncodedString(DFA54_acceptS); + static final short[] DFA54_special = DFA.unpackEncodedString(DFA54_specialS); + static final short[][] DFA54_transition; + + static { + int numStates = DFA54_transitionS.length; + DFA54_transition = new short[numStates][]; + for (int i=0; i"; + static final String[] DFA56_transitionS = { + "\1\1\15\uffff\1\2", + "\1\32\1\12\1\33\1\30\1\10\1\31\1\34\1\24\1\17\1\4\1\3\1\22"+ + "\1\23\1\15\3\17\1\13\1\25\1\17\1\21\1\uffff\1\26\1\27\2\uffff"+ + "\1\16\1\20\1\21\1\11\1\5\1\6\1\14", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + }; + + static final short[] DFA56_eot = DFA.unpackEncodedString(DFA56_eotS); + static final short[] DFA56_eof = DFA.unpackEncodedString(DFA56_eofS); + static final char[] DFA56_min = DFA.unpackEncodedStringToUnsignedChars(DFA56_minS); + static final char[] DFA56_max = DFA.unpackEncodedStringToUnsignedChars(DFA56_maxS); + static final short[] DFA56_accept = DFA.unpackEncodedString(DFA56_acceptS); + static final short[] DFA56_special = DFA.unpackEncodedString(DFA56_specialS); + static final short[][] DFA56_transition; + + static { + int numStates = DFA56_transitionS.length; + DFA56_transition = new short[numStates][]; + for (int i=0; i columns, Connective defaultConnective, Connective defaultFieldConnective, Map templates, String defaultField) + Map columnMap, FTSParser.Mode mode, Connective defaultFieldConnective, Map templates, String defaultField) { // TODO: Decode sql escape for '' should do in CMIS layer @@ -84,7 +84,7 @@ public class FTSQueryParser FTSLexer lexer = new FTSLexer(cs); CommonTokenStream tokens = new CommonTokenStream(lexer); parser = new FTSParser(tokens); - parser.setDefaultConjunction(defaultConnective == Connective.AND ? true : false); + parser.setMode(mode); parser.setDefaultFieldConjunction(defaultFieldConnective == Connective.AND ? true : false); CommonTree ftsNode = (CommonTree) parser.ftsQuery().getTree(); templateTrees.put(name, ftsNode); @@ -110,10 +110,10 @@ public class FTSQueryParser FTSLexer lexer = new FTSLexer(cs); CommonTokenStream tokens = new CommonTokenStream(lexer); parser = new FTSParser(tokens); - parser.setDefaultConjunction(defaultConnective == Connective.AND ? true : false); + parser.setMode(mode); parser.setDefaultFieldConjunction(defaultFieldConnective == Connective.AND ? true : false); CommonTree ftsNode = (CommonTree) parser.ftsQuery().getTree(); - return buildFTSConnective(null, ftsNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + return buildFTSConnective(null, ftsNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); } catch (RecognitionException e) { @@ -130,7 +130,7 @@ public class FTSQueryParser } static private Constraint buildFTSConnective(CommonTree fieldReferenceNode, CommonTree node, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns, Map templateTrees, String defaultField) + Selector selector, Map columnMap, Map templateTrees, String defaultField) { Connective connective; switch (node.getType()) @@ -159,41 +159,41 @@ public class FTSQueryParser case FTSParser.FIELD_DISJUNCTION: case FTSParser.CONJUNCTION: case FTSParser.FIELD_CONJUNCTION: - constraint = buildFTSConnective(fieldReferenceNode, subNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + constraint = buildFTSConnective(fieldReferenceNode, subNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); setBoost(constraint, subNode); break; case FTSParser.NEGATION: case FTSParser.FIELD_NEGATION: testNode = (CommonTree) subNode.getChild(0); - constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); constraint.setOccur(Occur.EXCLUDE); setBoost(constraint, subNode); break; case FTSParser.DEFAULT: case FTSParser.FIELD_DEFAULT: testNode = (CommonTree) subNode.getChild(0); - constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); constraint.setOccur(Occur.DEFAULT); setBoost(constraint, subNode); break; case FTSParser.MANDATORY: case FTSParser.FIELD_MANDATORY: testNode = (CommonTree) subNode.getChild(0); - constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); constraint.setOccur(Occur.MANDATORY); setBoost(constraint, subNode); break; case FTSParser.OPTIONAL: case FTSParser.FIELD_OPTIONAL: testNode = (CommonTree) subNode.getChild(0); - constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); constraint.setOccur(Occur.OPTIONAL); setBoost(constraint, subNode); break; case FTSParser.EXCLUDE: case FTSParser.FIELD_EXCLUDE: testNode = (CommonTree) subNode.getChild(0); - constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + constraint = buildFTSTest(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); constraint.setOccur(Occur.EXCLUDE); setBoost(constraint, subNode); break; @@ -236,7 +236,7 @@ public class FTSQueryParser } static private Constraint buildFTSTest(CommonTree fieldReferenceNode, CommonTree argNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns, Map templateTrees, String defaultField) + Selector selector, Map columnMap, Map templateTrees, String defaultField) { CommonTree testNode = argNode; // Check for template replacement @@ -244,14 +244,14 @@ public class FTSQueryParser PropertyArgument parg = null; if (fieldReferenceNode != null) { - parg = buildFieldReference("", fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + parg = buildFieldReference("", fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); } else { CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - parg = buildFieldReference(FTSRange.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + parg = buildFieldReference(FTSRange.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); } } if (parg != null) @@ -282,7 +282,7 @@ public class FTSQueryParser case FTSParser.FIELD_DISJUNCTION: case FTSParser.CONJUNCTION: case FTSParser.FIELD_CONJUNCTION: - return buildFTSConnective(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + return buildFTSConnective(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); case FTSParser.TERM: case FTSParser.FG_TERM: termNode = testNode.getChild(0); @@ -291,11 +291,13 @@ public class FTSQueryParser switch (termNode.getType()) { case FTSParser.FTSPRE: - return buildPrefixTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildPrefixTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); case FTSParser.FTSWILD: - return buildWildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + case FTSParser.STAR: + case FTSParser.QUESTION_MARK: + return buildWildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); default: - return buildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); } } else @@ -304,9 +306,11 @@ public class FTSQueryParser { case FTSParser.FTSPRE: case FTSParser.FTSWILD: + case FTSParser.STAR: + case FTSParser.QUESTION_MARK: throw new FTSQueryException("Fuzzy queries are not supported with wild cards"); default: - return buildFuzzyTerm(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildFuzzyTerm(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); } } case FTSParser.EXACT_TERM: @@ -317,11 +321,13 @@ public class FTSQueryParser switch (termNode.getType()) { case FTSParser.FTSPRE: - return buildPrefixTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildPrefixTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); case FTSParser.FTSWILD: - return buildWildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + case FTSParser.STAR: + case FTSParser.QUESTION_MARK: + return buildWildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); default: - return buildExactTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildExactTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); } } else @@ -330,14 +336,16 @@ public class FTSQueryParser { case FTSParser.FTSPRE: case FTSParser.FTSWILD: + case FTSParser.STAR: + case FTSParser.QUESTION_MARK: throw new FTSQueryException("Fuzzy queries are not supported with wild cards"); default: - return buildFuzzyTerm(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildFuzzyTerm(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); } } case FTSParser.PHRASE: case FTSParser.FG_PHRASE: - return buildPhrase(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildPhrase(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); case FTSParser.SYNONYM: case FTSParser.FG_SYNONYM: termNode = testNode.getChild(0); @@ -346,11 +354,13 @@ public class FTSQueryParser switch (termNode.getType()) { case FTSParser.FTSPRE: - return buildPrefixTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildPrefixTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); case FTSParser.FTSWILD: - return buildWildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + case FTSParser.STAR: + case FTSParser.QUESTION_MARK: + return buildWildTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); default: - return buildExpandTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildExpandTerm(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); } } else @@ -359,17 +369,19 @@ public class FTSQueryParser { case FTSParser.FTSPRE: case FTSParser.FTSWILD: + case FTSParser.STAR: + case FTSParser.QUESTION_MARK: throw new FTSQueryException("Fuzzy queries are not supported with wild cards"); default: - return buildFuzzyTerm(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildFuzzyTerm(fuzzy, fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); } } case FTSParser.PROXIMITY: case FTSParser.FG_PROXIMITY: - return buildProximity(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildProximity(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); case FTSParser.RANGE: case FTSParser.FG_RANGE: - return buildRange(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columns); + return buildRange(fieldReferenceNode, testNode, factory, functionEvaluationContext, selector, columnMap); case FTSParser.FIELD_GROUP: if (fieldReferenceNode != null) { @@ -377,14 +389,14 @@ public class FTSQueryParser } CommonTree newFieldReferenceNode = (CommonTree) testNode.getChild(0); CommonTree fieldExperssion = (CommonTree) testNode.getChild(1); - return buildFTSConnective(newFieldReferenceNode, fieldExperssion, factory, functionEvaluationContext, selector, columns, templateTrees, defaultField); + return buildFTSConnective(newFieldReferenceNode, fieldExperssion, factory, functionEvaluationContext, selector, columnMap, templateTrees, defaultField); default: throw new FTSQueryException("Unsupported FTS option " + testNode.getText()); } } static private Constraint buildRange(CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns) + Selector selector, Map columnMap) { String functionName = FTSRange.NAME; Function function = factory.getFunction(functionName); @@ -399,7 +411,7 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSRange.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSRange.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -407,7 +419,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSRange.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSRange.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -415,7 +427,7 @@ public class FTSQueryParser } static private Constraint buildProximity(CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns) + Selector selector, Map columnMap) { String functionName = FTSProximity.NAME; Function function = factory.getFunction(functionName); @@ -431,14 +443,14 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSProximity.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSProximity.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } return factory.createFunctionalConstraint(function, functionArguments); } static private Constraint buildExpandTerm(CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns) + Selector selector, Map columnMap) { String functionName = FTSTerm.NAME; Function function = factory.getFunction(functionName); @@ -449,7 +461,7 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -457,7 +469,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -465,7 +477,7 @@ public class FTSQueryParser } static private Constraint buildPhrase(Float fuzzy, CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, - FunctionEvaluationContext functionEvaluationContext, Selector selector, ArrayList columns) + FunctionEvaluationContext functionEvaluationContext, Selector selector, Map columnMap) { String functionName = FTSPhrase.NAME; Function function = factory.getFunction(functionName); @@ -479,7 +491,7 @@ public class FTSQueryParser } if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSPhrase.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSPhrase.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -487,7 +499,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSPhrase.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSPhrase.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -495,7 +507,7 @@ public class FTSQueryParser } static private Constraint buildExactTerm(CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns) + Selector selector, Map columnMap) { String functionName = FTSTerm.NAME; Function function = factory.getFunction(functionName); @@ -506,7 +518,7 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -514,7 +526,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -522,7 +534,7 @@ public class FTSQueryParser } static private Constraint buildTerm(CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns) + Selector selector, Map columnMap) { String functionName = FTSTerm.NAME; Function function = factory.getFunction(functionName); @@ -533,7 +545,7 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -541,7 +553,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -828,7 +840,7 @@ public class FTSQueryParser } static private Constraint buildFuzzyTerm(Float fuzzy, CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, - FunctionEvaluationContext functionEvaluationContext, Selector selector, ArrayList columns) + FunctionEvaluationContext functionEvaluationContext, Selector selector, Map columnMap) { String functionName = FTSFuzzyTerm.NAME; Function function = factory.getFunction(functionName); @@ -839,7 +851,7 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSFuzzyTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSFuzzyTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -847,7 +859,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSFuzzyTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSFuzzyTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -855,7 +867,7 @@ public class FTSQueryParser } static private Constraint buildWildTerm(CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns) + Selector selector, Map columnMap) { String functionName = FTSWildTerm.NAME; Function function = factory.getFunction(functionName); @@ -864,7 +876,7 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSWildTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSWildTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -872,7 +884,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSWildTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSWildTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -880,7 +892,7 @@ public class FTSQueryParser } static private Constraint buildPrefixTerm(CommonTree fieldReferenceNode, CommonTree testNode, QueryModelFactory factory, FunctionEvaluationContext functionEvaluationContext, - Selector selector, ArrayList columns) + Selector selector, Map columnMap) { String functionName = FTSPrefixTerm.NAME; Function function = factory.getFunction(functionName); @@ -889,7 +901,7 @@ public class FTSQueryParser functionArguments.put(larg.getName(), larg); if (fieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSPrefixTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSPrefixTerm.ARG_PROPERTY, fieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } else @@ -897,7 +909,7 @@ public class FTSQueryParser CommonTree specifiedFieldReferenceNode = findFieldReference(testNode); if (specifiedFieldReferenceNode != null) { - PropertyArgument parg = buildFieldReference(FTSPrefixTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columns); + PropertyArgument parg = buildFieldReference(FTSPrefixTerm.ARG_PROPERTY, specifiedFieldReferenceNode, factory, functionEvaluationContext, selector, columnMap); functionArguments.put(parg.getName(), parg); } } @@ -933,16 +945,16 @@ public class FTSQueryParser } static public PropertyArgument buildFieldReference(String argumentName, CommonTree fieldReferenceNode, QueryModelFactory factory, - FunctionEvaluationContext functionEvaluationContext, Selector selector, ArrayList columns) + FunctionEvaluationContext functionEvaluationContext, Selector selector, Map columnMap) { if (fieldReferenceNode.getType() != FTSParser.FIELD_REF) { throw new FTSQueryException("Not column ref ..." + fieldReferenceNode.getText()); } String fieldName = getText(fieldReferenceNode.getChild(0)); - if (columns != null) + if (columnMap != null) { - for (Column column : columns) + for (Column column : columnMap.values()) { if (column.getAlias().equals(fieldName)) { @@ -972,6 +984,7 @@ public class FTSQueryParser String alias = ""; if (selector != null) { + functionEvaluationContext.checkFieldApplies(selector, fieldName); alias = selector.getAlias(); } diff --git a/source/java/org/alfresco/repo/search/impl/parsers/FTSTest.java b/source/java/org/alfresco/repo/search/impl/parsers/FTSTest.java index 65f6355bee..e1d783e651 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/FTSTest.java +++ b/source/java/org/alfresco/repo/search/impl/parsers/FTSTest.java @@ -46,7 +46,7 @@ public class FTSTest extends TestCase CharStream input = new ANTLRInputStream(modelStream); - gUnitExecutor executer = new gUnitExecutor(parse(input)); + gUnitExecutor executer = new gUnitExecutor(parse(input), "FTS"); System.out.print(executer.execTest()); // unit test result diff --git a/source/java/org/alfresco/repo/search/impl/parsers/cmis_test.gunit b/source/java/org/alfresco/repo/search/impl/parsers/cmis_test.gunit index 031bbce2d5..0a9089d1ca 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/cmis_test.gunit +++ b/source/java/org/alfresco/repo/search/impl/parsers/cmis_test.gunit @@ -7,6 +7,550 @@ gunit CMIS; /** Parser */ query: -"SELECT * from DOCUMENT D JION DOCUMENT DD ON (D.ID = DD.ID)" FAIL +"SELECT * FROM cmis:document" OK +"SELECT * FROM cmis:document, cmis:folder" FAIL +"SELECT SCORE() FROM cmis:document" OK +"SELECT from FROM cmis:document" FAIL +"SELECT DOCUMENT.Name FROM cmis:document" OK +"SELECT cmis:name, cmis:typeId FROM cmis:document" OK +"SELECT document.* FROM cmis:document" OK +"SELECT cmis:name,, cmis:typeId FROM cmis:document" FAIL +"SELECT * FROM *" FAIL + +"SELECT * from FOLDER JOIN RELATIONSHIP ON FOLDER.ID = RELATIONSHIP.ID" OK +"SELECT * from FOLDER F JOIN RELATIONSHIP RL ON F.ID = RL.ID" OK +"SELECT * from DOCUMENT D JOIN DOCUMENT DD ON (D.ID = DD.ID)" FAIL +"SELECT * from FOLDER F JOIN RELATIONSHIP RL ON F.ID = RL.ID" OK +"SELECT * from (FOLDER F JOIN RELATIONSHIP RL ON F.ID = RL.ID)" OK +"SELECT * from ((FOLDER F JOIN RELATIONSHIP RL ON F.ID = RL.ID))" OK +"SELECT * from (FOLDER)" FAIL +"SELECT * from cmis:folder F INNER JOIN cmis:relationship RL ON F.ID = RL.ID" OK +"SELECT * from cmis:folder F LEFT JOIN cmis:relationship RL ON F.ID = RL.ID" OK +"SELECT * from FOLDER F LEFT OUTER JOIN RELATIONSHIP RL ON F.ID = RL.ID" OK +"SELECT * from FOLDER F LEFT INNER JOIN RELATIONSHIP RL ON F.ID = RL.ID" FAIL + +"SELECT * FROM cmis:document WHERE cmis:name='Test'" OK +"SELECT * FROM FOLDER WHERE COUNTER=7" OK +"SELECT * FROM FOLDER WHERE 7=COUNTER" FAIL +"SELECT * FROM FOLDER WHERE COUNTER IS NULL" OK +"SELECT * FROM FOLDER WHERE COUNTER IS NOT NULL" OK +"SELECT * FROM FOLDER WHERE COUNTER IS 5" FAIL +"SELECT * FROM FOLDER WHERE NAME LIKE '%te_t'" OK +"SELECT * FROM FOLDER WHERE COUNTER LIKE 5" FAIL +"SELECT * FROM FOLDER WHERE ANY NAME IN ('test', 'mail', 2)" OK +"SELECT * FROM FOLDER WHERE CONTAINS ('test -mail')" OK +"SELECT * FROM FOLDER WHERE IN_FOLDER('folderId')" OK +"SELECT * FROM FOLDER WHERE IN_TREE('folderId')" OK +"SELECT cmis:objectId FROM test:document where cmis:name='Test' AND counter>=22" OK +"SELECT cmis:objectId FROM test:document where (cmis:name='Test' AND counter<>22) OR CONTAINS('test')" OK +"SELECT cmis:objectId FROM test:document where ((cmis:name='Test' AND counter<=22) OR (CONTAINS('test') AND cmis:createdBy NOT LIKE 'J%')) AND (bill IS NULL)" OK + +"SELECT * FROM cmis:document WHERE cmis:name='Test' ORDER BY cmis:name" OK +"SELECT * FROM cmis:document WHERE cmis:name='Test' ORDER BY cmis:name ASC, cmis:type DESC" OK +"SELECT * FROM cmis:document WHERE cmis:name='Test' ORDER BY first lines" FAIL + +"SELECT Y.*, X.PROPERTY_ADDRESS FROM POLICY AS X JOIN CLAIMS AS Y ON X.POLICY_NUM = Y.POLICY_NUM WHERE ( ( Y.DAMAGE_ESTIMATES = 10000 OR cmis:createdBy NOT LIKE 'J%') AND (X.MAIN IS NULL) ) ORDER BY cmis:name ASC, cmis:type DESC" OK +"SELECT Name, Make FROM POLICY WHERE (MAKE = 'buick' ) OR ( ANY FEATURES IN ('NAVIGATION SYSTEM', 'SATELLITE RADIO', 'MP3') ) OR IN_FOLDER('folderId')" OK +"SELECT DOC.NAME, DOC.TYPE, P.Info, SCORE() FROM cmis:document AS DOC LEFT OUTER JOIN POLICY P ON P.DOC_ID = DOC.ID WHERE (DOC.NAME LIKE 'Test%' AND P.INFO <> 'dual' AND DOC.NUM >=44) OR CONTAINS('test') OR DOC.NAME IS NOT NULL ORDER BY cmis:name ASC" OK +"SELECT Name, SCORE() FROM POLICY JOIN DOCUMENT WHERE (MAKE = 'buick' ) OR (FEATURES IS ('NAVIGATION SYSTEM', 'MP3') )" FAIL +selectList: +"*" OK +//"column1" OK +//"column1, column2" OK +"column1, *" FAIL +"column1,, column2" FAIL +"X.column1, Y.column2" OK +"X.*" OK +"X.1, X.Y.Z" FAIL + +"*" -> "ALL_COLUMNS" +"X.*" -> "(COLUMNS (ALL_COLUMNS X))" +//"column1, column2" -> "(COLUMNS (COLUMN (COLUMN_REF column1)) (COLUMN (COLUMN_REF column2)))" +"X.column1, Y.column2" -> "(COLUMNS (COLUMN (COLUMN_REF column1 X)) (COLUMN (COLUMN_REF column2 Y)))" +"SCORE()" -> (COLUMNS (COLUMN (FUNCTION SCORE ( )))) + +//selectSubList: +//"column1" OK + +//valueExpression: +//"column1" OK + +columnReference: +"column1" OK + +fromClause: +"FROM table1" OK +"FROM table1 T" OK +"FROM table1 AS T" OK +"FROM table1 JOIN table2 ON column1 = column2" OK +"FROM table1 JOIN table2" FAIL +"FROM table1 T1 JOIN table2 T2 ON T1.column1 = T2.column2" OK +"FROM table1 T1 LEFT JOIN table2 T2 ON T1.column1 = T2.column2" OK +"FROM table1 T1 LEFT INNER JOIN table2 T2 ON T1.column1 = T2.column2" FAIL +"FROM table1 T1 LEFT OUTER JOIN table2 T2 ON T1.column1 = T2.column2" OK +"FROM table1 T1 INNER JOIN table2 T2 ON T1.column1 = T2.column2" OK +"FROM table1 T1 LEFT OUTER JOIN table2 T2 ON T1.column1 = T2.column2 INNER JOIN table3 ON T2.column2 = table3.column2" OK +"FROM table1 T1 JOIN table2 T2 ON T1.column1 = T2.column1 JOIN table3 ON T2.column2 = table3.column2" OK +"FROM ((table1 T1 JOIN table2 T2 ON T1.column1 = T2.column1) LEFT JOIN table3 T3 ON T2.column1 = T3.column1)" OK + +"FROM table1" -> "(SOURCE (TABLE_REF table1))" +"FROM table1 AS T" -> "(SOURCE (TABLE_REF table1 T))" +"FROM table1 JOIN table2 ON column1 = column2" -> "(SOURCE (TABLE_REF table1) (JOIN (SOURCE (TABLE_REF table2)) (ON (COLUMN_REF column1) = (COLUMN_REF column2))))" +"FROM table1 LEFT OUTER JOIN table2 ON column1 = column2" -> "(SOURCE (TABLE_REF table1) (JOIN (SOURCE (TABLE_REF table2)) LEFT (ON (COLUMN_REF column1) = (COLUMN_REF column2))))" + +whereClause: +"WHERE column1 = 'value1'" OK +"WHERE 3.32 = ANY column1" OK +"WHERE column1 = value1" FAIL +"WHERE T.column1 = 'value1'" OK +"WHERE T.T.column1 = 'value1'" FAIL +"WHERE column1 = true" OK +"WHERE column1 = 3.32" OK +"WHERE column1 > 3.32" OK +"WHERE column1 >= 3.32" OK +"WHERE column1 => 3.32" FAIL +"WHERE column1 < 3.32" OK +"WHERE column1 <= 3.32" OK +"WHERE column1 =< 3.32" FAIL +"WHERE column1 <> 3.32" OK +"WHERE column1 >< 3.32" FAIL +"WHERE 2.22 < column1 < 3.32" FAIL + +"WHERE CONTAINS('test string')" OK +"WHERE CONTAINS(22)" FAIL +"WHERE IN_FOLDER('folderId')" OK +"WHERE IN_TREE('folderId')" OK +"WHERE column1 IS NULL" OK +"WHERE column1 IS NOT NULL" OK +"WHERE column1 NOT IS NULL" FAIL +"WHERE column1 LIKE 'T%'" OK +"WHERE column1 NOT LIKE 'T%'" OK +"WHERE column1 LIKE 2%" FAIL +"WHERE column1 IN (1, 2, 3)" OK +"WHERE ANY column1 IN (1, 2, 3)" OK +"WHERE column1 NOT IN (1, 2, 3)" OK +"WHERE column1 IN ('A', 'B')" OK +"WHERE column1 IN (A, B)" FAIL +"WHERE column1 IN (True)" OK + +"WHERE col1=1 AND col2=2" OK +"WHERE col1=1 OR col2=2" OK +"WHERE (col1=1 AND col2=2)" OK +"WHERE NOT (col1=1 AND col2=2)" OK +"WHERE ((col1=1 OR col2=2))" OK +"WHERE ((col1=1 OR col2=2)" FAIL +"WHERE (col1=1 AND col2=2) OR col2=3" OK +"WHERE col1=1 AND ((col2=2) OR col2=3)" OK +"WHERE (col1=1 AND (col2=2 OR col2=3)" FAIL +"WHERE NOT(col2=2) OR NOT(col2=3)" OK +"WHERE NOT(col2=2 OR col2=3)" OK +"WHERE NOT(col2=2 AND NOT(col3=3)) OR NOT(col1=1)" OK +"WHERE col4=4 AND NOT(col2=2 AND NOT(col3=3)) OR NOT(col1=1)" OK +"WHERE col4=4 AND (col2=2 NOT(col3=3)) OR NOT(col1=1)" FAIL + +"WHERE (NOT(col2 < 2.25) OR NOT CONTAINS('text')) AND col3 LIKE 'T__T'" OK +"WHERE 2 = ANY col1 OR col2 IN (2.25, 3.25) OR ((col2 IS NOT NULL OR col3 LIKE 'T%') AND IN_TREE('folder_id'))" OK +"WHERE ((NOT (col2 IS NOT NULL) OR col3 LIKE 'T%') AND CONTAINS ('TEXT')) OR (col1 >='A' AND col2 IN (2.25, 3.25))" OK + +"WHERE column1 = 'value1'" -> "(DISJUNCTION (CONJUNCTION (PRED_COMPARISON SINGLE_VALUED_PROPERTY (COLUMN_REF column1) = (STRING_LITERAL 'value1'))))" +"WHERE 'value1'= ANY column1" -> "(DISJUNCTION (CONJUNCTION (PRED_COMPARISON ANY (STRING_LITERAL 'value1') = (COLUMN_REF column1))))" +"WHERE column1 > 3.32" -> "(DISJUNCTION (CONJUNCTION (PRED_COMPARISON SINGLE_VALUED_PROPERTY (COLUMN_REF column1) > (NUMERIC_LITERAL 3.32))))" +"WHERE CONTAINS('test string')" -> "(DISJUNCTION (CONJUNCTION (PRED_FTS 'test string')))" +"WHERE IN_FOLDER('folderId')" -> "(DISJUNCTION (CONJUNCTION (PRED_CHILD (STRING_LITERAL 'folderId'))))" +"WHERE IN_TREE('folderId')" -> "(DISJUNCTION (CONJUNCTION (PRED_DESCENDANT (STRING_LITERAL 'folderId'))))" +"WHERE column1 IS NULL" -> "(DISJUNCTION (CONJUNCTION (PRED_EXISTS (COLUMN_REF column1) NOT)))" +"WHERE column1 LIKE 'T%'" -> "(DISJUNCTION (CONJUNCTION (PRED_LIKE (COLUMN_REF column1) (STRING_LITERAL 'T%'))))" +"WHERE column1 IN (1, 2)" -> "(DISJUNCTION (CONJUNCTION (PRED_IN SINGLE_VALUED_PROPERTY (COLUMN_REF column1) (LIST (NUMERIC_LITERAL 1) (NUMERIC_LITERAL 2)))))" +"WHERE NOT(col1=1)" -> "(DISJUNCTION (CONJUNCTION (NEGATION (DISJUNCTION (CONJUNCTION (PRED_COMPARISON SINGLE_VALUED_PROPERTY (COLUMN_REF col1) = (NUMERIC_LITERAL 1)))))))" +"WHERE col1=1 AND col2=2" -> "(DISJUNCTION (CONJUNCTION (PRED_COMPARISON SINGLE_VALUED_PROPERTY (COLUMN_REF col1) = (NUMERIC_LITERAL 1)) (PRED_COMPARISON SINGLE_VALUED_PROPERTY (COLUMN_REF col2) = (NUMERIC_LITERAL 2))))" +"WHERE col1=1 OR col2=2" -> "(DISJUNCTION (CONJUNCTION (PRED_COMPARISON SINGLE_VALUED_PROPERTY (COLUMN_REF col1) = (NUMERIC_LITERAL 1))) (CONJUNCTION (PRED_COMPARISON SINGLE_VALUED_PROPERTY (COLUMN_REF col2) = (NUMERIC_LITERAL 2))))" + +orderByClause: +"ORDER BY column1" OK +"ORDER BY ASC" FAIL +"ORDER BY column1 ASC" OK +"ORDER BY column1 DESC" OK +"ORDER BY column1 value" FAIL +"ORDER BY column1, column2" OK +"ORDER BY column1, column2 ASC" OK +"ORDER BY column1 ASC, column2 DESC" OK + +"ORDER BY column1" -> "(ORDER (SORT_SPECIFICATION (COLUMN_REF column1) ASC))" +"ORDER BY column1 ASC, column2 DESC" -> "(ORDER (SORT_SPECIFICATION (COLUMN_REF column1) ASC) (SORT_SPECIFICATION (COLUMN_REF column2) DESC))" + +datetimeLiteral: +"TIMESTAMP '2009-12-09T13:22:15.250'" OK +"TIMESTAMP '2009-12-09T13:22:15.250Z'" OK +"TIMESTAMP '2009-12-09T13:22:15.250+02:30'" OK +"TIMESTAMP '2009-12-09T13:22:15.250-02:30'" OK +/* Should fail as " are not valid quotes in CMIS or SQL */ +"TIMESTAMP \"2009-12-09T13:22:15.250-02:30\"" FAIL +/* Not checked at parse time */ +"TIMESTAMP '2009-12-9T13:22:15.250+2:30'" OK +/* The date format is checked during query processing and not parsing */ +"TIMESTAMP 'Thu Dec 10 16:19:53 EET 2009'" OK + +textSearchExpression: +"'word1'" OK +"'word1 -word2'" OK +"'word1 -word2 word3'" OK +"'word1 -word2 OR word3'" OK +/** OR is not treated as a special keyword */ +"'word1-word2 OR OR word3'" OK +/** Spec spcifies minimum */ +"'word1-word2 \"word1 OR word3\"'" OK +"'word1 \"phrase_word1 phrase_word2\"'" OK +/** "'word1 'phrase_word1 phrase_word2''" FAIL this failsas invalid */ + + +/** Lexer */ + +QUOTED_STRING: +"'test string'" OK +"test string" FAIL +"'string\\''" OK +"''test string'" FAIL +"'cmis:name:\\'Folder 9\\\\\\'\\''" OK + +SELECT: +"SELECT" OK +"sElECt" OK +"SeLECT" OK +"seLEct" OK +"SELect" OK +"SElECt" OK +"seLect" OK +"sElEcT" OK +"select" OK + +AS: +"AS" OK +"aS" OK +"As" OK +"as" OK + +FROM: +"FROM" OK +"fRom" OK +"FROM" OK +"FroM" OK +"fROM" OK +"FRoM" OK +"from" OK + +JOIN: +"JOIN" OK +"JOiN" OK +"join" OK +"JoIN" OK +"jOiN" OK +"Join" OK +"join" OK + +INNER: +"INNER" OK +"innEr" OK +"iNNer" OK +"INnER" OK +"iNnEr" OK +"InNer" OK +"InneR" OK +"inner" OK + +LEFT: +"LEFT" OK +"leFt" OK +"lEfT" OK +"LEft" OK +"lefT" OK +"Left" OK +"left" OK + +OUTER: +"OUTER" OK +"oUtEr" OK +"OUTEr" OK +"outER" OK +"OUtEr" OK +"OutEr" OK +"oUTer" OK +"outer" OK + +ON: +"ON" OK +"oN" OK +"On" OK +"on" OK + +WHERE: +"WHERE" OK +"wheRe" OK +"WHere" OK +"WhERE" OK +"WHERe" OK +"WHErE" OK +"whEre" OK +"where" OK + +OR: +"OR" OK +"oR" OK +"Or" OK +"or" OK + +AND: +"AND" OK +"ANd" OK +"AnD" OK +"aNd" OK +"And" OK +"and" OK + +NOT: +"NOT" OK +"NoT" OK +"nOT" OK +"Not" OK +"noT" OK +"not" OK + +IN: +"IN" OK +"iN" OK +"In" OK +"in" OK + +LIKE: +"LIKE" OK +"LIkE" OK +"lIke" OK +"lIKe" OK +"liKE" OK +"lIkE" OK +"like" OK + +IS: +"IS" OK +"iS" OK +"Is" OK +"is" OK + +NULL: +"NULL" OK +"nulL" OK +"NUll" OK +"NuLl" OK +"nULL" OK +"NULL" OK +"null" OK + +ANY: +"ANY" OK +"aNy" OK +"AnY" OK +"aNY" OK +"Any" OK +"any" OK + +CONTAINS: +"CONTAINS" OK +"ContAINS" OK +"coNtainS" OK +"coNTainS" OK +"cONTAiNS" OK +"ContAIns" OK +"ConTains" OK +"CONTaiNS" OK +"CONtaiNs" OK +"COnTAiNS" OK +"contains" OK + +IN_FOLDER: +"IN_FOLDER" OK +"In_FoldeR" OK +"In_FoldEr" OK +"IN_fOlDeR" OK +"in_FOLdeR" OK +"iN_fOLder" OK +"IN_FOlder" OK +"iN_FOLdER" OK +"in_fOLdEr" OK +"iN_FOLDer" OK +"in_FOLdER" OK +"in_folder" OK + +IN_TREE: +"IN_TREE" OK +"IN_TRee" OK +"In_tREE" OK +"IN_tRee" OK +"in_trEe" OK +"In_TReE" OK +"IN_TRee" OK +"In_tRee" OK +"iN_treE" OK +"in_tree" OK + +ORDER: +"ORDER" OK +"Order" OK +"ORDeR" OK +"OrdeR" OK +"orDER" OK +"oRdEr" OK +"ORder" OK +"order" OK + +BY: +"BY" OK +"bY" OK +"By" OK +"by" OK + +ASC: +"ASC" OK +"asC" OK +"Asc" OK +"ASc" OK +"aSC" OK +"asc" OK + +DESC: +"DESC" OK +"deSC" OK +"DEsC" OK +"dESc" OK +"DeSC" OK +"dESC" OK +"desc" OK + +TIMESTAMP: +"TIMESTAMP" OK +"tiMEsTaMP" OK +"TImESTaMp" OK +"tImesTAMP" OK +"TImEstaMp" OK +"timesTAMp" OK +"TIMEsTaMP" OK +"tiMESTAMP" OK +"timeSTamp" OK +"tIMESTamp" OK +"tImEsTAmp" OK +"timestamp" OK + +TRUE: +"TRUE" OK +"tRUE" OK +"True" OK +"TRUE" OK +"truE" OK +"tRUe" OK +"true" OK + +FALSE: +"FALSE" OK +"fALsE" OK +"FAlSE" OK +"fAlSe" OK +"FalSe" OK +"fALSE" OK +"fALsE" OK +"false" OK + +SCORE: +"SCORE" OK +"SCore" OK +"score" OK +"ScOrE" OK +"scOrE" OK +"sCore" OK +"SCoRe" OK +"score" OK + +LPAREN: +"(" OK + +RPAREN: +")" OK + +STAR: +"*" OK + +COMMA: +"," OK + +DOTSTAR: +".*" OK + +DOT: +"." OK + +DOTDOT: +".." OK + +EQUALS: +"=" OK + +TILDA: +"~" OK + +NOTEQUALS: +"<>" OK + +GREATERTHAN: +">" OK + +LESSTHAN: +"<" OK + +GREATERTHANOREQUALS: +">=" OK + +LESSTHANOREQUALS: +"<=" OK + +COLON: +":" OK + +DOUBLE_QUOTE: +"\"" OK + +ID: +"test_id" OK +"" FAIL +"a" OK +"_" OK +"$" FAIL +"_$" OK +"#" FAIL +"_#" OK +"1" FAIL +"A1" OK +"abcABC_abcABC0123_:$#" OK + +DECIMAL_INTEGER_LITERAL: +"0" OK +"-1" OK +"1" OK +"01" FAIL +"10" OK +"-10" OK +"+150" OK + +FLOATING_POINT_LITERAL: +"0" FAIL +"1.." FAIL +"1." OK +"-1.0" OK +"1..0" FAIL +"1...." FAIL +"1.0.." FAIL +"-1.02" OK +"1e10" OK +"1.2e-12" OK +"0.9E-9" OK +"+123.123456" OK + + \ No newline at end of file diff --git a/source/java/org/alfresco/repo/search/impl/parsers/fts_test.gunit b/source/java/org/alfresco/repo/search/impl/parsers/fts_test.gunit index 6578bd8167..74fd3a6bc5 100644 --- a/source/java/org/alfresco/repo/search/impl/parsers/fts_test.gunit +++ b/source/java/org/alfresco/repo/search/impl/parsers/fts_test.gunit @@ -7,19 +7,19 @@ gunit FTS; /** Parser */ ftsQuery: -"\"zebra\"" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (PHRASE \"zebra\")))))" -"one and cm:name:two and cm_name:three and {http://www.alfresco.org/model/content/1.0}name:\"four\" seven * eight \"nine * ten\"" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM one)) (DEFAULT (TERM two (FIELD_REF name (PREFIX cm)))) (DEFAULT (TERM three (FIELD_REF cm_name))) (DEFAULT (PHRASE \"four\" (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0})))))) (DISJUNCTION (CONJUNCTION (DEFAULT (PROXIMITY seven PROXIMITY eight)))) (DISJUNCTION (CONJUNCTION (DEFAULT (PHRASE \"nine * ten\")))))" -"1..2" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (RANGE INCLUSIVE 1 2 INCLUSIVE)))))" -"test:flag:true AND %test:field" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM true (FIELD_REF flag (PREFIX test)))) (DEFAULT (TEMPLATE (FIELD_REF field (PREFIX test)))))))" -"test:flag:true AND %NEST" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM true (FIELD_REF flag (PREFIX test)))) (DEFAULT (TEMPLATE (FIELD_REF NEST))))))" -"test:flag:true AND %(NEST,test:field, test_field1, {http://www.alfresco.org/model/content/1.0}name)" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM true (FIELD_REF flag (PREFIX test)))) (DEFAULT (TEMPLATE (FIELD_REF NEST) (FIELD_REF field (PREFIX test)) (FIELD_REF test_field1) (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0})))))))" -"+PATH:\"/app:company_home/st:sites/cm:rmtestnew1/cm:documentLibrary//*\" +(ASPECT:\"{http://www.alfresco.org/model/recordsmanagement/1.0}record\") -TYPE:\"{http://www.alfresco.org/model/content/1.0}thumbnail\"" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (MANDATORY (PHRASE \"/app:company_home/st:sites/cm:rmtestnew1/cm:documentLibrary//*\" (FIELD_REF PATH))))) (DISJUNCTION (CONJUNCTION (MANDATORY (CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (PHRASE \"{http://www.alfresco.org/model/recordsmanagement/1.0}record\" (FIELD_REF ASPECT))))))))) (DISJUNCTION (CONJUNCTION (EXCLUDE (PHRASE \"{http://www.alfresco.org/model/content/1.0}thumbnail\" (FIELD_REF TYPE))))))" +"\"zebra\"" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (PHRASE \"zebra\"))))" +"one and cm:name:two and cm_name:three and {http://www.alfresco.org/model/content/1.0}name:\"four\" seven * eight \"nine * ten\"" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (TERM one)) (DEFAULT (TERM two (FIELD_REF name (PREFIX cm)))) (DEFAULT (TERM three (FIELD_REF cm_name))) (DEFAULT (PHRASE \"four\" (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0})))) (DEFAULT (PROXIMITY seven PROXIMITY eight)) (DEFAULT (PHRASE \"nine * ten\"))))" +"1..2" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (RANGE INCLUSIVE 1 2 INCLUSIVE))))" +"test:flag:true AND %test:field" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (TERM true (FIELD_REF flag (PREFIX test)))) (DEFAULT (TEMPLATE (FIELD_REF field (PREFIX test))))))" +"test:flag:true AND %NEST" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (TERM true (FIELD_REF flag (PREFIX test)))) (DEFAULT (TEMPLATE (FIELD_REF NEST)))))" +"test:flag:true AND %(NEST,test:field, test_field1, {http://www.alfresco.org/model/content/1.0}name)" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (TERM true (FIELD_REF flag (PREFIX test)))) (DEFAULT (TEMPLATE (FIELD_REF NEST) (FIELD_REF field (PREFIX test)) (FIELD_REF test_field1) (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0}))))))" +"+PATH:\"/app:company_home/st:sites/cm:rmtestnew1/cm:documentLibrary//*\" +(ASPECT:\"{http://www.alfresco.org/model/recordsmanagement/1.0}record\") -TYPE:\"{http://www.alfresco.org/model/content/1.0}thumbnail\"" -> "(DISJUNCTION (CONJUNCTION (MANDATORY (PHRASE \"/app:company_home/st:sites/cm:rmtestnew1/cm:documentLibrary//*\" (FIELD_REF PATH))) (MANDATORY (DISJUNCTION (CONJUNCTION (DEFAULT (PHRASE \"{http://www.alfresco.org/model/recordsmanagement/1.0}record\" (FIELD_REF ASPECT)))))) (EXCLUDE (PHRASE \"{http://www.alfresco.org/model/content/1.0}thumbnail\" (FIELD_REF TYPE)))))" +"TEXT:(\"lazy\")" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (FIELD_GROUP (FIELD_REF TEXT) (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_PHRASE \"lazy\"))))))))" - -ftsImplicitConjunctionOrDisjunction: -"red" -> (CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM red))))) -"red or blue" -> (CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM red))) (CONJUNCTION (DEFAULT (TERM blue))))) -"red or blue OR pink" -> (CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM red))) (CONJUNCTION (DEFAULT (TERM blue))) (CONJUNCTION (DEFAULT (TERM pink))))) +ftsDisjunction: +"red" -> (DISJUNCTION (CONJUNCTION (DEFAULT (TERM red)))) +"red or blue" -> (DISJUNCTION (CONJUNCTION (DEFAULT (TERM red))) (CONJUNCTION (DEFAULT (TERM blue)))) +"red or blue OR pink" -> (DISJUNCTION (CONJUNCTION (DEFAULT (TERM red))) (CONJUNCTION (DEFAULT (TERM blue))) (CONJUNCTION (DEFAULT (TERM pink)))) ftsExplicitDisjunction: @@ -28,7 +28,7 @@ ftsExplicitDisjunction: "red or blue OR pink" -> (DISJUNCTION (CONJUNCTION (DEFAULT (TERM red))) (CONJUNCTION (DEFAULT (TERM blue))) (CONJUNCTION (DEFAULT (TERM pink)))) -ftsExplictConjunction: +ftsExplicitConjunction: "red" -> (CONJUNCTION (DEFAULT (TERM red))) "red and blue" -> (CONJUNCTION (DEFAULT (TERM red)) (DEFAULT (TERM blue))) "red and blue AND pink" -> (CONJUNCTION (DEFAULT (TERM red)) (DEFAULT (TERM blue)) (DEFAULT (TERM pink))) @@ -44,7 +44,7 @@ ftsPrefixed: ftsTest: "zebra" -> (TERM zebra) "\"zebra\"" -> (PHRASE "zebra") -"or" -> (TERM or) +"or" FAIL "\\+" -> (TERM \+) "+" FAIL "name:woof" -> "(TERM woof (FIELD_REF name))" @@ -88,9 +88,9 @@ ftsTest: "{http://www.alfresco.org/model/content/1.0}name:1\.2..2\.5" -> "(RANGE INCLUSIVE 1\\.2 2\\.5 INCLUSIVE (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0})))" "{http://www.alfresco.org/model/content/1.0}name:\"apple\"..\"pear\"" -> "(RANGE INCLUSIVE \"apple\" \"pear\" INCLUSIVE (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0})))" "{http://www.alfresco.org/model/content/1.0}name:\"1.2\"..\"2.5\"" -> "(RANGE INCLUSIVE \"1.2\" \"2.5\" INCLUSIVE (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0})))" -"cm:name:(woof)" -> "(FIELD_GROUP (FIELD_REF name (PREFIX cm)) (FIELD_CONJUNCTION (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM woof))))))" -"cm:name:(\"woof\")" -> "(FIELD_GROUP (FIELD_REF name (PREFIX cm)) (FIELD_CONJUNCTION (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_PHRASE \"woof\"))))))" -"cm:name:(woof ~banana)" -> "(FIELD_GROUP (FIELD_REF name (PREFIX cm)) (FIELD_CONJUNCTION (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM woof)))) (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_SYNONYM banana))))))" +"cm:name:(woof)" -> "(FIELD_GROUP (FIELD_REF name (PREFIX cm)) (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM woof)))))" +"cm:name:(\"woof\")" -> "(FIELD_GROUP (FIELD_REF name (PREFIX cm)) (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_PHRASE \"woof\")))))" +"cm:name:(woof ~banana)" -> "(FIELD_GROUP (FIELD_REF name (PREFIX cm)) (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM woof)) (FIELD_DEFAULT (FG_SYNONYM banana)))))" "big * apple" -> "(PROXIMITY big PROXIMITY apple)" "big *() apple" -> "(PROXIMITY big PROXIMITY apple)" "big *(7) apple" -> "(PROXIMITY big (PROXIMITY 7) apple)" @@ -108,7 +108,24 @@ ftsTest: "~cm_name:zebra~2.4" -> "(SYNONYM zebra (FIELD_REF cm_name) (FUZZY 2.4))" "aardvark..zebra" -> "(RANGE INCLUSIVE aardvark zebra INCLUSIVE)" "cm_name:[1.2 TO 3.4]" -> "(RANGE INCLUSIVE 1.2 3.4 INCLUSIVE (FIELD_REF cm_name))" -"(zebra~2 AND (cm_name:[1.2 TO 3.4] OR cm_name:zebra~2.4))" -> "(CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (TERM zebra (FUZZY 2))) (DEFAULT (CONJUNCTION (DISJUNCTION (CONJUNCTION (DEFAULT (RANGE INCLUSIVE 1.2 3.4 INCLUSIVE (FIELD_REF cm_name)))) (CONJUNCTION (DEFAULT (TERM zebra (FIELD_REF cm_name) (FUZZY 2.4))))))))))" +"(zebra~2 AND (cm_name:[1.2 TO 3.4] OR cm_name:zebra~2.4))" -> "(DISJUNCTION (CONJUNCTION (DEFAULT (TERM zebra (FUZZY 2))) (DEFAULT (DISJUNCTION (CONJUNCTION (DEFAULT (RANGE INCLUSIVE 1.2 3.4 INCLUSIVE (FIELD_REF cm_name)))) (CONJUNCTION (DEFAULT (TERM zebra (FIELD_REF cm_name) (FUZZY 2.4))))))))" +"ID * OR" FAIL +"*" -> "(TERM *)" +"name:*" -> "(TERM * (FIELD_REF name))" +"cm:name:*" -> "(TERM * (FIELD_REF name (PREFIX cm)))" +"?" -> "(TERM ?)" +"name:?" -> "(TERM ? (FIELD_REF name))" +"cm:name:?" -> "(TERM ? (FIELD_REF name (PREFIX cm)))" +"*woof" -> "(TERM *woof)" +"name:*woof" -> "(TERM *woof (FIELD_REF name))" +"cm:name:*woof" -> "(TERM *woof (FIELD_REF name (PREFIX cm)))" +"?woof" -> "(TERM ?woof)" +"name:?woof" -> "(TERM ?woof (FIELD_REF name))" +"cm:name:?woof" -> "(TERM ?woof (FIELD_REF name (PREFIX cm)))" +"woof*woof" ->"(TERM woof*woof)" +"woof * woof" ->"(PROXIMITY woof PROXIMITY woof)" +"*woof*woof*" ->"(TERM *woof*woof*)" + ftsTerm: "name:woof" -> "woof (FIELD_REF name)" @@ -116,6 +133,7 @@ ftsTerm: "cm:name:woof" -> "woof (FIELD_REF name (PREFIX cm))" "{http://www.alfresco.org/model/content/1.0}name:woof" -> "woof (FIELD_REF name (NAME_SPACE {http://www.alfresco.org/model/content/1.0}))" + ftsExactTerm: "=name:woof" -> "woof (FIELD_REF name)" "=cm_name:woof" -> "woof (FIELD_REF cm_name)" @@ -125,6 +143,7 @@ ftsExactTerm: ftsPhrase: "\"zebra\"" -> "\"zebra\"" +"'zebra'" -> "'zebra'" "name:\"zebra\"" -> "\"zebra\" (FIELD_REF name)" "cm_name:\"zebra\"" -> "\"zebra\" (FIELD_REF cm_name)" "cm:name:\"zebra\"" -> "\"zebra\" (FIELD_REF name (PREFIX cm))" @@ -145,14 +164,14 @@ ftsSynonym: // Term and phrase can not be tested in isolation as they have context ftsFieldGroupTest: //"woof" -> "(FG_TERM woof)" -"=woof" -> "(FG_EXACT_TERM woof)" +//"=woof" -> "(FG_EXACT_TERM woof)" //"\"woof\"" -> "(FG_PHRASE \"woof\")" -"~woof" -> "(FG_SYNONYM woof)" +//"~woof" -> "(FG_SYNONYM woof)" "apple * pear" -> "(FG_PROXIMITY apple PROXIMITY pear)" "12 .. 14" -> "(FG_RANGE INCLUSIVE 12 14 INCLUSIVE)" "[12 TO 14]" -> "(FG_RANGE INCLUSIVE 12 14 INCLUSIVE)" "<12 TO 14>" -> "(FG_RANGE EXCLUSIVE 12 14 EXCLUSIVE)" -"(apple cheese and (pear or banana or not orange))" -> "(FIELD_CONJUNCTION (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM apple)))) (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM cheese)) (FIELD_DEFAULT (FIELD_CONJUNCTION (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM pear))) (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM banana))) (FIELD_CONJUNCTION (FIELD_NEGATION (FG_TERM orange)))))))))" +"(apple cheese and (pear or banana or not orange))" -> "(FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM apple)) (FIELD_DEFAULT (FG_TERM cheese)) (FIELD_DEFAULT (FIELD_DISJUNCTION (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM pear))) (FIELD_CONJUNCTION (FIELD_DEFAULT (FG_TERM banana))) (FIELD_CONJUNCTION (FIELD_NEGATION (FG_TERM orange)))))))" ftsFieldGroupTerm: "woof" -> "woof" @@ -194,8 +213,8 @@ range_right: ">" -> "EXCLUSIVE" fieldReference: -"name" OK -"cm_name" OK +//"name" OK +//"cm_name" OK // Fails do to context sensitive colon check; tested above //"cm:name" OK "{http://www.alfresco.org/model/content/1.0}name" OK @@ -209,8 +228,8 @@ identifier: "name" OK ftsWord: -"OR" -> "OR" -"and" -> "and" +"OR" FAIL +"and" FAIL "nOT" -> "nOT" "TO" -> "TO" "banana" -> "banana" @@ -416,6 +435,9 @@ FTSWORD: "×" FAIL "Ø" OK "÷" FAIL +"ə" OK +"(" FAIL +")" FAIL DECIMAL_INTEGER_LITERAL: "0" OK diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java b/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java index 5a1a806f50..ff308bdc8b 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/FunctionEvaluationContext.java @@ -36,6 +36,7 @@ import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.namespace.QName; import org.apache.lucene.index.IndexReader; import org.apache.lucene.queryParser.ParseException; import org.apache.lucene.search.Query; @@ -215,6 +216,19 @@ public interface FunctionEvaluationContext * @return the lucene function appropriate to a function argument */ public LuceneFunction getLuceneFunction(FunctionArgument functionArgument); + + /** + * @param type + * @param propertyName + */ + public void checkFieldApplies(Selector selector, String propertyName); + + /** + * Is this a multi-valued property? + * @param propertyName + * @return + */ + public boolean isMultiValued(String propertyName); } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/PredicateMode.java b/source/java/org/alfresco/repo/search/impl/querymodel/PredicateMode.java index 0da02c4c42..1c238a37e9 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/PredicateMode.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/PredicateMode.java @@ -30,5 +30,5 @@ package org.alfresco.repo.search.impl.querymodel; */ public enum PredicateMode { - ANY, ALL; + ANY, SINGLE_VALUED_PROPERTY; } 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 index 378bbd642c..d577773497 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseComparison.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/BaseComparison.java @@ -53,6 +53,11 @@ public abstract class BaseComparison extends BaseFunction * Right hand side */ public final static String ARG_RHS = "RHS"; + + /** + * Mode: SVP or mode for MVP comparisons + */ + public final static String ARG_MODE = "Mode"; /** * Args @@ -70,6 +75,8 @@ public abstract class BaseComparison extends BaseFunction ARGS = new LinkedHashMap(); ARGS.put(ARG_LHS, new BaseArgumentDefinition(Multiplicity.ANY, ARG_LHS, DataTypeDefinition.ANY, true)); ARGS.put(ARG_RHS, new BaseArgumentDefinition(Multiplicity.ANY, ARG_RHS, DataTypeDefinition.ANY, true)); + ARGS.put(ARG_MODE, new BaseArgumentDefinition(Multiplicity.ANY, ARG_MODE, DataTypeDefinition.ANY, true)); + } /** @@ -82,7 +89,7 @@ public abstract class BaseComparison extends BaseFunction super(name, returnType, argumentDefinitions); } - protected void setPropertyAndStaticArguments(Map functionArgs) + public void setPropertyAndStaticArguments(Map functionArgs) { Argument lhs = functionArgs.get(ARG_LHS); Argument rhs = functionArgs.get(ARG_RHS); @@ -181,7 +188,7 @@ public abstract class BaseComparison extends BaseFunction return functionArgument; } - protected String getPropertyName() + public String getPropertyName() { if (propertyArgument != null) { 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 index f45f5ec885..adf9048cca 100644 --- 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 @@ -110,6 +110,7 @@ public class LuceneQuery extends BaseQuery implements LuceneQueryBuilder { LuceneQueryBuilderComponent luceneQueryBuilderComponent = (LuceneQueryBuilderComponent) constraint; Query constraintQuery = luceneQueryBuilderComponent.addComponent(selectors, null, luceneContext, functionContext); + constraintQuery.setBoost(constraint.getBoost()); if (constraintQuery != null) { switch (constraint.getOccur()) diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java index f564dccdaf..154dc482bb 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/LuceneQueryEngine.java @@ -27,6 +27,7 @@ package org.alfresco.repo.search.impl.querymodel.impl.lucene; import java.io.IOException; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Set; @@ -143,10 +144,19 @@ public class LuceneQueryEngine implements QueryEngine SearchParameters searchParameters = new SearchParameters(); searchParameters.setBulkFetch(options.getFetchSize() > 0); searchParameters.setBulkFetchSize(options.getFetchSize()); + if(options.getLocales().size() > 0) + { + for(Locale locale: options.getLocales()) + { + searchParameters.addLocale(locale); + } + } + searchParameters.excludeDataInTheCurrentTransaction(!options.isIncludeInTransactionData()); searchParameters.setSkipCount(options.getSkipCount()); searchParameters.setMaxPermissionChecks(options.getMaxPermissionChecks()); searchParameters.setMaxPermissionCheckTimeMillis(options.getMaxPermissionCheckTimeMillis()); searchParameters.setDefaultFieldName(options.getDefaultFieldName()); + searchParameters.setMlAnalaysisMode(options.getMlAnalaysisMode()); if (options.getMaxItems() >= 0) { searchParameters.setLimitBy(LimitBy.FINAL_SIZE); 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 index affd0a7371..d7ff154d39 100644 --- 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 @@ -69,6 +69,22 @@ public class LuceneChild extends Child implements LuceneQueryBuilderComponent LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); Argument argument = functionArgs.get(ARG_PARENT); String id = (String) argument.getValue(functionContext); + argument = functionArgs.get(ARG_SELECTOR); + if(argument != null) + { + String selector = (String) argument.getValue(functionContext); + if(!selectors.contains(selector)) + { + throw new QueryModelException("Unkown selector "+selector); + } + } + else + { + if(selectors.size() > 1) + { + throw new QueryModelException("Selector must be specified for child constraint (IN_FOLDER) and join"); + } + } NodeRef nodeRef; if(NodeRef.isNodeRef(id)) { @@ -97,6 +113,10 @@ public class LuceneChild extends Child implements LuceneQueryBuilderComponent throw new QueryModelException("Invalid Object Id "+id); } } + if(!functionContext.getNodeService().exists(nodeRef)) + { + throw new QueryModelException("Object does not exist: "+id); + } Query query = lqp.getFieldQuery("PARENT", nodeRef.toString()); return query; 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 index 042e73c5a0..979439fe1b 100644 --- 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 @@ -70,6 +70,22 @@ public class LuceneDescendant extends Descendant implements LuceneQueryBuilderCo LuceneQueryParser lqp = luceneContext.getLuceneQueryParser(); Argument argument = functionArgs.get(ARG_ANCESTOR); String id = (String) argument.getValue(functionContext); + argument = functionArgs.get(ARG_SELECTOR); + if(argument != null) + { + String selector = (String) argument.getValue(functionContext); + if(!selectors.contains(selector)) + { + throw new QueryModelException("Unkown selector "+selector); + } + } + else + { + if(selectors.size() > 1) + { + throw new QueryModelException("Selector must be specified for child constraint (IN_TREE) and join"); + } + } NodeRef nodeRef; if(NodeRef.isNodeRef(id)) { @@ -98,6 +114,10 @@ public class LuceneDescendant extends Descendant implements LuceneQueryBuilderCo throw new QueryModelException("Invalid Object Id "+id); } } + if(!functionContext.getNodeService().exists(nodeRef)) + { + throw new QueryModelException("Object does not exist: "+id); + } Path path = functionContext.getNodeService().getPath(nodeRef); StringBuilder builder = new StringBuilder(path.toPrefixString(luceneContext.getNamespacePrefixResolver())); builder.append("//*"); 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 index c5bde17155..20aa54aec0 100644 --- 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 @@ -33,6 +33,7 @@ import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; import org.alfresco.repo.search.impl.querymodel.Argument; import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; import org.alfresco.repo.search.impl.querymodel.ListArgument; +import org.alfresco.repo.search.impl.querymodel.LiteralArgument; import org.alfresco.repo.search.impl.querymodel.PredicateMode; import org.alfresco.repo.search.impl.querymodel.PropertyArgument; import org.alfresco.repo.search.impl.querymodel.QueryModelException; @@ -58,10 +59,10 @@ public class LuceneIn extends In implements LuceneQueryBuilderComponent /* * (non-Javadoc) - * - * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene.search.BooleanQuery, - * org.apache.lucene.search.BooleanQuery, org.alfresco.service.cmr.dictionary.DictionaryService, - * java.lang.String) + * @see + * org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(org.apache.lucene + * .search.BooleanQuery, org.apache.lucene.search.BooleanQuery, + * org.alfresco.service.cmr.dictionary.DictionaryService, java.lang.String) */ @SuppressWarnings("unchecked") public Query addComponent(Set selectors, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) @@ -71,11 +72,14 @@ public class LuceneIn extends In implements LuceneQueryBuilderComponent PropertyArgument propertyArgument = (PropertyArgument) functionArgs.get(ARG_PROPERTY); Argument inverseArgument = functionArgs.get(ARG_NOT); Boolean not = DefaultTypeConverter.INSTANCE.convert(Boolean.class, inverseArgument.getValue(functionContext)); + LiteralArgument modeArgument = (LiteralArgument) functionArgs.get(ARG_MODE); + String modeString = DefaultTypeConverter.INSTANCE.convert(String.class, modeArgument.getValue(functionContext)); + PredicateMode mode = PredicateMode.valueOf(modeString); - ListArgument listArgument = (ListArgument)functionArgs.get(ARG_LIST); - Collection collection = (Collection)listArgument.getValue(functionContext); - - Query query = functionContext.buildLuceneIn(lqp, propertyArgument.getPropertyName(), collection, not, PredicateMode.ANY); + ListArgument listArgument = (ListArgument) functionArgs.get(ARG_LIST); + Collection collection = (Collection) listArgument.getValue(functionContext); + + Query query = functionContext.buildLuceneIn(lqp, propertyArgument.getPropertyName(), collection, not, mode); if (query == null) { diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLower.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLower.java index e43ddcff71..529acf6e5f 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLower.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneLower.java @@ -24,12 +24,22 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.functions.Lower; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.queryParser.ParseException; +import org.apache.lucene.search.Query; /** * @author andyh */ -public class LuceneLower extends Lower +public class LuceneLower extends Lower implements LuceneQueryBuilderComponent { /** @@ -40,4 +50,15 @@ public class LuceneLower extends Lower super(); } + /* + * (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(java.util.Set, + * java.util.Map, org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext, + * org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext) + */ + public Query addComponent(Set selectors, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + throw new QueryModelException("Unsupported function in query " + getName()); + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LucenePropertyAccessor.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LucenePropertyAccessor.java index 18b4e120a8..b56be7fb36 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LucenePropertyAccessor.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LucenePropertyAccessor.java @@ -24,12 +24,22 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.functions.PropertyAccessor; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.queryParser.ParseException; +import org.apache.lucene.search.Query; /** * @author andyh */ -public class LucenePropertyAccessor extends PropertyAccessor +public class LucenePropertyAccessor extends PropertyAccessor implements LuceneQueryBuilderComponent { /** * @@ -38,4 +48,13 @@ public class LucenePropertyAccessor extends PropertyAccessor { super(); } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(java.util.Set, java.util.Map, org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext, org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext) + */ + public Query addComponent(Set selectors, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + throw new QueryModelException("Unsupported function in query "+getName()); + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneScore.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneScore.java index 09c0c56328..cf9a50be6c 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneScore.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneScore.java @@ -24,13 +24,23 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.functions.Score; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.queryParser.ParseException; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneScore extends Score +public class LuceneScore extends Score implements LuceneQueryBuilderComponent { /** @@ -40,4 +50,13 @@ public class LuceneScore extends Score { super(); } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(java.util.Set, java.util.Map, org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext, org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext) + */ + public Query addComponent(Set selectors, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + throw new QueryModelException("Unsupported function in query "+getName()); + } } diff --git a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneUpper.java b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneUpper.java index e92cbc7b5b..7b3d902c4d 100644 --- a/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneUpper.java +++ b/source/java/org/alfresco/repo/search/impl/querymodel/impl/lucene/functions/LuceneUpper.java @@ -24,13 +24,23 @@ */ package org.alfresco.repo.search.impl.querymodel.impl.lucene.functions; +import java.util.Map; +import java.util.Set; + +import org.alfresco.repo.search.impl.querymodel.Argument; +import org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext; +import org.alfresco.repo.search.impl.querymodel.QueryModelException; import org.alfresco.repo.search.impl.querymodel.impl.functions.Upper; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent; +import org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext; +import org.apache.lucene.queryParser.ParseException; +import org.apache.lucene.search.Query; /** * @author andyh * */ -public class LuceneUpper extends Upper +public class LuceneUpper extends Upper implements LuceneQueryBuilderComponent { /** * @@ -39,4 +49,13 @@ public class LuceneUpper extends Upper { super(); } + + /* (non-Javadoc) + * @see org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderComponent#addComponent(java.util.Set, java.util.Map, org.alfresco.repo.search.impl.querymodel.impl.lucene.LuceneQueryBuilderContext, org.alfresco.repo.search.impl.querymodel.FunctionEvaluationContext) + */ + public Query addComponent(Set selectors, Map functionArgs, LuceneQueryBuilderContext luceneContext, FunctionEvaluationContext functionContext) + throws ParseException + { + throw new QueryModelException("Unsupported function in query "+getName()); + } } diff --git a/source/java/org/alfresco/repo/security/permissions/impl/AccessPermissionImpl.java b/source/java/org/alfresco/repo/security/permissions/impl/AccessPermissionImpl.java index 56b3d8fc59..e85b5c6477 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/AccessPermissionImpl.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/AccessPermissionImpl.java @@ -80,27 +80,60 @@ public class AccessPermissionImpl implements AccessPermission return accessStatus + " " + this.permission + " - " + this.authority + " (" + this.authorityType + ")"; } - @Override - public boolean equals(Object o) - { - if (this == o) - { - return true; - } - if (!(o instanceof AccessPermissionImpl)) - { - return false; - } - AccessPermissionImpl other = (AccessPermissionImpl) o; - return this.getPermission().equals(other.getPermission()) - && (this.getAccessStatus() == other.getAccessStatus() && (this.getAccessStatus().equals(other - .getAccessStatus()))); - } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ @Override public int hashCode() { - return ((authority.hashCode() * 37) + permission.hashCode()) * 37 + accessStatus.hashCode(); + final int prime = 31; + int result = 1; + result = prime * result + ((accessStatus == null) ? 0 : accessStatus.hashCode()); + result = prime * result + ((authority == null) ? 0 : authority.hashCode()); + result = prime * result + ((permission == null) ? 0 : permission.hashCode()); + result = prime * result + position; + return result; + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final AccessPermissionImpl other = (AccessPermissionImpl) obj; + if (accessStatus == null) + { + if (other.accessStatus != null) + return false; + } + else if (!accessStatus.equals(other.accessStatus)) + return false; + if (authority == null) + { + if (other.authority != null) + return false; + } + else if (!authority.equals(other.authority)) + return false; + if (permission == null) + { + if (other.permission != null) + return false; + } + else if (!permission.equals(other.permission)) + return false; + if (position != other.position) + return false; + return true; } public int getPosition() diff --git a/source/java/org/alfresco/repo/security/permissions/impl/ModelDAO.java b/source/java/org/alfresco/repo/security/permissions/impl/ModelDAO.java index 1eb146f6b4..fd6cc0832a 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/ModelDAO.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/ModelDAO.java @@ -152,4 +152,17 @@ public interface ModelDAO */ public Set getGlobalPermissionEntries(); + + /** + * Get all exposed permissions (regardless of type exposure) + * @return + */ + public Set getAllExposedPermissions(); + + /** + * Get all exposed permissions (regardless of type exposure) + * @return + */ + public Set getAllPermissions(); + } diff --git a/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java b/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java index 20539dda4c..f1ba865808 100644 --- a/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java +++ b/source/java/org/alfresco/repo/security/permissions/impl/model/PermissionModel.java @@ -763,7 +763,7 @@ public class PermissionModel implements ModelDAO, InitializingBean return permissions; } - private Set getAllPermissions() + public Set getAllPermissions() { HashSet permissions = new HashSet(256, 1.0f); for (PermissionSet ps : permissionSets.values()) @@ -1324,4 +1324,30 @@ public class PermissionModel implements ModelDAO, InitializingBean } + /* (non-Javadoc) + * @see org.alfresco.repo.security.permissions.impl.ModelDAO#getAllExposedPermissions() + */ + public Set getAllExposedPermissions() + { + HashSet permissions = new HashSet(256, 1.0f); + for (PermissionSet ps : permissionSets.values()) + { + for (PermissionGroup pg : ps.getPermissionGroups()) + { + if(pg.isExposed()) + { + permissions.add(SimplePermissionReference.getPermissionReference(pg.getQName(), pg.getName())); + } + } + for (Permission p : ps.getPermissions()) + { + if(p.isExposed()) + { + permissions.add(SimplePermissionReference.getPermissionReference(p.getQName(), p.getName())); + } + } + } + return permissions; + } + } diff --git a/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java b/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java index 8a05bf8b32..6836eac25a 100644 --- a/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java +++ b/source/java/org/alfresco/repo/template/FreeMarkerProcessor.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2005-2007 Alfresco Software Limited. + * Copyright (C) 2005-2010 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 @@ -18,7 +18,7 @@ * 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 + * FLOSS exception. You should have received a copy of the text describing * the FLOSS exception, and it is also available here: * http://www.alfresco.com/legal/licensing" */ @@ -41,6 +41,7 @@ import org.alfresco.service.cmr.repository.TemplateImageResolver; import org.alfresco.service.cmr.repository.TemplateProcessor; import org.alfresco.service.cmr.repository.TemplateProcessorExtension; import org.alfresco.service.cmr.repository.TemplateService; +import org.alfresco.service.cmr.repository.TemplateValueConverter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -65,7 +66,7 @@ import freemarker.template.TemplateExceptionHandler; * * @author Kevin Roast */ -public class FreeMarkerProcessor extends BaseProcessor implements TemplateProcessor +public class FreeMarkerProcessor extends BaseProcessor implements TemplateProcessor, TemplateValueConverter { private final static String MSG_ERROR_NO_TEMPLATE = "error_no_template"; private final static String MSG_ERROR_TEMPLATE_FAIL = "error_template_fail"; @@ -319,14 +320,10 @@ public class FreeMarkerProcessor extends BaseProcessor implements TemplateProces } } - /** - * Converts a value to a freemarker value - * - * @param value - * @param imageResolver - * @return + /* (non-Javadoc) + * @see org.alfresco.service.cmr.repository.TemplateValueConverter#convertValue(java.lang.Object, org.alfresco.service.cmr.repository.TemplateImageResolver) */ - private Object convertValue(Object value, TemplateImageResolver imageResolver) + public Object convertValue(Object value, TemplateImageResolver imageResolver) { if (value instanceof NodeRef) { diff --git a/source/java/org/alfresco/repo/template/TemplateNode.java b/source/java/org/alfresco/repo/template/TemplateNode.java index 0aca5f0679..d061af669d 100644 --- a/source/java/org/alfresco/repo/template/TemplateNode.java +++ b/source/java/org/alfresco/repo/template/TemplateNode.java @@ -166,6 +166,14 @@ public class TemplateNode extends BasePermissionsNode implements NamespacePrefix return this.nodeRef; } + /** + * @return true if this node still exists + */ + public boolean getExists() + { + return this.services.getNodeService().exists(this.nodeRef); + } + /** * @return Returns the type. */ diff --git a/source/java/org/alfresco/repo/thumbnail/SimpleThumbnailer.java b/source/java/org/alfresco/repo/thumbnail/SimpleThumbnailer.java new file mode 100644 index 0000000000..00707c53ad --- /dev/null +++ b/source/java/org/alfresco/repo/thumbnail/SimpleThumbnailer.java @@ -0,0 +1,231 @@ +/* + * Copyright (C) 2005-2010 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 received 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.thumbnail; + +import java.io.Serializable; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import org.alfresco.model.ContentModel; +import org.alfresco.repo.content.ContentServicePolicies; +import org.alfresco.repo.policy.JavaBehaviour; +import org.alfresco.repo.policy.PolicyComponent; +import org.alfresco.repo.transaction.AlfrescoTransactionSupport; +import org.alfresco.repo.transaction.TransactionListenerAdapter; +import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; +import org.alfresco.service.cmr.repository.ContentData; +import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.repository.NodeService; +import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter; +import org.alfresco.service.cmr.thumbnail.ThumbnailService; +import org.alfresco.service.namespace.NamespaceService; +import org.alfresco.service.namespace.QName; +import org.alfresco.service.transaction.TransactionService; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.springframework.beans.factory.InitializingBean; + +/** + * A simplistic policy that generates all applicable thumbnails for content as it is added or updated. As this is done + * synchronously, this is not recommended for production use. + * + * @author dward + */ +public class SimpleThumbnailer extends TransactionListenerAdapter implements + ContentServicePolicies.OnContentUpdatePolicy, InitializingBean +{ + + private static final Log logger = LogFactory.getLog(SimpleThumbnailer.class); + + /** The key under which nodes to thumbnail at the end of the transaction are stored. */ + private static final String KEY_POST_TXN_NODES_TO_THUMBNAIL = "SimpleThumbnailer.KEY_POST_TXN_NODES_TO_THUMBNAIL"; + + /** The component to register the behaviour with. */ + private PolicyComponent policyComponent; + + /** The node service. */ + private NodeService nodeService; + + /** The transaction service. */ + private TransactionService transactionService; + + /** The thumbnail service. */ + private ThumbnailService thumbnailService; + + /** + * Sets the policy component. + * + * @param policyComponent + * used for registrations + */ + public void setPolicyComponent(PolicyComponent policyComponent) + { + this.policyComponent = policyComponent; + } + + /** + * Sets the node service. + * + * @param nodeService + * the node service + */ + public void setNodeService(NodeService nodeService) + { + this.nodeService = nodeService; + } + + /** + * Sets the transaction service. + * + * @param transactionService + * the transaction service + */ + public void setTransactionService(TransactionService transactionService) + { + this.transactionService = transactionService; + } + + /** + * Sets the thumbnail service. + * + * @param thumbnailService + * the thumbnail service + */ + public void setThumbnailService(ThumbnailService thumbnailService) + { + this.thumbnailService = thumbnailService; + } + + /** + * Registers the policy behaviour methods. + */ + public void afterPropertiesSet() + { + this.policyComponent.bindClassBehaviour(QName.createQName(NamespaceService.ALFRESCO_URI, "onContentUpdate"), + this, new JavaBehaviour(this, "onContentUpdate")); + } + + /** + * When content changes, thumbnails are (re)generated. + * + * @param nodeRef + * the node ref + * @param newContent + * is the content new? + */ + public void onContentUpdate(NodeRef nodeRef, boolean newContent) + { + if (!this.nodeService.getType(nodeRef).equals(ContentModel.TYPE_THUMBNAIL) + && this.nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT) != null) + { + // Bind this service to the transaction and add the node to the set of nodes to thumbnail post txn + AlfrescoTransactionSupport.bindListener(this); + getPostTxnNodesToThumbnail().add(nodeRef); + } + } + + /* + * (non-Javadoc) + * @see org.alfresco.repo.transaction.TransactionListenerAdapter#afterCommit() + */ + @Override + public void afterCommit() + { + for (final NodeRef nodeRef : getPostTxnNodesToThumbnail()) + { + if (!this.nodeService.exists(nodeRef)) + { + continue; + } + Serializable value = this.nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT); + ContentData contentData = DefaultTypeConverter.INSTANCE.convert(ContentData.class, value); + List thumbnailDefinitions = this.thumbnailService.getThumbnailRegistry() + .getThumnailDefintions(contentData.getMimetype()); + for (final ThumbnailDefinition thumbnailDefinition : thumbnailDefinitions) + { + final NodeRef existingThumbnail = this.thumbnailService.getThumbnailByName(nodeRef, + ContentModel.PROP_CONTENT, thumbnailDefinition.getName()); + try + { + // Generate each thumbnail in its own transaction, so that we can recover if one of them goes wrong + this.transactionService.getRetryingTransactionHelper().doInTransaction( + new RetryingTransactionCallback() + { + + public Object execute() throws Throwable + { + if (existingThumbnail == null) + { + if (SimpleThumbnailer.logger.isDebugEnabled()) + { + SimpleThumbnailer.logger.debug("Creating thumbnail \"" + + thumbnailDefinition.getName() + "\" for node " + nodeRef.getId()); + } + SimpleThumbnailer.this.thumbnailService.createThumbnail(nodeRef, + ContentModel.PROP_CONTENT, thumbnailDefinition.getMimetype(), + thumbnailDefinition.getTransformationOptions(), thumbnailDefinition + .getName()); + } + else + { + SimpleThumbnailer.logger.debug("Updating thumbnail \"" + + thumbnailDefinition.getName() + "\" for node " + nodeRef.getId()); + SimpleThumbnailer.this.thumbnailService.updateThumbnail(existingThumbnail, + thumbnailDefinition.getTransformationOptions()); + } + return null; + } + }, false, true); + } + catch (Exception e) + { + SimpleThumbnailer.logger.warn("Failed to generate thumbnail \"" + thumbnailDefinition.getName() + + "\" for node " + nodeRef.getId(), e); + } + } + } + } + + /** + * Gets the txn-bound set of nodes that need thumbnailing. + * + * @return the set of nodes that need thumbnailing + */ + private Set getPostTxnNodesToThumbnail() + { + @SuppressWarnings("unchecked") + Set nodesToThumbnail = (Set) AlfrescoTransactionSupport + .getResource(SimpleThumbnailer.KEY_POST_TXN_NODES_TO_THUMBNAIL); + if (nodesToThumbnail == null) + { + nodesToThumbnail = new LinkedHashSet(11); + AlfrescoTransactionSupport + .bindResource(SimpleThumbnailer.KEY_POST_TXN_NODES_TO_THUMBNAIL, nodesToThumbnail); + } + return nodesToThumbnail; + } + +} diff --git a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java b/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java index 4b406849c3..4760fe569b 100644 --- a/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java +++ b/source/java/org/alfresco/repo/thumbnail/ThumbnailServiceImpl.java @@ -67,6 +67,9 @@ public class ThumbnailServiceImpl implements ThumbnailService private static final String ERR_DUPLICATE_NAME = "Thumbnail could not be created because of a duplicate name"; private static final String ERR_NO_PARENT = "Thumbnail has no parent so update cannot take place."; + /** Mimetype wildcard postfix */ + private static final String SUBTYPES_POSTFIX = "/*"; + /** Node service */ private NodeService nodeService; @@ -458,10 +461,22 @@ public class ThumbnailServiceImpl implements ThumbnailService if (mimetype != null) { // Check the mimetype - String thumbnailMimetype = ((ContentData)this.nodeService.getProperty(thumbnail, ContentModel.PROP_CONTENT)).getMimetype(); - if (mimetype.equals(thumbnailMimetype) == false) - { - result = false; + String thumbnailMimetype = ((ContentData) this.nodeService.getProperty(thumbnail, ContentModel.PROP_CONTENT)).getMimetype(); + + if (mimetype.endsWith(SUBTYPES_POSTFIX)) + { + String baseMimetype = mimetype.substring(0, mimetype.length() - SUBTYPES_POSTFIX.length()); + if (thumbnailMimetype == null || thumbnailMimetype.startsWith(baseMimetype) == false) + { + result = false; + } + } + else + { + if (mimetype.equals(thumbnailMimetype) == false) + { + result = false; + } } } diff --git a/source/java/org/alfresco/service/cmr/audit/AuditService.java b/source/java/org/alfresco/service/cmr/audit/AuditService.java index d83fa468db..a5ff772173 100644 --- a/source/java/org/alfresco/service/cmr/audit/AuditService.java +++ b/source/java/org/alfresco/service/cmr/audit/AuditService.java @@ -152,6 +152,14 @@ public interface AuditService */ public static interface AuditQueryCallback { + /** + * Determines whether this callback requires the values argument to be populated when {@link #handleAuditEntry} + * is called. + * + * @return true if this callback requires the values argument to be populated + */ + boolean valuesRequired(); + /** * Handle a row of audit entry data. * diff --git a/source/java/org/alfresco/service/cmr/dictionary/ClassDefinition.java b/source/java/org/alfresco/service/cmr/dictionary/ClassDefinition.java index 8df3fae549..7da37acf1e 100644 --- a/source/java/org/alfresco/service/cmr/dictionary/ClassDefinition.java +++ b/source/java/org/alfresco/service/cmr/dictionary/ClassDefinition.java @@ -73,6 +73,13 @@ public interface ClassDefinition * deleted or null if not defined. */ public Boolean getArchive(); + + /** + * + * @return Return true if the type should be included in supertypes queries, false if not + * deleted or null if not defined. + */ + public Boolean getIncludedInSuperTypeQuery(); /** * @return the properties of the class, including inherited properties diff --git a/source/java/org/alfresco/service/cmr/repository/TemplateValueConverter.java b/source/java/org/alfresco/service/cmr/repository/TemplateValueConverter.java new file mode 100644 index 0000000000..695fea431b --- /dev/null +++ b/source/java/org/alfresco/service/cmr/repository/TemplateValueConverter.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2005-2010 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 received a copy of the text describing + * the FLOSS exception, and it is also available here: + * http://www.alfresco.com/legal/licensing" + */ +package org.alfresco.service.cmr.repository; + +/** + * A service capable of converting Java objects for use within a template. + * + * @author dward + */ +public interface TemplateValueConverter +{ + + /** + * Converts a Java object (e.g. one produced by a method call) to one suitable for use within a template. + * + * @param value + * the Java object to convert + * @param imageResolver + * the image resolver + * @return the converted object + */ + public Object convertValue(Object value, TemplateImageResolver imageResolver); +} diff --git a/source/java/org/alfresco/service/cmr/search/SearchService.java b/source/java/org/alfresco/service/cmr/search/SearchService.java index f7c03cdb36..a8442d2cb7 100644 --- a/source/java/org/alfresco/service/cmr/search/SearchService.java +++ b/source/java/org/alfresco/service/cmr/search/SearchService.java @@ -57,9 +57,9 @@ public interface SearchService public static final String LANGUAGE_FTS_ALFRESCO = "fts-alfresco"; - public static final String LANGUAGE_SQL_CMIS_STRICT = "sql-cmis-strict"; + public static final String LANGUAGE_CMIS_STRICT = "cmis-strict"; - public static final String LANGUAGE_SQL_ALFTRESCO = "sql-alfresco"; + public static final String LANGUAGE_CMIS_ALFRESCO = "cmis-alfresco"; /** * Search against a store. Pulls back all attributes on each node. Does not diff --git a/source/java/org/alfresco/util/SearchLanguageConversion.java b/source/java/org/alfresco/util/SearchLanguageConversion.java index 8084b80e50..1af9ca9860 100644 --- a/source/java/org/alfresco/util/SearchLanguageConversion.java +++ b/source/java/org/alfresco/util/SearchLanguageConversion.java @@ -210,7 +210,10 @@ public class SearchLanguageConversion { if (escaping) // if we are currently escaping, just escape the current character { - sb.append(to.escapeChar); // the to format escape char + if(to.isReserved(chars[i])) + { + sb.append(to.escapeChar); // the to format escape char + } sb.append(chars[i]); // the current char escaping = false; } diff --git a/source/java/org/alfresco/util/SearchLanguageConversionTest.java b/source/java/org/alfresco/util/SearchLanguageConversionTest.java index b5be09d768..bfee50e6c5 100644 --- a/source/java/org/alfresco/util/SearchLanguageConversionTest.java +++ b/source/java/org/alfresco/util/SearchLanguageConversionTest.java @@ -87,12 +87,12 @@ public class SearchLanguageConversionTest extends TestCase { String good = SearchLanguageConversion.convertXPathLikeToRegex(BAD_STRING); assertEquals("XPath like to regex failed", - "(?s)\\ \\| ! \" £ " + + "(?s) \\| ! \" £ " + "\\$ .* \\^ & \\* \\( " + "\\) . \\{ \\} [ ] " + "@ # ~ ' : ; " + ", \\. < > \\+ \\? " + - "/ \\\\ \\* \\? \\_", + "/ \\\\ \\* \\? _", good); } @@ -100,12 +100,29 @@ public class SearchLanguageConversionTest extends TestCase { String good = SearchLanguageConversion.convertXPathLikeToLucene(BAD_STRING); assertEquals("XPath like to Lucene failed", - "\\ \\| \\! \\\" £ " + + " \\| \\! \\\" £ " + "$ * \\^ \\& \\* \\( " + "\\) ? \\{ \\} \\[ \\] " + "@ # \\~ ' \\: ; " + ", . < > \\+ \\? " + - "/ \\\\ \\* \\? \\_", + "/ \\\\ \\* \\? _", good); } + + public void testSqlToLucene() + { + String sqlLike = "AB%_*?\\%\\_"; + String lucene = "AB*?\\*\\?%_"; + String converted = SearchLanguageConversion.convert(SearchLanguageConversion.DEF_SQL_LIKE, SearchLanguageConversion.DEF_LUCENE, sqlLike); + assertEquals(lucene, converted); + } + + public void testLuceneToRegexp() + { + String lucene = "AB*?\\*\\?.*."; + String regexp = "AB.*.\\*\\?\\..*\\."; + String converted = SearchLanguageConversion.convert(SearchLanguageConversion.DEF_LUCENE, SearchLanguageConversion.DEF_REGEX, lucene); + assertEquals(regexp, converted); + } + } diff --git a/source/test-resources/auto-thumbnail-context.xml b/source/test-resources/auto-thumbnail-context.xml new file mode 100644 index 0000000000..67ac851dc1 --- /dev/null +++ b/source/test-resources/auto-thumbnail-context.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file