<!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>
This requires a philosophical response.  In general, I think it will be way easier than<BR>
you image, once you have been pointed in the right direction.  Take my advice with <BR>
a grain of salt.<BR>
<BR>
First of all, ask yourself, what is the size of your dataset?  Can you fit it all into memory?<BR>
If so, you have the full power of lisp at your command in dealing with the querying.  You<BR>
will not have to write any macros to do this.  You might find the DCM package, in the "contrib"<BR>
directory, a useful package, although it does not address querying; it is more of a cache handling<BR>
issue.  (DCM has only been tested under SBCL, as far as I know.)<BR>
<BR>
Under SBCL, when it comes to sorting you have "sort" and "stable-sort"; I think these are build in.<BR>
I'll eat a candle if you don't find them to blazingly fast (although the predicates that you pass them<BR>
might take some time.)<BR>
<BR>
I think really the only good way to answer this question in a deeper way is to provide some<BR>
example code.  I do exactly what you are talking about in my application (<A HREF="http://konsenti.com">http://konsenti.com</A>),<BR>
(although I use DCM), so I ought to be able to produce an example program relatively quickly.<BR>
You'll have to figure out how to map the GUI into those requests yourself, however.<BR>
<BR>
I'll try to post an example by Monday.<BR>
<BR>
<BR>
<BR>
On Sun, 2006-11-12 at 10:28 -0500, Daniel Salama wrote:<BR>
<BLOCKQUOTE TYPE=CITE>
    <TT><FONT COLOR="#000000">Hi all,</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">Coming from a Rails/MySQL world, we are having some difficulty trying  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">to comprehend/model/implement querying the database using dynamically  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">generated criteria.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">For example, in the life we are trying to leave, we present the user  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">with advanced search screen, where they can select anywhere between 0  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">and 20 different search fields. When the user submits the screen, we  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">dynamically construct the WHERE SQL statement based on whatever  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">fields and information the user entered.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">Obviously, I could envision this being the easy part, however, any  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">pointers would really help here. Then we rely on the SQL-engine to  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">perform the proper computations in order to return to us the matching  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">resultset.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">In addition, the user is then able to dynamically sort the results to  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">their heart's desire. We simply dynamically generate the ORDER BY  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">clause as well.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">As a learning task, we are trying to migrate some of this  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">functionality to Elephant using BDB. After reading the HTML-ized  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">tutorial and looking at some of the tests in the package, we still  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">have a hard time understanding how to go about implementing something  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">like this. From previous posts, we can use a cursor to jump into a  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">subset of the data we need to get (e.g. based on some indexed or  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">secondary indexed value in the search criteria). However, after that,  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">I guess we would have to sequentially navigate thru the  results in  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">order to "manually" select each record based on all the other  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">possible search arguments. I suppose, in a way, this can be done  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">relatively painless by using macros (but we first would like to do  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">the manual expansion to learn how it would look like). Any ideas or  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">suggestions would certainly be appreciated here.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">Then we have the issue of the sorting. I suppose it falls into a  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">similar situation: once we get the matching resultset from the  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">previous step, we would have to perform some "efficient" sort  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">algorithm on the data set dynamically based on the user's sorting  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">desire. I also suppose we could create a macro for this as well.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">In a way, and after reading many posts out there, we are basically  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">wanting to bypass all the RDBMS machinery and working directly with  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">the data. After all, I guess many if not all of these RDBMS systems  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">are simply a SQL-domain language interface performing all these  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">computations and abstracting the direct access to the raw data, which  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">is probably even using BDB in the backend. So, I suppose we have to  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">learn to be able to roll-up our sleeves and deal with manipulating  </FONT></TT><BR>
    <TT><FONT COLOR="#000000">the data in a more direct way.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">Again, any ideas or suggestions here would be really appreciated.</FONT></TT><BR>
    <BR>
    <TT><FONT COLOR="#000000">Thanks,</FONT></TT><BR>
    <TT><FONT COLOR="#000000">Daniel</FONT></TT>
</BLOCKQUOTE>
</BODY>
</HTML>