% QUERY query an LTPDA repository.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% DESCRIPTION: QUERY query an LTPDA repository.
%
% CALL:                     results = query(conn, q)
%              [results, col_names] = query(conn, q)
%
% INPUTS:
%              conn - an mpipeline.repository.RepositoryConnection object,
%                     as is returned by utils.jmysql.connect
%              q    - a valid MySQL query string
%
% OUTPUTS:
%                results - a cell-array of the results
%              col_names - a cell-array of the column names in the query
%
% VERSION:     $Id: query.m,v 1.1 2009/07/27 19:46:21 hewitson Exp $
%
% HISTORY:     24-05-2007 M Hewitson
%                 Creation
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%              (*) the expiry time for MySQL logins is a property of the
%              LTPDA Toolbox and can be set in the LTPDA Preferences.


function varargout = query(varargin)
  
  prefs = getappdata(0, 'LTPDApreferences');
  
  if ~isa(varargin{1}, 'mpipeline.repository.RepositoryConnection')
    error('### The first argument should be a RepositoryConnection');
  end
  
  if ~ischar(varargin{2})
    error('### The second argument should be a query string.');
  end
  
  % Inputs
  conn = varargin{1};
  q    = varargin{2};
  
  % Outputs
  results  = {};
  colnames = {};
  
  % Check connection
  if ~conn.isConnected
    conn.openConnection
  end
  
  if ~conn.isConnected
    conn.display;
    error('### Failed to open connection');
    return
  end
  
  resultSet = conn.query(q);
    
  % Set outputs
  if nargout > 0
    varargout{1} = resultSet;
    if nargout == 2
      % Get column names from the meta data
      rsm = resultSet.getMetaData;
      Nc = rsm.getColumnCount;
      colnames = cell(1,Nc);
      for kk=1:Nc
        colnames{kk} = char(rsm.getColumnName(kk));
      end
      varargout{2} = colnames;
    end
  end
  
end

