1 {*********************************************************}
3 { Zeos Database Objects }
4 { Variables classes and interfaces }
6 { Originally written by Sergey Seroukhov }
8 {*********************************************************}
10 {@********************************************************}
11 { Copyright (c) 1999-2012 Zeos Development Group }
13 { License Agreement: }
15 { This library is distributed in the hope that it will be }
16 { useful, but WITHOUT ANY WARRANTY; without even the }
17 { implied warranty of MERCHANTABILITY or FITNESS FOR }
18 { A PARTICULAR PURPOSE. See the GNU Lesser General }
19 { Public License for more details. }
21 { The source code of the ZEOS Libraries and packages are }
22 { distributed under the Library GNU General Public }
23 { License (see the file COPYING / COPYING.ZEOS) }
24 { with the following modification: }
25 { As a special exception, the copyright holders of this }
26 { library give you permission to link this library with }
27 { independent modules to produce an executable, }
28 { regardless of the license terms of these independent }
29 { modules, and to copy and distribute the resulting }
30 { executable under terms of your choice, provided that }
31 { you also meet, for each linked independent module, }
32 { the terms and conditions of the license of that module. }
33 { An independent module is a module which is not derived }
34 { from or based on this library. If you modify this }
35 { library, you may extend this exception to your version }
36 { of the library, but you are not obligated to do so. }
37 { If you do not wish to do so, delete this exception }
38 { statement from your version. }
41 { The project web site is located on: }
42 { http://zeos.firmos.at (FORUM) }
43 { http://sourceforge.net/p/zeoslib/tickets/ (BUGTRACKER)}
44 { svn://svn.code.sf.net/p/zeoslib/code-0/trunk (SVN) }
46 { http://www.sourceforge.net/projects/zeoslib. }
49 { Zeos Development Group. }
50 {********************************************************@}
59 SysUtils, ZFunctions, ZExpression, ZVariant;
64 {** Implements a E function. }
65 TZEFunction = class (TZAbstractFunction)
67 function Execute(Stack: TZExecutionStack;
68 VariantManager: IZVariantManager): TZVariant; override;
71 {** Implements a PI function. }
72 TZPIFunction = class (TZAbstractFunction)
74 function Execute(Stack: TZExecutionStack;
75 VariantManager: IZVariantManager): TZVariant; override;
78 {** Implements a RND function. }
79 TZRndFunction = class (TZAbstractFunction)
81 function Execute(Stack: TZExecutionStack;
82 VariantManager: IZVariantManager): TZVariant; override;
85 {** Implements a ABS function. }
86 TZAbsFunction = class (TZAbstractFunction)
88 function Execute(Stack: TZExecutionStack;
89 VariantManager: IZVariantManager): TZVariant; override;
93 {** Implements a COS function. }
94 TZCosFunction = class (TZAbstractFunction)
96 function Execute(Stack: TZExecutionStack;
97 VariantManager: IZVariantManager): TZVariant; override;
100 {** Implements a COT function. }
101 TZCotFunction = class (TZAbstractFunction)
103 function Execute(Stack: TZExecutionStack;
104 VariantManager: IZVariantManager): TZVariant; override;
107 {** Implements a SIN function. }
108 TZSinFunction = class (TZAbstractFunction)
110 function Execute(Stack: TZExecutionStack;
111 VariantManager: IZVariantManager): TZVariant; override;
114 {** Implements a TAN function. }
115 TZTanFunction = class (TZAbstractFunction)
117 function Execute(Stack: TZExecutionStack;
118 VariantManager: IZVariantManager): TZVariant; override;
121 {** Implements a ACOS function. }
122 TZAcosFunction = class (TZAbstractFunction)
124 function Execute(Stack: TZExecutionStack;
125 VariantManager: IZVariantManager): TZVariant; override;
128 {** Implements a ASIN function. }
129 TZAsinFunction = class (TZAbstractFunction)
131 function Execute(Stack: TZExecutionStack;
132 VariantManager: IZVariantManager): TZVariant; override;
135 {** Implements a ATAN function. }
136 TZAtanFunction = class (TZAbstractFunction)
138 function Execute(Stack: TZExecutionStack;
139 VariantManager: IZVariantManager): TZVariant; override;
143 {** Implements a ROUND function. }
144 TZRoundFunction = class (TZAbstractFunction)
146 function Execute(Stack: TZExecutionStack;
147 VariantManager: IZVariantManager): TZVariant; override;
150 {** Implements a TRUNC function. }
151 TZTruncFunction = class (TZAbstractFunction)
153 function Execute(Stack: TZExecutionStack;
154 VariantManager: IZVariantManager): TZVariant; override;
157 {** Implements a INT function. }
158 TZIntFunction = class (TZAbstractFunction)
160 function Execute(Stack: TZExecutionStack;
161 VariantManager: IZVariantManager): TZVariant; override;
164 {** Implements a FRAC function. }
165 TZFracFunction = class (TZAbstractFunction)
167 function Execute(Stack: TZExecutionStack;
168 VariantManager: IZVariantManager): TZVariant; override;
171 {** Implements a CEIL function. }
172 TZCeilFunction = class (TZAbstractFunction)
174 function Execute(Stack: TZExecutionStack;
175 VariantManager: IZVariantManager): TZVariant; override;
178 {** Implements a FLOOR function. }
179 TZFloorFunction = class (TZAbstractFunction)
181 function Execute(Stack: TZExecutionStack;
182 VariantManager: IZVariantManager): TZVariant; override;
186 {** Implements a EXP function. }
187 TZExpFunction = class (TZAbstractFunction)
189 function Execute(Stack: TZExecutionStack;
190 VariantManager: IZVariantManager): TZVariant; override;
193 {** Implements a LOG function. }
194 TZLogFunction = class (TZAbstractFunction)
196 function Execute(Stack: TZExecutionStack;
197 VariantManager: IZVariantManager): TZVariant; override;
200 {** Implements a LOG10 function. }
201 TZLog10Function = class (TZAbstractFunction)
203 function Execute(Stack: TZExecutionStack;
204 VariantManager: IZVariantManager): TZVariant; override;
207 {** Implements a SQR function. }
208 TZSqrFunction = class (TZAbstractFunction)
210 function Execute(Stack: TZExecutionStack;
211 VariantManager: IZVariantManager): TZVariant; override;
214 procedure AddMathFunctions(Functions : TZFunctionsList);
228 Executes this function.
229 @param Stack the stack object.
230 @param VariantManager a reference to variant processor object.
231 @returns a function value.
233 function TZEFunction.Execute(Stack: TZExecutionStack;
234 VariantManager: IZVariantManager): TZVariant;
236 CheckParamsCount(Stack, 0);
237 VariantManager.SetAsFloat(Result, Exp(1));
243 Executes this function.
244 @param Stack the stack object.
245 @param VariantManager a reference to variant processor object.
246 @returns a function value.
248 function TZPIFunction.Execute(Stack: TZExecutionStack;
249 VariantManager: IZVariantManager): TZVariant;
251 CheckParamsCount(Stack, 0);
252 VariantManager.SetAsFloat(Result, PI);
258 Executes this function.
259 @param Stack the stack object.
260 @param VariantManager a reference to variant processor object.
261 @returns a function value.
263 function TZRndFunction.Execute(Stack: TZExecutionStack;
264 VariantManager: IZVariantManager): TZVariant;
266 CheckParamsCount(Stack, 0);
267 VariantManager.SetAsFloat(Result, Random);
273 Executes this function.
274 @param Stack the stack object.
275 @param VariantManager a reference to variant processor object.
276 @returns a function value.
278 function TZAbsFunction.Execute(Stack: TZExecutionStack;
279 VariantManager: IZVariantManager): TZVariant;
283 CheckParamsCount(Stack, 1);
284 Value := Stack.GetParameter(1);
285 if Value.VType = vtInteger then
286 VariantManager.SetAsInteger(Result, Abs(Value.VInteger))
287 else if Value.VType = vtFloat then
288 VariantManager.SetAsFloat(Result, Abs(Value.VFloat))
296 Executes this function.
297 @param Stack the stack object.
298 @param VariantManager a reference to variant processor object.
299 @returns a function value.
301 function TZExpFunction.Execute(Stack: TZExecutionStack;
302 VariantManager: IZVariantManager): TZVariant;
304 CheckParamsCount(Stack, 1);
305 VariantManager.SetAsFloat(Result, Exp(
306 VariantManager.GetAsFloat(Stack.GetParameter(1))));
312 Executes this function.
313 @param Stack the stack object.
314 @param VariantManager a reference to variant processor object.
315 @returns a function value.
317 function TZLogFunction.Execute(Stack: TZExecutionStack;
318 VariantManager: IZVariantManager): TZVariant;
320 CheckParamsCount(Stack, 1);
321 VariantManager.SetAsFloat(Result, Ln(
322 VariantManager.GetAsFloat(Stack.GetParameter(1))));
328 Executes this function.
329 @param Stack the stack object.
330 @param VariantManager a reference to variant processor object.
331 @returns a function value.
333 function TZLog10Function.Execute(Stack: TZExecutionStack;
334 VariantManager: IZVariantManager): TZVariant;
336 CheckParamsCount(Stack, 1);
337 VariantManager.SetAsFloat(Result, Log10(
338 VariantManager.GetAsFloat(Stack.GetParameter(1))));
344 Executes this function.
345 @param Stack the stack object.
346 @param VariantManager a reference to variant processor object.
347 @returns a function value.
349 function TZCosFunction.Execute(Stack: TZExecutionStack;
350 VariantManager: IZVariantManager): TZVariant;
352 CheckParamsCount(Stack, 1);
353 VariantManager.SetAsFloat(Result, Cos(
354 VariantManager.GetAsFloat(Stack.GetParameter(1))));
360 Executes this function.
361 @param Stack the stack object.
362 @param VariantManager a reference to variant processor object.
363 @returns a function value.
365 function TZCotFunction.Execute(Stack: TZExecutionStack;
366 VariantManager: IZVariantManager): TZVariant;
368 CheckParamsCount(Stack, 1);
369 VariantManager.SetAsFloat(Result, Cotan(
370 VariantManager.GetAsFloat(Stack.GetParameter(1))));
376 Executes this function.
377 @param Stack the stack object.
378 @param VariantManager a reference to variant processor object.
379 @returns a function value.
381 function TZSinFunction.Execute(Stack: TZExecutionStack;
382 VariantManager: IZVariantManager): TZVariant;
384 CheckParamsCount(Stack, 1);
385 VariantManager.SetAsFloat(Result, Sin(
386 VariantManager.GetAsFloat(Stack.GetParameter(1))));
392 Executes this function.
393 @param Stack the stack object.
394 @param VariantManager a reference to variant processor object.
395 @returns a function value.
397 function TZTanFunction.Execute(Stack: TZExecutionStack;
398 VariantManager: IZVariantManager): TZVariant;
400 CheckParamsCount(Stack, 1);
401 VariantManager.SetAsFloat(Result, Tan(
402 VariantManager.GetAsFloat(Stack.GetParameter(1))));
408 Executes this function.
409 @param Stack the stack object.
410 @param VariantManager a reference to variant processor object.
411 @returns a function value.
413 function TZAcosFunction.Execute(Stack: TZExecutionStack;
414 VariantManager: IZVariantManager): TZVariant;
416 CheckParamsCount(Stack, 1);
417 VariantManager.SetAsFloat(Result, ArcCos(
418 VariantManager.GetAsFloat(Stack.GetParameter(1))));
424 Executes this function.
425 @param Stack the stack object.
426 @param VariantManager a reference to variant processor object.
427 @returns a function value.
429 function TZAsinFunction.Execute(Stack: TZExecutionStack;
430 VariantManager: IZVariantManager): TZVariant;
432 CheckParamsCount(Stack, 1);
433 VariantManager.SetAsFloat(Result, ArcSin(
434 VariantManager.GetAsFloat(Stack.GetParameter(1))));
440 Executes this function.
441 @param Stack the stack object.
442 @param VariantManager a reference to variant processor object.
443 @returns a function value.
445 function TZAtanFunction.Execute(Stack: TZExecutionStack;
446 VariantManager: IZVariantManager): TZVariant;
448 CheckParamsCount(Stack, 1);
449 VariantManager.SetAsFloat(Result, ArcTan(
450 VariantManager.GetAsFloat(Stack.GetParameter(1))));
456 Executes this function.
457 @param Stack the stack object.
458 @param VariantManager a reference to variant processor object.
459 @returns a function value.
461 function TZCeilFunction.Execute(Stack: TZExecutionStack;
462 VariantManager: IZVariantManager): TZVariant;
464 CheckParamsCount(Stack, 1);
465 VariantManager.SetAsInteger(Result, Ceil(
466 VariantManager.GetAsFloat(Stack.GetParameter(1))));
472 Executes this function.
473 @param Stack the stack object.
474 @param VariantManager a reference to variant processor object.
475 @returns a function value.
477 function TZFloorFunction.Execute(Stack: TZExecutionStack;
478 VariantManager: IZVariantManager): TZVariant;
480 CheckParamsCount(Stack, 1);
481 VariantManager.SetAsInteger(Result, Floor(
482 VariantManager.GetAsFloat(Stack.GetParameter(1))));
488 Executes this function.
489 @param Stack the stack object.
490 @param VariantManager a reference to variant processor object.
491 @returns a function value.
493 function TZRoundFunction.Execute(Stack: TZExecutionStack;
494 VariantManager: IZVariantManager): TZVariant;
496 CheckParamsCount(Stack, 1);
497 VariantManager.SetAsInteger(Result, Round(VariantManager.GetAsFloat(Stack.GetParameter(1))));
503 Executes this function.
504 @param Stack the stack object.
505 @param VariantManager a reference to variant processor object.
506 @returns a function value.
508 function TZTruncFunction.Execute(Stack: TZExecutionStack;
509 VariantManager: IZVariantManager): TZVariant;
511 CheckParamsCount(Stack, 1);
512 VariantManager.SetAsInteger(Result, Trunc(VariantManager.GetAsFloat(Stack.GetParameter(1))));
518 Executes this function.
519 @param Stack the stack object.
520 @param VariantManager a reference to variant processor object.
521 @returns a function value.
523 function TZIntFunction.Execute(Stack: TZExecutionStack;
524 VariantManager: IZVariantManager): TZVariant;
526 CheckParamsCount(Stack, 1);
527 VariantManager.SetAsFloat(Result, Int(VariantManager.GetAsFloat(Stack.GetParameter(1))));
533 Executes this function.
534 @param Stack the stack object.
535 @param VariantManager a reference to variant processor object.
536 @returns a function value.
538 function TZFracFunction.Execute(Stack: TZExecutionStack;
539 VariantManager: IZVariantManager): TZVariant;
541 CheckParamsCount(Stack, 1);
542 VariantManager.SetAsFloat(Result, Frac(VariantManager.GetAsFloat(Stack.GetParameter(1))));
548 Executes this function.
549 @param Stack the stack object.
550 @param VariantManager a reference to variant processor object.
551 @returns a function value.
553 function TZSqrFunction.Execute(Stack: TZExecutionStack;
554 VariantManager: IZVariantManager): TZVariant;
556 CheckParamsCount(Stack, 1);
557 VariantManager.SetAsFloat(Result, Sqrt(
558 VariantManager.GetAsFloat(Stack.GetParameter(1))));
561 procedure AddMathFunctions(Functions : TZFunctionsList);
563 Functions.Add(TZEFunction.Create('E'));
564 Functions.Add(TZPIFunction.Create('PI'));
565 Functions.Add(TZRndFunction.Create('RND'));
566 Functions.Add(TZAbsFunction.Create('ABS'));
567 Functions.Add(TZExpFunction.Create('EXP'));
568 Functions.Add(TZLogFunction.Create('LOG'));
569 Functions.Add(TZLog10Function.Create('LOG10'));
570 Functions.Add(TZCosFunction.Create('COS'));
571 Functions.Add(TZSinFunction.Create('SIN'));
572 Functions.Add(TZTanFunction.Create('TAN'));
573 Functions.Add(TZCotFunction.Create('COT'));
574 Functions.Add(TZAcosFunction.Create('ACOS'));
575 Functions.Add(TZAsinFunction.Create('ASIN'));
576 Functions.Add(TZAtanFunction.Create('ATAN'));
577 Functions.Add(TZRoundFunction.Create('ROUND'));
578 Functions.Add(TZCeilFunction.Create('CEIL'));
579 Functions.Add(TZFloorFunction.Create('FLOOR'));
580 Functions.Add(TZIntFunction.Create('INT'));
581 Functions.Add(TZTruncFunction.Create('TRUNC'));
582 Functions.Add(TZFracFunction.Create('FRAC'));
583 Functions.Add(TZSqrFunction.Create('SQR'));
584 Functions.Add(TZSqrFunction.Create('SQRT'));