function response_str = sql_statement(a_sql_portal, statement_string, props)
% sql_statement - Run an SQL statement and discard its results.
%
% Usage:
% response_str = sql_statement(a_sql_portal, statement_string, props)
%
% Parameters:
% a_sql_portal: A sql_portal object.
% statement_string: An SQL statement that does not return data.
% props: A structure with any optional properties.
%
% Returns:
% response_str: Response string from the SQL engine.
%
% Description:
% This function is for sending SQL statements that do not return any data,
% for such functions as inserting data into a database, creating views, and
% running administration commands. See sql_portal/tests_db to import select
% query results into Pandora.
%
% See also: sql_portal/tests_db, database
%
% $Id$
%
% Author: Cengiz Gunay <cgunay@emory.edu>, 2008/04/18
% Copyright (c) 2007 Cengiz Gunay <cengique@users.sf.net>.
% This work is licensed under the Academic Free License ("AFL")
% v. 3.0. To view a copy of this license, please look at the COPYING
% file distributed with this software or visit
% http://opensource.org/licenses/afl-3.0.php.
% verbose warnings
vs = warning('query', 'verbose');
verbose = strcmp(vs.state, 'on');
if ~exist('props', 'var')
props = struct;
end
% run query
if verbose
disp(['SQL query: "' statement_string '"']);
end
a_cursor = exec(a_sql_portal.db_conn, statement_string);
if verbose
a_cursor
end
response_str = a_cursor.Message;
% check for errors, but ignore spurious (?) rollback/commit problems
if ~isempty(strfind(lower(response_str), 'error')) && ...
isempty(strfind(lower(response_str), 'rollback'))
disp(['SQL Query: "' statement_string '"']);
a_cursor
error(['Error in SQL query:' sprintf('\n') a_cursor.Message]);
end
if ~isnumeric(a_cursor.Cursor)
close(a_cursor);
end