pgadmin3/include/pgscript/utilities/pgsContext.h
2020-07-07 22:19:12 +05:00

119 lines
2.9 KiB
C++

//////////////////////////////////////////////////////////////////////////
//
// pgScript - PostgreSQL Tools
//
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
// This software is released under the PostgreSQL Licence
//
//////////////////////////////////////////////////////////////////////////
#ifndef PGSCONTEXT_H_
#define PGSCONTEXT_H_
#include "pgscript/pgScript.h"
#include "pgscript/statements/pgsStmtList.h"
WX_DECLARE_LIST(pgsExpression, pgsListExpression);
class pgsThread;
/** pgsContext is kind of a util class used during script parsing.
* It is used in pgsParser.yy. Some members are made public because they need
* to be easily available in order to be passed to some other objects. */
class pgsContext
{
private:
wxArrayString m_columns;
/** List of temporary expressions or variables. */
pgsListExpression m_vars;
/** List of temporary statements. */
pgsListStmt m_stmts;
public:
/** For writing to the output. */
pgsOutputStream &m_cout;
public:
//////////////////////////////
// Constructor & destructor //
//////////////////////////////
pgsContext(pgsOutputStream &cout);
~pgsContext();
///////////////////////////////
// Methods generating values //
///////////////////////////////
/** Generates a pgsNumber with value '0' and put it on stack. */
pgsVariable *zero();
/** Generates a pgsNumber with value '0' and put it on stack. */
pgsVariable *one();
/** Generates a pgsNumber with value now() and put it on stack. */
pgsVariable *seed();
/** Generates a pgsString with the locale encoding and put it on stack. */
pgsVariable *encoding();
/** Generates an empty statement list and put it on stack. */
pgsStmtList *stmt_list(pgsThread *app = 0);
////////////////////////////////////////////////
// For managing a new record declaration list //
////////////////////////////////////////////////
/** Adds a column name to the column list. */
void add_column(const wxString &column);
/** Retrieves the column list. */
const wxArrayString &columns();
/** Clears the column list. */
void clear_columns();
/////////////////////////////////////////////
// For managing stacks of temporary values //
/////////////////////////////////////////////
/** Adds a pgsExpression on stack. */
void push_var(pgsExpression *var);
/** Removes the last pgsExpression on stack. */
void pop_var();
/** Gives the number of pgsExpression on stack. */
size_t size_vars() const;
/** Adds a pgsStmt on stack. */
void push_stmt(pgsStmt *stmt);
/** Removes the last pgsStmt on stack. */
void pop_stmt();
/** Gives the number of pgsStmt on stack. */
size_t size_stmts() const;
/** When an error occurs in the parser this method must be called in order
* to free the memory (i.e the temporary pgsExpression & pgsStmt). */
void clear_stacks();
private:
pgsContext(const pgsContext &that);
pgsContext &operator=(const pgsContext &that);
};
#endif /*PGSCONTEXT_H_*/