os/persistentdata/persistentstorage/dbms/group/RELEASE.TXT
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
Version 1.05(063)
sl@0
     2
=================
sl@0
     3
(Made by Mark Cawston on 23 November 2001)
sl@0
     4
sl@0
     5
Dependencies
sl@0
     6
sl@0
     7
Built against Hurricane Release build 00629
sl@0
     8
sl@0
     9
Defects fixed : DON-587EA3 (Corrupted Cdbv2.dat prevents device from booting)
sl@0
    10
sl@0
    11
Testing
sl@0
    12
sl@0
    13
automatic F32tests run on MINT UDEB, UREL, WINS UDEB.
sl@0
    14
sl@0
    15
Version 1.05(062)
sl@0
    16
=================
sl@0
    17
(Made by Mark Cawston on 23 November 2001)
sl@0
    18
sl@0
    19
Dependencies
sl@0
    20
sl@0
    21
Built against GT6.2 Release build 00558
sl@0
    22
sl@0
    23
Building
sl@0
    24
sl@0
    25
Use bldmake and abld
sl@0
    26
sl@0
    27
Testing
sl@0
    28
sl@0
    29
Tests modified to verify defects fixed T_BENCH, T_COMP tested on WINS UDEB and
sl@0
    30
MISA ARM4 (Assabet) UDEB.
sl@0
    31
sl@0
    32
Defects fixed
sl@0
    33
sl@0
    34
Hurricane : ROS-534E69: DBMS should use CleanupArrayDeletePushL()
sl@0
    35
sl@0
    36
Version 1.05(061)
sl@0
    37
=================
sl@0
    38
(Made by Mark Dowman on 26 July 2000)
sl@0
    39
sl@0
    40
Dependencies
sl@0
    41
sl@0
    42
Built against GT6.0 Release build 00039
sl@0
    43
sl@0
    44
Building
sl@0
    45
sl@0
    46
Use bldmake and abld
sl@0
    47
sl@0
    48
Testing
sl@0
    49
sl@0
    50
Tests modified to verify defects fixed. T_DBMS, T_DBS, T_SQL and T_TRANS passed on WINS UDEB and ARM4(BRUTUS) UDEB.
sl@0
    51
sl@0
    52
Defects fixed
sl@0
    53
sl@0
    54
ER6.0 : EDNATHE-4MCL2K: RDbDatabase::IsDamaged() always false after opening database.
sl@0
    55
ER6.0 : EDNPHAR-4L4KY2: DBMS access violation when sending a fax.
sl@0
    56
sl@0
    57
Version 1.05(060)
sl@0
    58
=================
sl@0
    59
(Made by Andrew Thoelke on 20 May 1999)
sl@0
    60
sl@0
    61
For EPOC Release 5 Unicode
sl@0
    62
MSVC++ 6.0 compatible source only release
sl@0
    63
sl@0
    64
Dependencies
sl@0
    65
sl@0
    66
This release has been built against Baseline 0801
sl@0
    67
sl@0
    68
Building
sl@0
    69
sl@0
    70
Use bldmake, etc.
sl@0
    71
sl@0
    72
Testing
sl@0
    73
sl@0
    74
Tests added to verify defect fixes. All tests passed on WINS UREL, WINS UDEB, ARM ROM 306
sl@0
    75
sl@0
    76
Changes
sl@0
    77
sl@0
    78
RDbs::Version() now reports "1.05(060)"
sl@0
    79
DBMS stores all Unicode text columns (Text and Text16 columns) using the standard unicode compression algorithm available in STORE. This breaks the data format for all databases containing text - and to ensure that old databases cannot be loaded by this build of DBMS the internal database version numbers have been increased. All existing databases are now unreadable.
sl@0
    80
Long columns that are not inlined but still under a certain threshold (currently 1.5K) are now extracted from the database without requiring a read-lock on the database. This allows moderate sized BLOBs to be read from a shared database while another client is updating or compacting the database.
sl@0
    81
sl@0
    82
Defects fixed
sl@0
    83
sl@0
    84
ER5:EDNBBAR-463J5D: Concurrent server start-up does not panic and hang the second client attempting to connect.
sl@0
    85
ER5:EDNATHE-48AEZW: Automatic cursor recovery after row deletion is now much more capable than previously.
sl@0
    86
ER5U:EDNATHE-497KWW: Explicitly load 16-bit values using 8-bit reads to prevent incorrect use of half-word load instructions.
sl@0
    87
sl@0
    88
 
sl@0
    89
Version 1.05(058)
sl@0
    90
=================
sl@0
    91
(Made by Andrew Thoelke on 20 May 1999)
sl@0
    92
sl@0
    93
EPOC Release 5u baseline component
sl@0
    94
sl@0
    95
Dependencies
sl@0
    96
sl@0
    97
This release was built with
sl@0
    98
     Tools: E32TOOLS 120, E32TOOLP 107
sl@0
    99
Components: E32 185, F32 145, STORE 062
sl@0
   100
sl@0
   101
Building
sl@0
   102
sl@0
   103
Mostly standard EBLD syntax supported. Invoking EBLD without parameters gives usage information
sl@0
   104
sl@0
   105
Release components
sl@0
   106
sl@0
   107
All 4 build variants have been released.
sl@0
   108
sl@0
   109
Testing
sl@0
   110
sl@0
   111
No testing has been done
sl@0
   112
sl@0
   113
Changes
sl@0
   114
sl@0
   115
RDbs::Version() now reports "1.05(058)"
sl@0
   116
The DATAZIP tool has been removed - it was not supported for Unicode data documents in any case
sl@0
   117
sl@0
   118
 
sl@0
   119
Version 1.05(057)
sl@0
   120
=================
sl@0
   121
(Made by Andrew Thoelke on 15 January 1999)
sl@0
   122
sl@0
   123
EPOC Release 5 candidate component
sl@0
   124
sl@0
   125
Dependencies
sl@0
   126
sl@0
   127
This release was built with
sl@0
   128
     Tools: E32TOOLS 095, E32TOOLP 098
sl@0
   129
Components: E32 158, F32 124, STORE 051
sl@0
   130
sl@0
   131
Binary Compatibility
sl@0
   132
sl@0
   133
Fully binary compatible with 054-6
sl@0
   134
sl@0
   135
Building
sl@0
   136
sl@0
   137
Mostly standard EBLD syntax supported. Invoking EBLD without parameters gives usage information
sl@0
   138
sl@0
   139
Release components
sl@0
   140
sl@0
   141
All 8 build variants have been released.
sl@0
   142
MARM ASCII release build EDBMS.DLL + EDBSRV.EXE is 130,276 + 496 bytes (127.7K) in ROM
sl@0
   143
To install DBMS for MARM:
sl@0
   144
	edbms.dll : install to \System\Libs\
sl@0
   145
	edbsrv.exe: install to \System\Programs\
sl@0
   146
sl@0
   147
Known problems
sl@0
   148
sl@0
   149
DATAZIP will not work on new unicode database documents, as it does not recognise the new Data App UID. This tool is likely to be migrated out of DBMS in the near future
sl@0
   150
sl@0
   151
Testing
sl@0
   152
sl@0
   153
Test code amended and extended to verify the defect fixes. All test code passes on all platforms.
sl@0
   154
sl@0
   155
Changes
sl@0
   156
sl@0
   157
RDbs::Version() now reports "1.05(057)"
sl@0
   158
sl@0
   159
Defects Fixed
sl@0
   160
sl@0
   161
590829: CDbTableDatabase::CheckIdle() no longer causes an access violation if the table collection is modified while it iterates across the tables.
sl@0
   162
394751: The server panics clients in such a way as to avoid trying to complete the offending message twice, which caused a KERN-EXEC 4 in the server.
sl@0
   163
sl@0
   164
 
sl@0
   165
Version 1.05(056)
sl@0
   166
=================
sl@0
   167
(Made by Andrew Thoelke on 5 January 1999)
sl@0
   168
sl@0
   169
EPOC Release 5 candidate component
sl@0
   170
sl@0
   171
Dependencies
sl@0
   172
sl@0
   173
This release was built with
sl@0
   174
     Tools: E32TOOLS 095, E32TOOLP 098
sl@0
   175
Components: E32 158, F32 124, STORE 051
sl@0
   176
sl@0
   177
Binary Compatibility
sl@0
   178
sl@0
   179
Fully binary compatible with 054-5
sl@0
   180
sl@0
   181
Building
sl@0
   182
sl@0
   183
Mostly standard EBLD syntax supported. Invoking EBLD without parameters gives usage information
sl@0
   184
sl@0
   185
Release components
sl@0
   186
sl@0
   187
All 8 build variants have been released.
sl@0
   188
MARM ASCII release build EDBMS.DLL + EDBSRV.EXE is 130,280 + 496 bytes (127.7K) in ROM
sl@0
   189
To install DBMS for MARM:
sl@0
   190
	edbms.dll : install to \System\Libs\
sl@0
   191
	edbsrv.exe: install to \System\Programs\
sl@0
   192
sl@0
   193
Known problems
sl@0
   194
sl@0
   195
DATAZIP will not work on new unicode database documents, as it does not recognise the new Data App UID. This tool is likely to be migrated out of DBMS in the near future
sl@0
   196
sl@0
   197
Testing
sl@0
   198
sl@0
   199
Test code amended and extended to verify the defect fixes. All test code passes on all platforms.
sl@0
   200
sl@0
   201
Changes
sl@0
   202
sl@0
   203
RDbs::Version() now reports "1.05(056)"
sl@0
   204
New RProcess::Create() and RLibrary::Load() functions which take a TUidType parameter are now used for launching the server and loading drivers with full UID type checking
sl@0
   205
sl@0
   206
Defects Fixed
sl@0
   207
sl@0
   208
632258: RDbNamedDatabase::Create() will now only delete the file on cleanup if it created the file, and not delete an existing file
sl@0
   209
sl@0
   210
 
sl@0
   211
Version 1.05(055)
sl@0
   212
=================
sl@0
   213
(Made by Andrew Thoelke on 9 December 1998)
sl@0
   214
sl@0
   215
EPOC Release 5 candidate component
sl@0
   216
sl@0
   217
Dependencies
sl@0
   218
sl@0
   219
This release was built with
sl@0
   220
     Tools: E32TOOLS 095, E32TOOLP 098
sl@0
   221
Components: E32 156, F32 122, STORE 051
sl@0
   222
sl@0
   223
Binary Compatibility
sl@0
   224
sl@0
   225
Fully binary compatible with 054
sl@0
   226
sl@0
   227
Building
sl@0
   228
sl@0
   229
Mostly standard EBLD syntax supported. Invoking EBLD without parameters gives usage information
sl@0
   230
sl@0
   231
Release components
sl@0
   232
sl@0
   233
All 8 build variants have been released.
sl@0
   234
MARM ASCII release build EDBMS.DLL + EDBSRV.EXE is 130,288 + 496 bytes (127.7K) in ROM
sl@0
   235
To install DBMS for MARM:
sl@0
   236
	edbms.dll : install to \System\Libs\
sl@0
   237
	edbsrv.exe: install to \System\Programs\
sl@0
   238
sl@0
   239
Known problems
sl@0
   240
sl@0
   241
DATAZIP will not work on new unicode database documents, as it does not recognise the new Data App UID. This tool is likely to be migrated out of DBMS in the near future
sl@0
   242
sl@0
   243
Testing
sl@0
   244
sl@0
   245
Test code amended and extended to verify the defect fixes. All test code passes on all platforms.
sl@0
   246
sl@0
   247
Changes
sl@0
   248
sl@0
   249
RDbs::Version() now reports "1.05(055)"
sl@0
   250
sl@0
   251
Defects Fixed
sl@0
   252
sl@0
   253
SW1-488	Regression from 043: deleting a row can cause an access	violation. A simple fix added and tested by T_BIG.
sl@0
   254
Rebuilt with MSVC++ 5.0 Service Pack 3 to ensure good WINS release builds.
sl@0
   255
Boiler-plated the source code using the SysDoc tool.
sl@0
   256
sl@0
   257
 
sl@0
   258
Version 1.05(054)
sl@0
   259
=================
sl@0
   260
(Made by Andrew Thoelke on 16th November, 1998)
sl@0
   261
sl@0
   262
This is an EPOC Release 5 component.
sl@0
   263
sl@0
   264
sl@0
   265
Dependencies
sl@0
   266
sl@0
   267
The requires EPOC Release 5 components to build and run. This release
sl@0
   268
was built with
sl@0
   269
sl@0
   270
     Tools: E32TOOLS 095, E32TOOLP 097
sl@0
   271
Components: E32 156, F32 122, STORE 050
sl@0
   272
sl@0
   273
sl@0
   274
Binary Compatibility
sl@0
   275
sl@0
   276
Backwards binary compatible with 053
sl@0
   277
RDbNotifier::Notify() has changed names, making this release source
sl@0
   278
incompatible, and RDbNotifer has gained a new export (see Changes).
sl@0
   279
sl@0
   280
sl@0
   281
Building
sl@0
   282
sl@0
   283
Mostly standard EBLD syntax supported. Invoking EBLD without parameters
sl@0
   284
gives usage information
sl@0
   285
sl@0
   286
sl@0
   287
Release components
sl@0
   288
sl@0
   289
All 8 build variants have been released.
sl@0
   290
MARM ASCII release build EDBMS.DLL + EDBSRV.EXE is 130,280 + 496 bytes
sl@0
   291
(127.7K) in ROM
sl@0
   292
sl@0
   293
To install DBMS for MARM:
sl@0
   294
	edbms.dll : install to \System\Libs\
sl@0
   295
	edbsrv.exe: install to \System\Programs\
sl@0
   296
sl@0
   297
For ROM building, edbsrv.exe should be marked as a FIXED process, the
sl@0
   298
process priority has yet to be specified.
sl@0
   299
sl@0
   300
DBMS can be successfully installed an run from C: (RAM drive) on a
sl@0
   301
EPOC Release 5 ROM
sl@0
   302
sl@0
   303
sl@0
   304
Known problems
sl@0
   305
sl@0
   306
DATAZIP will not work on new unicode database documents, as it does not
sl@0
   307
recognise the new Data App UID. This tool is likely to be migrated out
sl@0
   308
of DBMS in the near future
sl@0
   309
sl@0
   310
sl@0
   311
Testing
sl@0
   312
sl@0
   313
Test code amended and extended to verify the defect fixes and changes.
sl@0
   314
All platforms have been fully tested.
sl@0
   315
sl@0
   316
sl@0
   317
Changes
sl@0
   318
sl@0
   319
RDbs::Version() now reports "1.05(054)"
sl@0
   320
sl@0
   321
The notification interface of RDbNotifer has changed:
sl@0
   322
*	Notify() has been renamed to NotifyUnlock(), inidicating that all
sl@0
   323
	events are reported, including "unlock" events.
sl@0
   324
*	A new request NotifyChange() has been added which only completes
sl@0
   325
	when a change event (all except unlock) occurs on the database.
sl@0
   326
Note that change events occuring between notifier completion and making a
sl@0
   327
new request will not be missed (as they are in 053), see the fix for
sl@0
   328
SW1-334 below.
sl@0
   329
sl@0
   330
sl@0
   331
Defects Fixed
sl@0
   332
sl@0
   333
Defects are from EPOC Software Defects.
sl@0
   334
sl@0
   335
SW1-320	File and Path not found errors are now returned by
sl@0
   336
	RDbNamedDatabase::Open() when appropriate.
sl@0
   337
sl@0
   338
SW1-326	Attempting to read Long columns can return KErrAccessDenied if
sl@0
   339
	compaction or statistics update is in progress in the same
sl@0
   340
	client. 053 only reported this if a different client was
sl@0
   341
	compacting, but panic'd if it was the same client.
sl@0
   342
sl@0
   343
SW1-334	Database "change" events which occur after a request is completed
sl@0
   344
	are now stored by the notifier and reported immediately when the
sl@0
   345
	next notification request is made. Only the most significant event
sl@0
   346
	is stored, following this ordering:
sl@0
   347
sl@0
   348
		Recover > Rollback > Commit
sl@0
   349
sl@0
   350
	The more "significant" events have a larger impact on client views.
sl@0
   351
sl@0
   352
sl@0
   353
 
sl@0
   354
Version 1.05(053)
sl@0
   355
=================
sl@0
   356
(Made by Andrew Thoelke on 28th October, 1998)
sl@0
   357
sl@0
   358
This is a beta EPOC Release 5 component.
sl@0
   359
sl@0
   360
sl@0
   361
Dependencies
sl@0
   362
sl@0
   363
The requires EPOC Release 5 compatibility components to build and run
sl@0
   364
sl@0
   365
     Tools: E32TOOLS 095, E32TOOLP 096
sl@0
   366
Components: E32 156, F32 122, STORE 050
sl@0
   367
sl@0
   368
sl@0
   369
Binary Compatibility
sl@0
   370
sl@0
   371
Only WINS REL, MARM REL and MARM DEB releases are fully binary compatible
sl@0
   372
with 052
sl@0
   373
sl@0
   374
WINS DEB is now BC with WINS REL
sl@0
   375
WINS UREL is BC with WINS UDEB
sl@0
   376
MARM UREL is BC with MARM UDEB
sl@0
   377
sl@0
   378
sl@0
   379
Building
sl@0
   380
sl@0
   381
Mostly standard EBLD syntax supported. Invoking EBLD without parameters
sl@0
   382
gives usage information
sl@0
   383
sl@0
   384
sl@0
   385
Release components
sl@0
   386
sl@0
   387
All 8 build variants have been released.
sl@0
   388
MARM ASCII release build EDBMS.DLL + EDBSRV.EXE is 130,020 + 496 bytes
sl@0
   389
(127.5K) in ROM
sl@0
   390
sl@0
   391
To install DBMS for MARM:
sl@0
   392
	edbms.dll : install to \System\Libs\
sl@0
   393
	edbsrv.exe: install to \System\Programs\
sl@0
   394
sl@0
   395
For ROM building, edbsrv.exe should be marked as a FIXED process, the
sl@0
   396
process priority has yet to be specified.
sl@0
   397
sl@0
   398
DBMS can be successfully installed an run from C: (RAM drive) on a
sl@0
   399
EPOC Release 4 ROM
sl@0
   400
sl@0
   401
sl@0
   402
Known problems
sl@0
   403
sl@0
   404
DATAZIP will not work on new unicode database documents, as it does not
sl@0
   405
recognise the new Data App UID at the moment. This will be remedied once
sl@0
   406
the new unicode Data app UID is available.
sl@0
   407
sl@0
   408
sl@0
   409
Testing
sl@0
   410
sl@0
   411
All platforms have been fully tested.
sl@0
   412
sl@0
   413
sl@0
   414
Changes
sl@0
   415
sl@0
   416
1.	RDbs::Version() now reports "1.05(053)"
sl@0
   417
sl@0
   418
2.	New UIDs allocated for Unicode:
sl@0
   419
		0x10003B0E: Unicode EDBMS.DLL
sl@0
   420
		0x10003B0F: KDbmsDriverUid16
sl@0
   421
sl@0
   422
sl@0
   423
sl@0
   424
Version 1.05(052)
sl@0
   425
=================
sl@0
   426
(Made by Andrew Thoelke on 13th October, 1998)
sl@0
   427
sl@0
   428
This is a beta EPOC Release 5 component.
sl@0
   429
sl@0
   430
sl@0
   431
Dependencies
sl@0
   432
sl@0
   433
This component requires at least EPOC Release 4 in order to be built and
sl@0
   434
run.
sl@0
   435
Components required: E32 144, F32 115, STORE 049
sl@0
   436
Tools: E32TOOLS 095, E32TOOLP 093
sl@0
   437
sl@0
   438
sl@0
   439
Binary Compatibility
sl@0
   440
sl@0
   441
This release is fully backwards binary compatible with DBMS 051.
sl@0
   442
