xref: /AOO41X/main/connectivity/source/inc/file/FNumericFunctions.hxx (revision caf5cd79edad04a48dcaf209068b3b89eae4622e)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _CONNECTIVITY_FILE_FNUMERICFUNCTIONS_HXX_
25 #define _CONNECTIVITY_FILE_FNUMERICFUNCTIONS_HXX_
26 
27 #include "file/fcode.hxx"
28 #include "file/filedllapi.hxx"
29 
30 namespace connectivity
31 {
32     class OSQLParseNode;
33     namespace file
34     {
35         /** ABS(X)
36             Returns the absolute value of X:
37 
38         > SELECT ABS(2);
39                 -> 2
40         > SELECT ABS(-32);
41                 -> 32
42 
43         */
44         class OOp_Abs : public OUnaryOperator
45         {
46         protected:
47             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
48         };
49 
50         /** SIGN(X)
51             Returns the sign of the argument as -1, 0, or 1, depending on whether X is negative, zero, or positive:
52 
53             > SELECT SIGN(-32);
54                     -> -1
55             > SELECT SIGN(0);
56                     -> 0
57             > SELECT SIGN(234);
58                     -> 1
59 
60         */
61         class OOp_Sign : public OUnaryOperator
62         {
63         protected:
64             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
65         };
66 
67         /** MOD(N,M)
68             %
69                 Modulo (like the % operator in C). Returns the remainder of N divided by M:
70 
71             > SELECT MOD(234, 10);
72                     -> 4
73             > SELECT 253 % 7;
74                     -> 1
75             > SELECT MOD(29,9);
76                     -> 2
77             > SELECT 29 MOD 9;
78                     -> 2
79         */
80         class OOp_Mod : public OBinaryOperator
81         {
82         protected:
83             virtual ORowSetValue operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const;
84         };
85 
86         /** FLOOR(X)
87             Returns the largest integer value not greater than X:
88 
89         > SELECT FLOOR(1.23);
90                 -> 1
91         > SELECT FLOOR(-1.23);
92                 -> -2
93 
94         */
95         class OOp_Floor : public OUnaryOperator
96         {
97         protected:
98             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
99         };
100 
101         /** CEILING(X)
102             Returns the smallest integer value not less than X:
103 
104         > SELECT CEILING(1.23);
105                 -> 2
106         > SELECT CEILING(-1.23);
107                 -> -1
108 
109         */
110         class OOp_Ceiling : public OUnaryOperator
111         {
112         protected:
113             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
114         };
115 
116         /** ROUND(X)
117             ROUND(X,D)
118             Returns the argument X, rounded to the nearest integer. With two arguments rounded to a number to D decimals.
119 
120             > SELECT ROUND(-1.23);
121                     -> -1
122             > SELECT ROUND(-1.58);
123                     -> -2
124             > SELECT ROUND(1.58);
125                     -> 2
126             > SELECT ROUND(1.298, 1);
127                     -> 1.3
128             > SELECT ROUND(1.298, 0);
129                     -> 1
130             > SELECT ROUND(23.298, -1);
131                     -> 20
132         */
133         class OOp_Round : public ONthOperator
134         {
135         protected:
136             virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
137         };
138 
139         /** EXP(X)
140             Returns the value of e (the base of natural logarithms) raised to the power of X:
141 
142         > SELECT EXP(2);
143                 -> 7.389056
144         > SELECT EXP(-2);
145                 -> 0.135335
146         */
147         class OOp_Exp : public OUnaryOperator
148         {
149         protected:
150             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
151         };
152 
153         /** LN(X)
154             Returns the natural logarithm of X:
155 
156         > SELECT LN(2);
157                 -> 0.693147
158         > SELECT LN(-2);
159                 -> NULL
160 
161         */
162         class OOp_Ln : public OUnaryOperator
163         {
164         protected:
165             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
166         };
167 
168         /** LOG(X)
169             LOG(B,X)
170                 If called with one parameter, this function returns the natural logarithm of X:
171 
172             > SELECT LOG(2);
173                     -> 0.693147
174             > SELECT LOG(-2);
175                     -> NULL
176 
177                 If called with two parameters, this function returns the logarithm of X for an arbitary base B:
178 
179             > SELECT LOG(2,65536);
180                     -> 16.000000
181             > SELECT LOG(1,100);
182                     -> NULL
183         */
184         class OOp_Log : public ONthOperator
185         {
186         protected:
187             virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
188         };
189 
190         /** LOG10(X)
191             Returns the base-10 logarithm of X:
192 
193         > SELECT LOG10(2);
194                 -> 0.301030
195         > SELECT LOG10(100);
196                 -> 2.000000
197         > SELECT LOG10(-100);
198                 -> NULL
199         */
200         class OOp_Log10 : public OUnaryOperator
201         {
202         protected:
203             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
204         };
205 
206         /** POWER(X,Y)
207                 Returns the value of X raised to the power of Y:
208 
209             > SELECT POW(2,2);
210                     -> 4.000000
211             > SELECT POW(2,-2);
212                     -> 0.250000
213         */
214         class OOp_Pow : public OBinaryOperator
215         {
216         protected:
217             virtual ORowSetValue operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const;
218         };
219 
220         /** SQRT(X)
221             Returns the non-negative square root of X:
222 
223         > SELECT SQRT(4);
224                 -> 2.000000
225         > SELECT SQRT(20);
226                 -> 4.472136
227         */
228         class OOp_Sqrt : public OUnaryOperator
229         {
230         protected:
231             virtual ORowSetValue operate(const ORowSetValue& lhs) const;
232         };
233 
234         /** PI()
235             Returns the value of PI. The default shown number of decimals is 5, but  internally uses the full double precession for PI.
236 
237         > SELECT PI();
238                 -> 3.141593
239         > SELECT PI()+0.000000000000000000;
240                 -> 3.141592653589793116
241 
242         */
243         class OOp_Pi : public ONthOperator
244         {
245         protected:
246             virtual ORowSetValue operate(const ::std::vector<ORowSetValue>& lhs) const;
247         };
248 
249         /** COS(X)
250             Returns the cosine of X, where X is given in radians:
251 
252         > SELECT COS(PI());
253                 -> -1.000000
254         */
255         class OOp_Cos : public OUnaryOperator
256         {
257         protected:
258             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
259         };
260 
261         /** SIN(X)
262             Returns the sine of X, where X is given in radians:
263 
264         > SELECT SIN(PI());
265                 -> 0.000000
266 
267         */
268         class OOp_Sin : public OUnaryOperator
269         {
270         protected:
271             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
272         };
273         /** TAN(X)
274             Returns the tangent of X, where X is given in radians:
275 
276         > SELECT TAN(PI()+1);
277                 -> 1.557408
278         */
279         class OOp_Tan : public OUnaryOperator
280         {
281         protected:
282             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
283         };
284 
285         /** ACOS(X)
286             Returns the arc cosine of X, that is, the value whose cosine is X. Returns NULL if X is not in the range -1 to 1:
287 
288         > SELECT ACOS(1);
289                 -> 0.000000
290         > SELECT ACOS(1.0001);
291                 -> NULL
292         > SELECT ACOS(0);
293                 -> 1.570796
294         */
295         class OOp_ACos : public OUnaryOperator
296         {
297         protected:
298             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
299         };
300 
301         /** ASIN(X)
302             Returns the arc sine of X, that is, the value whose sine is X. Returns NULL if X is not in the range -1 to 1:
303 
304         > SELECT ASIN(0.2);
305                 -> 0.201358
306         > SELECT ASIN('foo');
307                 -> 0.000000
308         */
309         class OOp_ASin : public OUnaryOperator
310         {
311         protected:
312             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
313         };
314 
315         /** ATAN(X)
316             Returns the arc tangent of X, that is, the value whose tangent is X:
317 
318         > SELECT ATAN(2);
319                 -> 1.107149
320         > SELECT ATAN(-2);
321                 -> -1.107149
322         */
323         class OOp_ATan : public OUnaryOperator
324         {
325         protected:
326             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
327         };
328 
329         /** ATAN2(Y,X)
330             Returns the arc tangent of the two variables X and Y. It is similar to calculating the arc tangent of Y / X, except that the signs of both arguments are used to determine the quadrant of the result:
331 
332         > SELECT ATAN2(-2,2);
333                 -> -0.785398
334         > SELECT ATAN2(PI(),0);
335                 -> 1.570796
336 
337         */
338         class OOp_ATan2 : public OBinaryOperator
339         {
340         protected:
341             virtual ORowSetValue operate(const ORowSetValue& lhs,const ORowSetValue& rhs) const;
342         };
343 
344         /** DEGREES(X)
345             Returns the argument X, converted from radians to degrees:
346 
347         > SELECT DEGREES(PI());
348                 -> 180.000000
349         */
350         class OOp_Degrees : public OUnaryOperator
351         {
352         protected:
353             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
354         };
355 
356         /** RADIANS(X)
357             Returns the argument X, converted from degrees to radians:
358 
359         > SELECT RADIANS(90);
360                 -> 1.570796
361 
362         */
363         class OOp_Radians : public OUnaryOperator
364         {
365         protected:
366             virtual ORowSetValue operate(const ORowSetValue& lhs = ORowSetValue()) const;
367         };
368     }
369 }
370 
371 #endif // _CONNECTIVITY_FILE_FNUMERICFUNCTIONS_HXX_
372 
373