Skip to content

Latest commit

 

History

History
144 lines (113 loc) · 5.34 KB

INSTALL.md

File metadata and controls

144 lines (113 loc) · 5.34 KB

Installation

Get the repository:

git clone https://github.com/datagraph/cl-ndbapi

Configure ASDF to find the systems specified in ndbapi.asd and ndbapi-examples.asd. I still do that by adding symlinks to them from my systems directory, that is, what is apparently nowadays called the old style:

cd systems
ln -s ../cl-ndbapi/ndbapi.asd
ln -s ../cl-ndbapi/ndbapi-examples.asd
cd ..

You might want to do it differently.

Add a symlink to the libndbclient.so library that you want to use:

cd cl-ndbapi
ln -s /mnt/ssd/home/rondb/local/rondb/lib/libndbclient.so.6.1.0

Alternatively, you can also create a link named libndbclient.so.

ln -s /mnt/ssd/home/rondb/local/rondb/lib/libndbclient.so.6.1.0 libndbclient.so

Create and link the C wrapping library ndbapi_wrap.so:

make

You might need to update the two scripts compile-ndbapi-wrap-cxx.sh and link-ndbapi-wrap-cxx.sh which are referenced by the Makefile and that do the actual work, so that g++ finds the include files and libraries of your RonDB installation.

Note: You might need to add this patch to your CFFI so that the boolean flags :low-inclusive and :high-inclusive work properly. You can also load the lisp version of that patch in file 0001-explicitly-reset-all-foreign-boolean-type-slots.lisp.

That's all.

Testing the library

As a first test, try out the ndbapi-simple-scan example.

To do so first, create a database and table and load some example data:

mysql --socket=/path/to/mysqld.sock --local-infile
mysql> create database mgr;
Query OK, 1 row affected (0.13 sec)
mysql> use mgr;
Database changed
mysql>    create table test
    ->           (s int unsigned not null, p int unsigned not null,
    ->            o int unsigned not null, g int unsigned not null,
    ->            index gspo (g,s,p,o), index gpos (g,p,o,s), index gosp (g,o,s,p),
    ->            index spog (s,p,o,g), index posg (p,o,s,g), index ospg (o,s,p,g));
Query OK, 0 rows affected (0.34 sec)
mysql> load data infile '/path/to/data.tsv' into table test;
Query OK, 10 rows affected (0.01 sec)
Records: 10  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from test;
+------+------+---------+----------+
| s    | p    | o       | g        |
+------+------+---------+----------+
| 1105 | 1105 | 2108201 |  2108202 |
| 1105 | 1106 |    1108 |     1109 |
| 1105 | 1106 |    1137 |     1119 |
| 1105 | 1106 | 2108181 |   662743 |
| 1105 | 1105 | 1803125 | 51483456 |
| 1105 | 1106 | 2108179 | 51483457 |
| 1105 | 1106 |  603481 |  2108178 |
| 1105 | 1105 |     638 |     1106 |
| 1105 | 1106 |       1 |     1107 |
| 1105 | 1106 |  106314 |   662743 |
+------+------+---------+----------+
10 rows in set (0.00 sec)

Now start your Lisp and run the ndbapi-simple-scan example:

sbcl
* (require :ndbapi-examples)
* ;; load the CFFI patch if it is not included in your CFFI already:
* ;; (load "cffi-patch/0001-explicitly-reset-all-foreign-boolean-type-slots.lisp")
* (ndb.simple-scan:simple-scan :connection-string "nl3:1186,nl3:1187"
                               :database-name "mgr"
                               :table-name "test"
                               :index-name "gspo"
                               :low (list 1106 1105 1105 638) :low-inclusive t
                               :high (list 1109 1105 1106 1108) :high-inclusive t)
table: test
columns:        SUBJECT,    PREDICATE,       OBJECT,        GRAPH
row     0:         1105,         1105,          638,         1106
row     1:         1105,         1106,            1,         1107
row     2:         1105,         1106,         1108,         1109
NIL
* (quit)

Observe that the call correctly retrieved the columns observing the given low and high bounds, which are based on the order GSPO, that is, Graph, Subject, Predicate, Object, and that the result is also ordered accordingly.

For comparison, you can also compile, link and run the C++ version of the example. All done by just executing the respective Makefile:

cd examples/ndbapi_simple_scan_in_cpp
make

which should output:

./compile-cxx.sh
./link-cxx.sh
./run-cxx.sh
Start execute
Done executed
Start printing
1105    1105    638     1106
1105    1106    1       1107
1105    1106    1108    1109
Done printing

Enjoy.

License

Copyright (c) 2022 Max-Gerd Retzlaff [email protected], Datagraph GmbH.
Distributed under the terms of the GNU General Public License, Version 2.0,
see file LICENSE in the top level directory of this repository.