1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
//////////////////////////////////////////////////////////////////////////
//
// pgScript - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////////////////
#ifndef PGSVARIABLE_H_
#define PGSVARIABLE_H_
#include "pgscript/pgScript.h"
#include "pgscript/utilities/pgsMapm.h"
#include "pgscript/expressions/pgsExpression.h"
class pgsNumber;
class pgsRecord;
class pgsString;
class pgsVariable : public pgsExpression
{
friend pgsOperand operator+(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator-(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator*(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator/(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator%(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator==(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator!=(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator<(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator>(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator<=(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator>=(const pgsVariable &lhs, const pgsVariable &rhs);
friend pgsOperand operator!(const pgsVariable &lhs);
friend pgsOperand operator&=(const pgsVariable &lhs, const pgsVariable &rhs);
public:
virtual pgsOperand pgs_plus(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_minus(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_times(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_over(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_modulo(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_equal(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_different(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_greater(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_lower(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_lower_equal(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_greater_equal(const pgsVariable &rhs) const = 0;
virtual pgsOperand pgs_not() const = 0;
virtual bool pgs_is_true() const = 0;
virtual pgsOperand pgs_almost_equal(const pgsVariable &rhs) const = 0;
public:
enum pgsTypes
{
pgsTReal, pgsTInt, pgsTString, pgsTRecord
};
protected:
pgsVariable(const pgsTypes &type);
pgsTypes m_type;
public:
virtual ~pgsVariable();
virtual pgsVariable *clone() const = 0;
/* pgsVariable(const pgsVariable & that); */
/* pgsVariable & operator =(const pgsVariable & that); */
static MAPM num(const pgsOperand &var);
static MAPM num(const wxString &var);
public:
virtual wxString value() const = 0;
virtual pgsOperand eval(pgsVarMap &vars) const = 0;
public:
bool is_number() const;
bool is_integer() const;
bool is_real() const;
bool is_string() const;
bool is_record() const;
const pgsTypes &type() const;
public:
virtual pgsNumber number() const = 0;
virtual pgsRecord record() const = 0;
virtual pgsString string() const = 0;
};
#endif /*PGSVARIABLE_H_*/
|