1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006
|
2001-02-01 MK 2.4.3 Bug-fix release, mostly
As the title says...
Python include path now upgraded to python2.2 (was 2.1).
2001-01-31 Cross-platform serialization, Tcl
There was a bug with serializing a datafile (SaveTo) when
it was created on a platform with reverse endian-ness.
Fixed so serialized data also flags reversed byte order.
Tweaks to fix const changes in the latest Tcl cvs branch.
Fixed a recently-introduced UTF8 path bug in mk4tcl.cpp.
2001-12-21 Optimized GetAs
Now that GetAs is used so much more, optimize the common
case where a description does not require restructuring.
Can lead to order-of magnitude speed improvement in cases
where a storage contains many views.
2001-12-20 Fixed bug in Locate, comparison issue
Testing for the Mk4py changes uncovered a serious bug in
c4_View::Locate, causing it to sometimes return zero, even
if there are matching rows (thanks, Gordon).
But a very fundamental weakness also showed up, being that
row comparisons (and that includes the C++ operators) have
the confusing property of not being symmetric in all cases.
The problem occurs when left- and right-hand sides do not
contain the same (number of) properties. In that case, the
*left-hand* row participating in the comparison determines
which properties take part in a comparison.
In the case of Locate, this caused improper comparisons.
And it is very easy to get bitten by this, such as here:
c4_RowRef key = ...;
int n = view.Search(key);
bool match = n >= 0 && view[n] == key;
The above code is *wrong*. The last line needs to be:
bool match = n >= 0 && key == view[n];
This is very clearly a design mistake. Comparisons should
have been *either* implemented *or* named differently.
A new "m04" test has been added to the regression suite.
2001-12-19 Changes to mk4py by Gordon McMillan
Several changes and cleanups. Mk4py now has logic to track
different view categories, e.g. to make sure a R/O view is
not being written to. This should greatly reduce the number
of silently ignored incorrect calls, as well as crashes, and
will produce appropriate error messages instead.
2001-12-18 Cleanup
Cleaned up source comments and got rid of yet more warnings.
2001-12-14 Fixed yet another case of crash-on-exit
The new Unmapped() code of 2.4.2 forgot one case of cleaning
up, which has now been fixed (in c4_FormatB::Commit).
2001-12-12 MK 2.4.2 Better portability, hashing improved
This release marks the consolidation of a number of changes,
mostly relating to better portability & hashing. The speed
of commits with many strings and subviews should be notably
better. The Tcl extension no longer needs a "stub" library
to compile (it now has that code itself), just std headers.
2001-12-08 Changes to commit cleanup, Mac stuff
Changed the logic of how ReleaseAllSegments gets called at
the end of commits. There was at least one case of leaving
a column pointing into mapped file space when it was about to
be remapped. This should fix a very long-tanding bug which
shows itself as freeing unallocated memory during commit or
cleanup of the storage object.
Changes to test coding and PyRowRef.cpp to deal with builds
on Macintosh (different issues for MacOS 9 and MacOS X).
The mac/cw.sea.hqx project has been upgraded to MW CW 6.3.
Verified Tcl 8.3.2 and Python 2.1.1 builds with CW6 on Mac.
2001-12-06 Tweaks to Tcl interface
More robust, added "$vw loop var ... {body}" object command.
The "$vw size" command now takes an optional newsize arg.
2001-12-04 Tweaks to makefile and configure
Tweaks, in preparation of an upcoming 2.4.2 release.
2001-12-03 Changes in M4py, avoid gcc problem, hash
The "-fomit-frame-pointer" option for gcc has been turned off,
because it causes problems with exception handling in Mk4py.
All failures in Mk4py now propagate properly to Python AFAIK.
Simplified Mk4py - by removing a layer of exception handler
classes in scxx. Errors now set info and throw a plain int.
The mkhash.cpp sample program exposed a problem with multi-key
hashing: the order of properties in the search key must match
exactly the order in the hash view itself. For now, this has
been left as is (it's easy to do, once you are aware of it).
2001-11-30 Win MT fix, commit tweak, indent cleanup
Drop static buffer in fileio.cpp (DataWrite), uses stack now,
so the code can be used in MT context even on Win 95/98.
It does more copying than would be needed for NT (2K?), alas.
More changes in c4_FormatB::Commit to properly detect memo use
in blocked views. The recent changes introduced a bug which
shows up only with blocked views and large string/bytes items.
Reported by Steve Baxter with demo, new "m02" regression test.
Changed fileio.cpp to turn off file buffering, this avoids a
few reads when writing and seeking a lot. It does not have as
big an impact as one might expect, but every little bit helps.
Cleaned up new 2-space indentation in several source files.
Added new "mk::file space" in Mk4tcl, to inspect the current
file space usage. This is only intended for internal testing.
2001-11-28 Fixed memory leak in string/memo cleanup
There was a mem-leak in c4_FormatB::Commit which showed up due
to yesterday's more extensive testing. Only showed up after a
commit, in string columns with widely varying item sizes.
This caused regression test s37 to fail in MFC-debug compile.
2001-11-27 Major performance bug fix, and MT strings
A serious problem has been resolved, which slowed down commits,
and prevented blocked views from committing efficiently. The
reason was that for string props, the string size was always
being saved anew, even if no changes in that view took place.
This did not affect proper operation, just speed, and was most
noticeable with many (sub-)views containing many string props.
The solution is in src/format.cpp, the examples/mkhash.cpp code
was further adjusted to better expose and measure the effects.
Thanks to P. Baspeyras and S. Baxter for helping me resolve it.
Another change was to alter the way empty strings are allocated
in the src/string.cpp code, making it compatible with multi-
threaded use and removing the remaining memory leak.
2001-11-26 Fix in assertion check (blocked view)
Corrected an off-by-one bug. Only shows up with debugging on,
since it's inside an assert(). Thanks to Steve Baxter.
2001-11-25 More arg checking in Mk4py, locate
Added more checks against incorrect usage, based on sample code
by Mitch Chapman. The "throw" code appears to be inconsistent
when called at top of *some* calls, using a workaround for now.
Added "view.locate(key)" wrapper, returns (pos,count) tuple.
Various source code formatting adjustments (indents and such).
2001-11-04 Added alternate calls to c4_CustomViewer
Added extra defs to "mk4.h" of Lookup and InsertRows which take
a "const c4_RowRef&" i.s.o. a c4_Cursor. Inlined in "mk4.inl".
The "c4_Cursor" datatype might one day become obsolete.
2001-11-03 Removed tcl/kit/ and copyright notices
Removed the entire tcl/kit/ tree, TclKit will be distributed as
separate package from now on (the 2.4.1 release still builds ok).
Also replaced all copyright notices by version Id's and an URL.
2001-11-02 Fixed partial memo commit bug, makefile fix
Modifying a small item as memo (i.e. through Modify) properly
committed a change, but subsequently left an incorrect pointer
after the commit. Fixed, and added test s37 to catch this case.
Don't strip symbols from installed static libs (whoops!).
2001-10-31 Fixed Mk4py error flag clear on delete
When deleting rows, a slice was constructed from a PWOSequence,
which generates an otherwise harmless error when its length is
checked. The flag was not cleared, causing errors in subsequent
Python statements. Changed to a PWOTuple in PyView.cpp (2x).
2001-10-26 Fixed Mk4tcl re-open test
The tcl/test/mk1basic.tcl test #6 was reporting open failure on
non-Linux systems. Fixed, the code works, the message was wrong.
2001-10-19 Rearranged some demo files, Lua binding
Rearranged some of the demos/samples from the python/ and tcl/
areas, and placed them in examples/ instead, for consistency.
Added "selmap.tcl" to illustrate how to turn select into a view.
Added a basic Lua binding (incomplete, but it's a start) in lua/.
2001-10-18 Fixed recent hash bug, and add to ordered
The recent "fix" to deal with hash misses introduced a huge bug,
causing the mapping to be recalculated on each insertion.
Adding to an ordered view did not always work, because the code
was based on SetAtGrow, which is not suitable for an ordered
view in which the row position is determined implicitly. Fixed
by changing c4_View::Add to use c4_View::InsertAt instead.
2001-10-14 MK 2.4.1 Custom-extended TclKit, and threading
Minor kitInit.c change allows wrapping apps as a "custom-extended"
version of TclKit. Enable threaded Tcl build on Unix.
This release consolidates the most recent fixes and code tweaks.
2001-09-27 Fix temp storage open in Mk4tcl
A recent change made it impossible to open temporary storages
from Tcl ("mk::file open db") - <blush> - now fixed again.
2001-09-19 Bug fixes
Fixed a problem during commit, when memo's are modified, causing
them to be stored inline again. This caused a late reference to
mapped memory - leading to intermittent crashes on commit.
Changes/fixes in mk4tcl.cpp, to prevent a problem when a datafile
is re-opened again under the same name later on. Old references
could in some cases end up stale - leading to crashes much later.
2001-09-05 Bug fixes
Hashing bug fixed: failed to terminate when looking for a missing
key after a hash collision. The fill count was not being tracked
properly to enforce that there is always at least one unused slot.
Fixed bug when setting a string from a higher row: the data gets
trashed, because too little copying was done while creating a gap.
This bug may have led to some other cases of "damaged" datafiles.
Solved by copying input data in c4_FormatB::SetOne().
Fixed long-standing bug with commit-after-load, by now doing a full
view/subview copy. This is inefficient, but it avoids all sorts of
mapping/strategy problems. This also fixes test s33 (at last!).
Added regression tests b27, c21, m01, and s36 to check above fixes.
2001-06-29 MK 2.4.0 More changes to the Mk4py interface
- allow setting a row to a value if the row has a single property
- there is an unexplained crash when setting slices with wrong type
2001-06-22 Changes to the Mk4py interface
Modifications and fixes gratefully accepted from John Barnard:
- c4_LongProp support ('L' datatype)
- row.__attrs__ returns the list of all properties
- row.__view__ returns the container view of the row
- row.__index__ returns current position in view
- view.setsize(n) added, extends/truncates number of rows
- generalized makerow to allow any sequence, not just lists
Changed PyRowRef to inc/dec the reference it has to the underlying
view. Should prevent dangling pointer problems, such as deleting a
storage while rows are still in use. This adds a little overhead.
Fixed a PyErr_Clear issue when accessing non-existent properties.
2001-06-12 Close DB filedesc on exec
Added an fcntl call to fileio.cpp, so that on Unix database file
decriptors are closed on exec (relevant when doing "exec ... &").
2001-05-30 Fixed mem-leak in Mk4tcl
A long-standing bug, in TclSelector::ExactKeyProps.
2001-05-28 Security fix in TclKit
See end of the tcl/kit/README file for deatils.
2001-03-30 Fixed long-standing commit bug
There was an intermittent bug in c4_Persist::Commit,
when properties were "restructured away" (dropped).
The bug was hard to track down, because it depended
on what address ranges the O/S assigned to mem-maps.
Might also fix other spurious commit/exit crashes.
2001-03-29 MK 2.3.4 The "last" release candidate
Now checked into its *new* CVS home at equi4.com.
Mailings list(s) have also been moved to this site.
2001-03-28 Fix Win build, broken on Mar 27
Dropped kBufMax from mk4.h, it caused compiler errors
in MSVC6 - switched to "sizeof" in a couple of places.
This error was introduced by the double-fix of 3/27.
2001-03-28 Allow builds of TclKit with Sun CC
Integrated a few changes provided by D.J. Hagberg.
Note: the M-solaris.sh and M-dyn.sh scripts need to
be manually edited when choosing between CC and gcc.
2001-03-27 Double-alignment bug on Solaris
Two changes (c4_Bytes in mk4.h and src/column.h) to
fix an alignment problem for 8-byte doubles on Solaris.
This caused tests b17, b23, b24, s22, and s28 to fail.
2001-03-26 Fixed cross-platform commit bug
There was a nasty bug in the 2.3.x code, which wrote
incorrect field sizes when committing to a datafile
with a different byte order (i.e. created on a machine
using different endian-ness from the one doing commit).
2001-02-14 Removed file events from TclKit
Changed kit/rechan.cpp to not generate file events.
This avoids a bug in TclKit whereby an open file can
generate a continuous stream of file events as long
as the file is open - the console will seem to be
frozen, though "close $file" does work and fixes it.
2000-12-13 Added missing c4_LongRef export
Added a line in mk4dll.h to resolve references to
the new c4_LongProp/c4_LongRef datatype on Windows.
2000-12-04 Fixed conversion bug
There was a bug in c4_FormatV::OldDefine, causing MK
to crash when trying to convert an old-format file
with empty subviews in it. Bug introduced on 14 Nov.
2000-12-02 Fixes in TclKit code
Fixed a Tcl-level bug causing memory leaks for all
compressed files stored with MK opened for reading.
Disabled event sources (mk4tcl.cpp and rechan.cpp)
to avoid a GUI freeze-up while a fake file is open.
2000-11-16 Simplified c4_Storage
Made some changes so that a c4_Storage no longer has
a separate c4_Persist* copy. As a result, a storage
can now be reconstructed from any root-level view.
This generalizes views, and prepares for a merge.
2000-11-14 Fixed mem leak in conversion code
The conversion code from pre 2.3 files had a memory
leak in c4_FormatV::OldDefine, causing f06 to leak,
as well as several subsequent erroneous leak reports.
Changed a few "new" to "d4_new" calls along the way.
Remove FlipBytes members, they are no longer needed.
2000-11-08 TclKit now in the distribution
The "TclKit" project has been merged into MetaKit.
Details and updated build info at "tcl/kit/README".
The SourceForge CVS repository is up to date again.
Mk4py: improved number conversion and error handling.
2000-11-03 MK 2.3.3 First final release candidate
Yes, there will probably be a second one as well...
2000-10-31 Improved error handling
More logic added to catch errors in flush and streams.
This affects the C++ core as well as Mk4py and Mk4tcl.
API of c4_Stream::Write changed to return success flag.
2000-10-30 Added autocommit call to Mk4tcl
To better support VFS, Mk4tcl now has a new command
"mk::file autocommit <db>" to force commit on close.
2000-10-26 Changes to compile with Borland C++
Minor tweaks to compile with Borland C++ Builder 4.0,
which does not support "long long". A new KitViewer
has been built (new code to replace c4_View::Describe).
2000-10-03 Fixes for Alpha Unix
Moved _item in column.h up to fix alignment sensitivity.
Config.h did not get SIZE_LONG right on Alpha Unix (0?).
2000-09-27 Contributed fixes and Python 2.0b2
Adjusted makefile to build with Python 2.0b2 release.
Source code tweaks to avoid DEC CXX 5.7 compiler errors.
Add no-inherit flags for Win32 to not leak file handles.
2000-08-27 Allow derived row deletes in Mk4py
Added code to PyView.cpp to handle deletes (and slice
deletes) in derived views, see "examples/derived.py".
2000-07-30 Major auto-convert 1.8.6 file bug
Bug in on-the-fly conversion of bytes properties ('B')
in pre-2.0 datafiles (i.e. 1.8.6 and earlier) resolved.
Unfortunately, this bug can not be 100% unambiguously
fixed. The new code *will* properly detect most cases,
and convert both 1.8.6 and 2.0 datafiles on the fly, but
especially for views with only a few rows and at most a
few bytes of data per row - the conversion *might* fail.
In this case, MK will have to be compiled with a define
to force it to either assume all old datafiles are 1.8.6
(-Dq4_OLD_IS_PRE_V2), or to assume that they are always
2.0 (-Dq4_OLD_IS_ALWAYS_V2). If you are currently using
MK 1.8.6, then you should *skip* the update to 2.01, and
consider updating to 2.3.x. This way you never have any
2.0 files around, and can force all your code to handle
1.8.6 files properly (by using "-Dq4_OLD_IS_PRE_V2").
See src/format.cpp, c4_FormatB::OldDefine for details.
This bug *only* applies to bytes properties in pre-2.0
data files. Conversion of 2.0x files is unaffected.
2000-07-25 Fixed new self-referential views
The new recursive / self-referential view definition
style has been fixed, e.g. "view[data:S,self[^]]" will
now let you store a tree of arbitrary depth, with each
'self' subview having data and self properties. See the
demo in "examples/selfref.py" to see how this all works.
2000-07-22 Fixed bug in double restructuring
Solved a very long-standing bug in restructuring, which
caused incorrect (non-zero, small) default values when a
c4_DoubleProp was added to a view which already had rows.
2000-07-18 Added remapwith and pair to Mk4py
Exposed C++'s c4_View::RemapWith as v1.remapwith(v2), and
c4_View::Pair as v1.pair(v2) in the Mk4py Python binding.
Added pair.py, remap.py, and wrap.py in "examples/" dir.
2000-07-12 Added metakit.py wrapper
Added "metakit.py" script to wrap Mk4py, including a new
metakit.dump() to pretty-print views. More utility code
will be added over time. The preferred way to use MetaKit
from Python is now "import metakit".
2000-07-06 Conversion fix, warning cleanup
Fixed on-the fly conversion of old datafiles. The free
space was not managed properly - changed to never touch
any data inside the file during conversion.
Some source code change to get the compile through gcc
flags "-fguiding-decls -Wall -pedantic -Wno-unused".
The only remaining complaint is about using "long long".
2000-07-04 MkSQL subtree, "indexed" mapped viewer
Added the sql and mksql subtrees to the distribution, with
Gordon McMillan's MkSQL engine, written in Python. The
"isql.py" script is a simple interactive shell around it.
Started work on a new viewer which maintains a persistent
index (as a one-int-prop permutation), see src/remap.cpp.
2000-07-03 Mk4tcl fixes
Fixed view rename problem and "delete end" (Matt Newman).
Adjusted the tests in tcl/test/mk5object.tcl accordingly.
2000-06-30 Tequila fixes
Close fix and failure handler (Steve Landers).
2000-06-29 MK 2.3.2 First beta release
The new release is 99% feature-complete. What remains is
to further document C++/Python/Tcl use and to fix bugs.
Python sample code in "python/aside.py" and "python/find.py".
Tcl samples in "tcl/test/mk5object.tcl" and "tcl/mapped.tcl".
2000-06-28 Hash/blocked/ordered: changes and fixes
Changed hash insertion to insert at specified position.
This makes it possible to use hashes "under" ordered views.
For best performance, insert rows at end of hash views.
2000-06-26 Documentation, example, Mk4tcl OO fixes
Moved C++ member documentation out of "mk4.h" header.
Added examples/ directory, with a find.py timing example.
Fixed bugs in new Mk4tcl: "$vw find" and "$vw delete end".
Added tests for new Mk4tcl OO interface: ":mk5object.test".
2000-06-16 Improved modifiable custom viewers
The Pair and Slice viewers now support set/insert/remove,
while RemapWith/Concat/Rename support setting values.
2000-06-15 Many changes to the Tcl code, hashing
Contributed by Matt Newman, it adds support for most custom
viewers, including the new hash etc. Added a fast find.
Caveat: most old custom viewers are still not modifiable.
Hash calculation improved, far less collisions than before.
Blocked viewer seems to work. Ordered on top is sub-optimal.
2000-06-12 GetUpperLimit, Blocked, Ordered, mk4too
Removed c4_View::GetUpperLimit (it's equivalent to GetSize-1
and was not being used anywhere).
Start implementing c4_BlockedViewer, a simple balanced/blocked
nested data structure. Also started on a c4_OrderedViewer,
which keeps the underlying view sorted during changes. These
two can be combined to implement an efficient 2-level btree.
Adopted code by Matt Newman for oo-cmd's for Mk4tcl views.
First trials work, started to extend with new custom viewers.
2000-06-09 Change case of a few Mk4py members
Changed all top-level members in the Python interface to lower
case: storage, property, view, wrap (will break existing code).
Fix bounds check in Mk4tcl.cpp for commit/rollback (new code).
Whoops, forgot to add new src/remap.{h,cpp} to the cvs tree.
2000-06-08 Implemented hash lookup
Added a new virtual c4_Sequence::RestrictSearch, which lets a
view take over searching (used by c4_View::Find). The result
is that the new hash viewer gives a huge speedup for finds.
Find requests which require linear scanning are unaffected.
2000-06-07 Documentation extraction based on Doxygen
The automatically generated output from Doxygen is working out
well and looking pretty, added "src/doxy.h" with more comments.
2000-06-05 Started hash and btree custom viewers
The hash implementation is nearly done, also usable from Python.
Btrees are being implemented as fixed 2-level for now.
2000-06-01 Fixes
Fixed crash when opening missing file r/o new in 2.3.1 alpha.
Fixed incorrect on-the-fly-conversion of 2.0 format subviews.
Added "storage.aside(storage)" to the Python interface.
2000-05-30 Fixed commit-aside
The new commit-aside code was botched by recent changes. Fixed
SetAside to pick up new root seq, changed by implicit rollback.
Note that a commit-aside is not finished until you *also* commit
the secondary file containing all newly generated changes.
Fixed bug in c4_BytesRef::Access, introduced in 2.3.1 alpha.
2000-05-29 Added new 64-bit long datatype
Added support for 64-bit longs (type 'L'), and c4_LongProp, etc.
This type is not autosizing, it always uses 8 bytes per entry.
Uses "long long" or "__int64", else defines struct with 2 longs.
This is not yet correct for platforms which have no 64b ints.
No regression tests or Python/Tcl interfaces yet.
2000-05-28 Better file mark scanning
Added c4_Strategy::EndOfData, to determine the logical end of a
MetaKit datafile. This call can be used to check whether a file
contains any data, and whether a commit-extend has been performed.
Old-style scripted documents (with preamble) can now be opened.
Changed strategy class, DataSeek has been merged with read/write.
Removed c4_LoadContext, LoadIt member moved to c4_Persist.
2000-05-27 Tweaked configuration define's
Make the release build the default (no assertions, use inlines).
Enable booleans for gnuc by default (it's pretty standard by now).
Added extra include path to better find Python's includes.
2000-05-26 Fixed Tcl dependency
Changed configure script to no longer look for Tcl if the
"--with-tcl=..." parameter is not specified.
2000-05-25 MK 2.3.1 First alpha release
Officially, this is "MetaKit 2.3.1 alpha" (ignore "2.3.0" in mk4.h).
All alpha's are 2.3.1 (beta's will be 2.3.2, finals start at 2.3.5).
Builds on Linux/Mac/Win appear ok - as do Mk4py, Mk4tcl, and TclKit.
2000-05-06 Massive changes to the core
To summarize the main issues: management info is now stored in such
a way that it need not be read in right away - file open is now
instant. The S(tring) datatype is now stored as B, making it far
more scalable (API/use is unchanged). Storage objects now derived
from views, both can be initialized from a stream (data will be kept
in a buffer, beware of potentially large memory use).
Several file format changes are "for future expansion".
2000-05-05 Fixed builds without Tcl
In 2.0.1, the make would fail if there was no Tcl to build with, or
not an appropriate release. Changed Makefile to report and skip Tcl
builds in that case.
2000-04-06 Fixed a nasty restructure/mmap bug
When a property is deleted by a restructure, then committed, then
later committed again, a problem can cause MK to crash. It has only
been detected in debug builds, but the problem turns out to be a
fundamental one (only happens with memory-mapped files, if the file
is resized). Fix in next rel (c4_HandlerSeq::DetachFromStorage).
2000-04-02 Memo properties are no longer needed
The M datatype is gone from the public API (and now illegal).
Everything binary should now be stored in B(ytes) properties, which
then adaptively decide which internal format to use, based on a
simple heuristic (which will be refined later). Existing datafiles
will automatically convert from M to B. The partial Access and
Modify calls now also work on B items.
2000-03-30 Minor change in c4_Strategy
Dropped the _keepAfterCommit flag in c4_Strategy, it probably has
never been used and it interferes with new features.
2000-03-27 Change in API for creating storages
It is no longer possible to create a storage and define its
structure with a single call. Instead, open a storage in r/w mode
(i.e. "1") and then call the (now public) SetStructure member to
define the structure of all views. This change is necessary to
prepare for the upcoming "commit-aside" logic.
2000-03-23 File format changes (in progress)
The new file format has an incompatible header, so old code will not
recognize new datafiles. Major changes are: added a file tail
marker, the serialized format is now a very good way to compress
datafiles, since it can be efficiently opened in on-demand/mmap'ed
mode. The new format supports several planned features. Code to
convert existing files on-the-fly will be added before this change
is released.
2000-03-19 Added c4_Strategy::FileSize
The Strategy::FileSize call is used for a file format change.
2000-03-18 Added c4_View::Locate
Locate returns the number of matching rows, and optionally the
position of the first one, using binary search. Like the
c4_View::Search function, it requires the view to be sorted.
2000-03-17 MK 2.01 Maintenance release, it's solid
Updated MK version number to 2.01, this maintenance release
represents a very stable version.
Small change to b07 test to avoid evaluation order problems.
Added unix/metakit.spec file for RPM, thanks to Sean Summers.
2000-03-16 Drop Store, fix deep copy, drop segments
c4_Storage::Store never worked properly under all conditions. It's
been deprecated for some time and has now been removed. Made a
handful of changes to test- and demo code to drop it.
Duplicating a view with deep copy never worked, because it used the
buggy Store call as well. Changed to use recursion.
Dropped support for segmented tree-walk storage, which hasn't been
used since 1.5 (use a commit with 2.0 to convert files). This is
necessary to prepare for some file format changes.
2000-03-15 Modifiable custom viewers, other tweaks
A start has been made with making custom viewers updatable. The new
methods are Set, InsertAt, RemoveAt, and Move, but the number of
viewers which implement this is still limited. Mk4py has been
adjusted to allow "set" on wrapped views.
Removed c4_Strategy::DataLoad, it was only used in one place. Small
optimization of the 2 calls to c4_Streamer::NextByte. Get rid of /
disallow read calls on memory mapped files.
2000-03-14 Makefile tweaks, non-commits smarter
Changed from --enable-tcl to --with-tcl=DIR, because the old
approach only worked with Tcl installed in a standard place.
Commits of a R/O file now fail. Also, if no changes have been made,
a commit will no longer write anything to file.
2000-03-13 Several new commands added to Mk4py
Several changes were submitted by Gordon McMillan, which add better
support for his upcoming SQL engine.
2000-03-12 Allow embedding MK datafile at end of EXE
Mk4tcl was changed to look for an optional trailer for quick access
to the start offset. This makes it possible to append datafiles to
executables, even if they are larger than 4 Kb.
2000-02-29 Fixed rare bug with lots of memo fields
There was a bug in free space management (persist.cpp), which can
only occur when exactly 7500 free space gaps are present, and a
commit crosses the threshold. There was also a small mistake in
that same code causing a bit of free space waste.
2000-02-24 Added proxy support to Tequila
Tequila can now be used as basic client/server setup for Tcl
scripts. See tcl/tequila/README for details and an example.
2000-02-04 Fixed mk::views (Mk4tcl)
The mk::views command failed to list the first view in the file
(this bug was introduced by changes in MK 1.99).
2000-01-02 Adjusted y2k
Copyright and license dates adjusted.
1999-12-26 More Mk4py changes
Added sortrev, and fixed "select(low,high)". Docs updated.
1999-12-23 New view operators in Mk4py
Added rename, project, groupby, and counts operators to Mk4py.
These were already part of the C++ core.
1999-12-22 Avoid GetId inline warning
Reordered GetId in "mk4.inl" to avoid (harmless) inline warning.
1999-12-21 Checked-in CatFish and KitViewer sources
Added win/catfish and win/kitviewer areas. CatFish was built with
MSVC 1.52, so the win/msvc152 area has also been added.
KitViewer requires Borland C++ Builder 4.0 to build (using VCL), it
has been adjusted to now also recognize scripted documents.
1999-12-20 Bug fix in set-after-get situations
A bug has surfaced when setting string/byte/memo values which span a
4 Kb block boundary. The bug can only happen if data is first
fetched and subsequently changed. The affected code is in
src/format.cpp (3x). Added Tcl test 5.5 to catch this.
1999-12-19 Mac tweaks
Changes to make the Mac versions build from the CVS repository. The
Mac can also cross-compile Windows libraries using MWCW 5.
1999-12-17 Add the Tequila example
Added the Tequila global Tcl array data server, see tcl/tequila/.
1999-12-15 MK 2.0 Official Open Source release
Removed a bad assertion from FormatX::Compare.
Several new services set up on the excellent SourceForge.com site.
1999-12-14 Documentation added
The C++ API documentation has been added to the distribution, as
well as a document describing the file format details of MetaKit.
1999-12-13 Bug fix affecting c4_View::Description
There was a problem with c4_ViewScanner::Describe, due to a change
from c4_String to (const char*). Now c4_View::Store works again.
1999-12-12 MK 1.99 New release, as open source software
The major change is that MetaKit has been released as open source
software, based on the liberal X/MIT-style license. Commercial
support remains unchanged for all recent commercial customers, and
for those who purchase the Enterprise License. The Universal Source
license has been terminated, because full source code is now freely
downloadable by anyone from the website.
Sources and documentation files have been adjusted accordingly.
1999-12-08 MK 1.9h Bool support for gcc/egcs, minor fix
Clear _field after delete in c4_HandlerSeq::DefineRoot. This
triggered an assertion on Linux, when compiled in debug mode.
Added pre-processor logic to detect whether gcc supports bools.
Removed all indentation from #define's, #ifdef's, etc. This was
done after a report that some compilers can get confused by this.
1999-12-06 Derived view row copy fix
There was a problem when using SetAt with derived views as source,
due to a remapping problem. Fixed viewx.cpp, added new test b25.
1999-11-25 MK 1.9g Makefile changes, thread-safe Mk4tcl
Renamed options to --enable-python and --enable-tcl, both now off by
default, since most people probably don't want to enable both.
The new "-shared" changes to make Mk4tcl thread-safe have been
folded into the main source code.
1999-11-22 Channel improvements Mk4tcl
There was a close conflict in mk::channel, also several changes to
improve mk::channel fileevent handling.
1999-11-19 Bug fix in Mk4tcl
There was an array overrun when mk::get was called without fields.
Added code to avoid this.
1999-11-11 Mk4tcl exit handling
Simplified Mk4tcl exit handling, fixes "interp delete" crash. Added
new mk5fixed.4 test to catch this case.
1999-11-10 Mk4tcl shared and multi-threaded access
Made a first experimental version of Mk4tcl (1.2.1, not announced)
which allows sharing a database between interpreters and threads.
1999-11-09 STL, MkWrap, compare caching
Tweaked the makefile to support STL builds (also adjusted README).
Fixed bug in MkWrap, calling storage.description() without args.
Yet more fixes in comparisons, this is all one problem, caused by
changes in caching for ints, floats, and doubles. Added B24 test.
These (last?) problems occured in custom / compound views.
1999-11-08 MK 1.9f Fixed sort comparisons
There was a cache problem with comparisons of int / float / double
sorts. Fixed, also added new B23 regression test to check for it.
1999-11-07 Little nasty details
Tweaked some make/project files. All regress tests and Tcl tests
now reported to really work on Solaris, Linux, Windows, and Mac.
Regression tests required more memory on Mac to get past L03 case.
1999-11-06 MK 1.9e Big oops: Mk4tcl and MkWrap were broken!
Fixed a c4_Strategy / c4_FileStrategy mixup in Mk4tcl and MkWrap.
1999-11-05 Simplify c4_Storage
Moved state out of c4_Storage and into c4_Persist, to prepare for
multi-thread wrappers. Made a new, simpler design to achieve that.
1999-11-04 MK 1.9d Factor out stdio dependencies
Moved all stdio dependencies out of core into new "fileio.cpp" src.
The mk4.h header no longer includes <stdio.h>, added new "mk4io.h"
header with a c4_FileStrategy class, derived from c4_Strategy.
Also factored c4_Stream/c4_FileStream out of the c4_Strategy class.
This alters the API slightly, but makes it 100% portable/embeddable.
Added "tcl/iohan.tcl", a simple wrapper for generic storage access:
locally, on a FTP server, in a local MK datafile, or using a remote
Tequila server (see http://www.equi4.com/tclkit/tequila.html).
1999-11-03 Improved detach/restructure handling
Changed detach to drop all persistent formathandlers, but leave the
number of rows intact. It will be much faster to destroy columns
than to delete (and propagate) rows. The result is that a pointer
to a view of which the underlying storage object goes away will end
up with the same number of rows as before, but no properties at all.
Fixed a problem which would have occured when properties are being
"restructured away" and then committed. The solution is to check
for this and delete all such properties at commit time.
Moved Buffer() out of c4_HandlerSeq and c4_CustomSeq, and made the
new version in c4_Sequence allocate the c4_Bytes object lazily.
Faster, and decreases sequence object size (for lots of subviews).
Mk4tcl, mk::layout now returns the proper layout even if the views
are empty. Solved by adding extra arg to c4_Storage::Description,
to return structure of a single top-level view. Fixes "mk8basic.1",
and the returned string now has one bogus list layer stripped off.
MkWrap also adjusted with optional arg for storage.description().
1999-11-02 New Wrap code in MkWrap
MkWrap, added new Wrap(seq,props,byPos) member, a c4_CustomViewer
which wraps any Python sequence as MK view (for use in joins, etc).
1999-11-01 MK 1.9c Mk4tcl changes
Mk4tcl, several changes: added "-size" option to mk::get to return
the size of prop value without fetching it (see new basic.9 test).
Added "-globnc" for case-insensitive globbing (for regexp, this is
available through the new (?i) metasytnax of Tcl 8.2 (see basic.10).
1999-10-31 MK 1.9b Solved shared lib unload with Tcl 8.2
Changed property symbol table setup to avoid static initializers, to
work around a problem with shared library cleanup from Tcl 8.2.
Added new c4_Property::CleanupInternalData call to clean up 100%
(this code need not usually be called, only if memory is tracked).
This fixes the crash-on-exit bug in Mk4tcl (Linux and Solaris).
1999-10-29 Make support for MkWrap and Mk4tcl
Both MSVC and MWCW now also build Mk4tcl and MkWrap extensions. The
MWCW project compiles for Win and Mac *on* either Win or Mac.
Makefile extended to build Mk4tcl and MkWrap, added dist target.
Updated to latest Perceps 3.5 beta, started generating docs again.
1999-10-27 MK 1.9a New build / directory structure
Completely reworked the directory structure to simplify all builds.
Created new "builds/" area for all intermediate and output files.
New MSVC 6.0 project structure created in "win/msvc60/".
Moved Mk4tcl to the "tcl/" top-level directory, and MkWrap to the
"python/" dir. The MkWrap code has been removed from the project.
Removed c4_View::Match and the regular expression package, since it
can just as efficiently be done with a wrapper around MK, now that
string results no longer allocate a temporary copy.
Started writing a Tcl-based test suite for use with Mk4tcl.
MAJOR CHANGE SINCE 1.8.6
Merge handler.cpp and format.cpp classes to get rid of special-cased
in-memory version of handlers. This has major effects on how data
is kept for unattached views (they still exist, but no longer
special). The code is leaner and meaner, it passes all regression
tests.
ALSO LISTED IN THE RELEASE HISTORY
Added c4_MemoRef::Access and c4_Memoref::Modify for partial access
to memo fields. Avoids copying and allows inserts/deletes anywhere.
MkWrap and Mk4tcl have both been extended to allow using Memo fields
for simulated file IO (mk::channel for Tcl, MkMemoIO.py for Python).
Added c4_Reference::GetSize to determine the size of a value without
accessing it. For ints, returns negated bit width if 1/2/4 bits.
Added experimental c4_View::RelocateRows to move rows from one view
to another (both must be in same storage, with the same structure).
Moves do not involve any data copying w.r.t. subviews and memo's.
The old release history is at http://www.equi4.com/metakit/history.html
# vim: tw=72
|