The SQL Frontend of DLV

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

gerald@pfeifer.com & wf@wfaber.com
Last modified 2005-08-18
validator.w3.org