1
//////////////////////////////////////////////////////////////////////////
3
// pgScript - PostgreSQL Tools
4
// RCS-ID: $Id: pgsGenString.cpp 7758 2009-03-26 20:49:59Z dpage $
5
// Copyright (C) 2002 - 2009, The pgAdmin Development Team
6
// This software is released under the BSD Licence
8
//////////////////////////////////////////////////////////////////////////
12
#include "pgscript/expressions/pgsGenString.h"
14
#include "pgscript/exceptions/pgsParameterException.h"
15
#include "pgscript/generators/pgsStringGen.h"
16
#include "pgscript/objects/pgsGenerator.h"
18
pgsGenString::pgsGenString(const pgsExpression * min, const pgsExpression * max,
19
const pgsExpression * nb_words, const pgsExpression * seed) :
20
pgsExpression(), m_min(min), m_max(max), m_nb_words(nb_words), m_seed(seed)
25
pgsGenString::~pgsGenString()
33
pgsExpression * pgsGenString::clone() const
35
return pnew pgsGenString(*this);
38
pgsGenString::pgsGenString(const pgsGenString & that) :
41
m_min = that.m_min->clone();
42
m_max = that.m_max->clone();
43
m_nb_words = that.m_nb_words->clone();
44
m_seed = that.m_seed->clone();
47
pgsGenString & pgsGenString::operator =(const pgsGenString & that)
51
pgsExpression::operator=(that);
56
m_min = that.m_min->clone();
57
m_max = that.m_max->clone();
58
m_nb_words = that.m_nb_words->clone();
59
m_seed = that.m_seed->clone();
64
wxString pgsGenString::value() const
66
return wxString() << wxT("string[ min = ") << m_min->value() << wxT(" max = ")
67
<< m_max->value() << wxT(" nb_words = ") << m_nb_words->value()
68
<< wxT(" seed = ") << m_seed->value() << wxT(" ]");
71
pgsOperand pgsGenString::eval(pgsVarMap & vars) const
73
// Evaluate parameters
74
pgsOperand min(m_min->eval(vars));
75
pgsOperand max(m_max->eval(vars));
76
pgsOperand nb_words(m_nb_words->eval(vars));
77
pgsOperand seed(m_seed->eval(vars));
79
// Check parameters and create the generator
80
if (min->is_integer() && max->is_integer() && nb_words->is_integer()
81
&& seed->is_integer())
83
long aux_min, aux_max, aux_nb_words, aux_seed;
84
min->value().ToLong(&aux_min);
85
max->value().ToLong(&aux_max);
86
nb_words->value().ToLong(&aux_nb_words);
87
seed->value().ToLong(&aux_seed);
88
return pnew pgsGenerator(pgsVariable::pgsTString,
89
pnew pgsStringGen(aux_min, aux_max, aux_nb_words, aux_seed));
94
if (!min->is_integer())
96
throw pgsParameterException(wxString() << value()
97
<< wxT(":\nmin should be an integer"));
99
else if (!max->is_integer())
101
throw pgsParameterException(wxString() << value()
102
<< wxT(":\nmax should be an integer"));
104
else if (!nb_words->is_integer())
106
throw pgsParameterException(wxString() << value()
107
<< wxT(":\nnb_words should be an integer"));
111
throw pgsParameterException(wxString() << value()
112
<< wxT(":\nseed should be an integer"));