====== Program Generator ======
''**public class ProgramGenerator**''
This class generates EDB (Extensional Database) and translate the schema constraints into a DLV program
===== Class Attributes =====
No attributes for this class
===== Class Constructor =====
No constructor for this class
===== Class Methods =====
For better comprehension of the class, the figure underlying illustrates the dependencies between methods.
{{ :magik-demo:developer:class:core:generateprogram.png?nolink&850 |}}
----
==== generateProgram ====
public static java.util.ArrayList generateProgram (Query relQ,
java.util.ArrayList tcs,
boolean semantics,
Schema schema,
boolean isThereComparisons )
throws CycleException,
PrimaryKeyViolationException
This method managing all the process of generation of the DLV program.
**Parameters:**
* relQ - query that we want to analyze
* tcs - TC-statements selected
* semantics - //TRUE// if distinct-set semantics, //FALSE// if none-multiset semantics
* isThereComparison
**Returns:**
* DLV program associated to the parameters given
**Exceptions:**
* CycleException
* PrimaryKeyViolationException
----
----
----
==== makeEDB ====
private static java.lang.String makeEDB (Query relQ,
boolean isUnfolding)
An internal auxiliary function, needed for conversion of query to prototypical EDB.
**Parameters:**
* relQ - query that we want to analyze
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Returns:**
* String with the extensional database definition
----
==== makeP_TC ====
private static java.util.ArrayList makeP_TC (java.util.ArrayList tcs,
boolean isUnfolding)
Creates the line of the program related to a list of rules out of a set of TC statements
**Parameters:**
* relQ - query that we want to analyze
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Returns:**
* List of line of program related to TC-Statements given
----
==== makeQ_a ====
private static java.lang.String makeQ_a (Query Q,
boolean semantics,
boolean isUnfolding)
This method generates line of program for a given query
**Parameters:**
* Q - query that we want to generate the program
* semantics - //TRUE// if distinct-set semantics, //FALSE// if none-multiset semantics
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Returns:**
* line of program associated to the query
----
==== makeFDC_Rules ====
private static java.util.ArrayList makeFDC_Rules ( java.util.ArrayList fdcs)
This method generates the lines of program for all the finite domain constraints selected.
**Parameter:**
* fdcs - finite domain constraints to convert
**Returns:**
* list of lines of program for the finite domain constraints given
----
==== createValFunctionalityContraint ====
private static java.lang.String createValFunctionalityContraint ()
**Returns:**
* String of val functionality
----
==== generatePredicateOriginal ====
public static java.lang.String generatePredicateOriginal (Query query)
This method generates the lines of program for the original predicate.
**Parameter:**
* query - query that has to be converted
**Returns:**
* list of lines of program for the original predicate of the query
----
----
----
==== makeEDB_Atom ====
static java.lang.String makeEDB_Atom (Atom atom,
boolean isUnfolding)
An internal auxiliary function, needed for conversion of atoms of the query to prototypical EDB.
**Parameters:**
* atom - atom that we want to convert
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Return**
* String with the extensional database definition of the atom
----
==== TCToString ====
private static java.lang.String TCToString (TCStatement tc,
boolean isUnfolding)
An internal auxiliary function converts TCStatement into a string readable by DLV as a rule TC = (R(s),G) is converted into R_a(s) :- R(s), G;
**Parameters:**
* atom - atom that we want to convert
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Return**
* String with the TC-statement convert into line of code
----
==== makeBodyAtom ====
static Atom makeBodyAtom (Atom atom,
boolean semantics,
boolean isUnfolding,
java.util.ArrayList distinguished)
**Parameters:**
* atom - atom
* semantics - //TRUE// if distinct-set semantics, //FALSE// if none-multiset semantics
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
* distiguished - list of the terms distinguished
**Return**
* Atom with the distinguished terms
----
==== make_a(Atom) ====
static Atom make_a (Atom atom)
This function takes an atom and return the same one but with _a prefix to the name
**Parameters:**
* atom - atom that we want to convert
**Return**
* atom with _a prefix to the name
----
==== make_Q_a_vals ====
static java.lang.String make_Q_a_vals (Atom atom,
Atom unfoldedAtom,
boolean semantics,
boolean isUnfolding,
java.util.ArrayList distinguished)
**Parameters:**
* atom - atom that we want to convert
* unfoldedAtom - atom unfolded
* semantics - //TRUE// if distinct-set semantics, //FALSE// if none-multiset semantics
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
* distiguished - list of terms distinguished
**Return**
* String with val in query Q_a
----
==== makeSkolemRule ====
public static java.util.ArrayList makeSkolemRule (ForeignKey fk,
boolean isUnfolding)
Apply Skolem rule to foreign key
**Parameters:**
* fk - foreign key
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Return**
* list of ...
----
==== makeAuxRule ====
public static java.lang.String makeAuxRule (ForeignKey fk,
boolean isUnfolding)
Create aux rule from a foreign key
**Parameters:**
* fk - foreign key to convert
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Return**
* Line of code for aux rule for foreign key
----
==== makeEDB_Atom ====
public static java.lang.String makeCopyRule (ForeignKey fk,
boolean isUnfolding)
Make the copy rule for a given foreign key
**Parameters:**
* fk - foreign key that needs the copy rule
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Return**
* Line of code for copy rule related to the foreign key
----
----
----
==== unfoldTC_Atom ====
static java.lang.String unfoldTC_Atom (Atom atom,
boolean isUnfolding)
Creates the line of code related to unfolded atom of the TC-statement
**Parameters:**
* atom - atom that we want to unfold
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
**Return**
* Line of code generated for the unfolded atom
----
==== make_a (String) ====
static java.lang.String make_a (java.lang.String atom){
This function takes an atom (in String format) and return the same one but with _a prefix to the name
**Parameters:**
* atom - atom that we want to convert
**Return**
* String of the atom with the _a prefix
----
==== makeDoubleVal ====
static java.lang.String makeDoubleVal (Term a,
Term b)
**Parameters:**
* a - term
* b - term
**Return**
* String
----
==== makeVal ====
static java.lang.String makeVal (Term a,
Term b)
Create the val line of code for two terms
**Parameters:**
* a - term
* b - associated term to assign to term a
**Return**
* Val rule for the term a assigned the value of the term b
----
==== createMaybe_V_vector_Y ====
private static java.lang.StringBuilder createMaybe_V_vector_Y (boolean isUnfolding,
int keyTarget)
**Parameters:**
* isUnfolding - //TRUE// if unfolding needed, //FALSE// no unfolding
* keyTarget - key taget
**Return**
* String Builder
----
==== create_vector_Y ====
private static StringBuilder create_vector_Y (int keyTarget)
**Parameters:**
* keyTarget - index of the key target
**Return**
* String Builder
[[magik-demo:developer:class:core:programgenerator|Back to Top]] | [[magik-demo:start|Back to Home Page]]