sl@0
   443
However, internal changes mean that different versions of DBMS 050+ in ROM
sl@0
   444
and RAM can cause problems.
sl@0
   445
sl@0
   446
DBMS 052 adds three more exports to the client interface, to support
sl@0
   447
enquiry of database properties such as size and usage.
sl@0
   448
sl@0
   449
sl@0
   450
Building
sl@0
   451
sl@0
   452
WINS components were built using MSVC++ 5.0, hence the debugging databases
sl@0
   453
are incompatible with previous versions of MSDev.
sl@0
   454
sl@0
   455
Command-line building now uses the "EBLD" syntax. Invoking EBLD from the
sl@0
   456
GROUP sub-project will provide usage information. All MNT verbs which
sl@0
   457
could previously be used for building have been removed.
sl@0
   458
sl@0
   459
EBLD TOOL ... is used to build the tools
sl@0
   460
sl@0
   461
sl@0
   462
Release components
sl@0
   463
sl@0
   464
All 8 build variants have been released.
sl@0
   465
MARM ASCII release build EDBMS.DLL + EDBSRV.EXE is 130,020 + 496 bytes
sl@0
   466
(127.5K) in ROM
sl@0
   467
sl@0
   468
To install DBMS 052 for MARM:
sl@0
   469
	edbms.dll : install to \System\Libs\
sl@0
   470
	edbsrv.exe: install to \System\Programs\
sl@0
   471
sl@0
   472
For ROM building, edbsrv.exe should be marked as a FIXED process, the
sl@0
   473
process priority has yet to be specified.
sl@0
   474
sl@0
   475
DBMS 052 can be successfully installed an run from C: (RAM drive) on a
sl@0
   476
EPOC Release 4 ROM
sl@0
   477
sl@0
   478
sl@0
   479
Testing
sl@0
   480
sl@0
   481
All platforms have been fully tested.
sl@0
   482
sl@0
   483
A new SQL-script test program has been added, and further SQL scripts are
sl@0
   484
planned to validate the query analysis and evaluation engine.
sl@0
   485
sl@0
   486
sl@0
   487
Changes
sl@0
   488
sl@0
   489
1.	RDbs::Version() now reports "1.05(052)"
sl@0
   490
sl@0
   491
2.	To complement database compaction, a query function which returns
sl@0
   492
	the database size and usage has been added: RDbDatabase::Size().
sl@0
   493
	This returns a structure containing the database size (in bytes)
sl@0
   494
	and the usage (in percent). A value <0 indiciates an inability to
sl@0
   495
	evaluate the property, this may be because the database does not
sl@0
   496
	support the query (such as RDbStoreDatabase), or because the value
sl@0
   497
	is not immediately available. For hard-to-compute values (like
sl@0
   498
	usage) this function will return a cached value, these "stats" can
sl@0
   499
	be updated by calling RDbDatabase::UpdateStats() (which may be
sl@0
   500
	long-running) or using the incremental version
sl@0
   501
	RDbIncremental::UpdateStats(TInt&).
sl@0
   502
sl@0
   503
3.	RDbNotifier's can now also be opened on a client-side database:
sl@0
   504
	attempting this operation with build 050 or 051 panic'd. The
sl@0
   505
	current implementation only supports a single notifier for a
sl@0
   506
	client-side database, but continues to support any number of
sl@0
   507
	notifiers opened on a client-server database.
sl@0
   508
sl@0
   509
4.	SQL Query optimisation has arrived. No longer is there only one
sl@0
   510
	way to evaluate a query, DBMS 052 will now make use of indexes to
sl@0
   511
	optimise query evaluation. The implications for database design
sl@0
   512
	(what to index) and access (undefined behaviour) are significant.
sl@0
   513
sl@0
   514
4.1.	Indexes may be used to evaluate the WHERE clause, the ORDER BY
sl@0
   515
	clause, or both. Pre DBMS 051 the exact method of evaluating a
sl@0
   516
	query was well defined, and could be relied on: e.g. an ORDER BY
sl@0
   517
	clause had to be evluated with an index, and WHERE clause was done
sl@0
   518
	on-the-fly; the TDbWindow paramater to RDbView::Prepare() was
sl@0
   519
	followed precisely. This can no longer be relied on in the
sl@0
   520
	presence of indexes.
sl@0
   521
sl@0
   522
4.2.	If a window is requested, the rowset is guaranteed to use one: but
sl@0
   523
	a window'd View may be provided for a request which did not
sl@0
   524
	specify one, because that may be the only (or best) way to
sl@0
   525
	evaluate the query. This implies that Views must be Evaluate()'d
sl@0
   526
	after preparation, and they may behave differently if this or
sl@0
   527
	another view updates the underlying table.
sl@0
   528
sl@0
   529
4.3.	An ORDER BY clause may be evaluated without an index (even if an
sl@0
   530
	appropriate one is available), in which case none of the rows will
sl@0
   531
	appear in the view until they have all been evaluated. So the "get
sl@0
   532
	results as they come in" approach used in the Data application
sl@0
   533
	will not look as cool--however, the results might appear 10 times
sl@0
   534
	faster to make up for this.
sl@0
   535
sl@0
   536
4.4.	Table rowsets continue to have the same behaviour as before.
sl@0
   537
sl@0
   538
5.	The server, DBMS drivers and open tables are now held in a expiry
sl@0
   539
	cache when they are no longer "in use", and discarded after a
sl@0
   540
	short time if not re-used. This significantly improves performance
sl@0
   541
	in situations where these objects are repeatedly opened and closed.
sl@0
   542
sl@0
   543
6.	Cluster caching is now dynamically increased when it would benefit
sl@0
   544
	access performance.
sl@0
   545
sl@0
   546
7.	RDbRowSet::CountL() and RDbRowSet::FindL() are implemented one
sl@0
   547
	layer "deeper" allowing the server implementation to improve their
sl@0
   548
	performance by an order of magnitude.
sl@0
   549
sl@0
   550
8.	All references to "Library" and "ISAM" are now "Driver". DBMS
sl@0
   551
	driver extensions will have the extension .dbx.
sl@0
   552
sl@0
   553
sl@0
   554
Defects fixed
sl@0
   555
sl@0
   556
Defect numbers refer to the EPOC Software Defects database
sl@0
   557
sl@0
   558
SW1-183: Null columns do not always return zero values (as spec'd by the
sl@0
   559
	SDK). The row buffer code has been adapted to do the right thing
sl@0
   560
	for all null columns. Test code amended to verify this in the
sl@0
   561
	"problem" cases.
sl@0
   562
sl@0
   563
SW1-225: An emulator-only defect where the server thread was being
sl@0
   564
	cleaned up by the OS because of incorrect ownership. Test code
sl@0
   565
	amended to verify this fix.
sl@0
   566
sl@0
   567
*	It was possible to set up a database state combining a transaction
sl@0
   568
	and long column access, that caused STORE to panic on rollback:
sl@0
   569
	this was not ideal for client-side access, but deadly for
sl@0
   570
	client-server access as it killed the server. The transaction
sl@0
   571
	locking system has now added transient read-locks for long column
sl@0
   572
	access to prevent this state. However, this may now cause a
sl@0
   573
	RDbColReadStream::Open() call to fail with "KErrLocked" if
sl@0
   574
	another client holds an exclusive lock on the database (e.g. they
sl@0
   575
	are updating a table, or compacting...). This can be handled
sl@0
   576
	earlier by using a transaction to enclose the read, in which case
sl@0
   577
	Begin() may fail with KErrLocked.
sl@0
   578
sl@0
   579
sl@0
   580
sl@0
   581
sl@0
   582
Version 1.03.051
sl@0
   583
================
sl@0
   584
(Made by AjThoelke, 28 August 1998)
sl@0
   585
sl@0
   586
This is an alpha EPOC Release 5 component.
sl@0
   587
sl@0
   588
sl@0
   589
Dependencies
sl@0
   590
sl@0
   591
This component ideally requires at least EPOC Release 4 in order to be built
sl@0
   592
and run.
sl@0
   593
Components required: E32 143, F32 115, STORE 049
sl@0
   594
Tools: E32TOOLS 094, E32TOOLP 093
sl@0
   595
sl@0
   596
sl@0
   597
Binary Compatibility
sl@0
   598
sl@0
   599
This release is fully backwards binary compatible with DBMS 043
sl@0
   600
This release is backwards source compatible with DBMS 050
sl@0
   601
sl@0
   602
DBMS now has the full E5 API, having now added support for data modification
sl@0
   603
SQL statements. Hopefully this API will not be changed in future E5 releases.
sl@0
   604
sl@0
   605
The SQL execution has changed from 050, although the new API remains source
sl@0
   606
(but not binary) compatible,.
sl@0
   607
sl@0
   608
sl@0
   609
Building
sl@0
   610
sl@0
   611
 Binaries: From the BMAKE sub-project invoke the BLD batch file
sl@0
   612
    Tools: From the TOOLS sub-project invoke the BLD batch file
sl@0
   613
sl@0
   614
sl@0
   615
Release components
sl@0
   616
sl@0
   617
All 8 build variants have been released.
sl@0
   618
MARM ASCII release build EDBMS.DLL is 120,732 bytes (117.9K) in ROM
sl@0
   619
sl@0
   620
To install DBMS 051 for MARM:
sl@0
   621
	edbms.dll : install to \System\Libs\
sl@0
   622
	edbsrv.exe: install to \System\Programs\
sl@0
   623
sl@0
   624
For ROM building, edbsrv.exe should be marked as a FIXED process, the process
sl@0
   625
priority has yet to be specified.
sl@0
   626
sl@0
   627
DBMS 051 can be successfully installed an run from C: on a EPOC Release 4 ROM
sl@0
   628
sl@0
   629
sl@0
   630
Testing
sl@0
   631
sl@0
   632
All platforms have been fully tested.
sl@0
   633
sl@0
   634
Note that some of the new functionality requires new test code to be written
sl@0
   635
to ensure it's correctness--this work is planned for the next release.
sl@0
   636
sl@0
   637
sl@0
   638
Defects fixed
sl@0
   639
sl@0
   640
Defect numbers refer to the EPOC Software Defects database
sl@0
   641
sl@0
   642
*	SW1-65: DBMS 051 should be MSVC 5.0 friendly
sl@0
   643
sl@0
   644
*	SW1-71: Function renamed to RDbs::ResourceCount()
sl@0
   645
sl@0
   646
*	SW1-173: LIKE '*?a?*' could fail to match rows that it should, this has
sl@0
   647
	been remedied
sl@0
   648
sl@0
   649
*	Faulting previously correct SQL due to the additon of reserved keywords
sl@0
   650
	is not really backwards compatible, and this restriction is now lifted.
sl@0
   651
	Tables,	indexes and columns can be named after SQL keywords. This is not,
sl@0
   652
	however, recommended if you want to remain forwards compatible with 043.
sl@0
   653
sl@0
   654
*	SQL create-table-statements could contain invalid data types and cause
sl@0
   655
	unexpected things to happen: e.g. "UNSIGNED BINARY" was not flagged as
sl@0
   656
	an error.
sl@0
   657
sl@0
   658
*	If the last record in a partially evaluated view was deleted and further
sl@0
   659
	evaluation generated more rows, the cursor put itself into an
sl@0
   660
	inconsistent state, often resulting in a panic. This situation is now
sl@0
   661
	detected and dealt with correctly.
sl@0
   662
sl@0
   663
sl@0
   664
Changes and additions
sl@0
   665
sl@0
   666
A full explanation of the API changes can be found in "r:\dbms\dsdk\api.doc",
sl@0
   667
and the SQL grammar is described in "r:\dbms\dsdk\sql.doc".
sl@0
   668
sl@0
   669
*	ORDER BY clauses in RDbView queries can now be evaluated without
sl@0
   670
	requiring the support of an index (hooray!). In fact, it is now
sl@0
   671
	recommended that you do _not_ create indexes for the sole purpose of
sl@0
   672
	evaluating an ORDER BY clause: they are slower and bigger, particularly
sl@0
   673
	for text keys. More detail on those issues in the next release...
sl@0
   674
sl@0
   675
*	RDbDatabase::Execute() now supports DML as well as DDL statements.
sl@0
   676
	(see api.doc and sql.doc for details)
sl@0
   677
sl@0
   678
*	Added class RDbUpdate to incrementally execute data modification SQL
sl@0
   679
	statements. (see api.doc)
sl@0
   680
sl@0
   681
*	Started caching tables which have been opened, but are no longer used
sl@0
   682
	by any cursor, until the current transaction completes. This
sl@0
   683
	particularly improves performance of multiple SQL insert-statements
sl@0
   684
	run inside a transaction, as well as removing a nearly-silent-failure
sl@0
   685
	mode from the transaction system.
sl@0
   686
sl@0
   687
*	Major reworking of the SQL engine involving:
sl@0
   688
sl@0
   689
*	Rewrite of the lexer, removing most dependencies on TLex and TChar
sl@0
   690
	for performance reasons. TChar functions are only used for non-ASCII
sl@0
   691
	characters encountered in identifiers or spaces. TLex is only used
sl@0
   692
	for lexing floating point numbers. Keyword identification now uses a
sl@0
   693
	case-insensitive comparison, rather than folding.
sl@0
   694
sl@0
   695
*	Literal values are managed and converted by a single class
sl@0
   696
sl@0
   697
*	Added support for DML statements to the parser
sl@0
   698
sl@0
   699
*	Access plan generation has been moved into a new class, in preparation
sl@0
   700
	for query optimization in the next release.
sl@0
   701
sl@0
   702
sl@0
   703
sl@0
   704
Version 1.02.050
sl@0
   705
================
sl@0
   706
(Made by AjThoelke, 7 May 1998)
sl@0
   707
sl@0
   708
sl@0
   709
Binary Compatibility
sl@0
   710
sl@0
   711
This release is fully backwards binary compatible with DBMS 043.
sl@0
   712
sl@0
   713
The new API in this release of DBMS is NOT frozen at present, and it has
sl@0
   714
beta status. It is liable to be changed in incompatible ways in the next
sl@0
   715
release.
sl@0
   716
sl@0
   717
Additionally, some of the functionality in 043 has been enhanced, so code
sl@0
   718
which relies on the new behaviour will fail when used with 043.
sl@0
   719
sl@0
   720
sl@0
   721
Build
sl@0
   722
sl@0
   723
E32 release 126, for debug/release compatibility and Security framework
sl@0
   724
F32 release 095
sl@0
   725
STORE release 048, for RSecureStorePagePool and assertion fix
sl@0
   726
E32TOOLS 089
sl@0
   727
sl@0
   728
ARM narrow release size is 111,364 bytes (108.8K), as reported from ROMBUILD.
sl@0
   729
sl@0
   730
*	Reorganised the source code, SQL classes are now in sub-project USQL
sl@0
   731
sl@0
   732
*	Added two new source directories for the DBMS server: SDBMS contains all
sl@0
   733
	classes which are built into EDBMS.DLL, SEXE contains the code for the
sl@0
   734
	server process MARM executable.
sl@0
   735
sl@0
   736
sl@0
   737
Release
sl@0
   738
sl@0
   739
*	All MARM binaries have been validated
sl@0
   740
sl@0
   741
*	All test code has been run against compatible platforms
sl@0
   742
sl@0
   743
*	The build number has been bumped just in case a small incremental release
sl@0
   744
	based on 043 is required for EPOC release 4 (e.g. for a bug fix). 050 is
sl@0
   745
	not ready for platform release.
sl@0
   746
sl@0
   747
*	MARM now releases an executable as well as a DLL. EDBSRV.EXE should go
sl@0
   748
	in \system\programs and is required if and only if client/server DBMS is
sl@0
   749
	used. WINS does not have any additional objects
sl@0
   750
sl@0
   751
sl@0
   752
Defects fixed
sl@0
   753
sl@0
   754
*	Obscure "phantom row" defect, discovered during code review.
sl@0
   755
	If a row is deleted through rowset A, and then rowset B deletes what would
sl@0
   756
	be the next record for rowset A; then NextL() on rowset A would fail to
sl@0
   757
	move to the next record after that, resulting in a KErrNotFound error on
sl@0
   758
	a subsequent GetL() on rowset A. NextL() now checks for this state and
sl@0
   759
	navigates correctly
sl@0
   760
sl@0
   761
*	LIKE '?' fails to match a text column containing a single character.
sl@0
   762
	Certain patterns in an SQL like-predicate failed to match when they
sl@0
   763
	should. The patterns which would failed are characterised by ending in
sl@0
   764
	one or more '?' followed by zero or more '*', as long as the '?'s were
sl@0
   765
	not preceeded by a regular character. e.g.
sl@0
   766
		'?' would not match any single character string
sl@0
   767
		'?*' would only match strings of length >=2 rather than	>=1
sl@0
   768
sl@0
   769
sl@0
   770
Changes and additions
sl@0
   771
sl@0
   772
These release notes contain just the highlights of the changes made to DBMS.
sl@0
   773
The document "r:\dbms\dsdk\api.doc" provides more detail on the new API	and
sl@0
   774
behaviour of shared databases.
sl@0
   775
sl@0
   776
*	RDbs is the client session handle for sharing databases through the DBMS
sl@0
   777
	server. It provides resource checking and heap failure tools
sl@0
   778
sl@0
   779
*	RDbNamedDatabase provide the generic mechanism for instantiating a
sl@0
   780
	database, by providing a name and a format-spec. Databases can be opened
sl@0
   781
	client-side for exclusive write access or shared read-only access, or
sl@0
   782
	through the DBMS server for shared write access.
sl@0
   783
sl@0
   784
*	RDbNotifier provides change notification for shared databases. They can
sl@0
   785
	only be opened on a database which has been opened using the DBMS server
sl@0
   786
sl@0
   787
*	RDbDatabase::Begin() now returns a TInt error code. For client databases
sl@0
   788
	this is garaunteed to be KErrNone (thus ensuring B.C.), but a client-server
sl@0
   789
	database may return KErrLocked if another client has locked the database
sl@0
   790
sl@0
   791
*	A single transaction can share DDL operations and DML operations. Any
sl@0
   792
	affected rowsets which are open when a DDL operation is begun will be
sl@0
   793
	invalidated, and if the DDL operation is rolled back all rowsets are
sl@0
   794
	invalidated. In this state, most operations on the rowset result in a
sl@0
   795
	KErrDisconnected error, and the rowset has to be Close()'d--it cannot
sl@0
   796
	be Reset()
sl@0
   797
sl@0
   798
*	RDbDatabase::Compact() and RDbIncremental::Compact() provide a way to
sl@0
   799
	compact a database. This can be used for RDbStoreDatabase's as an
sl@0
   800
	alternative	to the compaction functions available on CStreamStore. These
sl@0
   801
	will fail if anyone has an outstanding transaction (including the caller)
sl@0
   802
sl@0
   803
*	RDbDatabase::Execute() and RDbIncrmental::Execute() can execute DDL SQL
sl@0
   804
	statements. See	"r:\dbms\dsdk\sql.doc" for the SQL syntax of these
sl@0
   805
	statements.
sl@0
   806
sl@0
   807
	*** If your databases contain tables, indexes or columns which use an SQL
sl@0
   808
	keyword for their name: then any SQL passed to DBMS 050, including
sl@0
   809
	RDbView::Prepare(), can fail with KErrArgument. The list SQL reserved
sl@0
   810
	words is also in the document.
sl@0
   811
sl@0
   812
*	Relaxed	constraints on getting and setting integral columns on a rowset
sl@0
   813
	and also for specifying integral key values in a TDbSeekKey. These are
sl@0
   814
	primarily provided to ease the implementation of non-C++ interfaces to
sl@0
   815
	DBMS, note that utilising the new functionality will panic'd on DBMS 043.
sl@0
   816
sl@0
   817
sl@0
   818
Test code
sl@0
   819
sl@0
   820
