pgadmin3/pgscript/expressions/pgsGenRegex.cpp
2020-07-07 22:19:12 +05:00

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"));
}
}
}