1/*************************************************************************
2*									 *
3*	 YAP Prolog 							 *
4*									 *
5*	Yap Prolog was developed at NCCUP - Universidade do Porto	 *
6*									 *
7* Copyright L.Damas, V.S.Costa and Universidade do Porto 1985-1997	 *
8*									 *
9**************************************************************************
10*									 *
11* File:		myddas_top_level.yap	                                 *
12* Last rev:							         *
13* mods:									 *
14* comments:	MYDDAS Top Level predicates		                 *
15*									 *
16*************************************************************************/
17
18#ifdef MYDDAS_TOP_LEVEL
19
20:- module(myddas_top_level,[
21			    db_top_level/4,
22			    db_top_level/5,
23			    db_datalog_select/3
24			   ]).
25
26:- use_module(myddas_mysql,[
27			    db_my_result_set/1
28			    ]).
29
30:- use_module(system,[
31		      system/2
32		      ]).
33
34:- use_module(charsio,[
35		       read_from_chars/2
36		      ]).
37
38:- use_module(terms,[
39		     term_variables/2
40		    ]).
41
42:- use_module(myddas_util_predicates,[
43				      '$make_atom'/2,
44				      '$prolog2sql'/3,
45				      '$write_or_not'/1,
46				      '$lenght'/2
47				     ]).
48
49
50
51%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
52% db_top_level/5
53% db_top_level/4
54%
55db_top_level(mysql,HostDb,User,Password):-
56	db_top_level(mysql,myddas,HostDb,User,Password).
57
58db_top_level(mysql,Connection,Host/Db/Port/Socket,User,Password) :- !,
59	'$make_atom'(['mysql',' -h ',Host,' -P ',Port,' -S ',Socket,' -u ',User,' --password=',Password,' ',Db],Command),
60	system(Command,_).
61db_top_level(mysql,Connection,Host/Db/Port,User,Password) :-
62	integer(Port),!,
63	'$make_atom'(['mysql',' -h ',Host,' -P ',Port,' -u ',User,' --password=',Password,' ',Db],Command),
64	system(Command,_).
65db_top_level(mysql,Connection,Host/Db/Socket,User,Password) :- !,
66	db_top_level(mysql,Connection,Host/Db/0/Socket,User,Password).
67db_top_level(mysql,Connection,Host/Db,User,Password):-
68	db_top_level(mysql,Connection,Host/Db/0,User,Password).
69
70
71
72db_top_level(datalog,Connection,_,_,_):-
73	%'$error_checks'(db_open(mysql,Connection,Host/Db,User,Password)),
74	get_value(Connection,Con),
75	Con \= [],!,
76	c_db_connection_type(Con,mysql),
77	Prompt = ' datalog> ',
78	nl,
79	'$top_level_datalog_cicle'(Connection,Prompt).
80% 	c_db_tl_readline(Prompt,Line),
81% 	name(Line,CharsLine),
82% 	read_from_chars(CharsLine,Query),
83% 	term_variables(Query,VarList),
84% 	db_datalog_select(Connection,VarList,Query).
85
86'$top_level_datalog_cicle'(Connection,Prompt):-
87	c_db_tl_readline(Prompt,Line),
88	name(Line,CharsLine),
89	catch(read_from_chars(CharsLine,Query),_,'$top_level_datalog_cicle'(Connection,Prompt)),
90	!,'$top_level_datalog'(Connection,Prompt,Query).
91
92
93'$top_level_datalog'(_,_,halt):-!.
94'$top_level_datalog'(Connection,Prompt,Query):-
95	term_variables(Query,[]),!,
96	Query =..[_|Args],
97	db_datalog_select(Connection,Args,Query),
98	'$top_level_datalog_cicle'(Connection,Prompt).
99'$top_level_datalog'(Connection,Prompt,Query):-
100	term_variables(Query,VarList),
101	db_datalog_select(Connection,VarList,Query),
102	!,'$top_level_datalog_cicle'(Connection,Prompt).
103
104db_datalog_select(Connection,LA,DbGoal):-
105
106	'$lenght'(LA,Arity),
107	Name=viewname,
108	functor(ViewName,Name,Arity),
109	% build arg list for viewname/Arity
110	ViewName=..[Name|LA],
111
112	'$prolog2sql'(ViewName,DbGoal,SQL),
113
114	get_value(Connection,Con),
115	%c_db_connection_type(Con,ConType),
116	'$write_or_not'(SQL),
117	%( ConType == mysql ->
118	db_my_result_set(Mode),
119	c_db_my_query(SQL,ResultSet,Con,Mode,_),
120	c_db_my_table_write(ResultSet).
121
122#endif MYDDAS_TOP_LEVEL