MyDDAS: Added some new functionalitys to MyDDAS
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1526 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
parent
08d6e238fb
commit
e66348b44c
@ -52,6 +52,7 @@ STATIC_PROTO(int c_db_my_row,(void));
|
|||||||
STATIC_PROTO(int c_db_my_row_cut,(void));
|
STATIC_PROTO(int c_db_my_row_cut,(void));
|
||||||
STATIC_PROTO(int c_db_my_get_fields_properties,(void));
|
STATIC_PROTO(int c_db_my_get_fields_properties,(void));
|
||||||
STATIC_PROTO(int c_db_my_number_of_fields_in_query,(void));
|
STATIC_PROTO(int c_db_my_number_of_fields_in_query,(void));
|
||||||
|
STATIC_PROTO(int c_db_my_get_next_result_set,(void));
|
||||||
|
|
||||||
|
|
||||||
static void n_print(int, char);
|
static void n_print(int, char);
|
||||||
@ -80,7 +81,7 @@ c_db_my_connect(void) {
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mysql_real_connect(conn, host, user, passwd, database,0, NULL, 0) == NULL) {
|
if (mysql_real_connect(conn, host, user, passwd, database,0, NULL, CLIENT_MULTI_STATEMENTS) == NULL) {
|
||||||
printf("erro no connect\n");
|
printf("erro no connect\n");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -639,6 +640,21 @@ c_db_my_get_fields_properties(void) {
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* c_db_my_get_next_result_set: Connection * NextResSet */
|
||||||
|
static int
|
||||||
|
c_db_my_get_next_result_set(void) {
|
||||||
|
Term arg_conn = Deref(ARG1);
|
||||||
|
Term arg_next_res_set = Deref(ARG2);
|
||||||
|
|
||||||
|
MYSQL *conn = (MYSQL *) (IntegerOfTerm(arg_conn));
|
||||||
|
MYSQL_RES *res_set=NULL;
|
||||||
|
|
||||||
|
if (mysql_next_result(conn) == 0){
|
||||||
|
res_set = mysql_store_result(conn);
|
||||||
|
Yap_unify(arg_next_res_set, MkIntegerTerm((int) res_set));
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void Yap_InitMYDDAS_MySQLPreds(void)
|
void Yap_InitMYDDAS_MySQLPreds(void)
|
||||||
{
|
{
|
||||||
@ -665,6 +681,9 @@ void Yap_InitMYDDAS_MySQLPreds(void)
|
|||||||
|
|
||||||
/* db_get_fields_properties: PredName x Connnection x PropertiesList*/
|
/* db_get_fields_properties: PredName x Connnection x PropertiesList*/
|
||||||
Yap_InitCPred("c_db_my_get_fields_properties",3,c_db_my_get_fields_properties,0);
|
Yap_InitCPred("c_db_my_get_fields_properties",3,c_db_my_get_fields_properties,0);
|
||||||
|
|
||||||
|
/* db_get_fields_properties: PredName x Connnection x PropertiesList*/
|
||||||
|
Yap_InitCPred("c_db_my_get_next_result_set",2,c_db_my_get_next_result_set,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Yap_InitBackMYDDAS_MySQLPreds(void)
|
void Yap_InitBackMYDDAS_MySQLPreds(void)
|
||||||
|
@ -99,7 +99,10 @@ myddas_current_time(void) {
|
|||||||
/* to get time as Yap */
|
/* to get time as Yap */
|
||||||
|
|
||||||
Int now, interval;
|
Int now, interval;
|
||||||
Yap_cputime_interval(&now, &interval);
|
//Yap_cputime_interval(&now, &interval);
|
||||||
|
|
||||||
|
//milliseconds
|
||||||
|
Yap_walltime_interval(&now, &interval);
|
||||||
//return ((realtime)now);
|
//return ((realtime)now);
|
||||||
return (now);
|
return (now);
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
db_sql_select/3,
|
db_sql_select/3,
|
||||||
db_prolog_select/3,
|
db_prolog_select/3,
|
||||||
|
db_prolog_select_multi/3,
|
||||||
db_command/2,
|
db_command/2,
|
||||||
db_insert/2,
|
db_insert/2,
|
||||||
db_create_table/3,
|
db_create_table/3,
|
||||||
@ -85,6 +86,9 @@
|
|||||||
]).
|
]).
|
||||||
|
|
||||||
:- use_module(myddas_util_predicates,[
|
:- use_module(myddas_util_predicates,[
|
||||||
|
'$prolog2sql'/3,
|
||||||
|
'$create_multi_query'/3,
|
||||||
|
'$get_multi_results'/4,
|
||||||
'$process_sql_goal'/4,
|
'$process_sql_goal'/4,
|
||||||
'$process_fields'/3,
|
'$process_fields'/3,
|
||||||
'$get_values_for_insert'/3,
|
'$get_values_for_insert'/3,
|
||||||
@ -157,12 +161,11 @@ db_close(Connection) :-
|
|||||||
db_verbose(X):-
|
db_verbose(X):-
|
||||||
var(X),!,
|
var(X),!,
|
||||||
get_value(db_verbose,X).
|
get_value(db_verbose,X).
|
||||||
db_verbose(1):-!,
|
db_verbose(N):-!,
|
||||||
set_value(db_verbose,1).
|
set_value(db_verbose,N).
|
||||||
db_verbose(_):-
|
|
||||||
set_value(db_verbose,0).
|
|
||||||
%default value
|
%default value
|
||||||
:- db_verbose(0).
|
:- set_value(db_verbose,0).
|
||||||
|
:- set_value(db_verbose_filename,myddas_queries).
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
@ -249,9 +252,7 @@ db_prolog_select(Connection,LA,DbGoal):-
|
|||||||
% build arg list for viewname/Arity
|
% build arg list for viewname/Arity
|
||||||
'$make_list_of_args'(1,Arity,ViewName,LA),
|
'$make_list_of_args'(1,Arity,ViewName,LA),
|
||||||
|
|
||||||
copy_term((ViewName,DbGoal),(CopyView,CopyGoal)),
|
'$prolog2sql'(ViewName,DbGoal,SQL),
|
||||||
translate(CopyView,CopyGoal,Code),
|
|
||||||
queries_atom(Code,SQL),
|
|
||||||
|
|
||||||
get_value(Connection,Con),
|
get_value(Connection,Con),
|
||||||
c_db_connection_type(Con,ConType),
|
c_db_connection_type(Con,ConType),
|
||||||
@ -267,6 +268,28 @@ db_prolog_select(Connection,LA,DbGoal):-
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
% db_prolog_select_multi(+,+,-)
|
||||||
|
% db_prolog_select_multi(guest,[(ramos(A,C),A=C),(ramos(D,B),B=10)],[[A],[D,B]]).
|
||||||
|
%
|
||||||
|
db_prolog_select_multi(Connection,DbGoalsList,ListOfResults) :-
|
||||||
|
'$error_checks'(db_prolog_select_multi(Connection,DbGoalsList,ListOfResults)),
|
||||||
|
'$create_multi_query'(ListOfResults,DbGoalsList,SQL),
|
||||||
|
|
||||||
|
get_value(Connection,Con),
|
||||||
|
c_db_connection_type(Con,ConType),
|
||||||
|
'$write_or_not'(SQL),
|
||||||
|
( ConType == mysql ->
|
||||||
|
db_my_result_set(Mode),
|
||||||
|
c_db_my_query(SQL,ResultSet,Con,Mode)
|
||||||
|
;
|
||||||
|
true
|
||||||
|
),
|
||||||
|
'$get_multi_results'(Con,ConType,ResultSet,ListOfResults).
|
||||||
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
% db_command/2
|
% db_command/2
|
||||||
%
|
%
|
||||||
@ -432,7 +455,7 @@ db_number_of_fields(Connection,RelationName,Arity) :-
|
|||||||
|
|
||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
% db_multi_queries_number(+,+)
|
% db_multi_queries_number(+,+)
|
||||||
% TO
|
% TODO: EVERITHING
|
||||||
%
|
%
|
||||||
db_multi_queries_number(Connection,Number) :-
|
db_multi_queries_number(Connection,Number) :-
|
||||||
'$error_checks'(db_multi_queries_number(Connection,Number)),
|
'$error_checks'(db_multi_queries_number(Connection,Number)),
|
||||||
@ -441,3 +464,4 @@ db_multi_queries_number(Connection,Number) :-
|
|||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -28,6 +28,9 @@
|
|||||||
is_list/1
|
is_list/1
|
||||||
]).
|
]).
|
||||||
|
|
||||||
|
'$error_checks'(db_prolog_select_multi(Connection,DbGoalsList,_)):- !,
|
||||||
|
atom(Connection),
|
||||||
|
is_list(DbGoalsList).
|
||||||
'$error_checks'(db_multi_queries_number(Connection,Number)):-!,
|
'$error_checks'(db_multi_queries_number(Connection,Number)):-!,
|
||||||
atom(Connection),
|
atom(Connection),
|
||||||
( var(Number) ->
|
( var(Number) ->
|
||||||
|
@ -71,10 +71,6 @@ translate(ProjectionTerm,DatabaseGoal,SQLQueryTerm):-
|
|||||||
% --- code generation ---------------------------------------------------------------
|
% --- code generation ---------------------------------------------------------------
|
||||||
query_generation(Disjunction,TokenProjectionTerm,SQLQueryTerm).
|
query_generation(Disjunction,TokenProjectionTerm,SQLQueryTerm).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
% --- disjunction(Goal,Disjunction) ----------------------------------------------------
|
% --- disjunction(Goal,Disjunction) ----------------------------------------------------
|
||||||
%
|
%
|
||||||
% turns original goal into disjunctive normalized form by computing all conjunctions
|
% turns original goal into disjunctive normalized form by computing all conjunctions
|
||||||
@ -1012,7 +1008,7 @@ query_atom(query(Select,From,Where),QueryList,Diff):-
|
|||||||
clause_atom('SELECT',Select,',',QueryList,X1),
|
clause_atom('SELECT',Select,',',QueryList,X1),
|
||||||
clause_atom('FROM',From,',',X1,X2),
|
clause_atom('FROM',From,',',X1,X2),
|
||||||
clause_atom('WHERE',Where,'AND',X2,Diff).
|
clause_atom('WHERE',Where,'AND',X2,Diff).
|
||||||
|
% column_atom('LIMIT 1',Diff,Diff2).
|
||||||
query_atom(agg_query(Function,Select,From,Where,Group),QueryList,Diff):-
|
query_atom(agg_query(Function,Select,From,Where,Group),QueryList,Diff):-
|
||||||
clause_atom('SELECT',Function,Select,',',QueryList,X1),
|
clause_atom('SELECT',Function,Select,',',QueryList,X1),
|
||||||
clause_atom('FROM',From,',',X1,X2),
|
clause_atom('FROM',From,',',X1,X2),
|
||||||
@ -1020,6 +1016,7 @@ query_atom(agg_query(Function,Select,From,Where,Group),QueryList,Diff):-
|
|||||||
%ILP : PARA NAO POR OS GROUP BYS. FAZER FLAG PARA ISTO
|
%ILP : PARA NAO POR OS GROUP BYS. FAZER FLAG PARA ISTO
|
||||||
%clause_atom('GROUP BY',Group,',',X3,Diff).
|
%clause_atom('GROUP BY',Group,',',X3,Diff).
|
||||||
|
|
||||||
|
|
||||||
query_atom(negated_existential_subquery(Select,From,Where),QueryList,Diff):-
|
query_atom(negated_existential_subquery(Select,From,Where),QueryList,Diff):-
|
||||||
column_atom('NOT EXISTS(',QueryList,X1),
|
column_atom('NOT EXISTS(',QueryList,X1),
|
||||||
clause_atom('SELECT',Select,',',X1,X2),
|
clause_atom('SELECT',Select,',',X1,X2),
|
||||||
|
@ -16,6 +16,9 @@
|
|||||||
*************************************************************************/
|
*************************************************************************/
|
||||||
|
|
||||||
:- module(myddas_util_predicates,[
|
:- module(myddas_util_predicates,[
|
||||||
|
'$prolog2sql'/3,
|
||||||
|
'$create_multi_query'/3,
|
||||||
|
'$get_multi_results'/4,
|
||||||
'$process_sql_goal'/4,
|
'$process_sql_goal'/4,
|
||||||
'$process_fields'/3,
|
'$process_fields'/3,
|
||||||
'$check_fields'/2,
|
'$check_fields'/2,
|
||||||
@ -50,6 +53,35 @@
|
|||||||
queries_atom/2
|
queries_atom/2
|
||||||
]).
|
]).
|
||||||
|
|
||||||
|
'$prolog2sql'(ProjTerm,DbGoal,SQL):-
|
||||||
|
copy_term((ProjTerm,DbGoal),(CopyTerm,CopyGoal)),
|
||||||
|
translate(CopyTerm,CopyGoal,Code),
|
||||||
|
queries_atom(Code,SQL).
|
||||||
|
|
||||||
|
'$create_multi_query'([ProjTerm],[DbGoal],SQL):- !,
|
||||||
|
'$lenght'(ProjTerm,Arity),
|
||||||
|
functor(ViewName,viewname,Arity),
|
||||||
|
'$make_list_of_args'(1,Arity,ViewName,ProjTerm),
|
||||||
|
'$prolog2sql'(ViewName,DbGoal,SQL).
|
||||||
|
'$create_multi_query'([ProjTerm|TermList],[DbGoal|GoalList],SQL):-
|
||||||
|
'$lenght'(ProjTerm,Arity),
|
||||||
|
functor(ViewName,viewname,Arity),
|
||||||
|
'$make_list_of_args'(1,Arity,ViewName,ProjTerm),
|
||||||
|
'$prolog2sql'(ViewName,DbGoal,SQLQuery),
|
||||||
|
'$create_multi_query'(TermList,GoalList,SQLMulti),
|
||||||
|
'$make_atom'([SQLQuery,' ; ',SQLMulti],SQL).
|
||||||
|
|
||||||
|
'$get_multi_results'(_,_,_,[]).
|
||||||
|
'$get_multi_results'(Con,ConType,ResSet,[List|Results]):-
|
||||||
|
'$lenght'(List,Arity),
|
||||||
|
( ConType == mysql ->
|
||||||
|
c_db_my_row(ResSet,Arity,List),!,
|
||||||
|
c_db_my_get_next_result_set(Con,NextResSet)
|
||||||
|
;
|
||||||
|
true
|
||||||
|
),
|
||||||
|
'$get_multi_results'(Con,ConType,NextResSet,Results).
|
||||||
|
|
||||||
'$process_sql_goal'(TableViewName,SQLorDbGoal,TableName,SQL):-
|
'$process_sql_goal'(TableViewName,SQLorDbGoal,TableName,SQL):-
|
||||||
(atom(SQLorDbGoal) ->
|
(atom(SQLorDbGoal) ->
|
||||||
SQL = SQLorDbGoal,
|
SQL = SQLorDbGoal,
|
||||||
@ -288,9 +320,14 @@
|
|||||||
'$write_or_not'(X) :-
|
'$write_or_not'(X) :-
|
||||||
get_value(db_verbose,1),!,
|
get_value(db_verbose,1),!,
|
||||||
write(X),nl.
|
write(X),nl.
|
||||||
|
'$write_or_not'(X) :-
|
||||||
|
get_value(db_verbose,2),!,
|
||||||
|
get_value(db_verbose_filename,FileName),
|
||||||
|
open(FileName,append,Stream),
|
||||||
|
write(Stream,X),write(Stream,';'),nl(Stream),
|
||||||
|
close(Stream).
|
||||||
'$write_or_not'(_).
|
'$write_or_not'(_).
|
||||||
|
|
||||||
|
|
||||||
'$make_atom'([],'').
|
'$make_atom'([],'').
|
||||||
'$make_atom'([Atom|T],Final) :-
|
'$make_atom'([Atom|T],Final) :-
|
||||||
atom(Atom),!,
|
atom(Atom),!,
|
||||||
|
Reference in New Issue
Block a user