Beagle SQL - Development in Progress
Authors: Robert Klein & Jean-Claude Magras
Server Usage Statistics
I've written an article for the February 98 issue of Linux Journal Magazine that provides an introduction to BeagleSQL.
Beagle has been mentioned in the the C/C++ User's Journal again in the Jan 1998.
Beagle has been mentioned in an article in the C/C++ User's Journal in the March 1997 issue on page 90.
To subscribe to the Beagle mailing list send a message to
[email protected] with the body
'SUBSCRIBE beagle'. The address for the list is [email protected]
Linux v2.0.27 - INTEL (RedHat Distribution)
Solaris 2.6 - Sparc
Currently Supported Platforms
SGI IRIX v5.3
Version 0.86a released. Features now include JAVA 1.1 support thru JDBC !
Authentication support has been added by using a new Protocol. Support
for encryption is also included in the new login protocol.
The default authentication is SHA-1 and no encryption.
Future work will include OIF format exchange utilities called dbload" and "odbdump".
The Java code can be found in the jdbc directory. Look at
testbeagle.java for more info on using ResultSet and ResultSetMetaData
As the email addresses above suggest, I have taken over most of the work on Beagle. Rob said something about family. Oh well...
Version 0.80a released. Features include system tables (sys_db, sys_user, sys_table, sys_field, sys_auth, sys_index), mild authentication, bug fixes. This release was a major rewrite of some areas. Make sure you check the documentaion at http://www.beaglesql.org/docs for installation instructions and other documentation
Beagle is going Object Relational. I just finished reading Won Kim's
paper "On Object-Oriented Database Technology". The direction I've
been taking this database is close to what he regards as the union of
OODBs and RDBs. The first step was the use of the RECIDs or 'oid' in OO
terms. I'm going to concentrate on the underlying code needed to
implement OO features of the extented SQL outlined in his paper. Here
are some of the features will be implemented:
complex data types. Any table that you create will also be treated as a datatype. For Example: CREATE TABLE emp (name char, dob char, salary integer, manager emp).This allows you to issue queries like: SELECT * from emp where emp.salary > emp.manager.salary returning all employees who make more than thier boss.
entensible data types. The oid (was RECID) data type will be a canned example and will be defined as three integers.
I'll be releasing the code for anyone to try out but be fore-warned,
data structures will change frequently in the next six months.
BTW: I've completed the following:
changed SYS_RECID data type to 'oid' to reflect the
object oritented usage of the field
createdb.sh and destorydb.sh scripts
use of system variables BG_PATH (beagle executables) and BG_DATA (where databases are stored)
Jean-Claude has added Integer support and is working on TIME and DATE.
There was also a problem with connecting from a remote client that has
been taken care of. I had the source and destination in a memcpy
As it's been very difficult to handle the entire development effort on
my own I'd like to put together a small development team of 4-5 reliable
and experienced programmers to help me get Beagle up to par with
commercial database packages. If you're interested, let me know.
While working on the UPDATE statement I found a very nasty bug in the join
operation. Although the join still worked, it caused a performance and
storage problem that would get exponentially worse the greater the number
of records in the table. The posted source has the partially completed
UPDATE code if you want to take a look at it. It's disabled in the backend
I'm currently working on the UPDATE statement. Before I could start it
I needed to add a system field to all tables called SYS_RECID. This is the
system assigned unquie id for each record in a table. Note that it is
only unique per table. I doing this I've also allowed for an integer datatype.
There are still a few kinks to work out before I release the code. These
include adding index support for non character datatypes and modifying the
expression parser to correctly evaluate numeric comparisions. I'll be done
shortly. IMPORTANT: This new version will be incompatible with data files
from previous versions. I've tried to keep this from happening but sometimes
you just have to bite the bullet. I should add a database dump feaure to isql to make conversion easier if it ever happens again.
To perform a SELECT that includes the SYS_RECID field you need to explicitly
include it in the field list of the SELECT. Wildcards will not return system
fields. For example:
SELECT SYS_RECID, * FROM phonebook
Solaris problem fixed & tested on Solaris 2.6. Also updated the README.
Thanks to Michael Kim of Hard Drive Recovery Group
in Irvine, California for giving me an account on their Dell PowerEdge
to do my debugging. Also thanks to White Vector and Jacques Laporte
Still having problems with Solaris 2.5.1 but HP/UX seems OK. Today's
release fixes some bugs in the Perl client code and API. The new Perl
client (still called demo.pl) contains all the functionality of the isql
Fixed some not so portable code that was causing the backend to crash on
HP/UX and Solaris.
Perl advocates rejoice! I've added a small Perl API. It's much simlper
than the C API. Several of
the C functions necessary to build a client aren't needed by Perl. The
BSQLQueryDB subroutine returns a list to the client. Normally the list
has a single value, a status code. When a SELECT is set though, the list
contains a bunch of stuff. The status code, # of tuples, # fields, field
info, and all the values that matched your select. See the perl API module
bsql.pm for the gory details. The Perl demo client is called oddly enough
I've posted a new version of Beagle complete with Memory Leak
fixes as well as a bunch of other bug fixes. The backend was
extremely "sensitive" to SQL syntax errors. Often times it just
crashed when a bad SQL statement was processed. Much of this
has been fixed. I've also replaced the demo client with an interactive
monitor program called 'isql'. The SQL statements in the old demo client
have been placed in a script called demo.sql which you can execute from
isql. See the README for more details.
You'll also notice a program called malloc_stats.c. It's just a little
utility I wrote to analyze the beagled.log file to help track down
memory leaks. Please note that there is a TON of info written to
this log file (2 Meg from the demo.sql script alone!). Before you
do any real work, turn logging off before you compile the backend.
In the furture I'll add the ability to toggle logging on the fly.
Here are some great references I'm using for the project. I highly
recommend all of them:
On Object-Oriented Database Technology
Won Kim, Ph.D., UniSQL, Inc.
Practical Algorithms for Programmers
Andrew Binstock and John Rex, Addison Wesley.
Logical Introduction to Databases
John Grant, Hardcourt Brace Jovanovich, Publishers.
Internetworking With TCP/IP Volume III, Client-Server Programming And Applications
Douglas E. Comer & David L. Stevens, Prentice Hall
Database Systems Laboratory
- Dept. of C.S., University of Massachusetts, Amherst - A great store of
database development resources