This is the AC library - a C interface to acedb
Authors: Mark Sienkiewicz, Jean Thierry-Mieg (2003)
--
There are two implementations here:
acclient is a client library. It is known to work with RPC servers
(e.g. gifacemblyserver) and AceTCP servers (tgifacemblyserver). It has
code to support Sanger Acedb 4.9, but that support is incomplete.
[3/2003]
acinside provides the same interface, but it runs inside the database
(either in tace or a server) and takes advantage of direct access to
database functions to improve performance. It is fully tested [11/2003]
If you limit yourself to using only AC calls, your code can run equally
correctly either inside or outside the database.
Note that you might expect acinside to always be significantly faster,
but in fact many applications use a pattern of transactions where the time
spent transmitting data between the client and server is dwarfed by the
time spent performing the actual query.
Compiling with AC
--
Your program should
#include <wac/ac.h>
wac/acctest.c contains test code that exercizes the library. It can also
serve as sample code for some of the features.
To compile your application:
in the AceDB makefile:
include $(LINK_ACC) in your dependencies
include $(LINK_ACC) in the list of object files to include
outside the AceDB makefile
get the value of LINK_ACC from wmake/truemake and link
with those object files
Compiling the actual library
--
You can compile the library by the command
make libaccl.a libacs.a
or, relying on dependencies, by compiling a program that uses it, e.g.
make accmd
The supported transport mechanisms are selected by defines in
wac/acclient_.h; you can add/remove transports as you wish. The
dependencies are correct for this library, so it is sufficient to
change the include file and re-compile.
Test code
--
acctest is the "ac client test" program.
acstest is the "ac autonamous test" program.
1) initialize the database:
pushd wac/testdb
sh init
popd
2) test the autonomous ac code type
bin*/acstest wac/testdb all | tee acstest.out
3) test the client ac code type
a) Start a server
bin*/saceserver wac/testdb -port 65432
b) run the client code
bin*/acctest s:localhost:65432:: all | tee acctest.out
4) verify the outputs, they may differ from the standard out put by dates and machine names
diff wac/testdb/acstest_correct_output acstest.out
diff wac/testdb/acctest_correct_output acctest.out
The last paramenter (here all) is a list of tests to run in order.
Test "all" performs a test of much of the library, and the expected output is available.
If you change the test program or library, you must update that file.
5) clean up
pushd wac/testdb ; sh ./clean_up ; popd
Files here
--
Common code
--
ac.h
common include file. clients only need this file
ac_.h
internals common to both library implementations. If you are
adding something, chances are that it does not really belong
here.
actable_.h
actable.c
AC_TABLE section of the code - used in both libraries
Client library
--
acclient_.h
acclient.c
the AC client code.
acclient_acetcp.c
// acclient_rpc.c removed, mieg may 17 2003
acclient_socket.c
Ace network protocol implementations. all of these files are
included in acclient.c, but each file is mostly ifdefed out
if it's protocol is not wanted
ace-conn-hacked.c
code for acclient_socket.c to talk to the socket server - copied
from Sanger's Ace-Conn and hacked extensively to work in our system.
acctest.c
a test program for testing the database client code. uses the
database in testdb
accmd.c
sends commands to the database using ac_command(). This is much
like aceclient, and will replace aceclient eventually.
Internal library
--
acinside_.h
acinside.c
the AC inside-the-database implementation
Documentation
--
README
this file
list
checklist of which features are present in each implementation
NOT CURRENT
show-c
description of the "show -C" format used by the client library
implementation
some notes on database commands that an alternate
implementation of the client library might use
testdb
scripts to initialize a test database. The database contains
exact data that acctest expects to find.