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}