From: Andy C. <and...@bt...> - 2005-10-18 10:33:46
|
Thanks Rene for your hard work - much appreciated. Rgs, Andy BTW... If you hit reply on one of the the list emails, I don't think it's been sending back to the list, but the sender personally? It's unusual compared with other lists I'm subscribed to. --- René Tegel <ren...@wu...> wrote: > Hi, > > I've released libsql 0.63. Been working on memory > leaking issues and > resultset freeing. > > regards, > > rene > > ======================================= > > changes in 0.63 > * Hunting memory leaks. I believe they are all > solved now > * Made TResultSet usage (especially freeing) more > proof > > Here is code of allowed methods of querying and > result set usage: > //test main constructor / destructor: > db := TLiteDB.Create(nil, ':memory:'); > db.Free; > > //basic query on DB > db := TLiteDB.Create(nil, ':memory:'); > db.FormatQuery('select %d+%d', [1,1]); > db.Free; > > //basic formatquery on DB > db := TLiteDB.Create(nil, ':memory:'); > db.FormatQuery('select %d+%d', [1,1]); > writeln (db.Results[0][0]); > db.Free; > > //Per row fetching using execute method using DB > db := TLiteDB.Create(nil, ':memory:'); > h := db.Execute ('select 1+1'); > while db.FetchRow(h, row) do > writeln (row[0]); > db.FreeResult(h); > db.Free; > > //Per row fetching using formatexecute method > using DB > db := TLiteDB.Create(nil, ':memory:'); > h := db.FormatExecute ('select %d + %d', [1, > 1]); > while db.FetchRow(h, row) do > writeln (row[0]); > db.FreeResult(h); > db.Free; > > //Result set testing: > db := TLiteDB.Create(nil, ':memory:'); > rs := db.UseResultSet('testing'); > rs.Query('select 1+1'); > writeln (rs.Row[0][0]); > db.Free; //db should free the result set > > db := TLiteDB.Create(nil, ':memory:'); > rs := db.UseResultSet('testing'); > rs.Query('select 1+1'); > writeln (rs.Row[0][0]); > rs.Free; //db should not complain about > resultset being freed > db.Free; > > db := TLiteDB.Create(nil, ':memory:'); > rs := TResultSet.Create(db); > rs.Query('select 1+1'); > writeln (rs.Row[0][0]); > db.Free; //db does _not_ free the result set > since it was manually > created > rs.Free; > > db := TLiteDB.Create(nil, ':memory:'); > rs := TResultSet.Create(db); > rs.FormatQuery('select %d + %d', [1,1]); > writeln (rs.Row[0][0]); > db.Free; > > //double usage of resultset > db := TLiteDB.Create(nil, ':memory:'); > db.UseResultSet(rs); > rs.FormatQuery('select %d + %d', [1,1]); > writeln (rs.Row[0][0]); > db.Free; > rs.Free; > > //row fetching using a TResultSet > db := TLiteDB.Create(nil, ':memory:'); > rs := db.UseResultSet('rowfetch'); > if rs.Execute ('select 1+1') then > while rs.FetchRow do > writeln (rs.Fetched[0]); > rs.FreeResult; > db.Free; > > > > changes in 0.62 > * sqlite was performing an 'unlock' in > Rollback[transaction] (Dak?) > * base class (mysql/odbc) still had locks on > database transactions. > Removed. Mysql/odbc users beware, > starting/comitting/rollback a > transaction no longer locks the thread. You will > have to lock/unlock > threads using respective methods yourself. > * added constant LibSQLVersion (String type, now: > '0.62') in base class. > (Dak) > * DateTime support in TResultCell > * Added prorperty ValidValue to a resultcell to > differate between db > results and 'out-of-range' or nen-existent result. > * Added method 'FieldExists' to TResultRow to > determinate a particulair > field name exists. > * OnClose handler for sqlite > * Fixed reference counting bug in sqlite (multiple > instances accessing > the same database) > * Added method 'RefreshDBInfo' that calls FillDBInfo > * Added private 'AutoFree' varibale to TResultSet. > Freeing a DB will not > automatically free all associated resultsets that > were created > 'stand-alone', (calling "DB := TnnnDB.Create(); rs > := > TResultSet.Create(DB); DB.Free; rs.free", in this > order, could result in > a AV error due to double freeing.). > * Added package file for convenience. > * Renamed all occurences of 'Owner' in TResultSet to > 'SQLDB' to make > things same more clear. > > > > > changes in 0.61 > *Implemented virtual implementations in base class > of some newly added > methods for sqlite and/or mysql. ODBC class did not > make any > implementation of this virtual (and abstract) class. > Possibly having > unimplemented abstract classes leads to conflicts on > some compilers > (kylix, freepascal?). > *No other changes since 0.60 > > changes in 0.60 > > This happen to be "stable" version. On my system. No > guarantees. > * The SQLITE transaction mechanism has changed a > little. A transaction > no longer involves an obliged thread lock. Threads > can share the same > file handle safely on windows systems. > * Removed a confusing property from the TResultSet > class. > * Merged more support functions by PChev: flush, > truncate, lock, vacuum. Tx! > * SQLite best tested currently. MySQL support > without real problems. > Most recent libmysql.dll ( version 5.0.n) supported. > * The components may use some attention. So does the > documentation. > Volunteer welcome! > * It is not multi-platform tested. Notify me of new > issues please. Not > much changes since last testing. > * Next release will contain additional sqlite class > that provides a > threading mechanism to allow multiple threads on > some unix systems > redirected to a single thread for the file system to > work correctly. > * Some minor bug fixes. > > changes in 0.57 > * formatquery adjustments - floating point issues > * result set freeing (fixes shutdown error) > > changes in 0.56 > * result set usage, issues > > Changes in 0.55 > * added delphi4 compatability to sqlite units > * improved result set usage > * speeded up resultset lookup some > * some bugfixes and issues > * fixed execute/fetchrow functionality for sqlite 3 > * added execute/fetchrow functionality to TResultSet > (!) > === message truncated === |