module DB
  # Represents a statement to be executed in any of the connections
  # of the pool. The statement is not be executed in a non prepared fashion.
  # The execution of the statement is retried according to the pool configuration.
  #
  # See `PoolStatement`
  struct PoolUnpreparedStatement < PoolStatement
    def initialize(db : Database, query : String)
      super
    end

    # builds a statement over a real connection
    private def build_statement : Statement
      conn = @db.pool.checkout
      begin
        conn.unprepared.build(@query)
      rescue ex
        conn.release
        raise ex
      end
    end
  end
end
