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:
parent
1f296ec8b3
commit
761b1ad965
@ -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);
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user