def execute_query(self, query, caller=None):
import time<EOL>self.check_connection()<EOL>if typepy.is_null_string(query):<EOL><INDENT>return None<EOL><DEDENT>if self.debug_query or self.global_debug_query:<EOL><INDENT>logger.debug(query)<EOL><DEDENT>if self.__is_profile:<EOL><INDENT>exec_start_time = time.time()<EOL><DEDENT>try:<EOL><INDENT>result = self.connection.execute(six.text_type(query))<EOL><DEDENT>except (sqlite3.OperationalError, sqlite3.IntegrityError) as e:<EOL><INDENT>if caller is None:<EOL><INDENT>caller = logging.getLogger().findCaller()<EOL><DEDENT>file_path, line_no, func_name = caller[:<NUM_LIT:3>]<EOL>raise OperationalError(<EOL>message="<STR_LIT:\n>".join(<EOL>[<EOL>"<STR_LIT>".format(<EOL>file_path, line_no, func_name<EOL>),<EOL>"<STR_LIT>".format(MultiByteStrDecoder(query).unicode_str),<EOL>"<STR_LIT>".format(e),<EOL>"<STR_LIT>".format(self.database_path),<EOL>]<EOL>)<EOL>)<EOL><DEDENT>if self.__is_profile:<EOL><INDENT>self.__dict_query_count[query] = self.__dict_query_count.get(query, <NUM_LIT:0>) + <NUM_LIT:1><EOL>elapse_time = time.time() - exec_start_time<EOL>self.__dict_query_totalexectime[query] = (<EOL>self.__dict_query_totalexectime.get(query, <NUM_LIT:0>) + elapse_time<EOL>)<EOL><DEDENT>return result<EOL>
Send arbitrary SQLite query to the database.

:param str query: Query to executed.
:param tuple caller:
    Caller information.
    Expects the return value of :py:meth:`logging.Logger.findCaller`.
:return: The result of the query execution.
:rtype: sqlite3.Cursor
:raises simplesqlite.NullDatabaseConnectionError:
    |raises_check_connection|
:raises simplesqlite.OperationalError: |raises_operational_error|

.. warning::
    This method can execute an arbitrary query.
    i.e. No access permissions check by |attr_mode|.