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 *     Nuxeo - initial API and implementation
018 *
019 * $Id$
020 */
021
022package org.nuxeo.ecm.core.query.sql.model;
023
024import org.nuxeo.ecm.core.query.sql.parser.sym;
025
026/**
027 * @author <a href="mailto:bs@nuxeo.com">Bogdan Stefanescu</a>
028 */
029public abstract class Operator implements ASTNode {
030
031    private static final long serialVersionUID = -7547286202724191250L;
032
033    public final int id;
034
035    protected Operator(int id) {
036        this.id = id;
037    }
038
039    @Override
040    public void accept(IVisitor visitor) {
041        visitor.visitOperator(this);
042    }
043
044    @Override
045    public boolean equals(Object obj) {
046        if (obj == this) {
047            return true;
048        }
049        if (obj instanceof Operator) {
050            return id == ((Operator) obj).id;
051        }
052        return false;
053    }
054
055    @Override
056    public int hashCode() {
057        return Integer.valueOf(id).hashCode();
058    }
059
060    public static final Operator SUM = new Operator(sym.SUM) {
061        private static final long serialVersionUID = 8756154412317236768L;
062
063        @Override
064        public String toString() {
065            return "+";
066        }
067    };
068
069    public static final Operator SUB = new Operator(sym.SUB) {
070        private static final long serialVersionUID = -4503017673965713373L;
071
072        @Override
073        public String toString() {
074            return "-";
075        }
076    };
077
078    public static final Operator MUL = new Operator(sym.MUL) {
079        private static final long serialVersionUID = 5380905007476395593L;
080
081        @Override
082        public String toString() {
083            return "*";
084        }
085    };
086
087    public static final Operator DIV = new Operator(sym.SUB) {
088        private static final long serialVersionUID = -4386102635337691794L;
089
090        @Override
091        public String toString() {
092            return "/";
093        }
094    };
095
096    public static final Operator LT = new Operator(sym.LT) {
097        private static final long serialVersionUID = -2033782302546604350L;
098
099        @Override
100        public String toString() {
101            return "<";
102        }
103    };
104
105    public static final Operator GT = new Operator(sym.GT) {
106        private static final long serialVersionUID = -2450518400281430950L;
107
108        @Override
109        public String toString() {
110            return ">";
111        }
112    };
113
114    public static final Operator EQ = new Operator(sym.EQ) {
115        private static final long serialVersionUID = -1972357682689344169L;
116
117        @Override
118        public String toString() {
119            return "=";
120        }
121    };
122
123    public static final Operator NOTEQ = new Operator(sym.NOTEQ) {
124        private static final long serialVersionUID = -8652273867850494833L;
125
126        @Override
127        public String toString() {
128            return "<>";
129        }
130    };
131
132    public static final Operator LTEQ = new Operator(sym.LTEQ) {
133        private static final long serialVersionUID = 4069135918287483949L;
134
135        @Override
136        public String toString() {
137            return "<=";
138        }
139    };
140
141    public static final Operator GTEQ = new Operator(sym.GTEQ) {
142        private static final long serialVersionUID = 1626223797539530067L;
143
144        @Override
145        public String toString() {
146            return ">=";
147        }
148    };
149
150    public static final Operator AND = new Operator(sym.AND) {
151        private static final long serialVersionUID = -6609748385590865515L;
152
153        @Override
154        public String toString() {
155            return "AND";
156        }
157    };
158
159    public static final Operator NOT = new Operator(sym.NOT) {
160        private static final long serialVersionUID = -5748677478788963504L;
161
162        @Override
163        public String toString() {
164            return "NOT";
165        }
166    };
167
168    public static final Operator OR = new Operator(sym.OR) {
169        private static final long serialVersionUID = -2712197732723369571L;
170
171        @Override
172        public String toString() {
173            return "OR";
174        }
175    };
176
177    public static final Operator LIKE = new Operator(sym.LIKE) {
178        private static final long serialVersionUID = 8858605454924964544L;
179
180        @Override
181        public String toString() {
182            return "LIKE";
183        }
184    };
185
186    public static final Operator ILIKE = new Operator(sym.ILIKE) {
187        private static final long serialVersionUID = 1L;
188
189        @Override
190        public String toString() {
191            return "ILIKE";
192        }
193    };
194
195    public static final Operator IN = new Operator(sym.IN) {
196        private static final long serialVersionUID = 3202420273042048804L;
197
198        @Override
199        public String toString() {
200            return "IN";
201        }
202    };
203
204    public static final Operator BETWEEN = new Operator(sym.BETWEEN) {
205        private static final long serialVersionUID = 805484346863471707L;
206
207        @Override
208        public String toString() {
209            return "BETWEEN";
210        }
211    };
212
213    public static final Operator NOTLIKE = new Operator(sym.NOTLIKE) {
214        private static final long serialVersionUID = -7546164324575815543L;
215
216        @Override
217        public String toString() {
218            return "NOT LIKE";
219        }
220    };
221
222    public static final Operator NOTILIKE = new Operator(sym.NOTILIKE) {
223        private static final long serialVersionUID = 1L;
224
225        @Override
226        public String toString() {
227            return "NOT ILIKE";
228        }
229    };
230
231    public static final Operator NOTIN = new Operator(sym.NOTIN) {
232        private static final long serialVersionUID = -6960118201471749419L;
233
234        @Override
235        public String toString() {
236            return "NOT IN";
237        }
238    };
239
240    public static final Operator NOTBETWEEN = new Operator(sym.NOTBETWEEN) {
241        private static final long serialVersionUID = -7587336224759887334L;
242
243        @Override
244        public String toString() {
245            return "NOT BETWEEN";
246        }
247    };
248
249    public static final Operator STARTSWITH = new Operator(sym.STARTSWITH) {
250        private static final long serialVersionUID = 2438517467243495667L;
251
252        @Override
253        public String toString() {
254            return "STARTSWITH";
255        }
256    };
257
258    public static final Operator ISNULL = new Operator(sym.ISNULL) {
259        private static final long serialVersionUID = 4907947855862157696L;
260
261        @Override
262        public String toString() {
263            return "IS NULL";
264        }
265    };
266
267    public static final Operator ISNOTNULL = new Operator(sym.ISNOTNULL) {
268        private static final long serialVersionUID = 312081088718468562L;
269
270        @Override
271        public String toString() {
272            return "IS NOT NULL";
273        }
274    };
275
276}