diff --git a/src/include/sqlfilerset.cpp b/src/include/sqlfilerset.cpp deleted file mode 100644 index f72a21f9b..000000000 --- a/src/include/sqlfilerset.cpp +++ /dev/null @@ -1,232 +0,0 @@ -#include -#include - -///////////////////////////////////////////////////////////////////////////////////// -// 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); -} \ No newline at end of file