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
|
//////////////////////////////////////////////////////////////////////////
//
// pgScript - PostgreSQL Tools
//
// Copyright (C) 2002 - 2012, 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"));
}
}
}
|