This frontend translates a subset of SQL3 query expressions to datalog queries.

Query Expressions

You can specify a (possibly recursive) query specification. Currently accepted are expressions of the following form:


[ WITH [RECURSIVE]
Relationname [ ( Columnname [, ... ] ) ] AS ( Query Expression )
[, ... ]
] SELECT [ (Cor-)Relationname .] Columnname [, ... ]
FROM Relationname [ [AS] Correlationname] [, ... ]
[ WHERE [ (Cor-)Relationname .] Columnname = [ (Cor-)Relationname .] Columnname
[ AND [ (Cor-)Relationname .] Columnname = [ (Cor-)Relationname .] Columnname
[ AND ...] ] ;
] [ UNION
SELECT (etc. same as above) ]
[ UNION
... ]

Every Relation must be declared using

DATALOG SCHEMA Relationname(Columnname, ...), ... ;

Recursion

You can express recursion by using a relation declared in the WITH list in the corresponding Sub-Query-Expression. This is the way that was chosen by the ISO/ANSI committee.

Example

The classical List of Materials Query can be expressed in SQL3 in the following way:


DATALOG SCHEMA consists_of(major,minor);
WITH RECURSIVE listofmaterials(major,minor) AS (
SELECT c.major, c.minor FROM consists_of AS c
UNION
SELECT c1.major, c2.minor
FROM consists_of AS c1, listofmaterials AS c2
WHERE c1.minor = c2.major
)
SELECT major, minor FROM listofmaterials;

Usage

The specification of a SQL3 query in DLV consists of two separate files, one with extension .db and storing the extensional database (EDB) and another one with extension .sql storing the SQL3 query.

For instance, for the List of Materials example, the query shown above should be stored in a file named materials.sql while the relation consist_of should be stored in a file named materials.db.

The SQL3 front-end is invoked through the option -FS:

DLV -FS [DLV options] materials.db materials.sql