001/* 002 * (C) Copyright 2006-2011 Nuxeo SA (http://nuxeo.com/) and others. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 * 016 * Contributors: 017 * Florent Guillaume 018 */ 019 020package org.nuxeo.ecm.core.query.sql; 021 022/** 023 * This defines the constants for NXQL queries. 024 * 025 * @author Florent Guillaume 026 */ 027public class NXQL { 028 029 // constant utility class 030 private NXQL() { 031 } 032 033 /** The NXQL query type. */ 034 public static final String NXQL = "NXQL"; 035 036 public static final String ECM_PREFIX = "ecm:"; 037 038 public static final String ECM_UUID = "ecm:uuid"; 039 040 public static final String ECM_PATH = "ecm:path"; 041 042 public static final String ECM_NAME = "ecm:name"; 043 044 public static final String ECM_POS = "ecm:pos"; 045 046 public static final String ECM_PARENTID = "ecm:parentId"; 047 048 public static final String ECM_MIXINTYPE = "ecm:mixinType"; 049 050 public static final String ECM_PRIMARYTYPE = "ecm:primaryType"; 051 052 public static final String ECM_ISPROXY = "ecm:isProxy"; 053 054 public static final String ECM_ISVERSION = "ecm:isVersion"; 055 056 /** 057 * @since 5.7.3 058 */ 059 public static final String ECM_ISVERSION_OLD = "ecm:isCheckedInVersion"; 060 061 public static final String ECM_LIFECYCLESTATE = "ecm:currentLifeCycleState"; 062 063 public static final String ECM_VERSIONLABEL = "ecm:versionLabel"; 064 065 public static final String ECM_FULLTEXT = "ecm:fulltext"; 066 067 public static final String ECM_FULLTEXT_JOBID = "ecm:fulltextJobId"; 068 069 /** 070 * @since 6.0 071 */ 072 public static final String ECM_FULLTEXT_SCORE = "ecm:fulltextScore"; 073 074 /** 075 * @deprecated since 5.4.2, use {@link #ECM_LOCK_OWNER} instead 076 */ 077 @Deprecated 078 public static final String ECM_LOCK = "ecm:lock"; 079 080 /** 081 * @since 5.4.2 082 */ 083 public static final String ECM_LOCK_OWNER = "ecm:lockOwner"; 084 085 /** 086 * @since 5.4.2 087 */ 088 public static final String ECM_LOCK_CREATED = "ecm:lockCreated"; 089 090 /** 091 * @since 5.7 092 */ 093 public static final String ECM_TAG = "ecm:tag"; 094 095 /** 096 * @since 5.7 097 */ 098 public static final String ECM_PROXY_TARGETID = "ecm:proxyTargetId"; 099 100 /** 101 * @since 5.7 102 */ 103 public static final String ECM_PROXY_VERSIONABLEID = "ecm:proxyVersionableId"; 104 105 /** 106 * @since 5.7.3 107 */ 108 public static final String ECM_ISCHECKEDIN = "ecm:isCheckedIn"; 109 110 /** 111 * @since 5.7.3 112 */ 113 public static final String ECM_ISLATESTVERSION = "ecm:isLatestVersion"; 114 115 /** 116 * @since 5.7.3 117 */ 118 public static final String ECM_ISLATESTMAJORVERSION = "ecm:isLatestMajorVersion"; 119 120 /** 121 * @since 5.7.3 122 */ 123 public static final String ECM_VERSIONCREATED = "ecm:versionCreated"; 124 125 /** 126 * @since 5.7.3 127 */ 128 public static final String ECM_VERSIONDESCRIPTION = "ecm:versionDescription"; 129 130 /** 131 * @since 5.7.3 132 */ 133 public static final String ECM_VERSION_VERSIONABLEID = "ecm:versionVersionableId"; 134 135 /** 136 * @since 6.0 137 */ 138 public static final String ECM_ANCESTORID = "ecm:ancestorId"; 139 140 /** 141 * @since 6.0-HF06, 7.2 142 */ 143 public static final String ECM_ACL = "ecm:acl"; 144 145 /** 146 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /principal} 147 * 148 * @since 6.0-HF06, 7.2 149 */ 150 public static final String ECM_ACL_PRINCIPAL = "principal"; 151 152 /** 153 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /permission} 154 * 155 * @since 6.0-HF06, 7.2 156 */ 157 public static final String ECM_ACL_PERMISSION = "permission"; 158 159 /** 160 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /grant} 161 * 162 * @since 6.0-HF06, 7.2 163 */ 164 public static final String ECM_ACL_GRANT = "grant"; 165 166 /** 167 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /name} 168 * 169 * @since 6.0-HF06, 7.2 170 */ 171 public static final String ECM_ACL_NAME = "name"; 172 173 /** 174 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /pos} 175 * 176 * @since 6.0-HF06, 7.2 177 */ 178 public static final String ECM_ACL_POS = "pos"; 179 180 /** 181 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /creator} 182 * 183 * @since 7.4 184 */ 185 public static final String ECM_ACL_CREATOR = "creator"; 186 187 /** 188 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /begin} 189 * 190 * @since 7.4 191 */ 192 public static final String ECM_ACL_BEGIN = "begin"; 193 194 /** 195 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /end} 196 * 197 * @since 7.4 198 */ 199 public static final String ECM_ACL_END = "end"; 200 201 /** 202 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /status} 203 * 204 * @since 7.4 205 */ 206 public static final String ECM_ACL_STATUS = "status"; 207 208 /** 209 * Escapes a string into a single-quoted string for NXQL. 210 * <p> 211 * Any single quote or backslash characters are escaped with a backslash. 212 * 213 * @param s the string to escape 214 * @return the escaped string 215 * @since 5.7, 5.6.0-HF08 216 */ 217 public static String escapeString(String s) { 218 return "'" + escapeStringInner(s) + "'"; 219 } 220 221 /** 222 * Escapes a string (assumed to be single quoted) for NXQL. 223 * <p> 224 * Any single quote or backslash characters are escaped with a backslash. 225 * 226 * @param s the string to escape 227 * @return the escaped string, without external quotes 228 * @since 5.7, 5.6.0-HF08 229 */ 230 public static String escapeStringInner(String s) { 231 // backslash -> backslash backslash 232 // quote -> backslash quote 233 // newline -> backslash n 234 return s.replaceAll("\\\\", "\\\\\\\\").replaceAll("'", "\\\\'").replaceAll("\n", "\\\\n"); 235 } 236 237}