Expr.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright: All Rights Reserved
  2. // Author: egametang@gmail.com (tanghai)
  3. #ifndef ORM_EXPRESSION_H
  4. #define ORM_EXPRESSION_H
  5. #include <list>
  6. #include <string>
  7. #include <unordered_set>
  8. #include <google/protobuf/message.h>
  9. namespace Egametang {
  10. class Column;
  11. class Expr
  12. {
  13. protected:
  14. // 记录表达式中用到的列名
  15. std::list<Column> columns;
  16. std::string exprStr;
  17. public:
  18. virtual ~Expr();
  19. Expr& operator=(const Expr& expr);
  20. std::string ToString() const;
  21. bool Empty() const;
  22. void SaveColumn(const Expr& expr);
  23. void SaveColumn(const Column& column);
  24. void CheckAllColumns(const google::protobuf::Message& message) const;
  25. };
  26. class Not: public Expr
  27. {
  28. public:
  29. explicit Not(const Expr& expr);
  30. };
  31. class And: public Expr
  32. {
  33. public:
  34. explicit And(const Expr& left, const Expr& right);
  35. };
  36. class Or: public Expr
  37. {
  38. public:
  39. explicit Or(const Expr& left, const Expr& right);
  40. };
  41. // > < >= <= != like
  42. class Oper: public Expr
  43. {
  44. public:
  45. Oper(const Column& left, const std::string& op, const std::string& right);
  46. Oper(const Column& left, const std::string& op, const Column& right);
  47. Oper(const Column& left, const std::string& op, int right);
  48. Oper(const Column& left, const std::string& op, double right);
  49. };
  50. } // namespace Egametang
  51. #endif // ORM_EXPRESSION_H