mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-05-15 14:15:49 -06:00
98 lines
2.3 KiB
C++
98 lines
2.3 KiB
C++
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// pgScript - PostgreSQL Tools
|
|
//
|
|
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
|
|
// This software is released under the PostgreSQL Licence
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include "pgAdmin3.h"
|
|
#include "pgscript/expressions/pgsGenRegex.h"
|
|
|
|
#include "pgscript/exceptions/pgsParameterException.h"
|
|
#include "pgscript/generators/pgsRegexGen.h"
|
|
#include "pgscript/objects/pgsGenerator.h"
|
|
|
|
pgsGenRegex::pgsGenRegex(const pgsExpression *regex, const pgsExpression *seed) :
|
|
pgsExpression(), m_regex(regex), m_seed(seed)
|
|
{
|
|
|
|
}
|
|
|
|
pgsGenRegex::~pgsGenRegex()
|
|
{
|
|
pdelete(m_regex);
|
|
pdelete(m_seed);
|
|
}
|
|
|
|
pgsExpression *pgsGenRegex::clone() const
|
|
{
|
|
return pnew pgsGenRegex(*this);
|
|
}
|
|
|
|
pgsGenRegex::pgsGenRegex(const pgsGenRegex &that) :
|
|
pgsExpression(that)
|
|
{
|
|
m_regex = that.m_regex->clone();
|
|
m_seed = that.m_seed->clone();
|
|
}
|
|
|
|
pgsGenRegex &pgsGenRegex::operator =(const pgsGenRegex &that)
|
|
{
|
|
if (this != &that)
|
|
{
|
|
pgsExpression::operator=(that);
|
|
pdelete(m_regex);
|
|
pdelete(m_seed);
|
|
m_regex = that.m_regex->clone();
|
|
m_seed = that.m_seed->clone();
|
|
}
|
|
return (*this);
|
|
}
|
|
|
|
wxString pgsGenRegex::value() const
|
|
{
|
|
return wxString() << wxT("string[ regex = ") << m_regex->value()
|
|
<< wxT(" seed = ") << m_seed->value() << wxT(" ]");
|
|
}
|
|
|
|
pgsOperand pgsGenRegex::eval(pgsVarMap &vars) const
|
|
{
|
|
// Evaluate parameters
|
|
pgsOperand regex(m_regex->eval(vars));
|
|
pgsOperand seed(m_seed->eval(vars));
|
|
|
|
// Check parameters and create the generator
|
|
if (regex->is_string() && seed->is_integer())
|
|
{
|
|
long aux_seed;
|
|
seed->value().ToLong(&aux_seed);
|
|
pgsRegexGen *gen = pnew pgsRegexGen(regex->value(), aux_seed);
|
|
if (!gen->is_valid())
|
|
{
|
|
pdelete(gen);
|
|
throw pgsParameterException(wxString() << value()
|
|
<< wxT(":\nregex is not a valid regular expression"));
|
|
}
|
|
else
|
|
{
|
|
return pnew pgsGenerator(pgsVariable::pgsTString, gen);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Deal with errors
|
|
if (!regex->is_string())
|
|
{
|
|
throw pgsParameterException(wxString() << value()
|
|
<< wxT(":\nregex should be a string"));
|
|
}
|
|
else
|
|
{
|
|
throw pgsParameterException(wxString() << value()
|
|
<< wxT(":\nseed should be an integer"));
|
|
}
|
|
}
|
|
}
|