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}