DES 6.7 Released

[Apologies for multiple receptions]


Hoping and wishing the best in current circumstances, this
is a mail just for informing that the new release

Datalog Educational System version 6.7

Mirrored at: Datalog Educational System

And also its online interface has been made available at:

has been launched on September, 4th, 2021, and tested for

SICStus Prolog 4.4.1
SWI-Prolog 7.4.2

There have been many upgrades in the current version driven
by the need to include this system as part of another in
order to benefit from the SQL semantic error analyser.
First, a new string solver has been added to improve the
precision analysis in the lexicographic domain. Also, a
domain constraint has been included in the translation of
integer conditions. Several new semantic warnings for
selected SQL clauses have been added. Second, SQL have been
extended with messages, checks, improvements, naming
suggestions, and a bunch of new functions, with counterpart
Datalog predicates. Third, some commands have been added, in
particular for a TAPI connection to an external system to
get semantic analysis information. Also, a new command
allows for interactive processing of files, allowing the
user to interact with the system via input commands (useful
in particular for games). Finally, other commands have been
added, and several changes have been made.

A complete list of enhancements and fixed bugs is attached
to the end of this message.
Please, see for details.

Best regards.

Fernando Saenz Perez
Profesor Titular de Universidad / Associate Professor
Home Page: Fernando Sáenz Pérez Home Page Moved
Tel: + 34 913947642. Fax: + 34 913947547
Despacho / Office: 435 (4ª planta / 4th floor)
Dept. Ingenieria del Software e Inteligencia Artificial /
Department of Software Engineering and Artificial
Universidad Complutense de Madrid
Facultad de Informatica
C/Profesor Jose Garcia Santesmases, s/n
E - 28040 Madrid. Spain


