mirror of
https://github.com/levinsv/pgadmin3.git
synced 2026-07-28 22:03:02 -06:00
support PG11
Поддержка PostgreSQL 11 только для Windows
This commit is contained in:
commit
4af765213c
1765 changed files with 407959 additions and 0 deletions
286
pgscript/objects/pgsNumber.cpp
Normal file
286
pgscript/objects/pgsNumber.cpp
Normal file
|
|
@ -0,0 +1,286 @@
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// pgScript - PostgreSQL Tools
|
||||
//
|
||||
// Copyright (C) 2002 - 2016, The pgAdmin Development Team
|
||||
// This software is released under the PostgreSQL Licence
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
#include "pgAdmin3.h"
|
||||
#include "pgscript/objects/pgsNumber.h"
|
||||
|
||||
#include <wx/regex.h>
|
||||
#include "pgscript/objects/pgsRecord.h"
|
||||
#include "pgscript/objects/pgsString.h"
|
||||
#include "pgscript/exceptions/pgsArithmeticException.h"
|
||||
#include "pgscript/exceptions/pgsCastException.h"
|
||||
|
||||
#define PGS_INTEGER_FORM_1 wxT("^[+-]?[0-9]+$")
|
||||
#define PGS_REAL_FORM_1 wxT("^[+-]?[0-9]+[Ee][+-]?[0-9]+$")
|
||||
#define PGS_REAL_FORM_2 wxT("^[+-]?[0-9]*[.][0-9]+([Ee][+-]?[0-9]+)?$")
|
||||
#define PGS_REAL_FORM_3 wxT("^[+-]?[0-9]+[.][0-9]*([Ee][+-]?[0-9]+)?$")
|
||||
|
||||
pgsNumber::pgsNumber(const wxString &data, const bool &is_real) :
|
||||
pgsVariable(!is_real ? pgsVariable::pgsTInt : pgsVariable::pgsTReal),
|
||||
m_data(data.Strip(wxString::both))
|
||||
{
|
||||
wxASSERT(is_valid());
|
||||
}
|
||||
|
||||
bool pgsNumber::is_valid() const
|
||||
{
|
||||
pgsTypes type = num_type(m_data);
|
||||
return (type == pgsTInt) || (type == pgsTReal && is_real());
|
||||
}
|
||||
|
||||
pgsNumber::~pgsNumber()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
pgsNumber::pgsNumber(const pgsNumber &that) :
|
||||
pgsVariable(that), m_data(that.m_data)
|
||||
{
|
||||
wxASSERT(is_valid());
|
||||
}
|
||||
|
||||
pgsNumber &pgsNumber::operator =(const pgsNumber &that)
|
||||
{
|
||||
if (this != &that)
|
||||
{
|
||||
pgsVariable::operator=(that);
|
||||
m_data = that.m_data;
|
||||
}
|
||||
|
||||
wxASSERT(is_valid());
|
||||
|
||||
return (*this);
|
||||
}
|
||||
|
||||
pgsVariable *pgsNumber::clone() const
|
||||
{
|
||||
return pnew pgsNumber(*this);
|
||||
}
|
||||
|
||||
wxString pgsNumber::value() const
|
||||
{
|
||||
return m_data;
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::eval(pgsVarMap &vars) const
|
||||
{
|
||||
return this->clone();
|
||||
}
|
||||
|
||||
pgsVariable::pgsTypes pgsNumber::num_type(const wxString &num)
|
||||
{
|
||||
if (wxRegEx(PGS_INTEGER_FORM_1).Matches(num))
|
||||
{
|
||||
return pgsTInt;
|
||||
}
|
||||
else if (( wxRegEx(PGS_REAL_FORM_1).Matches(num)
|
||||
|| wxRegEx(PGS_REAL_FORM_2).Matches(num)
|
||||
|| wxRegEx(PGS_REAL_FORM_3).Matches(num)))
|
||||
{
|
||||
return pgsTReal;
|
||||
}
|
||||
else
|
||||
{
|
||||
return pgsTString;
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_plus(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(pgsMapm::pgs_mapm_str(num(m_data)
|
||||
+ num(rhs.value())), is_real() || rhs.is_real());
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_minus(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(pgsMapm::pgs_mapm_str(num(m_data)
|
||||
- num(rhs.value())), is_real() || rhs.is_real());
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_times(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(pgsMapm::pgs_mapm_str(num(m_data)
|
||||
* num(rhs.value())), is_real() || rhs.is_real());
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_over(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
if (num(rhs.value()) != 0)
|
||||
{
|
||||
if (is_real() || rhs.is_real())
|
||||
return pnew pgsNumber(pgsMapm::pgs_mapm_str(num(m_data)
|
||||
/ num(rhs.value())), is_real() || rhs.is_real());
|
||||
else
|
||||
return pnew pgsNumber(pgsMapm::pgs_mapm_str(num(m_data)
|
||||
.div(num(rhs.value()))), is_real() || rhs.is_real());
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_modulo(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
if (num(rhs.value()) != 0)
|
||||
{
|
||||
return pnew pgsNumber(pgsMapm::pgs_mapm_str(num(m_data)
|
||||
% num(rhs.value())), is_real() || rhs.is_real());
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_equal(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(num(m_data) == num(rhs.value())
|
||||
? wxT("1") : wxT("0"));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_different(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(num(m_data) != num(rhs.value())
|
||||
? wxT("1") : wxT("0"));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_greater(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(num(m_data) > num(rhs.value())
|
||||
? wxT("1") : wxT("0"));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_lower(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(num(m_data) < num(rhs.value())
|
||||
? wxT("1") : wxT("0"));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_lower_equal(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(num(m_data) <= num(rhs.value())
|
||||
? wxT("1") : wxT("0"));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_greater_equal(const pgsVariable &rhs) const
|
||||
{
|
||||
if (rhs.is_number())
|
||||
{
|
||||
return pnew pgsNumber(num(m_data) >= num(rhs.value())
|
||||
? wxT("1") : wxT("0"));
|
||||
}
|
||||
else
|
||||
{
|
||||
throw pgsArithmeticException(m_data, rhs.value());
|
||||
}
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_not() const
|
||||
{
|
||||
return pnew pgsNumber(num(m_data) == 0 ? wxT("1") : wxT("0"));
|
||||
}
|
||||
|
||||
bool pgsNumber::pgs_is_true() const
|
||||
{
|
||||
return (num(m_data) != 0 ? true : false);
|
||||
}
|
||||
|
||||
pgsOperand pgsNumber::pgs_almost_equal(const pgsVariable &rhs) const
|
||||
{
|
||||
return pgs_equal(rhs);
|
||||
}
|
||||
|
||||
pgsNumber pgsNumber::number() const
|
||||
{
|
||||
return pgsNumber(*this);
|
||||
}
|
||||
|
||||
pgsRecord pgsNumber::record() const
|
||||
{
|
||||
pgsRecord rec(1);;
|
||||
rec.insert(0, 0, this->clone());
|
||||
return rec;
|
||||
}
|
||||
|
||||
pgsString pgsNumber::string() const
|
||||
{
|
||||
return pgsString(m_data);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue