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