campo-sirio/src/bs/bsutility.cpp
mtollari 1f7d97acc6 Patch level : 12.0
Files correlati     : bs
Commento            : 
- Sistemato aggiunta nuovo programma
- Creata libreria di utility con funzioni in comune
- Cambiato metodo di pulizia db

git-svn-id: svn://10.65.10.50/branches/R_10_00@24423 c028cbd2-c16b-5b4b-a496-9718f37d4682
2018-03-09 13:54:19 +00:00

104 lines
1.8 KiB
C++

#include "bsutility.h"
// Converte una TDate in una data SQL
const TString& date2sql(const TDate& d, int hour)
{
TString& tmp = get_tmp_string();
if (d.ok())
{
tmp.format("'%04d-%02d-%02d", d.year(), d.month(), d.day());
switch (hour)
{
case 1:
tmp << "T00:00:00.000'";
break;
case 2:
tmp << "T23:59:59.999'";
break;
default:
case 0:
tmp << "'";
}
}
else
tmp = "NULL";
return tmp;
}
const TString& var2sql(const TVariant& var)
{
TString& tmp = get_tmp_string();
switch (var.type())
{
case _nullfld:
tmp = "NULL";
break;
case _boolfld:
tmp = var.as_bool() ? "1" : "0";
break;
case _datefld:
tmp = date2sql(var.as_date());
break;
case _intfld:
case _longfld:
var.as_string(tmp);
break;
case _realfld:
if (var.is_empty())
tmp = "0";
else
{
tmp = var.as_real().string(0, 2);
if (tmp.ends_with(".00"))
tmp.rtrim(3);
}
break;
default:
{
var.as_string(tmp);
const int pos = tmp.find('\'');
if (pos >= 0)
{
for (int i = tmp.len() - 1; i >= pos; i--)
if (tmp[i] == '\'') tmp.insert("'", i);
}
tmp.insert("'");
tmp << "'";
}
break;
}
return tmp;
}
const TString& expr2sql(const TISAM_recordset& set, const char* expr)
{
TVariant var;
TExpression e(expr, _strexpr, true);
if (e.numvar() == 0)
{
if (real::is_natural(expr))
var = atoi(expr);
else
var = expr;
}
else
if (e.numvar() == 1 && xvt_str_same(e.varname(0), expr))
{
var = set.get(expr);
}
else
{
for (int v = e.numvar() - 1; v >= 0; v--)
{
var = set.get(e.varname(v));
if (var.is_real() || var.is_bool())
e.setvar(v, var.as_real());
else
e.setvar(v, var.as_string());
}
var = e.as_string();
}
return var2sql(var);
}