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 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
//////////////////////////////////////////////////////////////////////////
//
// pgScript - PostgreSQL Tools
//
// Copyright (C) 2002 - 2014, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////////////////
#ifndef PGSRECORD_H_
#define PGSRECORD_H_
#include "pgscript/pgScript.h"
#include "pgscript/objects/pgsVariable.h"
WX_DECLARE_OBJARRAY(pgsOperand, pgsVectorRecordLine);
WX_DECLARE_OBJARRAY(pgsVectorRecordLine, pgsVectorRecord);
class pgsNumber;
class pgsString;
class pgsRecord : public pgsVariable
{
public:
virtual pgsOperand pgs_plus(const pgsVariable &rhs) const;
virtual pgsOperand pgs_minus(const pgsVariable &rhs) const;
virtual pgsOperand pgs_times(const pgsVariable &rhs) const;
virtual pgsOperand pgs_over(const pgsVariable &rhs) const;
virtual pgsOperand pgs_modulo(const pgsVariable &rhs) const;
virtual pgsOperand pgs_equal(const pgsVariable &rhs) const;
virtual pgsOperand pgs_different(const pgsVariable &rhs) const;
virtual pgsOperand pgs_greater(const pgsVariable &rhs) const;
virtual pgsOperand pgs_lower(const pgsVariable &rhs) const;
virtual pgsOperand pgs_lower_equal(const pgsVariable &rhs) const;
virtual pgsOperand pgs_greater_equal(const pgsVariable &rhs) const;
virtual pgsOperand pgs_not() const;
virtual bool pgs_is_true() const;
virtual pgsOperand pgs_almost_equal(const pgsVariable &rhs) const;
protected:
pgsVectorRecord m_record;
wxArrayString m_columns;
public:
explicit pgsRecord(const USHORT &nb_columns);
virtual ~pgsRecord();
virtual pgsVariable *clone() const;
/* pgsRecord(const pgsRecord & that); */
/* pgsRecord & operator =(const pgsRecord & that); */
virtual wxString value() const;
virtual pgsOperand eval(pgsVarMap &vars) const;
public:
USHORT count_lines() const;
USHORT count_columns() const;
/**
* Inserts a new element at line.column. If there is something then
* it is deleted before inserting the new element.
*/
bool insert(const USHORT &line, const USHORT &column,
pgsOperand value);
/**
* Retrieves the element at line.column. If it does not exist it
* returns an empty string.
*/
pgsOperand get(const USHORT &line,
const USHORT &column) const;
pgsOperand get_line(const USHORT &line) const;
/**
* Sets the name of a column. If the index is too high or if the name
* already exists then false is returned.
*/
bool set_column_name(const USHORT &column, wxString name);
/**
* Gets the index of a given column. If this column does not exist then it
* returns count_columns() (the number of columns) which means that this value
* is unusable. So if get_column(...) == count_colums() an error occurred.
*/
USHORT get_column(wxString name) const;
bool remove_line(const USHORT &line);
private:
bool newline();
bool valid() const;
public:
bool operator==(const pgsRecord &rhs) const;
bool operator!=(const pgsRecord &rhs) const;
bool operator<(const pgsRecord &rhs) const;
bool operator>(const pgsRecord &rhs) const;
bool operator<=(const pgsRecord &rhs) const;
bool operator>=(const pgsRecord &rhs) const;
bool almost_equal(const pgsRecord &rhs) const;
private:
bool records_equal(const pgsRecord &lhs, const pgsRecord &rhs,
bool case_sensitive = true) const;
bool lines_equal(const pgsVectorRecordLine &lhs,
const pgsVectorRecordLine &rhs, bool case_sensitive = true) const;
public:
virtual pgsNumber number() const;
virtual pgsRecord record() const;
virtual pgsString string() const;
};
#endif /*PGSRECORD_H_*/
|