File: pgsRecord.h

package info (click to toggle)
pgadmin3 1.20.0~beta2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 73,704 kB
  • ctags: 18,591
  • sloc: cpp: 193,786; ansic: 18,736; sh: 5,154; pascal: 1,120; yacc: 927; makefile: 516; lex: 421; xml: 126; perl: 40
file content (155 lines) | stat: -rw-r--r-- 3,671 bytes parent folder | download
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_*/