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