ArithmeticExpressions.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. //
  2. // ArithmeticExpressions.cs
  3. //
  4. // Author:
  5. // Juraj Skripsky ([email protected])
  6. //
  7. // (C) 2004 HotFeet GmbH (http://www.hotfeet.ch)
  8. //
  9. using System;
  10. using System.Collections;
  11. using System.Data;
  12. namespace Mono.Data.SqlExpressions {
  13. public class Negative : UnaryExpression {
  14. public Negative (IExpression e) : base (e) {}
  15. override public object Eval (DataRow row)
  16. {
  17. return Numeric.Negative ((IConvertible)expr.Eval (row));
  18. }
  19. }
  20. public class ArithmeticOperation : BinaryOpExpression {
  21. public ArithmeticOperation (Operation op, IExpression e1, IExpression e2) : base (op, e1, e2) {}
  22. override public object Eval (DataRow row)
  23. {
  24. object obj1 = expr1.Eval (row);
  25. object obj2 = expr2.Eval (row);
  26. if (op == Operation.ADD && (obj1 is string || obj2 is string))
  27. return obj1.ToString() + obj2.ToString();
  28. IConvertible o1 = (IConvertible)obj1;
  29. IConvertible o2 = (IConvertible)obj2;
  30. switch (op) {
  31. case Operation.ADD:
  32. return Numeric.Add (o1, o2);
  33. case Operation.SUB:
  34. return Numeric.Subtract (o1, o2);
  35. case Operation.MUL:
  36. return Numeric.Multiply (o1, o2);
  37. case Operation.DIV:
  38. return Numeric.Divide (o1, o2);
  39. case Operation.MOD:
  40. return Numeric.Modulo (o1, o2);
  41. default:
  42. return 0;
  43. }
  44. }
  45. }
  46. }