Version 6.7 of DES (released on September, 4th, 2021)

  • Enhancements:
    o Added string solver for semantic analysis with
    disequality, inequality and domain constraints
    o Improved precision for tautological and inconsistent
    semantic warnings involving autocast
    o Added domain constraint to integer solver for semantic
    o Missing join condition, inconsistent condition, constant
    argument warnings for aggregates
    o Added SQL semantic warning for grouped columns in a
    HAVING clause without an aggregate (Error 18 in [BG06])
    o Added SQL semantic warning for repeated DISTINCT
    o Added SQL semantic warning for COUNT on a not-null
    constrained argument
    o Added semantic warning for OFFSET 0
    o Dropped semantic false positive for DISTINCT in IN
    subqueries, which leads to better compilations
    o Improved SQL semantic analysis precision for automatic
    type casting
    o An SQL constraint may receive a void name
    o Inform about possible column names when the requested
    column does not exist
    o An SQL constraint name can be optionally given when
    altering tables
    o Improved and more precise error messages for SQL
    grouping statements
    o Interval check in SQL BETWEEN
    o Reduced arguments in ORDER BY compilations
    o SQL TOP, OFFSET and LIMIT clauses and RA top operator
    can include expressions instead of just integers
    o SQL constants can be specified as 0-arity functions
    (with parentheses)
    o Simplified compilations for SQL MINUS DISTINCT and
    o Removed unneeded DISTINCT’s in SQL DIVISION translation
    o Simplification of true goals in top
    o Reworked help on built-ins, which becomes interactive
    o Added help on selection functions
    o Added exception for compilation failures
    o Added context information in stratum solving for verbose
    o Added informative message for trying to removing an
    unexisting constraint
    o Formatted exceptions on evaluation error
    o More flexible date formats
    o Reused temporary rule identifiers
    o Simplification of true goals in top
    o The /if command accepts a generic Datalog goal, instead
    of just a comparison condition. Thus, the condition (goal)
    may have to be enclosed between parentheses
    o The commands /save_state and /restore_state become

    o New functions and predicates. For each function below,
    there is a counterpart Datalog predicate with the same
    name prepended with $, and with an extra final argument as

    • add_months(X,Y) Add to the datetime X the number of
      months Y
    • datetime_add(X,Y) Return the datetime X increased by
      the number Y. If X is a date, Y represents days, and
      seconds otherwise. This function is equivalent to the
      overloaded X + Y
    • datetime_sub(X,Y) If Y is a number, return the
      datetime X decreased by the days Y. If X and Y are
      dates, return the number of days between them. If X and
      Y are either times or timestamps, return the number of
      seconds between them. This function is equivalent to the
      overloaded X - Y
    • greatest(X1,…,Xn) Return the greatest element Xi in
      the lexicographic order
    • instr(X,Y) Return the first numeric position in the
      string X of the searched substring Y
    • last_day(X) Return the last day of the month for the
      given datetime X
    • least(X1,…,Xn) Return the least element Xi in the
      lexicographic order
    • mod(X,Y) X modulo Y. Apply to two integers and return
      an integer
    • nvl2(X,Y,Z) Return either Y if X is a not null value,
      or Z otherwise
    • replace(X,Y,Z) Replace the string Y by Z in the given
      string X
    • reverse(X) Reverse the string X
    • rpad(X,Y) Return the given string X padded to the
      right with spaces, with the given total length Y
    • rpad(X,Y,Z) Return the given string X padded to the
      right with Z, with the given total length Y
    • to_char(X) Convert a datetime X to a string
    • to_char(X,Y) Convert a datetime to a string for a
      given format
    • to_date(X) Convert the string X to a date
    • to_date(X,Y) Convert the string X to a date for the
      given format Y
    • trim(X) Remove both leading and trailing spaces from
      the string X

    o New commands:

    • /command_assertions List commands that can be used as
      assertions. A Datalog program can contain assertions :-
      command(arg1,…,argn), where command is the command
      name, and argi are its arguments
    • /input Variable Wait for a user input (terminated by
      Intro) to be set on the user variable Variable
    • /list_predicates List predicates (name and arity).
      Include intermediate predicates which are a result of
      compilations if development mode is enabled (cf. the
      command /development). TAPI enabled
    • /mparse Input Parse the next input lines as they were
      directly submitted from the prompt, terminated by a
      single line containing $eot. Return syntax errors and
      semantic warnings, if present in Input (only SQL DQL
      queries supported up to now). TAPI enabled
    • /mtapi Process the next input lines by TAPI. It
      behaves as /tapi Input, where Input are the lines
      following /mtapi and terminated by a single line
      containing $eot
    • /parse Input Parse the input as it was directly
      submitted from the prompt, avoiding its execution.
      Return syntax errors and semantic warnings, if present
      in Input (only SQL DQL queries supported up to now).
      TAPI enabled
    • /run Filename [Parameters] Reminiscent of old 8 bit
      computers, this command allows for processing a file but
      retaining user input for selected commands such as
      /input. Process the contents of Filename as if they were
      typed at the system prompt. Extensions by default are:
      .sql and .ini. When looking for a file f, the following
      filenames are checked in this order: f, f.sql, and
      f.ini. A parameter is a string delimited by either
      blanks or double quotes (") if the parameter contains a
      blank. The same is applied to Filename. The value for
      each parameter is retrieved by the tokens parv1,
      parv2, … for the first, second, … parameter,
    • /sandboxed Synonym for /host_safe. Display whether
      host safe mode is enabled (on) or not (off). Enabling
      host safe mode prevents users and applications using DES
      from accessing the host (typically used to shield the
      host from outer attacks, hide host information, protect
      the file system, and so on)
    • /sandboxed Switch Synonym for /host_safe Switch.
      Enable host safe mode. Once enabled, this mode cannot be
  • Changes:
    o The command /builtins displays an interactive help based
    on categories. This can navigate to the interactive
    command help and vice versa
    o Added separators in interactive help
    o TAPI commands does not output elapsed time
    o String values in SQL results are delimited between
    single quotes
    o Null values are placed after any other symbol in the
    lexicographic and numeric orders. This affects the
    previous ordering of answer displays
    o Write commands changed from category Implementor to
    o When silent mode is enabled (with the command /silent
    on), display prompt inputs on batch processing are not
    displayed, thus behaving more similar to applying /silent
    Input to each line in the batch file
    o Each call to rand returns the same value along fixpoint
    computation to avoid floundering (though different calls
    return in general different values)

  • Fixed bugs:
    o Exception catching in /save_ddb
    o Nulls were not ignored when imposing a foreign key
    o Repeated column names in INSERT INTO did not raise an
    o Exception in some cases of RA natural full join
    o Dropping a table with a foreign key to itselft raised
    unlimited warnings
    o Some expressions involving SQL statements produced
    unordered compiled goals
    o Incompatible schemas in SQL/RA division involving
    subqueries raised an exception instead of informing about
    the actual error
    o SELECT … INTO modified system variables instead of
    user variables
    o Missing relation renamings in the right operand of SQL
    o Tuples causing constraint violations were not always
    o The constant pi was not detected with its type in SQL
    o Translation of nested full outer joins were incorrect
    o Incorrect scoping in alias passing for SQL AND
    o False positive in missing join condition for a
    conjunctive condition
    o Exception in corner cases of SQL autocasting, including
    arithmetic constants
    o Expressions in IN statements were not handled properly
    o Functions iif and case were not correctly solved in
    assumed contexts
    o The system flag command_elapsed_time/2 was not deleted
    for TAPI commands
    o Tuples with expressions in the left side of IN / NOT IN
    made parsing to fail
    o Strings with the name of arithmetic constants were not
    correctly handled
    o Unhandled exception in group_by out of bounds for
    propositional goals
    o SQL debugger statistics were not shown with the command
    /debug_sql_statistics after a debugging session
    o Exception in run-time autocasting for unquoted atoms
    o Some SQL remarks in multiline mode were not correctly
    o Some nested top calls missed variables and solutions
    o Applying top on comparison calls dealt no answer
    o Arguments of /debug_dl were not read properly
    o A bug in determining the stratum of a metapredicate goal
    implied missing answers in some queries

// ACIDE 0.18 Release Notes //
// January, 25th 2021 //

  • Enhancements, changes and fixed bugs:
    o Added complete functionality to the SQL Debug panel.
    o Graphs in all panels are drawn with the root node at the
    o Added the RDG (Relation Dependency Graph) to the PDG
    o Lexicon configuration is kept after console reset.
    o Views opened from the Database panel are updated on
    o Catching errors when modifying an SQL view.
    o Data retrieved from views in the grid are no longer
    editable (there is not support for updatable views).
    o When the checkbox ‘SQL Text’ is checked, the
    corresponding view is shown in the Database panel.
    o Avoiding most non-TAPI commands in the communication
    between ACIDE and DES.
    o Fixed inserting and deleting tuples on tables with more
    than one column.
    o Fixed view and table grid display for external
    o Fixed SQL text display for external databases when
    modifying views.

o Ctrl+Mouse Wheel for resizing font display may take long
time depending on the number of open file editors.
o Opening medium-sized text files may take long time due
to lexical analysis. No progress indicators are provided.
Only when all editor windows are processed they are
o As an alpha version, there are expected many bugs and
incomplete functionalities. Please report them to

1 Like