I would like to announce the production release of version 2.3 of 
KirbyBase, a small, pure-Ruby database management system that stores 
it's data in plain-text files.

You can download it here:

Windows:  http://www.netpromi.com/files/KirbyBase_Ruby_2.3.zip
Linux/Unix:  http://www.netpromi.com/files/KirbyBase_Ruby_2.3.tar.gz

Here's whats new since the 2nd beta:

* A lot of code cleanup and some bug fixes.

* The manual has been updated with the new features.  By the way, the 
manual really needs to be re-organized/re-written, something I'm a 
little too burnt out to do right now.  If anyone enjoys writing 
documentation ( :-) ) and would be interested in helping with this, 
please let me know.

* And, the most dramatic addition, the implementation of *The Hal Fulton 
Feature* (TM).  I have implemented the shortcut designation for a Lookup 
field that Hal has requested for some time.  Check out the example in 
the example/lookup_field_test directory or the manual to see what this is.

Here are the other new features rolled in from betas 1 and 2:

* New column type:  :YAML.  If you designate a column as a :YAML type, 
then you can store anything that YAML can handle in this field.  This 
opens up the possibility for now storing arrays and hashes in 
KirbyBase.  KirbyBase takes care of calling YAML.load() and #to_yaml for 
you, so you can just use the field as a normal native Ruby type.  One 
nice side effect of this is that you can even use :YAML fields in your 
#select queries.  Many thanks to Logan Capaldo for this idea!

* Two new methods:  #add_table_column and #drop_table_column.

* You can now define one-to-one relationships and one-to-many 
relationships between tables.  I hesitate to call KirbyBase 
"relational", because I know that the term, in its pure form, is 
supposed to refer to whether the dbms supports relational algebra, not 
relations between tables.  That being said, KirbyBase now supports the 
ability to link a field in one table to another table, so that when you 
perform a select, you automatically have available in that field a 
reference to either a single record (for one-to-one links) or multiple 
records (for one-to-many) links. 

* You can now define calculated fields in a table.  These are "virtual" 
fields that don't get populated with data until runtime.  For example, 
you can create a field called "total" and specify that it's value is 
"quantity * price".  During a #select, KirbyBase will, for each record, 
calculate the value of "total" by multiplying the "quantity" field by 
the "price" field.  Check out the example in the calculated_field_test 
directory.

* Two new fields types are available for table fields:  Memo and Blob.  
Check out the example in the memo_test directory.

* KirbyBase now makes available "crosstab" functionality in the result 
set of a #select.  I am probably not using the term "crosstab" 
correctly, but I am having a hard time finding the right word to use.  
Basically, you now have available all of the values for a particular 
column of the result set.  Probably the best way to see what this is is 
to take a look at the example in the crosstab_test directory.

* KirbyBase now has the ability to take advantage of indexes if you 
specify them when you create a table.  Both single and compound indexes 
are supported. 


I would like to thank all of the people who provided bug fixes, 
suggestions, and ideas for version 2.3. 

Enjoy!

Jamey Cribbs
jcribbs / twmi.rr.com



Confidentiality Notice: This email message, including any attachments, is for the sole use of the intended recipient(s) and may contain confidential and/or privileged information. If you are not the intended recipient(s), you are hereby notified that any dissemination, unauthorized review, use, disclosure or distribution of this email and any materials contained in any attachments is prohibited. If you receive this message in error, or are not the intended recipient(s), please immediately notify the sender by email and destroy all copies of the original message, including attachments.