- add a predicate names table in order to map each predicate (identified by the pair: <pred_name,arity>) into its index;
- substitute every occurrence of a predicate name by its index;
- add function retrieveTableName to DBConnectionManager in order to retrieve the actual table name of a predicate;
- store table names into class Metadata;
- put the dependency graph into DBProgram and delegate the program to build both SCCs and sub-programs;
- create a sub-program for each stricly connected component;
- distinguish recursive rules from exit ones into a sub-program;
- create query objects only after building the sub-programs, because only there you're able to distinguish between recursive rules and non-recursive ones;
- handle eventual input facts.
Add safety check.
Add the checks on stratification, acyclicity and disjunction.
Add (iteration & execution) timestamps.