001/* 002 * (C) Copyright 2006-2016 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 */ 019package org.nuxeo.ecm.core.query.sql; 020 021/** 022 * This defines the constants for NXQL queries. 023 * 024 * @author Florent Guillaume 025 */ 026public class NXQL { 027 028 // constant utility class 029 private NXQL() { 030 } 031 032 /** The NXQL query type. */ 033 public static final String NXQL = "NXQL"; 034 035 public static final String ECM_PREFIX = "ecm:"; 036 037 public static final String ECM_UUID = "ecm:uuid"; 038 039 public static final String ECM_PATH = "ecm:path"; 040 041 public static final String ECM_NAME = "ecm:name"; 042 043 public static final String ECM_POS = "ecm:pos"; 044 045 public static final String ECM_PARENTID = "ecm:parentId"; 046 047 public static final String ECM_MIXINTYPE = "ecm:mixinType"; 048 049 public static final String ECM_PRIMARYTYPE = "ecm:primaryType"; 050 051 public static final String ECM_ISPROXY = "ecm:isProxy"; 052 053 public static final String ECM_ISVERSION = "ecm:isVersion"; 054 055 /** 056 * @since 5.7.3 057 */ 058 public static final String ECM_ISVERSION_OLD = "ecm:isCheckedInVersion"; 059 060 public static final String ECM_LIFECYCLESTATE = "ecm:currentLifeCycleState"; 061 062 public static final String ECM_VERSIONLABEL = "ecm:versionLabel"; 063 064 public static final String ECM_FULLTEXT = "ecm:fulltext"; 065 066 public static final String ECM_FULLTEXT_JOBID = "ecm:fulltextJobId"; 067 068 /** 069 * @since 6.0 070 */ 071 public static final String ECM_FULLTEXT_SCORE = "ecm:fulltextScore"; 072 073 /** 074 * @since 5.4.2 075 */ 076 public static final String ECM_LOCK_OWNER = "ecm:lockOwner"; 077 078 /** 079 * @since 5.4.2 080 */ 081 public static final String ECM_LOCK_CREATED = "ecm:lockCreated"; 082 083 /** 084 * @since 5.7 085 */ 086 public static final String ECM_TAG = "ecm:tag"; 087 088 /** 089 * @since 5.7 090 */ 091 public static final String ECM_PROXY_TARGETID = "ecm:proxyTargetId"; 092 093 /** 094 * @since 5.7 095 */ 096 public static final String ECM_PROXY_VERSIONABLEID = "ecm:proxyVersionableId"; 097 098 /** 099 * @since 5.7.3 100 */ 101 public static final String ECM_ISCHECKEDIN = "ecm:isCheckedIn"; 102 103 /** 104 * @since 5.7.3 105 */ 106 public static final String ECM_ISLATESTVERSION = "ecm:isLatestVersion"; 107 108 /** 109 * @since 5.7.3 110 */ 111 public static final String ECM_ISLATESTMAJORVERSION = "ecm:isLatestMajorVersion"; 112 113 /** 114 * @since 5.7.3 115 */ 116 public static final String ECM_VERSIONCREATED = "ecm:versionCreated"; 117 118 /** 119 * @since 5.7.3 120 */ 121 public static final String ECM_VERSIONDESCRIPTION = "ecm:versionDescription"; 122 123 /** 124 * @since 5.7.3 125 */ 126 public static final String ECM_VERSION_VERSIONABLEID = "ecm:versionVersionableId"; 127 128 /** 129 * @since 6.0 130 */ 131 public static final String ECM_ANCESTORID = "ecm:ancestorId"; 132 133 /** 134 * @since 6.0-HF06, 7.2 135 */ 136 public static final String ECM_ACL = "ecm:acl"; 137 138 /** 139 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /principal} 140 * 141 * @since 6.0-HF06, 7.2 142 */ 143 public static final String ECM_ACL_PRINCIPAL = "principal"; 144 145 /** 146 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /permission} 147 * 148 * @since 6.0-HF06, 7.2 149 */ 150 public static final String ECM_ACL_PERMISSION = "permission"; 151 152 /** 153 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /grant} 154 * 155 * @since 6.0-HF06, 7.2 156 */ 157 public static final String ECM_ACL_GRANT = "grant"; 158 159 /** 160 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /name} 161 * 162 * @since 6.0-HF06, 7.2 163 */ 164 public static final String ECM_ACL_NAME = "name"; 165 166 /** 167 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /pos} 168 * 169 * @since 6.0-HF06, 7.2 170 */ 171 public static final String ECM_ACL_POS = "pos"; 172 173 /** 174 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /creator} 175 * 176 * @since 7.4 177 */ 178 public static final String ECM_ACL_CREATOR = "creator"; 179 180 /** 181 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /begin} 182 * 183 * @since 7.4 184 */ 185 public static final String ECM_ACL_BEGIN = "begin"; 186 187 /** 188 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /end} 189 * 190 * @since 7.4 191 */ 192 public static final String ECM_ACL_END = "end"; 193 194 /** 195 * Suffix for ecm:acl, like in {@code ecm:acl/}{@code *}{@code /status} 196 * 197 * @since 7.4 198 */ 199 public static final String ECM_ACL_STATUS = "status"; 200 201 /** 202 * Escapes a string into a single-quoted string for NXQL. 203 * <p> 204 * Any single quote or backslash characters are escaped with a backslash. 205 * 206 * @param s the string to escape 207 * @return the escaped string 208 * @since 5.7, 5.6.0-HF08 209 */ 210 public static String escapeString(String s) { 211 return "'" + escapeStringInner(s) + "'"; 212 } 213 214 /** 215 * Escapes a string (assumed to be single quoted) for NXQL. 216 * <p> 217 * Any single quote or backslash characters are escaped with a backslash. 218 * 219 * @param s the string to escape 220 * @return the escaped string, without external quotes 221 * @since 5.7, 5.6.0-HF08 222 */ 223 public static String escapeStringInner(String s) { 224 // backslash -> backslash backslash 225 // quote -> backslash quote 226 // newline -> backslash n 227 return s.replaceAll("\\\\", "\\\\\\\\").replaceAll("'", "\\\\'").replaceAll("\n", "\\\\n"); 228 } 229 230}