text: # Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.
  #
  # Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with
  # the License. A copy of the License is located at
  #
  # http://www.apache.org/licenses/LICENSE-2.0
  #
  # or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  # CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions
  # and limitations under the License.
  from logging import getLogger
  
  from ..errors import LambdaAbortedError
  
  logger = getLogger(__name__)
  
  
  class Executor:
      """
      A class to handle lambda execution.
  
      :type transaction: :py:class:`pyqldb.transaction.transaction.Transaction`
      :param transaction: The transaction that this executor is running within.
      """
      def __init__(self, transaction):
          self._transaction = transaction
  
      def abort(self):
          """
          Abort the transaction and roll back any changes.
  
          :raises LambdaAbortedError: When invoked.
          """
          raise LambdaAbortedError
  
      def execute_statement(self, statement, *parameters):
          """
          Execute the statement.
  
          :type statement: str
          :param statement: The statement to execute.
  
          :type parameters: Variable length argument list
          :param parameters: Ion values or Python native types that are convertible to Ion for filling in parameters
                             of the statement.
  
                             `Details on conversion support and rules <https://ion-python.readthedocs.io/en/latest/amazon.ion.html?highlight=simpleion#module-amazon.ion.simpleion>`_.
  
          :rtype: :py:class:`pyqldb.cursor.stream_cursor.StreamCursor`
          :return: Cursor on the result set of the statement.
  
          :raises TransactionClosedError: When this transaction is closed.
          """
          cursor = self._transaction._execute_statement(statement, *parameters)
          return cursor
  