*	Revised the current test code to use and test the new API for database
sl@0
   821
	instantiation and DDL SQL, and also to test dynamic binding of the DBMS
sl@0
   822
	driver library
sl@0
   823
sl@0
   824
*	Added a new test program to test database sharing
sl@0
   825
sl@0
   826
sl@0
   827
Version 1.02.043
sl@0
   828
================
sl@0
   829
(Made by AjThoelke, 30 March 1998)
sl@0
   830
sl@0
   831
Binary Compatibility
sl@0
   832
sl@0
   833
This release is fully backwards and forwards binary compatible with DBMS 042.
sl@0
   834
sl@0
   835
Build
sl@0
   836
sl@0
   837
E32 release 125, for debug/release compatibility and Security framework
sl@0
   838
F32 release 095
sl@0
   839
STORE release 047, for RSecureStorePagePool
sl@0
   840
E32TOOLS 089
sl@0
   841
sl@0
   842
ARM narrow release size is 81964 bytes (80.0K), as reported from ROMBUILD.
sl@0
   843
sl@0
   844
Fixed
sl@0
   845
sl@0
   846
1.	The compressor could generate an invalid compressed database due to
sl@0
   847
	faulty analysis of the database data. The data written is subtly
sl@0
   848
	different to the original database, so analysis for the encoding should
sl@0
   849
	take place on the data that is written, not on the data that is read:
sl@0
   850
	which is what DBMS 042 was doing.
sl@0
   851
	
sl@0
   852
	This has been fixed: compression is now a little slower, and DBMS is
sl@0
   853
	.5K smaller.
sl@0
   854
sl@0
   855
sl@0
   856
Version 1.02.042
sl@0
   857
================
sl@0
   858
(Made by AjThoelke, 18 March 1998)
sl@0
   859
sl@0
   860
Binary Compatibility
sl@0
   861
sl@0
   862
With the exception of compressed databases, this release is fully backwards and
sl@0
   863
forwards binary compatible with DBMS 041.
sl@0
   864
sl@0
   865
The compression format has changed slightly, resulting in a data incompatibility
sl@0
   866
for compressed databases between 041 and 042. You must use DBMS 042 to compress
sl@0
   867
databases for use with this release.
sl@0
   868
sl@0
   869
Build
sl@0
   870
sl@0
   871
E32 release 125, for debug/release compatibility and Security framework
sl@0
   872
F32 release 095
sl@0
   873
STORE release 047, for RSecureStorePagePool
sl@0
   874
E32TOOLS 089
sl@0
   875
sl@0
   876
ARM narrow release size is 82448 bytes (80.5K), as reported from ROMBUILD.
sl@0
   877
sl@0
   878
Changes
sl@0
   879
sl@0
   880
1.	The compression format has been changed to provide a larger look-back
sl@0
   881
	for better compression of long streams; and now uses a stream terminator
sl@0
   882
	resulting in faster decompression code.
sl@0
   883
sl@0
   884
sl@0
   885
Version 1.02.041
sl@0
   886
================
sl@0
   887
(Made by AjThoelke, 13 March 1998)
sl@0
   888
sl@0
   889
Binary Compatibility
sl@0
   890
sl@0
   891
Fully backwards and forwards binary compatible with DBMS 040
sl@0
   892
sl@0
   893
Build
sl@0
   894
sl@0
   895
E32 release 125, for debug/release compatibility and Security framework
sl@0
   896
F32 release 095
sl@0
   897
STORE release 047, for RSecureStorePagePool
sl@0
   898
E32TOOLS 089
sl@0
   899
sl@0
   900
ARM narrow release size is 82524 bytes (80.6K), as reported from ROMBUILD.
sl@0
   901
sl@0
   902
Fixed
sl@0
   903
sl@0
   904
1.	Compression failed for databases which had no LongText or LongBinary
sl@0
   905
	data. The huffman code generator could not cope with a no-data
sl@0
   906
	situation. This has been fixed so that non-encodings are supported.
sl@0
   907
sl@0
   908
2.	Some code slipped out of 040 which ensures that enforces the read-only
sl@0
   909
	nature of a compressed database. Otherwise the database could be
sl@0
   910
	modified and left in a corrupt and unreadable state.
sl@0
   911
sl@0
   912
3.	Reduced the memory requirements for compression by a factor of 4 or
sl@0
   913
	more for databases with large streams.
sl@0
   914
sl@0
   915
sl@0
   916
Version 1.02.040
sl@0
   917
================
sl@0
   918
(Made by AjThoelke, 6 March 1998)
sl@0
   919
sl@0
   920
Binary Compatibility
sl@0
   921
sl@0
   922
Fully backwards binary compatible with DBMS 039
sl@0
   923
Forwards compatible with 039 if you do not use either of the two new exports:
sl@0
   924
sl@0
   925
	RDbStoreDatabase::CompressL(CStreamStore&,TStreamId);
sl@0
   926
	RDbStoreDatabase::DecompressL(CStreamStore&,TStreamId);
sl@0
   927
sl@0
   928
in d32dbms.h. (See below)
sl@0
   929
sl@0
   930
Build
sl@0
   931
sl@0
   932
E32 release 125, for debug/release compatibility and Security framework
sl@0
   933
F32 release 095
sl@0
   934
STORE release 047, for RSecureStorePagePool
sl@0
   935
E32TOOLS 089
sl@0
   936
sl@0
   937
ARM narrow release size is 82384 bytes (80.5K), as reported from ROMBUILD.
sl@0
   938
sl@0
   939
Fixed
sl@0
   940
sl@0
   941
1.	Writing to a LongText column using the WriteL(RReadStream&,TInt)
sl@0
   942
	overload can result in an incorrect column size being stored in the row.
sl@0
   943
	This defect has only been introduced in 039, and was not present before
sl@0
   944
	that release.
sl@0
   945
	This has been fixed, and test code has been changed to test the
sl@0
   946
	behaviour of stream-to-stream writing to LongText columns.
sl@0
   947
sl@0
   948
New stuff
sl@0
   949
sl@0
   950
1.	Provided primarily to support compression of help files in ROM...
sl@0
   951
	Store databases can be compressed[1]. These new static functions of
sl@0
   952
	RDbStoreDatabase
sl@0
   953
sl@0
   954
	CompressL(CStreamStore&,TStreamId)
sl@0
   955
	DecompressL(CStreamStore&,TStreamId)
sl@0
   956
sl@0
   957
	convert a (non-encrypted) database from normal to compressed form and
sl@0
   958
	back again.
sl@0
   959
sl@0
   960
	These functions operate synchronously, and can take an extended time to
sl@0
   961
	complete[2]. On return the database is not open, and the store file
sl@0
   962
	should be CompactL()'d and CommitL()'d after compression or
sl@0
   963
	decompression is successful. If they fail, the database will be in its
sl@0
   964
	previous state, i.e. the database is still good.
sl@0
   965
sl@0
   966
	Index data cannot be compressed (unfortunately).
sl@0
   967
sl@0
   968
	Once compressed the database is read-only, but otherwise operates as
sl@0
   969
	normal: the data is decompressed on the fly as required.
sl@0
   970
sl@0
   971
	I have included the compression code on MARM (4.5K of ROM) as this
sl@0
   972
	might prove useful, although it is less aggressive when compressing
sl@0
   973
	than the WINS/WINC code. The resulting database is about 7% larger
sl@0
   974
	but takes half the time to compress. Compression requires quite a bit of
sl@0
   975
	memory.
sl@0
   976
sl@0
   977
	[1] Test on help files show compression ratios between 2.5:1 and 4:1
sl@0
   978
	[2] e.g. the Series5 help file (343K) takes 10 seconds to compress on
sl@0
   979
	an E32 125 ROM.
sl@0
   980
sl@0
   981
2.	A new releasable TOOLS contains a WINC\REL executable DataZip.exe which
sl@0
   982
	can compress a Data Document (including help files). This has the same
sl@0
   983
	EPOC dependencies as DBMS 040 (of course).
sl@0
   984
sl@0
   985
	To run this program you need to have E32 WINC 125+, F32 WINC 095+, STORE
sl@0
   986
	WINS 047+, DBMS WINS 040+ and DataZip all in the same directory. The
sl@0
   987
	source and target file names for the program must be specified in full
sl@0
   988
	due to a limitation of WINC at present
sl@0
   989
sl@0
   990
	
sl@0
   991
Version 1.02.039
sl@0
   992
================
sl@0
   993
(Made by AjThoelke, 19 February 1998)
sl@0
   994
sl@0
   995
Binary Compatibility
sl@0
   996
sl@0
   997
Only the client API (d32dbms.h) in MARM REL, WINS REL and WINS DEB builds
sl@0
   998
remains binary compatible with DBMS 038.
sl@0
   999
sl@0
  1000
*	This is the first release to support unicode properly, in particular,
sl@0
  1001
	the unicode releases are not BC with the 038 pre-release.
sl@0
  1002
sl@0
  1003
*	MARM Debug builds have broken BC in order to become BC with the
sl@0
  1004
	release build, enabling debug/release component mix'n'match.
sl@0
  1005
sl@0
  1006
*	In order to enable client-server and future extensions to DBMS, the
sl@0
  1007
	implementors' interface has been thoroughly broken. This interface is
sl@0
  1008
	described by d32dbas.h, d32rec.h and d32table.h; it has never been
sl@0
  1009
	documented and will no longer be supported by DBMS. These header files
sl@0
  1010
	have been withdrawn until Akula completes its changes to this API.
sl@0
  1011
sl@0
  1012
*	The client interface, described by d32dbms.h, is completely backwards
sl@0
  1013
	binary compatible with 038, adding some new functionality in the shape
sl@0
  1014
	of secure databases (see below).
sl@0
  1015
sl@0
  1016
If you are building a release/debug compatible component you must use at least
sl@0
  1017
E32 125, F32 95, STORE 047 and DBMS 039.
sl@0
  1018
sl@0
  1019
Build
sl@0
  1020
sl@0
  1021
E32 release 125, for debug/release compatibility and Security framework
sl@0
  1022
F32 release 095
sl@0
  1023
STORE release 047, for RSecureStorePagePool
sl@0
  1024
E32TOOLS 089
sl@0
  1025
sl@0
  1026
ARM narrow release size is 75920 bytes (74.1K), as reported from ROMBUILD.
sl@0
  1027
sl@0
  1028
MAKMAKE is now used throughout DBMS. The new BMAKE directory contains the batch
sl@0
  1029
file (bld.bat), makefiles and mmp files to build DBMS. BWINS and BMARM now just
sl@0
  1030
contain the export definitions files.
sl@0
  1031
sl@0
  1032
DBMS can still be built using the mnt verbs, or by invoking BLD in the BMAKE
sl@0
  1033
directory. Invoking BLD without parameters gives the basic syntax used.
sl@0
  1034
sl@0
  1035
Test code is built either in each test code sub-project using bld.bat or the
sl@0
  1036
makefile, or using mnt.cmd from the group as before to build all test code.
sl@0
  1037
sl@0
  1038
Fixed
sl@0
  1039
sl@0
  1040
1.	SW1-792: Following DeleteL() on a filtered rowset, the cursor now
sl@0
  1041
	correctly determines the NextL() row in the set.
sl@0
  1042
sl@0
  1043
2.	Loopholes in the LongText column streaming code allowed clever, but
sl@0
  1044
	incorrect, things to be done with text-only columns (such as embedded
sl@0
  1045
	stores etc.). These columns might now be encrypted, and so do not
sl@0
  1046
	support seeking or combined read and write: so this condition is
sl@0
  1047
	asserted. LongText streams should only ever stream text in or out,
sl@0
  1048
	LongBinary columns must be used for embedding stores.
sl@0
  1049
sl@0
  1050
sl@0
  1051
3.	An SQL view which had a comparison operator on a long unicode column
sl@0
  1052
	could be evaluated incorrectly due to a /2 error in a length
sl@0
  1053
	calculation. This has been fixed.
sl@0
  1054
sl@0
  1055
4.	The SQL parser could fail in new ways in Unicode (such as OOM) when
sl@0
  1056
	parsing numeric values. The parser was re-engineered to correctly report
sl@0
  1057
	the real error code, instead of reporting a generic error
sl@0
  1058
	(KErrArgument).
sl@0
  1059
sl@0
  1060
5.	RDbTable::SeekL(), when looking up a unicode column key would not use
sl@0
  1061
	the whole key value given (another divide-by-2 error). Fixed.
sl@0
  1062
sl@0
  1063
Changes and additions
sl@0
  1064
sl@0
  1065
1.	Unicode is here (properly this time). Test code has been modified to run
sl@0
  1066
	in unicode builds. Missing LongText16 functionality has been
sl@0
  1067
	implemented, and a couple of unicode column flaws have been fixed.
sl@0
  1068
sl@0
  1069
2.	LongText16 columns could not be used in LIKE predicates in SQL. The
sl@0
  1070
	required classes and code has been implemented to match the 8-bit code.
sl@0
  1071
sl@0
  1072
3.	Long column optimizations have been overhauled to allow many more than
sl@0
  1073
	previously (the limit has been rasied from 32 to 504, if there are no
sl@0
  1074
	other columns). To reduce memory consumption when large numbers of long
sl@0
  1075
	columns are used, the row buffer is now sized dynamically; are whereas
sl@0
  1076
	the RDbRowSet::SetColL() members may have left with KErrTooBig, they can
sl@0
  1077
	now fail with KErrNoMemory if the buffer cannot be expanded. Overall
sl@0
  1078
	this may reduce the memory requirements for using DBMS.
sl@0
  1079
sl@0
  1080
4.	AlterTable() has some added powers. As long as the respective columns
sl@0
  1081
	are not indexed, it now possible to increase the maximum length of
sl@0
  1082
	Text8, Text16 and Binary columns--up to their maximum of 255 bytes--or
sl@0
  1083
	to change such a column into its respective long type. The reverse is
sl@0
  1084
	not allowed (shortening a Text column or changing LongText->Text).
sl@0
  1085
	
sl@0
  1086
	Changing the maximum length of a column in a StoreDatabase does not
sl@0
  1087
	require the table to be	re-written, and so is a quick operation.
sl@0
  1088
	Changing the column type does require the entire table to be re-written
sl@0
  1089
	and so can take an extended time to complete.
sl@0
  1090
sl@0
  1091
5.	Encrypted databases are also now available (thanks to an addition to the
sl@0
  1092
	security framework in the Base). The database is encrypted by a key it
sl@0
  1093
	generates itself, access to this key is protected by encryption and
sl@0
  1094
	decryption keys provided by clients. This allows a client to change the
sl@0
  1095
	user password (for example) without requiring the entire database to be
sl@0
  1096
	re-encrypted. For this reason it is not possible to turn a secure
sl@0
  1097
	database into a plain-text database and vice-versa: this can only be
sl@0
  1098
	done by copying the data from one database to another. It is worth noting
sl@0
  1099
	that encrypting a database does have an impact on performance.
sl@0
  1100
sl@0
  1101
	The three new API functions:
sl@0
  1102
sl@0
  1103
	RDbStoreDatabase::CreateL(CStreamStore*,CSecurityEncryptBase*)
sl@0
  1104
sl@0
  1105
	This creates a secure version of the store database. It cannot be read
sl@0
  1106
	using DBMS 038 or earlier (it will fail with KErrNotSupported). The
sl@0
  1107
	second parameter is an encryption object (such as returned from
sl@0
  1108
	CSecurityBase::NewEncryptL) which is used to create authentication
sl@0
  1109
	data in the database. The key object is deleted by this function.
sl@0
  1110
sl@0
  1111
	A matching CSecurityDecryptBase object (i.e. same key, same algorithm)
sl@0
  1112
	must be provided to allow access to the database at any later stage.
sl@0
  1113
	
sl@0
  1114
	RDbStoreDatabase::OpenL(CStreamStore*,TStreamId,CSecurityDecryptBase*)
sl@0
  1115
sl@0
  1116
	This is the secure version of opening a store database. The supplied
sl@0
  1117
	decryption key will be authenticated first before the database is
sl@0
  1118
	opened. It should match the Encryption key used to create the database,
sl@0
  1119
	or the last security change. The key object is deleted by this function.
sl@0
  1120
sl@0
  1121
	If the key fails to access the database this fails with KErrGeneral.
sl@0
  1122
	If the database is not encrypted this fails with KErrArgument.
sl@0
  1123
	If the database is encrypted using an unknown algorithm this fails with
sl@0
  1124
	KErrNotSupported.
sl@0
  1125
	
sl@0
  1126
	RDbDatabase::ChangeSecurity(CSecurityDecryptBase*,CSecurityEncryptBase*)
sl@0
  1127
sl@0
  1128
	This is used to change the access key for the database. The first
sl@0
  1129
	parameter is the current decryption key, which is authenticated (just as
sl@0
  1130
	for opening a database); the second parameter is the new encryption key,
sl@0
  1131
	used to re-encrypt the authentication data. Both keys are deleted by
sl@0
  1132
	this function.
sl@0
  1133
sl@0
  1134
	If the database is not encrypted this fails with KErrArgument.
sl@0
  1135
	If the key fails to access the database this fails with KErrGeneral.
sl@0
  1136
	
sl@0
  1137
6.	Cluster (records) caching has been changed to provide caching for
sl@0
  1138
	multiple record-clusters, paving the way for more efficient multiple
sl@0
  1139
	client access.
sl@0
  1140
sl@0
  1141
7.	Internal column sets are now crossed indexed by name, making table
sl@0
  1142
	creation and alteration, and view preparation faster when tha table has
sl@0
  1143
	a large number of columns. Creating tables up the the record limits is
sl@0
  1144
	quite acceptably fast now.
sl@0
  1145
sl@0
  1146
8.	Took the opportunity presented by losing back-end API compatibility to
sl@0
  1147
	rectify one or two design flaws in the implementation classes, and begin
sl@0
  1148
	the work on turning it into a dynamically loaded generic-database
sl@0
  1149
	framework.
sl@0
  1150
sl@0
  1151
sl@0
  1152
Version 1.01.038
sl@0
  1153
================
sl@0
  1154
(Made by AjThoelke, 16 October 1997)
sl@0
  1155
sl@0
  1156
1.	Built using Platform 001 releases of E32, F32 and STORE; used E32TOOLS/067
sl@0
  1157
sl@0
  1158
	Only debug binaries have been modified by this release.
sl@0
  1159
	
sl@0
  1160
	Size of EDBMS.DLL
sl@0
  1161
sl@0
  1162
	WINS ASCII Release      66,560 bytes (65.0K)
sl@0
  1163
	WINS ASCII Debug        -
sl@0
  1164
	MARM ASCII Release      68,748 bytes (67.1K)	(ROMBUILD)
sl@0
  1165
	MARM ASCII Debug        82,076 bytes (80.2K)	(ROMBUILD)
sl@0
  1166
sl@0
  1167
2.	Fixed SW1-393 as described. Change T_INDEX to check the assertion.
sl@0
  1168
sl@0
  1169
sl@0
  1170
Version 1.00.037
sl@0
  1171
================
sl@0
  1172
(Made by Geert, 2 June 1997)
sl@0
  1173
sl@0
  1174
1.	Built using Platform 001 releases of E32, F32 and STORE; used E32TOOLS/067
sl@0
  1175
sl@0
  1176
	Size of EDBMS.DLL
sl@0
  1177
sl@0
  1178
	WINS ASCII Release      66,560 bytes (65.0K)
sl@0
  1179
	WINS ASCII Debug        -
sl@0
  1180
	MARM ASCII Release      68,748 bytes (67.1K)	(ROMBUILD)
sl@0
  1181
	MARM ASCII Debug        82,076 bytes (80.2K)	(ROMBUILD)
sl@0
  1182
sl@0
  1183
2.	Fixed SW3-1060 as described.
sl@0
  1184
sl@0
  1185
sl@0
  1186
Version 1.00.036
sl@0
  1187
