MyDDAS: Professor Michel Ferreira extended the prolog2sql interface with some new capabilities, including the support for ...WHERE EXISTS... querys
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1503 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
c0a9fa5cab
commit
d1fc8bc59c
@ -250,6 +250,8 @@ query_generation([Conjunction|Conjunctions],ProjectionTerm,[Query|Queries]):-
|
|||||||
%
|
%
|
||||||
% --------------------------------------------------------------------------------------
|
% --------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
translate_goal(SimpleGoal,[SQLFrom],SQLWhere,Dict,NewDict):-
|
translate_goal(SimpleGoal,[SQLFrom],SQLWhere,Dict,NewDict):-
|
||||||
% --- positive goal binds variables - these bindings are held in the dictionary -----
|
% --- positive goal binds variables - these bindings are held in the dictionary -----
|
||||||
functor(SimpleGoal,Functor,Arity),
|
functor(SimpleGoal,Functor,Arity),
|
||||||
@ -274,6 +276,13 @@ translate_goal(not ComparisonGoal,[],SQLCompOp,Dict,Dict):-
|
|||||||
negated_comparison(SQLOperator,SQLNegOperator),
|
negated_comparison(SQLOperator,SQLNegOperator),
|
||||||
translate_comparison(LeftArg,RightArg,SQLNegOperator,Dict,SQLCompOp).
|
translate_comparison(LeftArg,RightArg,SQLNegOperator,Dict,SQLCompOp).
|
||||||
|
|
||||||
|
translate_goal(exists(ExistsGoals),[],SQLExistsSubquery,Dict,Dict):-
|
||||||
|
% --- exists goals do not bind variables - hence Dict is returned unchanged --------
|
||||||
|
functor(ExistsGoals,Functor,_),
|
||||||
|
not comparison(Functor,_),
|
||||||
|
translate_conjunction(ExistsGoals,SQLFrom,SQLWhere,Dict,_),
|
||||||
|
SQLExistsSubquery = [existential_subquery([*],SQLFrom,SQLWhere)].
|
||||||
|
|
||||||
translate_goal(ComparisonGoal,[],SQLCompOp,Dict,Dict):-
|
translate_goal(ComparisonGoal,[],SQLCompOp,Dict,Dict):-
|
||||||
% --- comparison operations do not bind variables - Dict is returned unchanged ------
|
% --- comparison operations do not bind variables - Dict is returned unchanged ------
|
||||||
ComparisonGoal =.. [ComparisonOperator,LeftArg,RightArg],
|
ComparisonGoal =.. [ComparisonOperator,LeftArg,RightArg],
|
||||||
@ -794,7 +803,7 @@ printqueries([Query|Queries]):-
|
|||||||
nl,
|
nl,
|
||||||
print_query(Query),
|
print_query(Query),
|
||||||
nl,
|
nl,
|
||||||
write('UNION'),
|
write('UNION '),
|
||||||
nl,
|
nl,
|
||||||
printqueries(Queries).
|
printqueries(Queries).
|
||||||
|
|
||||||
@ -836,6 +845,18 @@ print_query(negated_existential_subquery(Select,From,Where)):-
|
|||||||
nl,
|
nl,
|
||||||
write(')').
|
write(')').
|
||||||
|
|
||||||
|
print_query(existential_subquery(Select,From,Where)):-
|
||||||
|
write('EXISTS'),
|
||||||
|
nl,
|
||||||
|
write('('),
|
||||||
|
print_clause('SELECT',Select,','),
|
||||||
|
nl,
|
||||||
|
print_clause('FROM',From,','),
|
||||||
|
nl,
|
||||||
|
print_clause('WHERE',Where,'AND'),
|
||||||
|
nl,
|
||||||
|
write(')').
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -947,6 +968,9 @@ print_column(agg_query(Function,Select,From,Where,Group)):-
|
|||||||
print_column(negated_existential_subquery(Select,From,Where)):-
|
print_column(negated_existential_subquery(Select,From,Where)):-
|
||||||
print_query(negated_existential_subquery(Select,From,Where)).
|
print_query(negated_existential_subquery(Select,From,Where)).
|
||||||
|
|
||||||
|
print_column(existential_subquery(Select,From,Where)):-
|
||||||
|
print_query(existential_subquery(Select,From,Where)).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -972,7 +996,7 @@ queries_atom([Query],QueryList,Diff):-
|
|||||||
queries_atom([Query|Queries],QueryList,Diff):-
|
queries_atom([Query|Queries],QueryList,Diff):-
|
||||||
Queries \= [],
|
Queries \= [],
|
||||||
query_atom(Query,QueryList,X1),
|
query_atom(Query,QueryList,X1),
|
||||||
column_atom('UNION',X1,X2),
|
column_atom('UNION ',X1,X2),
|
||||||
queries_atom(Queries,X2,Diff).
|
queries_atom(Queries,X2,Diff).
|
||||||
|
|
||||||
|
|
||||||
@ -1002,6 +1026,13 @@ query_atom(negated_existential_subquery(Select,From,Where),QueryList,Diff):-
|
|||||||
clause_atom('WHERE',Where,'AND',X3,X4),
|
clause_atom('WHERE',Where,'AND',X3,X4),
|
||||||
column_atom(')',X4,Diff).
|
column_atom(')',X4,Diff).
|
||||||
|
|
||||||
|
query_atom(existential_subquery(Select,From,Where),QueryList,Diff):-
|
||||||
|
column_atom('EXISTS(',QueryList,X1),
|
||||||
|
clause_atom('SELECT',Select,',',X1,X2),
|
||||||
|
clause_atom('FROM',From,',',X2,X3),
|
||||||
|
clause_atom('WHERE',Where,'AND',X3,X4),
|
||||||
|
column_atom(')',X4,Diff).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -1059,8 +1090,6 @@ clause_atom([Item,NextItem|RestItems],Junctor,QueryList,Diff):-
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
column_atom(att(RangeVar,Attribute),QueryList,Diff):-
|
column_atom(att(RangeVar,Attribute),QueryList,Diff):-
|
||||||
column_atom(RangeVar,QueryList,X1),
|
column_atom(RangeVar,QueryList,X1),
|
||||||
column_atom('.',X1,X2),
|
column_atom('.',X1,X2),
|
||||||
@ -1117,6 +1146,9 @@ column_atom(agg_query(Function,Select,From,Where,Group),QueryList,Diff):-
|
|||||||
column_atom(negated_existential_subquery(Select,From,Where),QueryList,Diff):-
|
column_atom(negated_existential_subquery(Select,From,Where),QueryList,Diff):-
|
||||||
query_atom(negated_existential_subquery(Select,From,Where),QueryList,Diff).
|
query_atom(negated_existential_subquery(Select,From,Where),QueryList,Diff).
|
||||||
|
|
||||||
|
column_atom(existential_subquery(Select,From,Where),QueryList,Diff):-
|
||||||
|
query_atom(existential_subquery(Select,From,Where),QueryList,Diff).
|
||||||
|
|
||||||
|
|
||||||
column_atom(Atom,List,Diff):-
|
column_atom(Atom,List,Diff):-
|
||||||
atom(Atom),
|
atom(Atom),
|
||||||
|
Reference in New Issue
Block a user