<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 TRANSITIONAL//EN">
<HTML>
<HEAD>
  <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=UTF-8">
  <META NAME="GENERATOR" CONTENT="GtkHTML/3.3.2">
</HEAD>
<BODY>
I think I've a identified a serious problem relating to the<BR>
the dependencies on various modules that I offer up<BR>
for you comment.<BR>
<BR>
I major goal of the multiple backend system is to allow<BR>
you to not need to install the software related to the system<BR>
you don't need.  If you want to use BerkeleyDB, you shouldn't have<BR>
to install CL-SQL.  If you want to use CL-SQL and a relational database,<BR>
you can't shouldn't have to install BerkeleyDB (which would subject<BR>
you to their license, in any case.)<BR>
<BR>
Unfortunately, the "with-transaction" macro, which exists in<BR>
cl-sql, BDB, and also Elephant, must be in place at compilation<BR>
time.<BR>
<BR>
I have written this macro to take a key argument, and, based on<BR>
the type of the passed-in store-controller, to resolve either to<BR>
the CL-SQL with-transaction macro, or the existing with-transaciton<BR>
macro for BDB.<BR>
<BR>
I don't know how to write this macro without having CL-SQL macro <BR>
loaded (which implies that you have it installed.)<BR>
<BR>
I am therefore in a bind:  <BR>
I can't right a generic with-transaction macro without loading CL-SQL,<BR>
and I can't make you install CL-SQL if you don't want to use it.<BR>
The macros cannot be treated as functions, (which could easily remain<BR>
undefined if they did not actually need to be executed), since the<BR>
"with-transaction" idea cannot possibly be written as a function.<BR>
<BR>
I can think of two solutions:<BR>
<BR>
1)  Create two asdf systems: one for with clsql, one without.  Then <BR>
it would not be possible or necessary to load "elephant" without<BR>
choosing a back-end (or a set of back-ends).<BR>
2)  Alternatively, the loading of the cl-sql module could reload the <BR>
files with macro in place.  This will technically work, but is hideous<BR>
in the sense that performing a <BR>
(asdf:operate 'asdf:load-op :ele-clsql)<BR>
would perform a reloading or a recompilation of more than half the project.<BR>
<BR>
Unless someone can provide me some better advice, I'm going to investigate <BR>
#1.<BR>
<BR>
I find all of these dependencies complicated, and macros tend to exacerbate<BR>
the problem.  Perhaps there is a much simpler way of dealing with this<BR>
that someone can suggest.<BR>
<BR>
<BR>
I must admit that I don't understand how 0.5.0 works, and why only now<BR>
Ian Eslick's code in the head brings this problem to light.<BR>
<BR>
<BR>
<TABLE CELLSPACING="0" CELLPADDING="0" WIDTH="100%">
<TR>
<TD>
----<BR>
Robert L. Read, PhD                                     read &T robertlread.net<BR>
Consider visiting Progressive Engineering:      http://robertlread.net/pe<BR>
In Austin: 912-8593                                        "Think globally, Act locally." -- RBF<BR>
<BR>
<BR>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>