================
sl@0
  1188
(Made by AjThoelke, 28 May 1997)
sl@0
  1189
sl@0
  1190
1.	Built using Platform 001 releases of E32, F32 and STORE; used E32TOOLS/067
sl@0
  1191
sl@0
  1192
	Size of EDBMS.DLL
sl@0
  1193
sl@0
  1194
	WINS ASCII Release      66,560 bytes (65.0K)
sl@0
  1195
	WINS ASCII Debug        -
sl@0
  1196
	MARM ASCII Release      68,732 bytes (67.1K)	(ROMBUILD)
sl@0
  1197
	MARM ASCII Debug        82,060 bytes (80.1K)	(ROMBUILD)
sl@0
  1198
sl@0
  1199
2.	Fixed MNT VALID: needed -e32 in pediff command line.
sl@0
  1200
sl@0
  1201
sl@0
  1202
Version 1.00.035
sl@0
  1203
================
sl@0
  1204
(Made by AjThoelke, 19 May 1997)
sl@0
  1205
sl@0
  1206
Build
sl@0
  1207
sl@0
  1208
	Built using Platform releases of E32, F32 and STORE; used E32TOOLS/066
sl@0
  1209
sl@0
  1210
	Size of EDBMS.DLL
sl@0
  1211
sl@0
  1212
	WINS ASCII Release      66,560 bytes (65.0K)
sl@0
  1213
	WINS ASCII Debug        -
sl@0
  1214
	MARM ASCII Release      68,732 bytes (67.1K)	(ROMBUILD)
sl@0
  1215
	MARM ASCII Debug        82,060 bytes (80.1K)	(ROMBUILD)
sl@0
  1216
sl@0
  1217
Binary Compatibility
sl@0
  1218
sl@0
  1219
	Fully binary compatible with Platform release 034.
sl@0
  1220
sl@0
  1221
	Four reserved virtual functions on the CDbDatabase and CDbCursor classes
sl@0
  1222
	defined in d32dbas.h were incorrectly declared as public. These now have
sl@0
  1223
	private access. The only real changes required to the releasables was new
sl@0
  1224
	WINS import libraries.
sl@0
  1225
sl@0
  1226
	Nobody should have got anywhere near calling these exports, but they
sl@0
  1227
	have been made private to protect against anyone doing so "by accident".
sl@0
  1228
	You should not be building against this release: use the platform
sl@0
  1229
	version 034.
sl@0
  1230
sl@0
  1231
Changes
sl@0
  1232
sl@0
  1233
1.	Removed Name builds from the BWINS project make file.
sl@0
  1234
sl@0
  1235
2.	Added map files to MARM releaseables
sl@0
  1236
sl@0
  1237
Differences from 034:
sl@0
  1238
sl@0
  1239
sl@0
  1240
Version 0.06.034
sl@0
  1241
================
sl@0
  1242
(Made by AjThoelke, 17 April 1997)
sl@0
  1243
sl@0
  1244
1.	Uses E32/098, F32/068, STORE/042, E32TOOLS/063
sl@0
  1245
sl@0
  1246
	Binary compatible with 033.
sl@0
  1247
	File compatible with 033.
sl@0
  1248
sl@0
  1249
	Build sizes for EDBMS[D].DLL
sl@0
  1250
sl@0
  1251
	WINS ASCII Release      66,560 bytes (65.0K)
sl@0
  1252
	WINS ASCII Debug        -
sl@0
  1253
	MARM ASCII Release      68,732 bytes (67.1K)	(ROMBUILD)
sl@0
  1254
	MARM ASCII Debug        82,060 bytes (80.1K)
sl@0
  1255
sl@0
  1256
2.	New Uid scheme adopted for MARM releasables. For MARM, requires
sl@0
  1257
	E32 098 for anything other than narrow release.
sl@0
  1258
sl@0
  1259
3.	Fixed SW-3494. Calling RDbRowSet::Cancel() before the database had
sl@0
  1260
	actually been modified when in a real transaction left the transaction
sl@0
  1261
	machinery in an invalid state. This has been cured.
sl@0
  1262
sl@0
  1263
sl@0
  1264
Version 0.06.033
sl@0
  1265
================
sl@0
  1266
(Made by AjThoelke, 11 April 1997)
sl@0
  1267
sl@0
  1268
1.	Uses E32/097, F32/067, STORE/041, E32TOOLS/060
sl@0
  1269
sl@0
  1270
2.	Binary incompatible with 032.
sl@0
  1271
	File compatible with 032.
sl@0
  1272
sl@0
  1273
3.	Build (ROM) sizes for EDBMS[D].DLL
sl@0
  1274
sl@0
  1275
	WINS ASCII Release      66,560 bytes (65.0K)
sl@0
  1276
	WINS ASCII Debug        -
sl@0
  1277
	MARM ASCII Release      68,728 bytes (67.1K)	(ROMBUILD)
sl@0
  1278
	MARM ASCII Debug        82,056 bytes (80.1K)
sl@0
  1279
sl@0
  1280
4.	Full Binary compatibility review complete. API is now frozen.
sl@0
  1281
sl@0
  1282
	Adjusted exports to provide a full implementation API, for potential
sl@0
  1283
	other implementations of the client API.
sl@0
  1284
sl@0
  1285
	Added some reserved virtual space onto the DBMS implementation framework
sl@0
  1286
	for future development.
sl@0
  1287
sl@0
  1288
sl@0
  1289
Version 0.06.032
sl@0
  1290
================
sl@0
  1291
(Made by AjThoelke, 10 April 1997)
sl@0
  1292
sl@0
  1293
1.	Uses E32/096, F32/066, STORE/040, E32TOOLS/060
sl@0
  1294
sl@0
  1295
2.	Binary compatible with 031. File compatible with 031.
sl@0
  1296
sl@0
  1297
3.	Build (ROM) sizes for EDBMS[D].DLL
sl@0
  1298
sl@0
  1299
	WINS ASCII Release      66,048 bytes (64.5K)
sl@0
  1300
	WINS ASCII Debug        -
sl@0
  1301
	MARM ASCII Release      68,580 bytes (66.9K)	(ROMBUILD)
sl@0
  1302
	MARM ASCII Debug        81,824 bytes (79.9K)
sl@0
  1303
sl@0
  1304
4.	Fixed a bug when evaluating unrestricted views (no WHERE clause): a
sl@0
  1305
	single evaluation step was doing full evaulation, rather than a bite-
sl@0
  1306
	size chunk.
sl@0
  1307
sl@0
  1308
5.	MARM releasables are now pre-PETRAN'd. Obey file uids are history.
sl@0
  1309
sl@0
  1310
sl@0
  1311
Version 0.05.031
sl@0
  1312
================
sl@0
  1313
(Made by AjT, 21 February 1997)
sl@0
  1314
sl@0
  1315
1.	Uses E32/089, F32/055, STORE/036, E32TOOLS/051
sl@0
  1316
sl@0
  1317
2.	Binary compatible with 030. File compatible with 030.
sl@0
  1318
sl@0
  1319
3.	Build (ROM) sizes for EDBMS[D].DLL
sl@0
  1320
sl@0
  1321
	WINS ASCII Release      66,048 bytes (64.5K)
sl@0
  1322
	WINS ASCII Debug        -
sl@0
  1323
	MARM ASCII Release      68,584 bytes (66.9K)
sl@0
  1324
	MARM ASCII Debug        81,832 bytes (79.9K)
sl@0
  1325
sl@0
  1326
4.	API tweaklet. TDbSeekKey::Add() members now return a reference to
sl@0
  1327
	the seek key, to assist in construction of multi-column keys. This
sl@0
  1328
	is similar to the CDbColSet::AddL() and CDbKey::AddL() functions.
sl@0
  1329
sl@0
  1330
	e.g.
sl@0
  1331
sl@0
  1332
	TDbSeekMultiKey<3> key;
sl@0
  1333
	key.Add(value1).Add(_L("value2")).Add(value3);
sl@0
  1334
	table.SeekL(key);
sl@0
  1335
sl@0
  1336
	This change does not affect binary compatibility.
sl@0
  1337
sl@0
  1338
sl@0
  1339
Version 0.05.030
sl@0
  1340
================
sl@0
  1341
(Made by AjT, 3 February 1997)
sl@0
  1342
sl@0
  1343
1.	Uses E32/086, F32/050, STORE/035, E32TOOLS/051
sl@0
  1344
sl@0
  1345
2.	Binary compatible with 029.
sl@0
  1346
	This is the B5 release.
sl@0
  1347
sl@0
  1348
3.	Build (ROM) sizes for EDBMS[D].DLL
sl@0
  1349
sl@0
  1350
	WINS ASCII Release      66,048 bytes (64.5K)
sl@0
  1351
	WINS ASCII Debug        -
sl@0
  1352
	MARM ASCII Release      68,520 bytes (67.0K)
sl@0
  1353
	MARM ASCII Debug        81,768 bytes (79.9K)
sl@0
  1354
sl@0
  1355
4.	API tweaklet. In the process of documentation, I discovered that two
sl@0
  1356
	inline functions on RDbRowSet, Beginning() and End() can leave if
sl@0
  1357
	the rowset was specified to have insert-only access. I have put an
sl@0
  1358
	L onto the end of these inline functions, which will not break any
sl@0
  1359
	binary compatibility, but might affect program logic.
sl@0
  1360
sl@0
  1361
	If the rowset is read-only or updatable (the default) then these
sl@0
  1362
	functions are guaranteed not to leave.
sl@0
  1363
sl@0
  1364
4.	Fixed a bug in RDbRowSet::DeleteL(). It was not reporting any errors,
sl@0
  1365
	even when there was one. Error propagation has been reinstated.
sl@0
  1366
sl@0
  1367
5.	Fixed two bugs to do with synchronising mutliple rowsets during
sl@0
  1368
	concurrent updates to the same table.
sl@0
  1369
sl@0
  1370
sl@0
  1371
Version 0.05.029
sl@0
  1372
================
sl@0
  1373
(Made by AjT, 21st January 1997)
sl@0
  1374
sl@0
  1375
1.	Uses E32/085, F32/049, STORE/033, E32TOOLS/050
sl@0
  1376
sl@0
  1377
2.	Binary incompatible with any predecessor.
sl@0
  1378
sl@0
  1379
3.	Build (ROM) sizes for EDBMS[D].DLL
sl@0
  1380
sl@0
  1381
	WINS ASCII Release      66,048 bytes (64.5K)
sl@0
  1382
	WINS ASCII Debug        -
sl@0
  1383
	MARM ASCII Release      68,448 bytes (66.8K)
sl@0
  1384
	MARM ASCII Debug        81,628 bytes (79.7K)
sl@0
  1385
sl@0
  1386
4.	The code for parsing text into TTime has been passed on to the base,
sl@0
  1387
	knocking 3.5K off the DLL.
sl@0
  1388
sl@0
  1389
5.	Fixed an SQL bug: Strings in SQL could not have embedded quote
sl@0
  1390
	characters (').	This can now be done by using two adjacent quote
sl@0
  1391
	characters.
sl@0
  1392
sl@0
  1393
sl@0
  1394
Version 0.04.028
sl@0
  1395
================
sl@0
  1396
(Made by AjT, 4th December 1996)
sl@0
  1397
sl@0
  1398
1.	Uses E32/076, F32/042, STORE/031, E32TOOLS/048
sl@0
  1399
sl@0
  1400
2.	Minor version number set to 4. This is the B4 release
sl@0
  1401
sl@0
  1402
3.	Binary incompatible with any predecessor.
sl@0
  1403
	File compatibility has been completely broken again. This should be the
sl@0
  1404
	last time.
sl@0
  1405
sl@0
  1406
4.	Build sizes for EDBMS[D].DLL
sl@0
  1407
sl@0
  1408
	WINS ASCII Release      68,096 bytes (66.5K)
sl@0
  1409
	WINS ASCII Debug        -
sl@0
  1410
	MARM ASCII Release      71,268 bytes (69.6K)
sl@0
  1411
	MARM ASCII Debug        84,608 bytes (82.6K)
sl@0
  1412
sl@0
  1413
5.	The embedded class RDbRowSet::RConstraint has been unembedded, and is now
sl@0
  1414
	RDbRowConstraint, it's behaviour is unchanged.
sl@0
  1415
sl@0
  1416
6.	The class RDbDatabase::RIncremental and its derived classes have been
sl@0
  1417
	turned into a single unembedded class RDbIncremental. Instead of
sl@0
  1418
	constructing the class required for the operation (RDbDatabase::RCreateIndex
sl@0
  1419
	for example) and then invoking the Open() member, you now construct an
sl@0
  1420
	instance of RDbIncremental, and invoke the required member (CreateIndex()
sl@0
  1421
	for the above operation). Otherwise the behaviour of incremental operations
sl@0
  1422
	is unchanged.
sl@0
  1423
sl@0
  1424
7.	RDbRowSet::ColSet() has been dropped, only the leaving version ColSetL()
sl@0
  1425
	remains.
sl@0
  1426
sl@0
  1427
8.	A const KDbUnlimitedWindow has been introduced, this is a TDbWindow
sl@0
  1428
	constructed to represent an unlimited window.
sl@0
  1429
sl@0
  1430
9.	RDbDatabase::IsDamaged() and RDbDatabase::InTransaction() are now const
sl@0
  1431
	members
sl@0
  1432
sl@0
  1433
10.	The test to date/time conversion has been temporarily adopted by DBMS.
sl@0
  1434
	search-conditions in WHERE clauses for view preparation, or row
sl@0
  1435
	constraints can now contain comparisons with DateTime columns. The literal
sl@0
  1436
	date should be specified by enclosing it in '#'s, e.g.
sl@0
  1437
sl@0
  1438
	SELECT * FROM EMPLOYEES WHERE START_DATE >= #1 Jan 1996#
sl@0
  1439
sl@0
  1440
11.	DBMS RXxx objects previously would automatically close if opened/prepared
sl@0
  1441
	before being explicitly closed. This functionality has been removed: DBMS
sl@0
  1442
	handles now behave like F32 handles.
sl@0
  1443
sl@0
  1444
12.	All KErrDoesNotExist errors have been replaced by KErrNotFound
sl@0
  1445
sl@0
  1446
13.	Attempting to use a database/rowset between a failure and a transaction
sl@0
  1447
	Rollback (or rowset Cancel) now results in the error KErrDied (previously
sl@0
  1448
	was KErrAbort).
sl@0
  1449
sl@0
  1450
14.	Some verification now takes place as clusters and records are loaded to
sl@0
  1451
	ensure that they have not been corrupted externally. These checks now
sl@0
  1452
	result in KErrCorrupt errors, as opposed to ASSERTion panics, or memory
sl@0
  1453
	overwrites (in release mode).
sl@0
  1454
sl@0
  1455
sl@0
  1456
Version 0.01.027
sl@0
  1457
================
sl@0
  1458
(Made by AjT, 25th November 1996)
sl@0
  1459
sl@0
  1460
1.	Uses E32/074, F32/040, STORE/029, E32TOOLS/046
sl@0
  1461
sl@0
  1462
2.	Binary compatible 026. Totally file compatible too.
sl@0
  1463
	Bugs in F32 040 (and 041) may cause incorrect behaviour.
sl@0
  1464
sl@0
  1465
3.	Build sizes for EDBMS[D].DLL
sl@0
  1466
sl@0
  1467
	WINS ASCII Release      65,536 bytes (64.0K)
sl@0
  1468
	WINS ASCII Debug        -
sl@0
  1469
	MARM ASCII Release      68,012 bytes (66.4K)
sl@0
  1470
	MARM ASCII Debug        80,116 bytes (78.2K)
sl@0
  1471
sl@0
  1472
4.	Fixed:
sl@0
  1473
sl@0
  1474
	Insert/SetColL/Cancel/InsertCopy resulted in the row data from the
sl@0
  1475
	cancelled insertion being in the row buffer following the call to
sl@0
  1476
	InsertCopyL. Fixed.
sl@0
  1477
	
sl@0
  1478
	Alien bookmarks (from another table) caused panics or corruption,
sl@0
  1479
	rather than being rejected. A new verification scheme has been
sl@0
  1480
	implemented to handle this (see #7 below).
sl@0
  1481
sl@0
  1482
5.	Added two more typedefs
sl@0
  1483
sl@0
  1484
	typedef TBufC<KDbMaxName> TDbNameC;
sl@0
  1485
	typedef TBufC<KDbMaxColName> TDbColNameC;
sl@0
  1486
sl@0
  1487
	These are used in place of the explicit TBufC variants in the interface.
sl@0
  1488
sl@0
  1489
6.	Schema enquiry has been added to RDbDatabase. This is the last OVAL
sl@0
  1490
	related omission.
sl@0
  1491
sl@0
  1492
	CDbTableNames* RDbDatabase::TableNamesL() const;
sl@0
  1493
	CDbColSet* RDbDatabase::ColSetL(const TDesC& aName) const;
sl@0
  1494
	CDbIndexNames* RDbDatabase::IndexNamesL(const TDesC& aTable) const;
sl@0
  1495
	CDbKey* RDbDatabase::KeyL(const TDesC& aName,const TDesC& aTable) const;
sl@0
  1496
sl@0
  1497
	TableNamesL() returns a list of tables in the database.
sl@0
  1498
	ColSetL() returns a the column set for a given table.
sl@0
  1499
	IndexNamesL() returns a list of indexes for the table.
sl@0
  1500
	KeyL() returns a key for the index on the table.
sl@0
  1501
sl@0
  1502
	The objects returned need to be destroyed by the caller.
sl@0
  1503
sl@0
  1504
	The Names functions return an instance of the CDbNames class, which can
sl@0
  1505
	be iterated through by using the Count() member and [] operator.
sl@0
  1506
sl@0
  1507
7.	A bookmark's persistence can now be specified explicitly:
sl@0
  1508
	
sl@0
  1509
	A bookmark taken from a	view A is valid in view A following
sl@0
  1510
	re-evaluation, and also in any view B based on a query using the
sl@0
  1511
	same select list on the same table.
sl@0
  1512
	A bookmark from a RDbTable object is valid for any RDbTable opened
sl@0
  1513
	on the same table, with or without a SetIndex.
sl@0
  1514
	
sl@0
  1515
	These all operate with the proviso that the record in question has
sl@0
  1516
	not been deleted (of course).
sl@0
  1517
sl@0
  1518
8.	The table-structure cache/map has been overhauled, resulting in
sl@0
  1519
	faster backwards navigation and reduced overall memory usage.
sl@0
  1520
sl@0
  1521
9.	The heuristic used to determine the clustering for a table has been
sl@0
  1522
	improved following profiling tests. It is more optimistic than
sl@0
  1523
	previously, especially for variable length columns. This results in
sl@0
  1524
	significantly lower stream counts and therefore faster performance.
sl@0
  1525
sl@0
  1526
10.	The "inlining" limit for Long columns has been upped to 255 bytes
sl@0
  1527
	as #9 has ensured that this doesn't have a serious clustering
sl@0
  1528
	penalty.
sl@0
  1529
sl@0
  1530
sl@0
  1531
Version 0.01.026
sl@0
  1532
================
sl@0
  1533
(Made by AjT, 29th October 1996)
sl@0
  1534
sl@0
  1535
1.	Uses E32/072, F32/038, STORE/028, E32TOOLS/045
sl@0
  1536
sl@0
  1537
2.	Not binary compatible release with 025.
sl@0
  1538
	Can read files from 025, but writes files which cannot be read
sl@0
  1539
	by 025.
sl@0
  1540
sl@0
  1541
3.	Build sizes for EDBMS[D].DLL
sl@0
  1542
sl@0
  1543
	WINS ASCII Release      62.0K
sl@0
  1544
	WINS ASCII Debug        -
sl@0
  1545
	MARM ASCII Release      64.2K
sl@0
  1546
	MARM ASCII Debug        75.7K
sl@0
  1547
sl@0
  1548
4.	Made use of TCardinality from STORE to give a little more
sl@0
  1549
	compression to some DBMS store structures, reducing storage
sl@0
  1550
	overhead to less than 2 bytes per record in ideal conditions.
sl@0
  1551
sl@0
  1552
Version 0.01.025
sl@0
  1553
================
sl@0
  1554
(Made by AjT, 18th October 1996)
sl@0
  1555
sl@0
  1556
1.	Uses E32/070, F32/036, STORE/026, E32TOOLS/045
sl@0
  1557
sl@0
  1558
2.	Binary compatible release with 024. I lied about the file
sl@0
  1559
        formats though: but it wasn't my fault really. This should be
sl@0
  1560
        the last time they change though.
sl@0
  1561
sl@0
  1562
3.	Build sizes for EDBMS[D].DLL
sl@0
  1563
sl@0
  1564
	WINS ASCII Release      62.0K
sl@0
  1565
	WINS ASCII Debug        -
sl@0
  1566
	MARM ASCII Release      64.2K
sl@0
  1567
	MARM ASCII Debug        75.6K
sl@0
  1568
sl@0
  1569
4.      Fixed a bug in RDbRowSet::InsertCopyL: BLOBs were not being
sl@0
  1570
        duplicated.
sl@0
  1571
sl@0
  1572
5.      Added Auto-Increment support due to overwhelming demand. This has
sl@0
  1573
        effected the file format change which makes all previous
sl@0
  1574
        databases unreadable.
sl@0
  1575
sl@0
  1576
        TDbCol::EAutoIncrement can be added to the attributes of any
sl@0
  1577
        integral column 32 bits wide or less. The next value of the
sl@0
  1578
        counter is used to initialise any auto-increment columns when
sl@0
  1579
        RDbRowSet::InsertL() or RDbRowSet::InsertCopyL() is used. So the
sl@0
  1580
        value is available before PutL() is called.
sl@0
  1581
sl@0
  1582
        The columns are not verified for uniqueness (you can use a
sl@0
  1583
        unique index to do that), nor are clients prevented from
sl@0
  1584
        changing the value in an auto-increment column.
sl@0
  1585
        
sl@0
  1586
        It is implemented as an unsigned 32 bit counter, beginning
sl@0
  1587
        from 0, with the following effects given the choice of column:
sl@0
  1588
sl@0
  1589
        EDbColUint32: Wrap-around from KMaxUint32 -> 0
sl@0
  1590
        EDbColUint16: KErrOverflow in PutL() at KMaxUint16+1
sl@0
  1591
        EDbColUint8:  KErrOverflow in PutL() at KMaxUint8+1
sl@0
  1592
        EDbColBit:    KErrOverflow in PutL() at 2
sl@0
  1593
        EDbColInt32:  Wrap-around from KMaxInt32 -> KMinInt32
sl@0
  1594
        EDbColInt16:  KErrOverflow in PutL() at KMaxInt16+1
sl@0
  1595
        EDbColInt8:   KErrOverflow in PutL() at KMaxInt8+1
sl@0
  1596
sl@0
  1597
6.      RDbTable::SeekL(TDbSeekKey const&,TComparison=EEqualTo) has
sl@0
  1598
        been implemented. This allows fast key-based lookup of a
sl@0
  1599
        particular row in a table, using an index. To use it the index
sl@0
  1600
        has to be created, and the RDbTable has to be set to use this
sl@0
  1601
        index using the SetIndex() member.
sl@0
  1602
sl@0
  1603
        Two classes are provided for passing keys to Seek: TDbSeekKey
sl@0
  1604
        is used for passing a single-column key, the template class
sl@0
  1605
        TDbSeekMultiKey is used for multi-column keys: the template
sl@0
  1606
        parameter is the number of columns in the key. Key values are
sl@0
  1607
        added to the key using the Add() members. Single column keys can
sl@0
  1608
        be constructed directly from the key value with the
sl@0
  1609
        TDbSeekKey(... aKey) constructors.
sl@0
  1610
sl@0
  1611
        The key values used must match the column types in the index
sl@0
  1612
        definition exactly, except for integral types <=32 bits wide
sl@0
  1613
        which are all passed as 32 bit values. You can specify less key
sl@0
  1614
        columns than are present in the index, and the search will be
sl@0
  1615
        restricted to the columns in the key you provide.
sl@0
  1616
sl@0
  1617
        Results of using different comparisons are:
sl@0
  1618
sl@0
  1619
        ELessThan:      the last row which compares strictly less than
sl@0
  1620
                        the key
sl@0
  1621
        ELessEqual:     the last row which compares less than or
sl@0
  1622
                        matches the key
sl@0
  1623
        EEqualTo:       the first row which matches the key
sl@0
  1624
        EGreaterEqual:  the first row which matches or compares greater
sl@0
  1625
                        than the key
sl@0
  1626
        EGreaterThan:   the first row which compares strictly greater
sl@0
  1627
                        then the key
sl@0
  1628
sl@0
  1629
        SeekL() returns non-false to indicate when a row matching the
sl@0
  1630
        key and comparison was found.
sl@0
  1631
sl@0
  1632
        Note:
sl@0
  1633
        a) that if more than one row matches the provided key,
sl@0
  1634
        EEqualTo and EGreaterEqual will return the same row, but
sl@0
  1635
        ELessEqual will return a different row: the _last_ row which
sl@0
  1636
        matches.
sl@0
  1637
sl@0
  1638
        b) the comparison type does not take into account whether an
