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