This repository has been archived by the owner on May 21, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
apavlo/metalbase
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Note (2018-05-20): I was researching old DBMSs for dbdb.io when I came across the source code for MetalBase from 1994. I couldn't find it anywhere else so I downloaded a copy of it and am posting it here. I am *not* the author of this system. I do not know what the original license should be for this code. -- Andy Pavlo pavlo@cs.cmu.edu ========================================= ___ _____ _____ | | | | | ) / / / |`'| _ -|- _ || | '_ _ .-. _ / / / | | ( ) | ( \ `| | ) ( \ `-. ( ) `---. / / | -'--`-- - `-' \/ ---' - - `-`- --'-- / <> / / ___________________________/\_____________________`.__/_____/____/_____________ Please read the dox / ' WHAT'S NEW IN THIS RELEASE: o SPEED MetalBase 5.0 destroys even 4.1a speed-wise; queries are the same speed, but adds/updates/deletes are always at least twice as fast, and often over three times as fast! Internal caching of index pointers just makes the whole world turn 'round better... o CONVERSION The utility MBCONV will convert 4.0 and 4.1a relations to 5.0 format. It is absolutely perfectly safe, but requires that you have enough free space to essentially make a copy of the relation. o LOCKING Previously, unless you compiled with -DUNIX_LOCKS (and had a *nix machine), bad things would happen if a program shut down while something was being changed. Now, since all indices are written at once (caching is so nice), chances of corruption are much smaller; and if a process does shut down with a system-placed lock in place, the next process will detect the condition and remove the lock, and decrement the number of users. A request queue has also been built in, so that processes will always get equal timeshares. o CREATE ON-THE-FLY You can now design and create a relation at run-time: rel = mb_new(); mb_addfield (rel, "Customer's last name", T_CHAR, 15); mb_addfield (rel, "Customer's first name", T_CHAR, 10); mb_addfield (rel, "Customer's number", T_SERIAL, 40); mb_addindex (rel, "ix_name", 1, "0,1"); mb_addindex (rel, "ix_number", 1, "2"); mb_create (rel, "/usr/joe/simple.rel", 0); Check out the code for BUILD and MBCONV; they both use it. o SIMPLE PHONE NUMBERS The schema type "phone" (C typedef == "mb_phone") has been added to 5.0 to make handling of phone numbers easier; phone types accept area codes (of course), and extensions up to x99999. The routines scn_phone() and fmt_phone() are included for quick handling of phone numbers, just as scn_ and fmt_ are provided for date and time! o ENCRYPTION Encryption is now working for everyone, even MS-DOS users. Be careful, though--I'm haphazard enough with encryption that, for example, a bad encryption key passed to VR under DOS will usually make you reboot your machine; under *nix it'll usually cause a seg violation. Now THAT's encryption. :) o DOCUMENTATION The documentation, though still not perfect, is much more up to date than it was for the 4.0 release. Included here are: dox/mbase.dox -- General documentation (the important stuff) dox/author.dox -- Information on where the hell I can be reached dox/build.dox -- Information on schema and their compiler, build dox/crypt.dox -- Information on MetalBase's encryption technique dox/flow.dox -- Pseudocode for MetalBase's AVL-tree algorithms dox/format.dox -- Character-by-character format for relations dox/lock.dox -- Information on MetalBase's locking algorithms dox/struct.dox -- Information on C structure interface dox/report.dox -- Incomplete documentation on the report writer dox/trouble.dox -- Troubleshooting ideas (not too many--sorry) o NO DAMNED DEBUGGING TRAILS If you got this release hoping I'd leave some debugging trails in the code again, BZZZZZT! Sorry, but I'm only allowed to fuck up like that once a year. I really, really feel stupid about that... HOW TO BUILD THE STUPID THING: o Go to the SRC directory. o If you're using *nix.............type "MAKE" If you're using Microsoft C......type "NMAKE -f makefile.dos" If you're using something else...pick either makefile and modify it. o It'll compile and run STRUCT (or STRUCT.EXE), which will tell you that you're either screwed, or what to change in the makefile to make the library appropriately for your compiler. If you're screwed, send me mail (see dox/author.dox). If you're not, do as it says. o Check the makefile to make sure it's going to put the headers, library and executables wherever you want it to. o Type "MAKE INSTALL" (or "NMAKE -f makefile.dos INSTALL" for Microsoft C). o It'll compile the library and executables, and put them where you said to. o If you have any relations from MetalBase 4.0 or MetalBase 4.1a, go to where they are and type "MBCONV relationname". It'll convert them to 5.0 (and hopefully the final) format and tell you it's done (it's really quick, but IRREVERSABLE). WHAT TOYS YOU GET: o BLAST.EXE - Removes locks accidentally left around on a relation; sets the internal number-of-users-on-this-relation to zero. o BUILD.EXE - Compiles relations from schema files; erases all records in a relation. o FORM.EXE - Builds header files from data-entry templates; the DE interface is really, really easy to program. It's not perfect, but it's nice. o MBCONV.EXE - Converts pre-5.0 relations to 5.0 format. Works great! o REPORT.EXE - Generates reports from template files, interpereted at run-time. o VR.EXE - View Relation--one of my favorite toys. 4.0 users, NON-VI emulation is now the default; it's much, MUCH easier to add and change records. The basics of the new DE keys are: CTRL-A, CTRL-return - Accept a transaction CTRL-Q, CTRL-C - Abort a transaction CTRL-U, - Undo a change within a field Arrows, End, Home - As expected HOW TO PLAY WITH THE STUPID THING: I've included two programs with this; SAMPLE and BENCH. BENCH is just a benchmark utility (see sample/readme), but SAMPLE is meant to be example code, for hooking up the (suggested) data-entry interface, for adding/ deleting/changing records, etc. Go to the directory SAMPLE and pick-n-edit a makefile. Note that you don't need -DSTRUCT_ in these; that's just for building the library. But you WILL need -DNEED_USHORT if your compiler doesn't contain ushort, etc. ------------------------------------------------------------------------------- Richid -------------------------------------------------------------------------------
About
MetalBase Database Management System (Archived Copy)
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published