sl@0
  1639
        index column is descending: i.e. a row which is "less than" a
sl@0
  1640
        key (for Seek) can contain a column value numerically greater
sl@0
  1641
        than the value in the key.
sl@0
  1642
sl@0
  1643
sl@0
  1644
Version 0.01.024
sl@0
  1645
================
sl@0
  1646
(Made by AjT, 4th October 1996)
sl@0
  1647
sl@0
  1648
1.	Uses E32/069, F32/035, STORE/025, E32TOOLS/042
sl@0
  1649
sl@0
  1650
2.	Binary compatible release with 023. As with STORE 025, the final
sl@0
  1651
	adjustments in file format come with this release: all future
sl@0
  1652
	releases should be able to read databases written with this
sl@0
  1653
	release.
sl@0
  1654
sl@0
  1655
3.	Build sizes for EDBMS[D].DLL
sl@0
  1656
sl@0
  1657
	WINS ASCII Release      60.5K
sl@0
  1658
	WINS ASCII Debug        -
sl@0
  1659
	MARM ASCII Release      62.4K
sl@0
  1660
	MARM ASCII Debug        73.6K
sl@0
  1661
sl@0
  1662
4.	Recompiled against STORE 025 to bring in an inline bug fix.
sl@0
  1663
sl@0
  1664
5.	Fixed a failure-to-initialise bug which occured following a
sl@0
  1665
	failure during RDbDatabase::RDropTable::Open() and
sl@0
  1666
	RDbDatabase::RRecover::Open()
sl@0
  1667
sl@0
  1668
6.	Fixed a couple of bugs related to index recovery in stressed
sl@0
  1669
	conditions: resulted in corrupting the stream-structure of the
sl@0
  1670
	database, and a bogus index after rollback.
sl@0
  1671
sl@0
  1672
7.	Failure during RDbView::Prepare() or RDbTable::Open() could
sl@0
  1673
	leave the database in an invalid transaction state. Fixed.
sl@0
  1674
sl@0
  1675
sl@0
  1676
Version 0.01.023
sl@0
  1677
================
sl@0
  1678
(Made by AjT, 1st October 1996)
sl@0
  1679
sl@0
  1680
1.	Uses E32/069, F32/035, STORE/024, E32TOOLS/042
sl@0
  1681
sl@0
  1682
2.	This is the DBMS B2 release.
sl@0
  1683
sl@0
  1684
	There are one or two weird bugs lurking in there somewhere, which 
sl@0
  1685
	we are trying to fish out at the moment. They only show up under
sl@0
  1686
	heavy alloc fail and thread shooting tests. Rather like trying to 
sl@0
  1687
	catch exotic sub-atomic particles really.
sl@0
  1688
sl@0
  1689
3.	Build sizes for EDBMS[D].DLL
sl@0
  1690
sl@0
  1691
	WINS ASCII Release      60.5K
sl@0
  1692
	WINS ASCII Debug        -
sl@0
  1693
	MARM ASCII Release      62.1K
sl@0
  1694
	MARM ASCII Debug        72.9K
sl@0
  1695
sl@0
  1696
4.	Binary incompatible with any previous release.
sl@0
  1697
sl@0
  1698
5.	Fixed:
sl@0
  1699
sl@0
  1700
	Navigating to Next after Deleting a record from a windowed view
sl@0
  1701
	and then trying to read the record resulted in KErrDoesNotExist.
sl@0
  1702
	The next row is now correctly found.
sl@0
  1703
sl@0
  1704
	Rowset returning an (incorrectly) empty row after a failed row
sl@0
  1705
	read (due to e.g. OOM). Row buffer/cache fixed.
sl@0
  1706
sl@0
  1707
	Specifying a Unicode column for a LIKE match in an SQL string
sl@0
  1708
	now results in KErrNotSupported, rather than undefined (random)
sl@0
  1709
	behaviour.
sl@0
  1710
sl@0
  1711
	Rollback due to a failed Update/Put left the rowset with invalid
sl@0
  1712
	data in the row. This could be returned a valid row after resetting
sl@0
  1713
	the rowset. This is now correctly invalidated.
sl@0
  1714
sl@0
  1715
	Could not navigate on a rowset while any other rowset was between
sl@0
  1716
	Update/Insert and Put. Changed Transaction states to allow this.
sl@0
  1717
sl@0
  1718
	Fixed an incorrect assert in the transaction states.
sl@0
  1719
sl@0
  1720
6.	RDbColXmmmmStream::StoreL[C] have been withdrawn. Use the 
sl@0
  1721
	CEmbeddedStore class in STORE instead to achieve store embedding
sl@0
  1722
	in LongBinary columns.
sl@0
  1723
sl@0
  1724
7.	With support from STORE 024, Recovery is now fully operational.
sl@0
  1725
sl@0
  1726
sl@0
  1727
Version 0.01.022
sl@0
  1728
================
sl@0
  1729
(Made by AjT, 23rd September 1996)
sl@0
  1730
sl@0
  1731
1.	Uses E32/067, F32/033, STORE/022, E32TOOLS/041
sl@0
  1732
sl@0
  1733
	This release has not used the latest E32 etc., in order to
sl@0
  1734
	make the new DBMS functionality available to its clients
sl@0
  1735
	immediately.
sl@0
  1736
sl@0
  1737
2.	Build sizes for EDBMS[D].DLL
sl@0
  1738
sl@0
  1739
	WINS ASCII Release      60.5K
sl@0
  1740
	WINS ASCII Debug        -
sl@0
  1741
	MARM ASCII Release      61.8K
sl@0
  1742
	MARM ASCII Debug        72.7K
sl@0
  1743
sl@0
  1744
3.	Binary incompatible with any previous release.
sl@0
  1745
	Files are also incompatible: the DBMS head stream is now typed
sl@0
  1746
	and validated whn opened.
sl@0
  1747
sl@0
  1748
4.	Fixed a bug in the calculation of maximum record size in the
sl@0
  1749
	presence of a DateTime column.
sl@0
  1750
sl@0
  1751
5.	Indexes now support truncated Text and LongText keys.
sl@0
  1752
sl@0
  1753
	TDbKeyCol has a new member iLength and a new ctor:
sl@0
  1754
sl@0
  1755
	TDbKeyCol(const TDesC& aColumn,TInt aLength,TOrder anOrder=EAsc);
sl@0
  1756
sl@0
  1757
	*	The length should only be defined for Text or LongText columns.
sl@0
  1758
	
sl@0
  1759
	*	The lengths specified need to equal the maximum column length
sl@0
  1760
		(or be left undefined), _except_ for the last key column, for 
sl@0
  1761
		which it can be smaller. Key values will be truncated to fit.
sl@0
  1762
sl@0
  1763
	*	With unique indexes the _truncated_ key will have to be unique.
sl@0
  1764
sl@0
  1765
	*	ORDER BY (which is only supported in the presence of an index) 
sl@0
  1766
		is relaxed so that rows are returned in the order of the 'best' 
sl@0
  1767
		matching index available: i.e. between indexes containing all 
sl@0
  1768
		necessary columns, the one that stores most of the final key
sl@0
  1769
		column. Clearly if a truncated-key index is not unique, the rows
sl@0
  1770
		may be returned in not-quite-order.
sl@0
  1771
sl@0
  1772
	*	LongText columns, like short ones, can be indexed. LongText 
sl@0
  1773
		columns can only ever be used as the last column in a key 
sl@0
  1774
		specification, and must have a length specified.
sl@0
  1775
sl@0
  1776
	*	Every key value in an index takes up the maximum space.
sl@0
  1777
sl@0
  1778
	As a guide: The maximum allowable unique Text key is 248 bytes, the
sl@0
  1779
	maximum allowable non-unique Text key is 244 bytes.
sl@0
  1780
sl@0
  1781
6.	Database safety and Transaction support.
sl@0
  1782
sl@0
  1783
	*	The Database uses the Store commit/revert protocol to achieve
sl@0
  1784
		transaction support. Therefore is is _vital_ that clients do
sl@0
  1785
		not do so themselves while they have the database open. Failure
sl@0
  1786
		to do so may result in an unrecoverable database.
sl@0
  1787
sl@0
  1788
	*	Until a transaction is commited, the updates are not persistent:
sl@0
  1789
		Rollback or closing and re-opening the database will result in
sl@0
  1790
		loss of the updates and possible recoverable damage to the
sl@0
  1791
		database.
sl@0
  1792
sl@0
  1793
	*	Without the explicit use of transactions on the database, all
sl@0
  1794
		update operations take place within their own automatic
sl@0
  1795
		transaction:
sl@0
  1796
sl@0
  1797
		*	DDL incremental operations are committed on successful
sl@0
  1798
			completion, or rolled back when the incremental object
sl@0
  1799
			is closed if the operation failed or was not completed.
sl@0
  1800
sl@0
  1801
		*	DML: RDbRowSet::UpdateL() or Insert[Copy]L() begins a auto-
sl@0
  1802
			transaction and PutL() commits it, on any failure, 
sl@0
  1803
			Cancel() will invoke the rollback. DeleteL() does all of
sl@0
  1804
			this within the single function.
sl@0
  1805
sl@0
  1806
		*	Interleaved DML operations on separate rowsets are treated
sl@0
  1807
			as a single transaction on the database, so it is possible
sl@0
  1808
			to make a multi-table update be atomic using the auto-
sl@0
  1809
			transaction feature. e.g.
sl@0
  1810
			
sl@0
  1811
			View1.UpdateL();	// transaction begins here
sl@0
  1812
			View2.UpdateL();
sl@0
  1813
			...
sl@0
  1814
			View1.PutL();
sl@0
  1815
			View2.PutL();		// transaction commits here
sl@0
  1816
sl@0
  1817
			For such a transaction to rollback on failure, all rowsets
sl@0
  1818
			with pending updates must be Cancel()led.
sl@0
  1819
sl@0
  1820
	*	Explicit use of RDbDatabase::Begin(), Commit() and Rollback() 
sl@0
  1821
		precludes the above behaviour. If the database is in an explicit
sl@0
  1822
		transaction, update operations do not invoke invoke their own
sl@0
  1823
		auto-transactions.
sl@0
  1824
sl@0
  1825
		DML and DDL cannot (and never could be) operated at the same
sl@0
  1826
		time, but they can be done within the same database transaction.
sl@0
  1827
sl@0
  1828
	*	When an operation fails during a transaction, and before any
sl@0
  1829
		rollback, the database is left in an "abort" state, and
sl@0
  1830
		attempting other operations will result in an KErrAbort error.
sl@0
  1831
		The appropriate rollback mechanism must be used before commencing
sl@0
  1832
		(Cancel() rowset updates, Close() incremental objects, Rollback()
sl@0
  1833
		any explicit transactions).
sl@0
  1834
sl@0
  1835
		The database may be damaged following rollback, but this can be
sl@0
  1836
		repaired.
sl@0
  1837
sl@0
  1838
	*	After a Rollback, all rowsets lose their current position, this
sl@0
  1839
		results in a return/leave code of KErrNotReady when attempting
sl@0
  1840
		to use the table or view. The rowset must be Reset() which
sl@0
  1841
		returns it to the state it was in immediately after opening or
sl@0
  1842
		preparing. (So a view may need to be re-evaluated at this point).
sl@0
  1843
		The rowset does not need to be closed and re-prepared.
sl@0
  1844
sl@0
  1845
	*	If a client requires that some Store updates are commited to
sl@0
  1846
		the Store at the same save-point as some database updates,
sl@0
  1847
		an explicit transaction should be used, and both the store and
sl@0
  1848
		database updates carried out within the transaction. Commiting
sl@0
  1849
		the database will then commit the Store.
sl@0
  1850
sl@0
  1851
	*	Why use transactions? Apart from providing atomicity of multiple
sl@0
  1852
		updates across one or more tables, they vastly improve
sl@0
  1853
		performance when doing bulk updates.
sl@0
  1854
	
sl@0
  1855
		Some statistics: the test was writing 1000 records (about 40 bytes
sl@0
  1856
		per record) to a table in a database. (timings from the rack)
sl@0
  1857
sl@0
  1858
		Automatic transactions (each record is written within its own
sl@0
  1859
		transaction):
sl@0
  1860
			File size: 529,667 bytes
sl@0
  1861
			Time:      90.1s
sl@0
  1862
		Explicit transactions (a single transaction is used for all 1000
sl@0
  1863
		record writes):
sl@0
  1864
			File size: 38,762 bytes		(14 x smaller)
sl@0
  1865
			Time:      1.54s			(>50 x faster)
sl@0
  1866
sl@0
  1867
		The file size difference is entirely compactible on STORE
sl@0
  1868
		(eventually--when STORE provides compaction), as the extra space
sl@0
  1869
		comes from having to flush buffers and commit the store after
sl@0
  1870
		every record is written.
sl@0
  1871
sl@0
  1872
7.	The recovery code is in place, but requires some more Btree
sl@0
  1873
	support from STORE than comes with 022.
sl@0
  1874
sl@0
  1875
	*	Following Rollback (auto or explicit): if any indexes have 
sl@0
  1876
		been updated, they are considered broken. The database is
sl@0
  1877
		still operational (although it reports that it is damaged).
sl@0
  1878
		Any damaged indexes cannot be used for DML (reporting 
sl@0
  1879
		KErrCorrupt) and so may prevent some views being operational 
sl@0
  1880
		after rollback and reset.
sl@0
  1881
sl@0
  1882
	*	Damaged indexes can be dropped (STORE does not support this
sl@0
  1883
		yet). The database will still report damage, though recovery
sl@0
  1884
		will then be trivial.
sl@0
  1885
sl@0
  1886
	*	Recovering the database involves rebuilding all damaged
sl@0
  1887
		indexes. (ditto about STORE)
sl@0
  1888
sl@0
  1889
	*	All tables and views must be closed on the database before 
sl@0
  1890
		recovery can commence.
sl@0
  1891
sl@0
  1892
8.	There is now a limit of 32 indexes on any one table in database.
sl@0
  1893
sl@0
  1894
9.	Incremental operations now take larger than minimal steps, and
sl@0
  1895
	should modify the step count more sensibly than before.
sl@0
  1896
sl@0
  1897
10.	Indexing should be one helluvalot faster now: without any commit
sl@0
  1898
	framework the previous release was doing some excessive streaming
sl@0
  1899
	to the file.
sl@0
  1900
sl@0
  1901
sl@0
  1902
Version 0.01.021
sl@0
  1903
================
sl@0
  1904
