The Wiki Prolog in the mind set of SQL
is for those who know SQL and want to understand how to do similar queries in Prolog.
Parts of SWI-Prolog of interest related to SQL
Data Structures
library(assoc): Association lists (test cases)
library(dicts): Dict utilities (Not sure if this one should be here or how to use it, including so it is not orphaned if needed) (Examples with docs)
dicts - structures with named arguments
library(lists): List Manipulation
library(nb_set): Non-backtrackable set (Not sure if this one should be here or how to use it, including so it is not orphaned if needed)
library(ordsets): Ordered set manipulation (test cases)
library(tables): XSB interface to tables - (test cases) (NB These are not the SQL tables you are looking for)
hashtable.pl – Hash tables (test cases)
rbtrees.pl – Red black trees (test cases)
trie - Tries (also called digital tree , radix tree or prefix tree maintain a mapping between a variant of a term (see =@=/2) and a value.
facts - Database
Data manipulation
library(aggregate): Aggregation operators on backtrackable predicates (test cases)
library(apply): Apply predicates on a list
library(yall): Lambda expressions - This is used to define higher-order predicates such as the maplist/2-5 family or foldl/4-7. (test cases)
solution_sequences.pl – Modify solution sequences (test cases)
Finding all Solutions to a Goal - Commonly used to convert Prolog facts to Prolog lists. (test cases)
Other
library(gensym): Generate unique identifiers
library(persistency): Provide persistent dynamic predicates
library(thread): High level thread primitives (test cases)
SWI-Prolog Unicode library - This library is a wrapper around the utf8proc library, providing information about Unicode code-points and performing operations (mappings) on Unicode atoms.
Tabled execution (SLG resolution)
Transactions - Transactions allow running a goal in isolation . The goals running inside the transaction‘see’ the database as it was when the transaction was started together with database changes done by the transaction goal.
Included for importing or exporting data
library(csv): Process CSV (Comma-Separated Values) data (test cases)
library(iostream): Utilities to deal with streams
SWI-Prolog ODBC Interface (test cases)
SWI-Prolog binding to libarchive - The library libarchive provides a portable way to access archive files as well as encoded (typically compressed) data.
Managing external tables for SWI-Prolog - External tables are files using a textual representation of records separated into fields.
SWI-Prolog SGML/XML parser
Google’s Protocol Buffers Library
SWI-Prolog RDF parser
SWI-Prolog Redis client - open source (BSD licensed), in-memory data structure store, used as a database, cache and message broker.
Packs - NB Use at your own risk
Other
library(cql/cql): CQL (Constraint Query Language) - A high level interface to SQL databases
db_facts - a term based interface to the ODBC and SQLite libraries.
docstore - Document-oriented database for Prolog
fld - Easy assess to term args when loading from ODBC or CSV.
fluents - Access all solutions of a goal without backtracking
hook_hybrid - Hook assert retract call of specific predicates
list_util - Predicates for working with lists
odf_sheet - Load and analyze ODF spreadsheets (.ods)
print_table - Formats and prints a table on the terminal screen
prolog_rdf - Prolog RDF Library
prosqlite - An SWI-Prolog interface to SQLite
rocksdb - SWI-Prolog interface to RocksDB
sparkle - Prolog-friendly interface to SPARQL endpoints
sparqlprog - Logic programming with SPARQL
sql_compiler - Prolog to SQL compiler
External data sources
pl_omdb - API interface to OMDB (Open Movie Database)
pubmed - Access pubmed publication records
wordnet - Access to WordNet database
bio_db - The served tables include data from
Other - Not part of the SWI-Prolog documentation
order_by/2 examples
group_by/4 examples
Note: This is not meant to be a comprehensive list, it is just the entries I found while doing a scan of the SWI-Prolog documentation.
Benchmarks
Database micro-benchmark
References
“Logic and Database Queries” by Moshe Y. Vardi , Ian Barland and Ben McMahan (ref) (Note: link is now dead but leaving here in case it becomes public again)
“Foundations of Databases” by Serge Abiteboul, Richard Hull and Victor Vianu (ref)
Related topics
Use setof/3 when goal not exported from module with existential (caret) operator (^)
How to check for unique “primary keys”
Unified key-value interface