Patch level : 12.0 1028

Files correlati     : tf0.exe

Commento :

Modificato l'aggiornamento del database del trasferimento fatture. Non modificava i campi esistenti ma creava solo i campi nuovi.
This commit is contained in:
Alessandro Bonazzi 2021-01-21 23:20:57 +01:00
parent b29de6e86c
commit 47e8eaaa43

View File

@ -590,37 +590,60 @@ int TTrFa_app::parse_line(const TString& line, TString& var, TString& val) const
bool TTrFa_app::create_table(TScanner& tff, const TString& table)
{
TString query, var, val;
if (xvt_sql_table_exists(_db, table))
bool modified = false;
TToken_string field_list("", ',');
const bool new_table = !xvt_sql_table_exists(_db, table);
streampos cur_pos = tff.pos();
if (!new_table)
{
SLIST fields = xvt_sql_list_fields(_db, table);
while (!tff.eof())
while (!modified && !tff.eof())
{
const TString& line = tff.line();
const int n = parse_line(line, var, val);
if (n <= 0)
break;
if (var.starts_with("INDEX_"))
break;
if (xvt_slist_find_str(fields, var) == NULL)
{
query.cut(0) << "ALTER TABLE " << table << " ADD COLUMN " << var << ' ' << val << " NOT NULL";
if (val.find("INT") >= 0 || val.find("NUM") >= 0)
query << " DEFAULT 0";
else
query << " DEFAULT ''";
query << ";";
xvt_sql_execute(_db, query, NULL, NULL); // Create table
modified = true;
}
else
modified = (val != xvt_sql_field_type(_db, table, var));
}
if (modified)
{
const int nfields = xvt_slist_count(fields);
for (SLIST_ELT field = xvt_slist_get_first(fields); field != nullptr; field = xvt_slist_get_next(fields, field))
field_list.add(field->str);
}
xvt_slist_destroy(fields);
}
else
if (modified)
{
query << "CREATE TABLE " << table << " (";
query = "ALTER TABLE ";
query << table << " RENAME TO " << table << "_OLD;";
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
query = "DROP INDEX ";
query << table << "_1;";
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
tff.setpos(cur_pos);
}
}
if (new_table || modified)
{
query = "CREATE TABLE "; query << table << " (";
while (!tff.eof())
{
const TString& line = tff.line();
const int n = parse_line(line, var, val);
if (n <= 0)
break;
if (n == 1)
@ -633,9 +656,8 @@ bool TTrFa_app::create_table(TScanner& tff, const TString& table)
query.rtrim(1); // toglie ultima ,
query << ");";
xvt_sql_execute(_db, query, NULL, NULL); // Create table
query.cut(0);
query << "CREATE UNIQUE INDEX "
<< table << "_1 ON " << table
query = "CREATE UNIQUE INDEX ";
query << table << "_1 ON " << table
<< " (" << val << ");";
xvt_sql_execute(_db, query, NULL, NULL); // Create index
break;
@ -650,8 +672,18 @@ bool TTrFa_app::create_table(TScanner& tff, const TString& table)
query << ",";
}
}
if (modified)
{
query = "INSERT INTO ";
query << table << "(" << field_list
<< ") SELECT " << field_list << " FROM "
<< table << "_OLD;";
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
query = "DROP TABLE ";
query << table << "_OLD;";
xvt_sql_execute(_db, query, NULL, NULL); // rename table table
}
}
return true;
}