(Made by AjT, 6th September 1996)
sl@0
  1905
sl@0
  1906
1.	Uses E32/066, F32/031, STORE/021, E32TOOLS/039
sl@0
  1907
sl@0
  1908
2.	Build sizes for EDBMS[D].DLL
sl@0
  1909
sl@0
  1910
	WINS ASCII Release	54.0K
sl@0
  1911
	WINS ASCII Debug        -
sl@0
  1912
	MARM ASCII Release      55.4K
sl@0
  1913
	MARM ASCII Debug        64.9K
sl@0
  1914
sl@0
  1915
3.      Binary incompatible with previous release.
sl@0
  1916
sl@0
  1917
4.      Any API to do with compaction has been removed as compaction is
sl@0
  1918
        ommitted. Compaction of the file-store should be done with the
sl@0
  1919
        STORE API.
sl@0
  1920
sl@0
  1921
5.      Added RDbColXxxxStream::StoreL() and RDbColXxxxStream::StoreLC()
sl@0
  1922
        to enable a persistent store to be embedded in LongBinary
sl@0
  1923
        columns. Use in the same way as RStoreXxxxStream::StoreL() etc.
sl@0
  1924
sl@0
  1925
6.      New persistent table structure: robust and PermanentStore
sl@0
  1926
        friendly. Records are clustered and clusters are cached in
sl@0
  1927
        memory, resulting in lower storage overhead and faster record
sl@0
  1928
        access.
sl@0
  1929
sl@0
  1930
7.      The rule about EDbColBit columns being not-null has been
sl@0
  1931
        withdrawn. Nullable Bit columns are back.
sl@0
  1932
sl@0
  1933
8.      No provision for serious text to time conversion has been made,
sl@0
  1934
        so date columns cannot be used in WHERE clauses, and the date-
sl@0
  1935
        literal is removed from the grammar.
sl@0
  1936
sl@0
  1937
9.      Removed trivial constructors and destructors from abstract
sl@0
  1938
        classes, there by saving code space (~1K) and preventing
sl@0
  1939
        vtables being generated for these classes.
sl@0
  1940
sl@0
  1941
Version 0.01.020
sl@0
  1942
================
sl@0
  1943
(Made by AjT, 2nd September 1996)
sl@0
  1944
sl@0
  1945
1.	Uses E32/066, F32/031, STORE/021, E32TOOLS/039
sl@0
  1946
sl@0
  1947
2.	Build sizes for EDBMS[D].DLL
sl@0
  1948
sl@0
  1949
	WINS ASCII Release	52.5K
sl@0
  1950
	WINS ASCII Debug        -
sl@0
  1951
	MARM ASCII Release      53.5K
sl@0
  1952
	MARM ASCII Debug        62.6K
sl@0
  1953
sl@0
  1954
3.      Binary compatible with 019
sl@0
  1955
sl@0
  1956
4.      DBMS is no longer tested against the Fragment file store layout,
sl@0
  1957
        as this is being phased out and the future releases will start
sl@0
  1958
        using file store features not supported by CFragmentFileStore.
sl@0
  1959
        Changed your code to using CPermanentFileStore now!
sl@0
  1960
sl@0
  1961
5.      Views now follow the spec for cursor position after DeleteL,
sl@0
  1962
        PutL and Cancel.
sl@0
  1963
sl@0
  1964
        Following from DeleteL, the current position is in between what
sl@0
  1965
        would have been the Next and Previous rows, so Next and Previous
sl@0
  1966
        after DeleteL will go to the same row as if DeleteL had not been
sl@0
  1967
        called.
sl@0
  1968
sl@0
  1969
        After a PutL the current row will be the row just Put. Which row
sl@0
  1970
        appears following subsequent Next/Previous depends on how the
sl@0
  1971
        view is evaluated. For Unlimited windows it is well defined (see
sl@0
  1972
        note 8 to release 018). For Table views with no set index,
sl@0
  1973
        Updated rows remain in the same place, Insert[Copy]ed rows are
sl@0
  1974
        appended, so following Insert/Put the current row is the Last
sl@0
  1975
        row.
sl@0
  1976
sl@0
  1977
        After a Cancel the view should be located in the same place it
sl@0
  1978
        was prior to the Update/Insert.
sl@0
  1979
sl@0
  1980
6.      Support for co-ordinating multiple views on the same table has
sl@0
  1981
        been added. If one view modifies the table this can affect other
sl@0
  1982
        rowsets. DBMS tries to recover the other view cursors when they
sl@0
  1983
        are next used, but this is not always possible. Some RDbRowSet
sl@0
  1984
        members can fail in special ways in this situations:
sl@0
  1985
sl@0
  1986
        If another view has deleted the rowset's current row, GetL and
sl@0
  1987
        DeleteL will fail with KErrDoesNotExist. Depending on how the
sl@0
  1988
        view is evaluated the view may still be able to move to
sl@0
  1989
        PreviousL and NextL. If the cursor cannot be recovered, NextL
sl@0
  1990
        and PreviousL will fail with KErrNotReady and the view will be
sl@0
  1991
        left on an invalied row.
sl@0
  1992
sl@0
  1993
        If another view has modified the table between between a call to
sl@0
  1994
        UpdateL and PutL, PutL will fail with KErrGeneral. [I'm trying to
sl@0
  1995
        think of a more appropriate error for this]. To continue you
sl@0
  1996
        need to Cancel() and then try to update again.
sl@0
  1997
sl@0
  1998
        As DBMS is not a server, you should usually be in control of
sl@0
  1999
        multiple views, and how they will interact with each other.
sl@0
  2000
sl@0
  2001
7.      Long columns are inlined into the record when they are short
sl@0
  2002
        enough. This has no affect on the API to access them, as this is
sl@0
  2003
        primarily to reduce the storage overheads for short BLOBs.
sl@0
  2004
sl@0
  2005
sl@0
  2006
Version 0.01.019
sl@0
  2007
================
sl@0
  2008
(Made by AjT, 21 August 1996)
sl@0
  2009
sl@0
  2010
1.	Uses E32/065, F32/029, STORE/020, E32TOOLS/039
sl@0
  2011
sl@0
  2012
        A release to upgrade to the new components and directory
sl@0
  2013
        structure.
sl@0
  2014
sl@0
  2015
2.	Build sizes for EDBMS[D].DLL
sl@0
  2016
sl@0
  2017
	WINS ASCII Release	51,200
sl@0
  2018
	WINS ASCII Debug        -
sl@0
  2019
	MARM ASCII Release      52,812
sl@0
  2020
	MARM ASCII Debug        61,268
sl@0
  2021
sl@0
  2022
Version 0.01.018
sl@0
  2023
================
sl@0
  2024
(Made by AjT, 20 August 1996)
sl@0
  2025
sl@0
  2026
1.	Uses E32/064, F32/028, STORE/019, E32TOOLS/036
sl@0
  2027
sl@0
  2028
2.	Build sizes for EDBMS[D].DLL
sl@0
  2029
sl@0
  2030
	WINS ASCII Release	51,200
sl@0
  2031
	MARM ASCII Release      52,860
sl@0
  2032
	MARM ASCII Debug        61,308
sl@0
  2033
sl@0
  2034
3.      Fix: Table names are compared folded when opening tables or
sl@0
  2035
        views on the database.
sl@0
  2036
        
sl@0
  2037
4.      A final record layout has been adopted: Long columns are not yet
sl@0
  2038
        inlined when they contain sufficiently little data. Any
sl@0
  2039
        databases from previous versions will be read incorrectly. The
sl@0
  2040
        new format means that the order of the columns in a newly
sl@0
  2041
        created table may not be the same as that in the column set
sl@0
  2042
        provided for RDbDatabase::CreateTable() or
sl@0
  2043
        RDbDatabase::AlterTable().
sl@0
  2044
sl@0
  2045
        Specifying columns as Not-Null reduces the persistent storage
sl@0
  2046
        requirements for numerical columns. Bit columns must always be
sl@0
  2047
        Not-Null.
sl@0
  2048
sl@0
  2049
5.      Dropping and altering tables, creating and dropping indexes, and
sl@0
  2050
        evaluating a view are now done incrementally. The non-incremental
sl@0
  2051
        forms use the incremental objects/functions. These are done in
sl@0
  2052
        rather small steps at the moment, this will be changed to more
sl@0
  2053
        efficient larger steps at some stage.
sl@0
  2054
sl@0
  2055
6.      AlterTable has arrived. Specification of the altered column set:
sl@0
  2056
sl@0
  2057
        Any column with the same name in the altered set as one in the
sl@0
  2058
        original table is considered unchanged. So it must have the same
sl@0
  2059
        definition, with the exception that the TDbCol in the altered set
sl@0
  2060
        can have iMaxLength set to KDbUndefinedLength.
sl@0
  2061
sl@0
  2062
        Any number of columns may be deleted, provided they are not used
sl@0
  2063
        in any index key. Any number of nullable columns may be added.
sl@0
  2064
        Any number of Not-null columns may be added to an empty table:
sl@0
  2065
        it is an error to try and add Not-null columns to a non-empty
sl@0
  2066
        table.
sl@0
  2067
sl@0
  2068
        If the table is empty, or no columns are being dropped this
sl@0
  2069
        completes immediately. Otherwise the entire dataset need to be
sl@0
  2070
        modified and the operation is potentially long-running.
sl@0
  2071
sl@0
  2072
7.      Query text and the comparison type to be used in the query are
sl@0
  2073
        now packaged into a class TDbQuery, which can be constructed
sl@0
  2074
        from a descriptor, or a descriptor and a comparison type.
sl@0
  2075
sl@0
  2076
        This affects the following functions:
sl@0
  2077
        RDbRowSet::RConstraint::Open()
sl@0
  2078
        RDbRowSet::FindL()
sl@0
  2079
        RDbView::Prepare()
sl@0
  2080
sl@0
  2081
8.      The RDbView::Prepare API now looks like:
sl@0
  2082
        
sl@0
  2083
        TInt Prepare(RDbDatabase&,const TDbQuery&,TAccess =EUpdatable);
sl@0
  2084
        TInt Prepare(RDbDatabase&,const TDbQuery&,const TDbWindow&);
sl@0
  2085
        TInt Prepare(RDbDatabase&,const TDbQuery&,const TDbWindow&,TAccess);
sl@0
  2086
sl@0
  2087
        effectively you have
sl@0
  2088
        
sl@0
  2089
        Prepare(Database, Query [,Window] [,Access])
sl@0
  2090
sl@0
  2091
        The Query can be directly constructed from a descriptor, in
sl@0
  2092
        which case normal text comparison is used in the query
sl@0
  2093
        evaluation. Other comparison modes can be set by explicitly
sl@0
  2094
        constructing a TDbQuery from the query descriptor and comparison
sl@0
  2095
        type.
sl@0
  2096
sl@0
  2097
        The Access parameter is as specified before, and always defaults
sl@0
  2098
        to RDbRowSet::EUpdatable.
sl@0
  2099
sl@0
  2100
        The Window parameter is the new one. This defaults to
sl@0
  2101
        TDbWindow::ENone, which provides the previous behaviour for the
sl@0
  2102
        view: evaluation or navigation may take an extended time to
sl@0
  2103
        complete, depending on how the query is evaluated, as little
sl@0
  2104
        memory is used as possible.
sl@0
  2105
sl@0
  2106
        If TDbWindow::EUnlimited is specified, the view takes on Dynaset
sl@0
  2107
        behaviour. Evaluation may take an extended time to generate a
sl@0
  2108
        set of all the rows in the query, but then navigation is
sl@0
  2109
        guaranteed to take constant time. This does impact the way
sl@0
  2110
        modified or inserted rows appear in the set: modified rows will
sl@0
  2111
        stay in the same place in the set, even if an ORDER BY clause is
sl@0
  2112
        specified in the query or they no longer match the WHERE clause;
sl@0
  2113
        inserted rows will always appear at the end of the set, even
sl@0
  2114
        when they do not match a WHERE clause. If the set is re-
sl@0
  2115
        evaluated, these rows will then appear (or not) in the correct
sl@0
  2116
        place.
sl@0
  2117
sl@0
  2118
        A limited size window can be specified, which allows for
sl@0
  2119
        guaranteed quick navigation within the window, without the
sl@0
  2120
        memory overhead of generating a set of every row in the query.
sl@0
  2121
        This is specified with the TDbWindow constructor overload:
sl@0
  2122
sl@0
  2123
        TDbWindow(TInt aForeSlots,TInt aRearSlots);
sl@0
  2124
sl@0
  2125
        aForeSlots indicates the number of row references which should be
sl@0
  2126
        "cached" for navigating to Next, and aRearSlots indicates the
sl@0
  2127
        number which should be cached for going to Previous. The current
sl@0
  2128
        row is not included. The window then provides a restricted view
sl@0
  2129
        over the underlying query; when fully evaluated the window will
sl@0
  2130
        try to match the requested shape if possible. Navigation is
sl@0
  2131
        restricted to the window, CountL() reports the number of rows in
sl@0
  2132
        the window, and going past the end will report AtEnd and
sl@0
  2133
        AtBeginning as for other rowsets. To "move" the window, the
sl@0
  2134
        view needs to be evaluated some more.
sl@0
  2135
sl@0
  2136
        Updated records in a restricted window will remain in place,
sl@0
  2137
        though further navigation and evaluation may result in it
sl@0
  2138
        appearing elsewhere later. Inserted records are not added to the
sl@0
  2139
        window, they may appear later after further evaluation.
sl@0
  2140
        Restricted windows are therefore not ideal for modifying the
sl@0
  2141
        data.
sl@0
  2142
