Patch level : 12.0 498

Files correlati     : 
Commento            : Rimosso file caricato per errore

git-svn-id: svn://10.65.10.50/branches/R_10_00@24256 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2018-01-09 09:34:53 +00:00
parent 1f296ec8b3
commit 761b1ad965

View File

@ -1,232 +0,0 @@
#include <sqlfilerset.h>
#include <config.h>
/////////////////////////////////////////////////////////////////////////////////////
// TSQLite_autoset
/////////////////////////////////////////////////////////////////////////////////////
// Imposta il valore di un campo variant
void TSQLite_autoset::set(const char* fld, const TVariant& var)
{
CHECK(fld && *fld, "Null field name");
if (var.is_null())
{
_fields.remove(fld);
}
else
{
TVariant* obj = (TVariant*)_fields.objptr(fld);
if (obj != NULL)
*obj = var;
else
_fields.add(fld, new TVariant(var));
}
}
// Imposta il valore di un campo intero
void TSQLite_autoset::set(const char* fld, long val)
{
const TVariant var(val);
set(fld, var);
}
// Imposta il valore di un campo stringa
void TSQLite_autoset::set(const char* fld, const char* val)
{
if (val == NULL)
set(fld, NULL_VARIANT);
else
{
const TVariant var(val);
set(fld, var);
}
}
// Imposta il valore di un campo stringa
void TSQLite_autoset::set(const char* fld, const TString& val)
{
const TVariant var(val);
set(fld, var);
}
// Imposta il valore di un campo numerico
void TSQLite_autoset::set(const char* fld, const real& val)
{
const TVariant var(val);
set(fld, var);
}
// Imposta il valore di un campo data in formato ISO
void TSQLite_autoset::set(const char* fld, const TDate& val)
{
if (val.ok())
{
const TVariant var(val);
set(fld, var);
}
else
set(fld, "");
}
// Imposta il valore di un campo booleano
void TSQLite_autoset::set(const char* fld, bool var)
{
set(fld, var ? "SI" : "NO");
}
// Legge il valore di un campo variant
const TVariant& TSQLite_autoset::get(const char* fld) const
{
const TVariant* var = (const TVariant*)_fields.objptr(fld);
return var ? *var : NULL_VARIANT;
}
// Converte un variant in una stringa valida per SQLite
const TString& TSQLite_autoset::var2str(const TString& fldname, const TVariant& var) const
{
const TFieldtypes vt = var.type();
if (vt == _realfld)
{
const TCurrency v(var.as_real(), "", ZERO, fldname.find("IMPONIBILE")>0 || fldname.find("IMPOSTA")>0);
TString& tmp = get_tmp_string();
tmp << '\'' << v.string() << '\'';
tmp.replace(',','.');
return tmp;
}
if (vt == _datefld)
{
TString& tmp = get_tmp_string();
tmp << '\'' << var.as_date().string(full, '-', full, full, amg_date) << '\'';
return tmp;
}
const TString& str = var.as_string();
bool apici = vt == _alfafld;
if (apici && str[0] != '0' && real::is_natural(str))
apici = false;
if (!apici)
return str;
TString& tmp = get_tmp_string();
tmp = str;
for (int a = str.rfind('\''); a >= 0; a--)
{
if (tmp[a] == '\'')
tmp.insert("'", a);
}
tmp.insert("'", 0);
tmp << '\'';
return tmp;
}
// Elimina il record in base ai campi chiave
bool TSQLite_autoset::remove()
{
TString256 query;
query << "DELETE FROM " << _table << " WHERE ";
int nkf = 0;
FOR_EACH_TOKEN(_key, fld)
{
const TVariant& var = get(fld);
if (!var.is_null())
{
if (nkf++ > 0)
query << " AND ";
query << fld << '=' << var2str(fld, var) ;
}
}
CHECKS(nkf >= 2, "Can't remove partial key on table ", (const char*)_table);
query << ';';
return xvt_sql_execute(_db, query, NULL, 0L) > 0;
}
// Callback per la sottostante funzione search()
static int TSQLite_autoset_search_record(void* jolly, int cols, char** values, char** names)
{
TSQLite_autoset& rec = *(TSQLite_autoset*)jolly;
for (int i = 0; i < cols; i++)
rec.set(names[i], values[i]);
return 0;
}
// Carica un record in base ai campi chiave
bool TSQLite_autoset::search()
{
CHECKS(_fields.items() >= _key.items(), "Can't search partial key on table ", _table);
TString256 query;
query << "SELECT * FROM " << _table << " WHERE ";
FOR_EACH_TOKEN(_key, fld)
{
const TVariant& var = get(fld);
if (!var.is_null())
query << fld << '=' << var2str(fld, var) << " AND ";
}
query.rtrim(5);
query << ';';
return xvt_sql_execute(_db, query, TSQLite_autoset_search_record, this) == 1;
}
// Carica un record con le chiavi che passo
bool TSQLite_autoset::search(const char* key, ...)
{
_fields.destroy();
va_list marker;
va_start(marker, key);
int i = 0;
while (key != NULL)
{
set(_key.get(i), key);
i++;
key = va_arg(marker, const char *);
}
va_end(marker);
return search();
}
// Aggiunge un record al db
bool TSQLite_autoset::insert()
{
CHECKS(_fields.items() > _key.items(), "Can't insert empty record on table ", _table);
TString query, values;
query << "INSERT INTO " << _table << "\n(";
FOR_EACH_ASSOC_OBJECT(_fields, obj, fld, itm)
{
const TVariant& var = get(fld);
if (!var.is_null())
{
query << fld << ',';
values << var2str(fld, var) << ',';
}
}
query.rtrim(1); values.rtrim(1);
query << ")\nVALUES (" << values << ");";
return xvt_sql_execute(_db, query, NULL, 0L) == 1;
}
// Imposta una tabella su cui fare le operazioni
bool TSQLite_autoset::setTable(const char* table, const TFilename& db, const TFilename& inipath)
{
if(db.ok())
_db = xvt_sql_open(_dbname, user(), "", _dbname.path());
if(inipath.ok())
_inipath = inipath;
_key = ini_get_string(_inipath, table, "INDEX_1");
CHECKS(!_key.empty_items(), "Invalid primary key for table ", table);
return !_key.empty_items();
}
// Crea un record della tabella data ed imposta i nomi dei campi chiave
TSQLite_autoset::TSQLite_autoset(const TFilename& db, const TFilename& inipath, const char* table)
: _dbname(db), _inipath(inipath), _table(table), _key(15, ',')
{
_db = xvt_sql_open(_dbname, user(), "", _dbname.path());
if(table != NULL)
setTable(table);
}