# File lib/sdb/sdb_interface.rb, line 683
    def select(select_expression, next_token = nil, consistent_read = nil)
      select_expression = query_expression_from_array(select_expression) if select_expression.is_a?(Array)
      @last_query_expression = select_expression

      options                = {}
      if next_token.is_a?(Hash)
        options         = next_token
        next_token      = options[:next_token]
        consistent_read = options[:consistent_read]
      end

      #
      request_params = {'SelectExpression' => select_expression,
                        'NextToken'        => next_token,
                        'ConsistentRead'   => consistent_read}
      link           = generate_request("Select", request_params, options)
      result         = select_response_to_ruby(request_info(link, QSdbSelectParser.new, options))
      return result unless block_given?
      # loop if block if given
      begin
        # the block must return true if it wanna continue
        break unless yield(result) && result[:next_token]
        # make new request
        request_params['NextToken'] = result[:next_token]
        link                        = generate_request("Select", request_params)
        result                      = select_response_to_ruby(request_info(link, QSdbSelectParser.new, options))
      end while true
    rescue Exception
      on_exception
    end