sl@0
  2143
        Note: Some queries will demand an unlimited window (ORDER BY on
sl@0
  2144
        a non-indexed column (not yet available), so the parameter to
sl@0
  2145
        Prepare can only be used as a suggestion to DBMS.
sl@0
  2146
sl@0
  2147
        
sl@0
  2148
        Evaluation API:
sl@0
  2149
sl@0
  2150
        void Reset();
sl@0
  2151
        TInt Evaluate();
sl@0
  2152
        void Evaluate(TRequestStatus& aStatus);
sl@0
  2153
        TBool Unevaluated() const;
sl@0
  2154
        TInt EvaluateAll();
sl@0
  2155
sl@0
  2156
        The view can be Reset() to its condition immediately after
sl@0
  2157
        Prepare(). For views with a window, this results in an empty
sl@0
  2158
        window, and evaluation is required to make any rows available.
sl@0
  2159
        The view is repositioned back to the beginning.
sl@0
  2160
sl@0
  2161
        Evaluate() does a unit of evaluation work. A return value <0
sl@0
  2162
        is an error code; KErrNone implies that evaluation is complete
sl@0
  2163
        for the window/set; >0 implies that further evaluation can be
sl@0
  2164
        done. Evaluate(TRequestStatus& aStatus) is an asynchronous
sl@0
  2165
        version of Evaluate(), the status reporting the same as the
sl@0
  2166
        return code.
sl@0
  2167
        
sl@0
  2168
        At any time, RDbView::Unevaluated() will return whether
sl@0
  2169
        Evaluate() has any work to do or not.
sl@0
  2170
sl@0
  2171
        EvaluateAll() invokes Evaluate() until evaluation is complete.
sl@0
  2172
sl@0
  2173
        Evaluation and navigation can be mixed. An interesting side
sl@0
  2174
        effect is that if the view is navigated off the end of the
sl@0
  2175
        window, resulting in being AtEnd, and then further evaluation
sl@0
  2176
        results in rows being added to the window, the view will then be
sl@0
  2177
        positioned at the new row, its state changing from AtEnd to
sl@0
  2178
        AtRow.
sl@0
  2179
sl@0
  2180
        To fully re-evaluate an unlimited window, use Reset() followed
sl@0
  2181
        by EvaluateAll().
sl@0
  2182
sl@0
  2183
sl@0
  2184
Version 0.01.017
sl@0
  2185
================
sl@0
  2186
(Made by AjT, 5 August 1996)
sl@0
  2187
sl@0
  2188
1.	Uses E32/064, F32/028, STORE/019, E32TOOLS/036
sl@0
  2189
	
sl@0
  2190
	This is just a component upgrade release
sl@0
  2191
sl@0
  2192
2.	MARM ASCII Release size down to 46,776 due to IMPORT stub
sl@0
  2193
	shortening
sl@0
  2194
sl@0
  2195
Version 0.01.016
sl@0
  2196
================
sl@0
  2197
(Made by AjT, 26 July 1996)
sl@0
  2198
sl@0
  2199
1.	Uses E32/063, F32/027, STORE/018, E32TOOLS/034
sl@0
  2200
sl@0
  2201
2.	Build sizes for EDBMS[D].DLL
sl@0
  2202
sl@0
  2203
	WINS ASCII Release	46,592
sl@0
  2204
	WINS ASCII Debug	110,592
sl@0
  2205
	MARM ASCII Release	46,980
sl@0
  2206
	MARM ASCII Debug	54,580
sl@0
  2207
sl@0
  2208
3.	Bugs fixed:
sl@0
  2209
sl@0
  2210
	Key uniqueness was not being persisted, so unique indexes would
sl@0
  2211
	not work when the database was re-opened after closing.
sl@0
  2212
sl@0
  2213
4.	Bookmarks are here. It is possible to bookmark any cursor position,
sl@0
  2214
	including the beginning and end of the set.
sl@0
  2215
sl@0
  2216
5.	Finding within a rowset is operational.
sl@0
  2217
	RDbRowSet::RConstraint, MatchL and FindL are fully functional as
sl@0
  2218
	spec'd in the previous release notes.
sl@0
  2219
sl@0
  2220
6.	Incremental database operations are now functional, though their
sl@0
  2221
	implementation is currently a mock-up based on their single call
sl@0
  2222
	siblings. So they will all report 1 step after the call to
sl@0
  2223
	Open(...) and complete after the first call to Next().
sl@0
  2224
sl@0
  2225
7.	A TDbCol constructed as a short Text column (EDbColText[8|16]) now
sl@0
  2226
	has a default iMaxLength of KDbDefaultTextColLength (50) rather than
sl@0
  2227
	KDbUndefinedLength.
sl@0
  2228
sl@0
  2229
	This allows default length text columns to be indexed, as the
sl@0
  2230
	previous default (which translates to 255 characters in the
sl@0
  2231
	database-in-a-store) meant that the key was too large and the index
sl@0
  2232
	creation failed. The value chosen matches a default in
sl@0
  2233
	Microsoft Access.
sl@0
  2234
sl@0
  2235
8.	The enum TDbPosition has been renamed to RDbRowSet::TPosition, and
sl@0
  2236
	as all its values are now scoped by RDbRowSet, the 'Db' prefix
sl@0
  2237
	to the enumeratiuon values has been dropped.
sl@0
  2238
sl@0
  2239
9.	RDbRowSet::SetColNull() has had an 'L' suffix added as it may leave
sl@0
  2240
	when a Long column is being set to Null. It will never leave if the
sl@0
  2241
	column is not a Long column or it is already Null.
sl@0
  2242
sl@0
  2243
10.	The base class for the incremental operations has been renamed from
sl@0
  2244
	RDbDatabase::RState to RDbDatabase::RIncremental which better
sl@0
  2245
	reflects its purpose.
sl@0
  2246
sl@0
  2247
11.	RDbView's evaluation interface has been changed after thought about
sl@0
  2248
	incremental evalution.
sl@0
  2249
	
sl@0
  2250
	IMPORTANT: Evaluate() has been renamed to EvaluateAll(). Evaluate()
sl@0
  2251
	will eventually invoke a single step in the evaluation of the view,
sl@0
  2252
	but this member has been commented out for this release to
sl@0
  2253
	help spot uses of this member which need to be changed.
sl@0
  2254
	
sl@0
  2255
	EvaluteAll() will eventually use the incremental evaluation
sl@0
  2256
	mechanism to generate the rowset.
sl@0
  2257
sl@0
  2258
12.	RDbRowSet::CountL() is fully implemented now, and will restore the
sl@0
  2259
	previous cursor position if it is necessary to navigate the entire
sl@0
  2260
	set in order to calculate the number of rows.
sl@0
  2261
sl@0
  2262
13.	RDbRowSet::IsEmptyL() is also now implemented.
sl@0
  2263
sl@0
  2264
Version 0.01.015
sl@0
  2265
================
sl@0
  2266
(Made by AjT, 11 July 1996)
sl@0
  2267
sl@0
  2268
1.	Uses E32/063, F32/027, STORE/017(018), E32TOOLS/034
sl@0
  2269
sl@0
  2270
	Upgraded to new releases. Store 017 and 018 are binary
sl@0
  2271
	compatible. Use 018, it provided between 300 and 800% speed
sl@0
  2272
	increase for the DBMS test code.
sl@0
  2273
sl@0
  2274
2.	Build sizes for EDBMS[D].DLL
sl@0
  2275
sl@0
  2276
	WINS ASCII Release	44,032
sl@0
  2277
	WINS ASCII Debug	115,712
sl@0
  2278
	MARM ASCII Release	44,068
sl@0
  2279
	MARM ASCII Debug	51,080
sl@0
  2280
sl@0
  2281
	Tool change resulted in 18% code size reduction. Implementation
sl@0
  2282
	of indices and addition of new API has added an extra 9.5K.
sl@0
  2283
sl@0
  2284
	Debug MARM version for the first time included.
sl@0
  2285
sl@0
  2286
3.	Indices are here! Single- and multi-column keys can be used to create
sl@0
  2287
	indices. Once created, all indices on a table will be updated when
sl@0
  2288
	the table has rows inserted, deleted or updated.
sl@0
  2289
sl@0
  2290
	RDbTable::SetIndex() (see below) allows direct index navigation of the
sl@0
  2291
	table record set.
sl@0
  2292
sl@0
  2293
	ORDER BY will work as long as the ordering matches an index, including
sl@0
  2294
	the text ordering (see 7 below) for text columns. "Matching" includes
sl@0
  2295
	reversing the index order and truncating a multi-key index to a
sl@0
  2296
	shorter sort-specification.
sl@0
  2297
sl@0
  2298
4.	Following the spec meeting, the API has undergone some major work
sl@0
  2299
	detailed below. All the additions which have not been implemented
sl@0
  2300
	should still link OK, but the EXPORT_C'd stubs Panic at runtime with
sl@0
  2301
	EDbUnimplemented.
sl@0
  2302
sl@0
  2303
5.	TDbCol attributes are now a member enumeration and the attributes
sl@0
  2304
	member name has been changed:
sl@0
  2305
sl@0
  2306
	KDbColNotNull is now TDbCol::ENotNull
sl@0
  2307
	KDbColAutoIncr is now TDbCol::EAutoIncrement
sl@0
  2308
	TDbCol::iColAtt is now TDbCol::iAttributes
sl@0
  2309
sl@0
  2310
	CDbColSet::New() has been withdrawn.
sl@0
  2311
sl@0
  2312
6.	The TDbSortOrder enumeration is now a member of TDbKeyCol and the
sl@0
  2313
	sorting order member of TDbKeyCol has changed:
sl@0
  2314
sl@0
  2315
	TDbSortOrder is now TDbKeyCol::TOrder
sl@0
  2316
	EDbSortAsc is now TDbKeyCol::EAsc
sl@0
  2317
	EDbSortDesc is now TDBKeyCol::EDesc
sl@0
  2318
sl@0
  2319
	CDbKey::New() has been withdrawn.
sl@0
  2320
	CDbKey::Unique() is now CDbKey::IsUnique()
sl@0
  2321
sl@0
  2322
7.	Enumeration TDbTextComparison has been introduced to specify how text
sl@0
  2323
	data is compared and ordered:
sl@0
  2324
sl@0
  2325
	EDbCompareNormal - use "binary" order
sl@0
  2326
	EDbCompareFolded - use folded order (case and accent insensitive)
sl@0
  2327
	EDbCompareCollated - use the locale collation order
sl@0
  2328
sl@0
  2329
	Where-ever SQL expressions are used in the API, a companion parameter
sl@0
  2330
	of this type is now required to specify how text columns in the query
sl@0
  2331
	are compared. This parameter is query-wide, and affects text columns
sl@0
  2332
	within a WHERE clause as well as those in an ORDER BY clause.
sl@0
  2333
	So the RDbView::Prepare(...) and Evaluate(...) members have been changed.
sl@0
  2334
sl@0
  2335
	This is also an attribute of an index key, specifying how the text
sl@0
  2336
	columns in the index are ordered. If a key has no text columns, this
sl@0
  2337
	attribute is ignored. Use the CDbKey::SetComparison() and
sl@0
  2338
	CDbKey::Comparison() members to	set and test this attribute.
sl@0
  2339
sl@0
  2340
8.	Row data in a rowset is not retrieved automatically anymore.
sl@0
  2341
	RDbRowSet::GetL() must be called before any column extraction can be
sl@0
  2342
	done without a Panic. RDbRowSet::UpdateL() does not require
sl@0
  2343
	the use of GetL() before or after it is called, the row is read as
sl@0
  2344
	part of the UpdateL(). If Cancel() is used after an UpdateL() or
sl@0
  2345
	InsertL(), then GetL() is required to re-retrieve the data for the
sl@0
  2346
	row previously in view.
sl@0
  2347
sl@0
  2348
9.	A copy of the current row can be inserted into the rowset using
sl@0
  2349
	RDbRowSet::InsertCopyL(). This will provide new values for
sl@0
  2350
	auto-increment columns.	For views with a projected column set, i.e.
sl@0
  2351
	those using a non trivial (*) select-list in the query, it is not
sl@0
  2352
	defined whether the un-viewed columns are copied or not.
sl@0
  2353
sl@0
  2354
10.	RDbRowSet::Count() is now CountL(TAccuracy anAccuracy=EEnsure)
sl@0
  2355
	to reflect the fact that counting may not be a trivial operation
sl@0
  2356
	The default behaviour is to go to whatever lengths are required
sl@0
  2357
	to provide an exact count of the membership of the row set, this
sl@0
  2358
	can take an extended time to evaluate.
sl@0
  2359
sl@0
  2360
	If EQuick is passed as the accuracy parameter this member will
sl@0
  2361
	return a count only if it is immediately available, otherwise it
sl@0
  2362
	will return KDbUndefinedCount (-1). Not fully implemented.
sl@0
  2363
sl@0
  2364
11.	For similar reasons RDbRowSet::IsEmpty() is now IsEmptyL()
sl@0
  2365
	This is not as hard to evaluate as the Count, but may still be a
sl@0
  2366
	non-trivial operation in some cases.
sl@0
  2367
sl@0
  2368
12.	The rowset positioning operations have two new additions:
sl@0
  2369
	RDbRowSet::Beginning() and End() which are always available (hence no
sl@0
  2370
	trailingL). The positioning members	are all implemented in terms of
sl@0
  2371
	RDbRowSet::GotoL(TDbPosition), which is also available for clients.
sl@0
  2372
sl@0
  2373
	RDbRowSet::FirstL(), LastL(), NextL() and PreviousL() now all return
sl@0
  2374
	TBool to indicate whether or not they are at a row. i.e. calling
sl@0
  2375
	RDbRowSet::AtRow() after a call to one of the above will return the
sl@0
  2376
	same value.
sl@0
  2377
sl@0
  2378
	You can write your loops in lots of ways now
sl@0
  2379
sl@0
  2380
	for (view.FirstL;view.AtRow();view.NextL())
sl@0
  2381
		{
sl@0
  2382
		}
sl@0
  2383
sl@0
  2384
	or
sl@0
  2385
sl@0
  2386
	view.Beginning();
sl@0
  2387
	while (view.NextL())
sl@0
  2388
		{
sl@0
  2389
		}
sl@0
  2390
sl@0
  2391
	etc.
sl@0
  2392
sl@0
  2393
13.	RDbTable provides the ability to view the records in named index order
sl@0
  2394
	using RDbTable::SetIndex(const TDesC& anIndex). Or back in default
sl@0
  2395
	order using RDbTable::SetNoIndex().
sl@0
  2396
sl@0
  2397
14.	RDbDatabase::PrepareCommit() and FinishCommit() withdrawn. Two phase
sl@0
  2398
	commit belongs to a different scale of database.
sl@0
  2399
sl@0
  2400
15.	RDbDatabase::CreateTable(...,const CDbKey&) added to support
sl@0
  2401
	implementations	which use a primary key in a table definition. The
sl@0
  2402
	Store database implementation will not support this.
sl@0
  2403
sl@0
  2404
16. RDbs and RDbsDatabase have been withdrawn.
sl@0
  2405
sl@0
  2406
sl@0
  2407
The following changes have been made to the API, but are not yet implemented:
sl@0
  2408
sl@0
  2409
17.	Bookmarks to reposition to a previously accessed row. Use them like this:
sl@0
  2410
sl@0
  2411
	TDbBookmark mark=view.Bookmark();
sl@0
  2412
	// use the view to do something
sl@0
  2413
	view.GotoL(mark);
sl@0
  2414
sl@0
  2415
18.	Searching across a rowset using:
sl@0
  2416
sl@0
  2417
	TInt RDbRowSet::FindL(TDirection,const TDesC&,TDbTextComparison)
sl@0
  2418
sl@0
  2419
	The matching constraint is defined by the search-condition part of a
sl@0
  2420
	SQL WHERE clause, i.e. "Name like '*john*'", passed as the second
sl@0
  2421
	parameter, the third parameter specifies the text comparison to use
sl@0
  2422
	(see 7 above). The first parameter is either EForwards or EBackwards
sl@0
  2423
	and specifies which direction the search should move through the row
sl@0
  2424
	set. The search always starts at the current record. The search
sl@0
  2425
	terminates when either:
sl@0
  2426
	a)	a match is found and the number of records searched minus 1 is
sl@0
  2427
		returned (so if	the current record matches the condition 0 is
sl@0
  2428
		returned) or
sl@0
  2429
	b)	the	end of the set is reached and KNotFound is returned
sl@0
  2430
sl@0
  2431
	The API also provides a way of testing a row against a given condition.
sl@0
  2432
	The condition is built into an RDbRowSet::RConstraint object and can
sl@0
  2433
	then be tested against individual rows using the RDbRowSet::MatchL()
sl@0
  2434
	member. As the constraint involves allocating resources it should be
sl@0
  2435
	closed when no longer required.
sl@0
  2436
sl@0
  2437
19.	Incremental forms for RDbRowSet::Evaluate()
sl@0
  2438
sl@0
  2439
	All the incremental operations have a single basic function
sl@0
  2440
	TInt Next(TInt& aStep) // synchronous form
sl@0
  2441
	The integer aStep is decremented for each step, though it may be in
sl@0
  2442
	units > 1. When aStep reaches 0, the operation is complete. Some of
sl@0
  2443
	the operations' step-counts are very hard to predict, and so finish much
sl@0
  2444
	earlier than predicted.
sl@0
  2445
sl@0
  2446
20.	Seeking within an index for a record which matches a specified key can
sl@0
  2447
	be achieved with RDbTable::SeekL(). The index used for the look up is
sl@0
  2448
	set using RDbTable::SetIndex() (see 13 above) and the key is specified
sl@0
  2449
	using the TDbSeekKey or TDbSeekMultiKey<S> classes. The templated class
sl@0
  2450
	allows seeking with an index which has multiple	key columns. Each key
sl@0
  2451
	value is added to the TDbSeekKey, and should match the column type in
sl@0
  2452
	the table.
sl@0
  2453
	
sl@0
  2454
	RDbTable::SeekL() also takes a parameter which specifies which record to
sl@0
  2455
	find in the index. If it succeeds in locating a record which matches the
sl@0
  2456
	key and comparison it returns true; otherwise the rowset is left in an
sl@0
  2457
	undefined position.
sl@0
  2458
sl@0
  2459
20.	RDbDatabase::IsDamaged() and Recover() added to support recovery.
sl@0
  2460
	This is done on a opened database. When open IsDamaged() reports whether
sl@0
  2461
	the database requires recovery: if it is damaged then no other
sl@0
  2462
	operations can be performed on the database, and they will report the
sl@0
  2463
	error KErrCorrupt.
sl@0
  2464
sl@0
  2465
21.	RDbDatabase::Compact() will compact an open database. It must not be
sl@0
  2466
	in use for anything else concurrently.
sl@0
  2467
sl@0
  2468
22. Incremental database operations are supported by the RDbDatabase::RState
sl@0
  2469
	class and those derived from it.
sl@0
  2470
sl@0
  2471
Version 0.01.014
sl@0
  2472
================
sl@0
  2473
(Made by AjT, 30 May 1996)
sl@0
  2474
sl@0
  2475
1)	Uses E32/060, F32/024, STORE/015, E32TOOLS/028
sl@0
  2476
sl@0
  2477
2)	Binary compatible with build 013.
sl@0
  2478
	Making use of the -fcheck-new flag in MAKTRAN(028)
sl@0
  2479
sl@0
  2480
3)	EDBMS.DLL build sizes:
sl@0
  2481
sl@0
  2482
	WINS Ascii Debug		93,696
sl@0
  2483
	WINS Ascii Release		34,304
sl@0
  2484
sl@0
  2485
	MARM Ascii Release		41,496
sl@0
  2486
sl@0
  2487
4)	Bugs fixed:
sl@0
  2488
	
sl@0
  2489
	MNT bug: failed to create an E32DATA directory, which is required
sl@0
  2490
	during EPOC32 startup!
sl@0
  2491
sl@0
  2492
	Clearing or rewriting a Long column while in an RDbRowSet::UpdateL
sl@0
  2493
	caused a USER panic.
sl@0
  2494
sl@0
  2495
	When updating a row, making columns smaller or setting them to
sl@0
  2496
	Null, could result in data on the end of the row being lost or
sl@0
  2497
	corrupted.
sl@0
  2498
sl@0
  2499
5)	STORE 015 fixed the worst of the Rewritable file store problems.
sl@0
  2500
sl@0
  2501
Version 0.01.013
sl@0
  2502
================
sl@0
  2503
(Made by AndrewT, 24 May 1996)
sl@0
  2504
sl@0
  2505
1)	Uses E32/059, F32/023. STORE/014, E32TOOLS/024
sl@0
  2506
sl@0
  2507
2)	EDBMS.DLL build sizes
sl@0
  2508
sl@0
  2509
	WINS Ascii Debug		93,696
sl@0
  2510
	WINS Ascii Release		34,304
sl@0
  2511
sl@0
  2512
	MARM Ascii Release		47,108
sl@0
  2513
sl@0
  2514
3)	The ODBC implementation has been removed from the release
sl@0
  2515
sl@0
  2516
4)	Bugs fixed:
sl@0
  2517
sl@0
  2518
	Word swapping doubles was written without alignment in mind, caused
sl@0
  2519
	the rack to hang sometimes in RDbRowSet::PutL(). Fixed
sl@0
  2520
sl@0
  2521
5)  	New features:
sl@0
  2522
sl@0
  2523
	[NOT] LIKE in the search condition is now case-insensitive (using Folding);
sl@0
  2524
	The other comparison operators are (and will remain) case sensitive
sl@0
  2525
sl@0
  2526
	Select-lists are now supported: so
sl@0
  2527
	"select Name,Dept from Personnel where ID>3"
sl@0
  2528
	will now work. The columns in the RDbView are ordered exactly as in the
sl@0
  2529
	list in the SQl statement.
sl@0
  2530
sl@0
  2531
6)	WARNING!
sl@0
  2532
sl@0
  2533
	A bug in CRewritableFileStore in STORE 014 means that once a
sl@0
  2534
	CRewritableFileStore file has been closed, opening and adding new streams
sl@0
  2535
	will make the last stream (by id) corrupt and the first one (by position)
sl@0
  2536
	invisible. This will also happen when more than 16 streams are created in a
sl@0
  2537
	newly created store.
sl@0
  2538
	Signs of corruption are duff stream data or non-exisitence of a stream when
sl@0
  2539
	reading, but may be hard to track down.
sl@0
  2540
	Opening a CRewritableFileStore for reading if no corruption has yet occured
sl@0
  2541
	is not a problem.
sl@0
  2542
sl@0
  2543
	This will affect databases in RewritableFileStores.
sl@0
  2544
sl@0
  2545
7)	Due to dependence on STORE 014, which has changed the format of file store
sl@0
  2546
	headers, files written using DBMS(012)/STORE(013) are unreadable with
sl@0
  2547
	DBMS(013)/STORE(014)
sl@0
  2548
sl@0
  2549
Version 0.01.012
sl@0
  2550
================
sl@0
  2551
(Made by AndrewT, 13 May 1996)
sl@0
  2552
sl@0
  2553
1)	Uses E32/059, F32/023. STORE/013, E32TOOLS/023
sl@0
  2554
sl@0
  2555
2)	EMARM build sizes from e32rom.log:
sl@0
  2556
sl@0
  2557
	Rom file size:			64K
sl@0
  2558
	Total Raw Data size:	43K
sl@0
  2559
sl@0
  2560
3)	Bugs fixed:
sl@0
  2561
sl@0
  2562
	RDbRowSet::IsColNull(), ColSize() and ColLength() return as for a
sl@0
  2563
	NULL column when invoked on a Long column in a rowset which has not
sl@0
  2564
	had any other column evaluated.
sl@0
  2565
sl@0
  2566
	Various problems with recovery after errors when opening databases
sl@0
  2567
	or views.
sl@0
  2568
sl@0
  2569
4)  New features:
sl@0
  2570
sl@0
  2571
	LongText8 columns can now be specified in the WHERE clause of a
sl@0
  2572
	query.
sl@0
  2573
sl@0
  2574
	Table names and columns sets are fully validated when a table is
sl@0
  2575
	created.
sl@0
  2576
sl@0
  2577
	Rows are fully validated before they are written to the table.
sl@0
  2578
sl@0
  2579
5)	Data format has changed, so databases written with build 011 of
sl@0
  2580
	DBMS will fail to open correctly with this build.
sl@0
  2581
sl@0
  2582
sl@0
  2583
Version 0.01.011
sl@0
  2584
================
sl@0
  2585
(Made by AndrewT, 30 April 1996)
sl@0
  2586
sl@0
  2587
1)	Uses E32/057, F32/021. STORE/012, E32TOOLS/021
sl@0
  2588
sl@0
  2589
2)	EMARM build sizes from e32rom.log:
sl@0
  2590
sl@0
  2591
	Rom file size:		64K
sl@0
  2592
	Total Raw Data size:	42K
sl@0
  2593
sl@0
  2594
3)	Bugs fixes:
sl@0
  2595
sl@0
  2596
	E32 panic during cleanup if Store database open or creation failed.
sl@0
  2597
sl@0
  2598
	Deleting last row in a table generated an End-Of-File error.
sl@0
  2599
sl@0
  2600
4)	API Changes:
sl@0
  2601
sl@0
  2602
	KNullColNo has become KDbNullColNo
sl@0
  2603
sl@0
  2604
	Added new member TDbColType RDbRowSet::ColType(TDbColNo) which just
sl@0
  2605
	reports the column type.
sl@0
  2606
sl@0
  2607
	In the RDbView::Prepare(), RDbView::Evalyate() and RDbTable::Open()
sl@0
  2608
	functions, the allowUpdates boolean flag has been replaced by an enum
sl@0
  2609
	RDbRowSet::TAccess, which takes one of the three values:
sl@0
  2610
sl@0
  2611
		EUpdatable:  the default, rows can be read or written
sl@0
  2612
		EReadOnly:   the rows can only be read, InsertL/DeleteL/UpdateL
sl@0
  2613
					 will leave with KErrWrite
