Patch level : 10.0
Files correlati : ba8 Ricompilazione Demo : [ ] Commento : Corretto azzeramento indesiderato dei file *.sql git-svn-id: svn://10.65.10.50/branches/R_10_00@22129 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
80660167b9
commit
bf8d28636b
@ -63,10 +63,10 @@ sqlite3* TSQLite::open(const char* fname)
|
|||||||
_currdb = fname;
|
_currdb = fname;
|
||||||
int err = sqlite3_open(_currdb, &_handle);
|
int err = sqlite3_open(_currdb, &_handle);
|
||||||
|
|
||||||
if (err = SQLITE_CORRUPT)
|
if (err == SQLITE_CORRUPT)
|
||||||
{
|
{
|
||||||
close();
|
close();
|
||||||
xvt_fsys_remove_file(_currdb);
|
_currdb.fremove();
|
||||||
err = sqlite3_open(_currdb, &_handle);
|
err = sqlite3_open(_currdb, &_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -149,15 +149,15 @@ bool TSQLite::set_dbf_time(const TString& table, long last)
|
|||||||
|
|
||||||
static int dbf_time_callback(void* jolly, int argc, char** argv, char** columns)
|
static int dbf_time_callback(void* jolly, int argc, char** argv, char** columns)
|
||||||
{
|
{
|
||||||
long& last = *(long*)jolly;
|
long* last = (long*)jolly;
|
||||||
last = atol(argv[0]);
|
*last = atol(argv[0]);
|
||||||
return SQLITE_OK;
|
return SQLITE_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
long TSQLite::get_dbf_time(const TString& table)
|
long TSQLite::get_dbf_time(const TString& table)
|
||||||
{
|
{
|
||||||
TString sql;
|
TString sql;
|
||||||
sql << "SELECT time FROM " << DBF_TIMES_TABLE << "\nWHERE name='" << table << "';";
|
sql << "SELECT time FROM " << DBF_TIMES_TABLE << " WHERE name='" << table << "';";
|
||||||
long last = 0;
|
long last = 0;
|
||||||
exec(sql, dbf_time_callback, &last);
|
exec(sql, dbf_time_callback, &last);
|
||||||
return last;
|
return last;
|
||||||
@ -212,7 +212,7 @@ bool TSQLite::bind_record(const TRectype& rec, const RecDes& rd, sqlite3_stmt* p
|
|||||||
{
|
{
|
||||||
int rc = SQLITE_OK;
|
int rc = SQLITE_OK;
|
||||||
TVariant tmp;
|
TVariant tmp;
|
||||||
for (int i = 0; i < rd.NFields && rc==SQLITE_OK ; i++)
|
for (int i = 0; i < rd.NFields && rc==SQLITE_OK; i++)
|
||||||
{
|
{
|
||||||
get_sql_value(rec, rd.Fd[i], tmp);
|
get_sql_value(rec, rd.Fd[i], tmp);
|
||||||
const TString& val = tmp.as_string();
|
const TString& val = tmp.as_string();
|
||||||
@ -226,9 +226,9 @@ bool TSQLite::import(int logicnum)
|
|||||||
const TString& table = logic2table(logicnum);
|
const TString& table = logic2table(logicnum);
|
||||||
|
|
||||||
long last = get_dbf_time(table);
|
long last = get_dbf_time(table);
|
||||||
if (logicnum >= LF_USER) // Dummy test
|
if (logicnum >= LF_USER) // Dummy test, 'last' should be updated ALWAYS!
|
||||||
{
|
{
|
||||||
TLocalisamfile file(logicnum);
|
TBaseisamfile file(logicnum);
|
||||||
if (!file.is_changed_since(last))
|
if (!file.is_changed_since(last))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -337,12 +337,19 @@ bool TSQLite::parse_select_from(const char* szSql)
|
|||||||
if (from < 0)
|
if (from < 0)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
const int where = sql.find("WHERE", from);
|
const int where_pos = sql.find("WHERE", from);
|
||||||
TToken_string tables(sql.sub(from+5, where), ',');
|
TToken_string tables(sql.sub(from+5, where_pos), ',');
|
||||||
TString table;
|
TString table;
|
||||||
FOR_EACH_TOKEN(tables, tok)
|
FOR_EACH_TOKEN(tables, tok)
|
||||||
{
|
{
|
||||||
table = tok;
|
table = tok;
|
||||||
|
const int join_pos = table.find("JOIN ");
|
||||||
|
if (join_pos > 0)
|
||||||
|
{
|
||||||
|
const TString& joined = table.mid(join_pos+5).before(' ');
|
||||||
|
tables.add(joined);
|
||||||
|
table = table.before(' ');
|
||||||
|
}
|
||||||
table.trim();
|
table.trim();
|
||||||
for (int i = 0; table[i]; i++)
|
for (int i = 0; table[i]; i++)
|
||||||
{
|
{
|
||||||
@ -351,8 +358,7 @@ bool TSQLite::parse_select_from(const char* szSql)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const int logicnum = (table == "MAG") ? LF_MAG : table2logic(table);
|
const int logicnum = (table == "MAG") ? LF_MAG : table2logic(table);
|
||||||
|
if (logicnum >= LF_USER)
|
||||||
if (logicnum > 0)
|
|
||||||
import(logicnum);
|
import(logicnum);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -415,6 +421,7 @@ int TSQL_recordset::on_get_items(int argc, char** values, char** columns)
|
|||||||
}
|
}
|
||||||
if (_items < _pagesize)
|
if (_items < _pagesize)
|
||||||
{
|
{
|
||||||
|
// Aggiusta le lunghezze dei campi testo e numerici
|
||||||
for (int i = 0; i < argc; i++) if (values[i] && *values[i])
|
for (int i = 0; i < argc; i++) if (values[i] && *values[i])
|
||||||
{
|
{
|
||||||
TRecordset_column_info& info = (TRecordset_column_info&)_column[i];
|
TRecordset_column_info& info = (TRecordset_column_info&)_column[i];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user