/*=====================================================
Written by Gianluca Caruso, University of Pisa.
Modified by Maria H�kansson and Peo Grimheden and Rebecca Jonson
====================================================*/

:-module(mysql,[mysql/3]).

:- use_module(library(system)).
:- use_module(library(charsio)).
:- use_module(library(lists)).


parse_result(Stream,[]) :-
        at_end_of_stream(Stream),
        !.
parse_result(Stream,Tuples) :-
        tuples(Stream,Tuples).

tuples(Stream,[]) :-
        at_end_of_stream(Stream),
        !.
tuples(Stream,[Tuple|Tuples]) :-
        tuple(Stream,Tuple),
        tuples(Stream,Tuples).

tuple(Stream,[]) :-
        at_end_of_stream(Stream),
        !.
tuple(Stream,[]) :-
        at_end_of_line(Stream),
        skip_line(Stream),
        !.
tuple(Stream,[Field|Tuple]) :-
        field(Stream,Field),
        tuple(Stream,Tuple).

field(Stream,[]) :-
        at_end_of_line(Stream),
        !.
field(Stream,Chars) :-
        get0(Stream,X),
        % add chars to current field until a tab is reached
        ( X == 0'\t -> Chars = [];      
            ( field(Stream,Xs), Chars = [X|Xs] ) ).

/*==================================================
    mysql(+Expr, -Result, -ErrorResult)
    -- Takes a SQL-query returns the answer or []
    -- Returns error message if it occurs or []
===================================================*/
        
mysql(Expr,Result,ErrRes) :-
        mysql_com(Com),
        exec(Com,[pipe(In),pipe(Out),pipe(Err)],_),
        write(In,Expr),
        close(In),
        parse_result(Out,Result),
	parse_result(Err,ErrRes),
        close(Out).

/*========================================================
    mysql_com(Arg)
    -- -s = silent mood, -w = retry if connection is down,
    -u = user, password, name of database
==========================================================*/

mysql_com('mysql -s -w agendatalk').