sl@0
  2614
		EInsertOnly: the rows can only be inserted. Any navigation
sl@0
  2615
					 functions and DeleteL will leave with KErrWrite
sl@0
  2616
sl@0
  2617
5)	Long columns are now length counted when written, so ColSize() and
sl@0
  2618
	ColLength() should report correctly. Only one column can be streamed
sl@0
  2619
	in at a time on a single rowset, and only one Long column can be
sl@0
  2620
	streamed out at a time. Column streams must be closed before setting
sl@0
  2621
	other columns, navigating, etc. on the rowset.
sl@0
  2622
sl@0
  2623
6)	Search conditions are now supported in the query passed to
sl@0
  2624
	RDbView::Prepare() and RDbView::Evaluate().
sl@0
  2625
sl@0
  2626
	See R:\DBMS\DSPEC\SQL.DOC for the supported grammar in search
sl@0
  2627
	conditions. Searching on date columns cannot be done currently as I
sl@0
  2628
	am waiting for TTime support for descriptors.
sl@0
  2629
sl@0
  2630
sl@0
  2631
Version 0.01.010
sl@0
  2632
================
sl@0
  2633
(Made by AndrewT, 22 April 1996)
sl@0
  2634
sl@0
  2635
1).	Still uses E32/056, F32/020. STORE/011, E32TOOLS/019
sl@0
  2636
sl@0
  2637
2)	API changes:
sl@0
  2638
sl@0
  2639
	KDbUndefinedLength is used for TDbCol::iMaxLength to imply that no
sl@0
  2640
	maximum has been set, and also to report the RDbRow::ColSize() could
sl@0
  2641
	not be determined.
sl@0
  2642
sl@0
  2643
	KDbUndefinedCount is returned from RDbRowSet::Count() when the number of
sl@0
  2644
	rows cannot be determined
sl@0
  2645
sl@0
  2646
	Static member TBool TDbCol::IsLong(TDbColType) has been added for
sl@0
  2647
	convenience to test whether the column type is one of the "Long" types.
sl@0
  2648
sl@0
  2649
	CDbColSet and CDbKey are implemented using Packed arrays, and provide a
sl@0
  2650
	NewLC() member.
sl@0
  2651
	
sl@0
  2652
	TDbColSetIter has been introduced to provide simple, but fast forward
sl@0
  2653
	iteration over a column set. Use as:
sl@0
  2654
sl@0
  2655
	for (TDbColSetIter col(aColSet);col;++col)
sl@0
  2656
		{
sl@0
  2657
		if (col->iType==EDbColBit)
sl@0
  2658
			// etc.
sl@0
  2659
		}
sl@0
  2660
sl@0
  2661
	RDbRowSet has two new members
sl@0
  2662
		TInt ColCount()
sl@0
  2663
		TDbCol ColDef(TDbColNo)
sl@0
  2664
	These report the column definition on a column by column basis: ColSet()
sl@0
  2665
	and ColSetL() are now implemented in terms of these new members.
sl@0
  2666
sl@0
  2667
3)	EDBMS (the real thing) now supports a Database-in-a-Store in Win32
sl@0
  2668
	ASCII Debug & Release builds and the MARM ASCII Release.
sl@0
  2669
sl@0
  2670
	Supports Database creation/deletion within a Store.
sl@0
  2671
	Supported Table creation/dropping with all column types. Column
sl@0
  2672
	attributes (KDbColNotNUll and KDbColAutoIncr) are not supported.
sl@0
  2673
	Long columns cannot report their length	yet.
sl@0
  2674
	RDbTables and whole-table views ("SELECT * FROM <table>" exactly: no extra
sl@0
  2675
	spaces) are supported for Viewing, Adding, Editing and Deleting rows.
sl@0
  2676
	
sl@0
  2677
Version 0.01.009
sl@0
  2678
================
sl@0
  2679
(Made by AndrewT, 10 April 1996)
sl@0
  2680
sl@0
  2681
1).	Uses E32/056, F32/020, STORE/011, E32TOOLS/019
sl@0
  2682
	Reinstated F32 as a dependency, as STORE is dependant on it.
sl@0
  2683
sl@0
  2684
2).	Fixed a few duff header dependencies in the test code.
sl@0
  2685
sl@0
  2686
Version 0.01.008
sl@0
  2687
================
sl@0
  2688
(Made by AndrewT, 29 March 1996)
sl@0
  2689
sl@0
  2690
1). Includes MARM releasables for the first time. The release components are
sl@0
  2691
	now called EWINS, EWINSDB and EMARM. EMARM is 8-bit release mode only.
sl@0
  2692
sl@0
  2693
	Uses E32/055, STORE/010 and E32TOOLS/017.
sl@0
  2694
sl@0
  2695
2). DBMS has been reorganised to prepare for the ODBC mock-up being phased out
sl@0
  2696
	and replaced by the Real Thing. A clean getsrc is required as a number of
sl@0
  2697
	files and directories are new or have been renamed.
sl@0
  2698
sl@0
  2699
	The ODBC implementation has been relegated to a set of DLLs of its own;
sl@0
  2700
	EODBC*.DLL, available for WINS only. To use ODBC, link against these,
sl@0
  2701
	rather than the standard EDBMS*.DLL ones.
sl@0
  2702
	DBMS test programs demonstrate one way of dealing with this situation. They
sl@0
  2703
	feature new Win32 ODBC Debug and Release configurations causing them to be
sl@0
  2704
	linked against the alternative libraries.
sl@0
  2705
sl@0
  2706
3). There is now a stream store-based flavour of database, as well as a
sl@0
  2707
	server-based one. EODBC*.DLLs export a mock-up of both flavours.
sl@0
  2708
	EDBMS*.DLLs, identical on WINS and ARM, do not export the server-based
sl@0
  2709
	database, and the store-based one currently exported will refuse to open,
sl@0
  2710
	leaving with KErrGeneral.
sl@0
  2711
	
sl@0
  2712
	Note that DBMS v1 will *not* include the DBMS server.
sl@0
  2713
sl@0
  2714
4). If you use the DDL pre-processor you should stick it in \tools using
sl@0
  2715
	"getrel dbms ddlpp <ver>". The Custom-Build on Build/Settings in MSVC 4
sl@0
  2716
	is dead handy for using this tool. See the T_DDL test program for details.
sl@0
  2717
sl@0
  2718
5). KDbMaxColumnLength is a const which specifies the maximum "MaxLength" that
sl@0
  2719
    can be used for EDbColText8, EDbColText16 and EDbColBinary columns. For the
sl@0
  2720
	text columns "Length" has the same meaning as for descriptors.
sl@0
  2721
sl@0
  2722
6). EDbColLongText8, EDbColLongText16, EDbColLongBinary are the Long column
sl@0
  2723
	types. They can only be read or written using the new stream column
sl@0
  2724
	accessors (see 7), the other SetColL() and ColXxx() members of RDbRowSet
sl@0
  2725
	will Panic. "Short" columns can be read but not written using the column
sl@0
  2726
	streams. "Short" text or binary columns can always be read directly using
sl@0
  2727
	the ColDes8/16() accessors.
sl@0
  2728
sl@0
  2729
	EDbLongText8 and EDbLongBinary have been implemented for ODBC. Unicode
sl@0
  2730
	columns are still unsupported.
sl@0
  2731
	
sl@0
  2732
	EDbColObject has been removed.
sl@0
  2733
sl@0
  2734
7).	RDbColReadStream, RDbColWriteStream provide the stream interface to the Long
sl@0
  2735
	columns. Although 'MExternalizer's are in the RDbColWriteStream interface
sl@0
  2736
	they are not implemented at the moment. They require a RDbRowSet and a column
sl@0
  2737
	number to open: the row set must be positioned at a valid row for reading
sl@0
  2738
	and must be in insert/update mode for writing, as for the other column
sl@0
  2739
	accessors.
sl@0
  2740
sl@0
  2741
8). Two new members RDbRowSet::ColSize(), RDbRowSet::ColLength() provide size
sl@0
  2742
	information for the current row in the row set. ColSize() is the size in
sl@0
  2743
	bytes of the data available if streamed using RDbColReadStream. ColLength(),
sl@0
  2744
	in the spirit of TDesC::Length(), returns the number of "units" of data in
sl@0
  2745
	the column. For non text/binary columns this will be 0 or 1 indicating
sl@0
  2746
	whether the column is NULL or not, for text columns this returns the number
sl@0
  2747
	of characters available in the column, and for binary columns returns the
sl@0
  2748
	same value as the ColSize() member.
sl@0
  2749
sl@0
  2750
	If this cannot be evaluated -1 is returned;
sl@0
  2751
sl@0
  2752
9). RDbDatabase has lost the ability to Open/Create/etc. a database.
sl@0
  2753
	This functionality is now left to derived classes:
sl@0
  2754
	
sl@0
  2755
	RDbsDatabase provides what was lost from RDbDatabase. This (and RDbs) will
sl@0
  2756
	not be present in the MARM release.
sl@0
  2757
sl@0
  2758
	RDbStoreDatabase implements the new Open/Create protocol. CreateL returns
sl@0
  2759
	an Id for the database within the store, which is used by OpenL to reopen
sl@0
  2760
	the database on a later occasion. The Real Thing will require a Store
sl@0
  2761
	which supports ExtendL() and RStoreWriteStream::OpenL() (the only
sl@0
  2762
	persistent store which currently provides this is CRewritableFileStore).
sl@0
  2763
	This is supported by ODBC, but don't expect the database to be kept within
sl@0
  2764
	the Store itself, it is in fact somewhere in \E32DATA.
sl@0
  2765
sl@0
  2766
9). RDbDatabase::Destroy() destroys (deletes) the persistent database and
sl@0
  2767
	closes the RDbDatabase object. This provides for deletion of databases
sl@0
  2768
	created using RDbStoreDatabase
sl@0
  2769
sl@0
  2770
sl@0
  2771
Version 0.01.007
sl@0
  2772
================
sl@0
  2773
(Made by AndrewT, 4 March 1996)
sl@0
  2774
sl@0
  2775
1).	Updated to E32:054 and F32:018
sl@0
  2776
sl@0
  2777
Version 0.01.006
sl@0
  2778
================
sl@0
  2779
(Made by AndrewT, 30 January 1996)
sl@0
  2780
sl@0
  2781
1).	Updated to E32:053 and F32:017
sl@0
  2782
sl@0
  2783
Version 0.01.005
sl@0
  2784
================
sl@0
  2785
(Made by AndrewT, 18 January 1996)
sl@0
  2786
sl@0
  2787
1).	Updated to E32:052 and F32:016
sl@0
  2788
sl@0
  2789
1).	Fixed a bug in TDbRow which meant that changing column data for
sl@0
  2790
	text columns would not always change the column data width.
sl@0
  2791
sl@0
  2792
2)	Changed the accessors for the View. SetColL() does not have overloads
sl@0
  2793
	for 8 or 16 bit integers, The TInt, TInt32, TUint and TUint32 are
sl@0
  2794
	enough - (via ODBC we cannot provide range validation on shorter columns
sl@0
  2795
	due to its signed/unsigned incapabilities).
sl@0
  2796
	
sl@0
  2797
	Any integral column can be extracted using an accessor at least as wide
sl@0
  2798
	as the column definition:
sl@0
  2799
sl@0
  2800
	e.g. a Bit column can be extracted with ColUint8() ColUint16() or
sl@0
  2801
	ColUint32(), an Int16 column can be extracted with ColInt16() or
sl@0
  2802
	ColInt32() but not ColInt8() - even if the data is in range for this
sl@0
  2803
	extraction.
sl@0
  2804
sl@0
  2805
Version 0.01.004
sl@0
  2806
================
sl@0
  2807
(Made by AndrewT, 3 January 1996)
sl@0
  2808
sl@0
  2809
1).	Updated to E32:051 and F32:015
sl@0
  2810
sl@0
  2811
2).	Now uses the new TTime and TDateTime classes. TSystemTime is no
sl@0
  2812
	longer supported.
sl@0
  2813
sl@0
  2814
3).	The pre-processor has also been modified to handle the new TTime.
sl@0
  2815
sl@0
  2816
Version 0.01.003
sl@0
  2817
================
sl@0
  2818
(Made by AndrewT, 18 December 1995)
sl@0
  2819
sl@0
  2820
1).	Updated to E32:050 and F32:014
sl@0
  2821
	The new TBool has broken the SetColL() overloads for RDbRowSet.
sl@0
  2822
	The overload for TBool has been withdrawn for this release, pending a
sl@0
  2823
	rewrite of the set/get interface.
sl@0
  2824
sl@0
  2825
Version 0.01.002
sl@0
  2826
================
sl@0
  2827
(Made by AndrewT, 17 October 1995)
sl@0
  2828
sl@0
  2829
1).	Updated to E32:047 and F32:011
sl@0
  2830
	All functions which used to return TUints as counts or indices now return
sl@0
  2831
	TInts. Specifically RDbRowSet::Count() now returns -1 if it cannot determine
sl@0
  2832
	the actual count.
sl@0
  2833
sl@0
  2834
2).	Fixed a bug in RDbRowSet::Prepare() to report an error on SQL syntax errors.
sl@0
  2835
sl@0
  2836
Version 0.01.001
sl@0
  2837
================
sl@0
  2838
(Made by GeertB, 29 August 1995)
sl@0
  2839
sl@0
  2840
1). First release.
sl@0
  2841
sl@0
  2842
	The main header file is D32DBMS.H.
sl@0
  2843
sl@0
  2844
	The header file D32ADT.H is for the use of implementers of DBMS file
sl@0
  2845
	organisations, "drivers" which are used by the DBMS.
sl@0
  2846
sl@0
  2847
	Implemented by passing all interesting operations on to Microsoft Access
sl@0
  2848
	through ODBC.
sl@0
  2849
sl@0
  2850
	Running programs linked against this release requires the installation of
sl@0
  2851
	32-bit ODBC and the Access driver. This is done as follows:
sl@0
  2852
sl@0
  2853
	- shut down all applications (don't forget Office)
sl@0
  2854
	- run T:\ODBC\BIN32\ODBCAD32.EXE, the 32-bit ODBC Administrator
sl@0
  2855
	- in the resulting dialog, press "Drivers...", then "Add..."
sl@0
  2856
	- type T:\ODBC\BIN32 at the prompt (or use "Browse...")
sl@0
  2857
	- select "Microsoft Access Driver (*.mdb)" in the list that pops up
sl@0
  2858
	- press "OK" (or double click)
sl@0
  2859
	- file copying will start
sl@0
  2860
	- a message like the following will appear: "The file C:\WINNT35\SYSTEM32\
sl@0
  2861
	  MSVCRT20.DLL is currently in use and cannot be removed or updated. Try
sl@0
  2862
	  closing all applications and choosing Retry. (...)"
sl@0
  2863
	  Since it's the ODBC Administrator itself that is using the DLL, complying
sl@0
  2864
	  won't help. Instead, choose "Ignore".
sl@0
  2865
	- if a message along the lines of "An error occurred while copying
sl@0
  2866
	  C:\WINNT35\SYSTEM32\MFC30.DLL. Restart Windows and try installing again
sl@0
  2867
	  (before running any applications which use ODBC)." appears, you've left an
sl@0
  2868
	  application using MFC running. Start again from the top.
sl@0
  2869
	- the installer adds a data source called "sdk21-Access32". It can
sl@0
  2870
	  safely be deleted.
sl@0
  2871
	- in the "Data Sources" dialog, create a data source by pressing "Add..."
sl@0
  2872
	- select the Access driver in the resulting dialog and press "OK"
sl@0
  2873
	- call the new data source "DBMS", leaving other fields blank. Choose "OK".
sl@0
  2874
	- close the ODBC Administrator
sl@0
  2875
	- in case you haven't copied the new (MSVC 2.1) MSVCRT20.DLL from T:\MSVC21\
sl@0
  2876
	  SYSTEM32 yet, do so now. The Access ODBC driver needs the newer version.
sl@0
  2877
	  See the instructions in the E32 0.01.039 release notes.
sl@0
  2878
	
sl@0
  2879
	Warning: on one NT machine, the driver setup program erroneously copied the
sl@0
  2880
	Windows 95 version of CTL3D32.DLL. If this happens, applications--notably
sl@0
  2881
	MSVC--may start complaining about it. The fix is to copy T:\ODBC\REDIST32\
sl@0
  2882
	WINNT\CTL3D32.DLL into your SYSTEM32 directory.
sl@0
  2883
sl@0
  2884
2). Unicode builds are not supported. ODBC understands only 8-bit text.
sl@0
  2885
	Support for the 8-bit subset of the Unicode character set can be added
sl@0
  2886
	fairly trivially if it turns out to be needed during the life time of this
sl@0
  2887
	implementation.
sl@0
  2888
sl@0
  2889
3). The initial revision of a tool to help in building programs to run against
sl@0
  2890
	the DBMS is included. It is called DDLPP.EXE and it takes a simple data
sl@0
  2891
	definition language as its input and generates C++ headers and source code.
sl@0
  2892
	See R:\DBMS\DSDK\DDLPP.HLP for more information.
sl@0
  2893
	It is less than perfect as a command line tool at the moment.
sl@0
  2894
	Comments and feedback welcome.
sl@0
  2895
sl@0
  2896
4). No interpretation of ODBC status codes. In case of an ODBC error,
sl@0
  2897
	KErrGeneral is returned.
sl@0
  2898
sl@0
  2899
5). RDbViews and RDbTables become unusable when the transaction they were
sl@0
  2900
	created in ends. Currently, if you don't start a transaction using
sl@0
  2901
	RDbDatabase::Begin(), one is implicitly entered for you, and committed
sl@0
  2902
	on RDbRowSet::Put(). Thus the row set is effectively closed after the
sl@0
  2903
	first database modification.
sl@0
  2904
	The workaround is to use explicit transactions.
sl@0
  2905
sl@0
  2906
6). RDbView::Define() is not implemented, and will in all likelihood be
sl@0
  2907
	withdrawn in a future release.
sl@0
  2908
sl@0
  2909
7). The Access driver does not accurately report the number of rows in the
sl@0
  2910
	result set. As a result, RDbRowSet::Count() returns KMaxTUint in the
sl@0
  2911
	majority of cases.
sl@0
  2912
	In general, Count() is an expensive operation and should not be used
sl@0
  2913
	lightly.
sl@0
  2914
sl@0
  2915
8). No interpretation of ODBC status codes. In case of an ODBC error,
sl@0
  2916
	KErrGeneral is returned.
sl@0
  2917
sl@0
  2918
9). Bit columns (EDbColBit) cannot be NULL.
sl@0
  2919
sl@0
  2920
10). Text columns (EDbColText8) are currently limited to 255 characters.
sl@0
  2921
sl@0
  2922
11). Binary column extraction (EDbColBinary) is limited to the first 2K of the
sl@0
  2923
	data.
sl@0
  2924
sl@0
  2925
12). TUint32 column accessor functions cannot be used at the moment due to an
sl@0
  2926
	overload ambiguity with TSystemTime.
sl@0
  2927
sl@0
  2928
13). The full range of the unsigned integer column types is not available.
sl@0
  2929
	Values are constrained to the range of the corresponding signed types.
sl@0
  2930
sl@0
  2931
14). The Access driver does not support NOT NULL columns.
sl@0
  2932
	RDbDatabase::CreateTable() does accept KDbColNotNull columns but cannot
sl@0
  2933
	enforce it.
sl@0
  2934
sl@0
  2935
15). RDbDatabase::AlterTable() is not currently implemented.
sl@0
  2936
sl@0
  2937
NOTES
sl@0
  2938
=====
sl@0
  2939
sl@0
  2940
The DBMS's requirements are currently undergoing extensive revision, due to
sl@0
  2941
changes in ERA's overall strategy for persistent storage. This may result in a
sl@0
  2942
number of changes to the API.
sl@0
  2943