method

visit_Arel_Nodes_BoundSqlLiteral

visit_Arel_Nodes_BoundSqlLiteral(o, collector)
private

No documentation available.

# File activerecord/lib/arel/visitors/to_sql.rb, line 770
        def visit_Arel_Nodes_BoundSqlLiteral(o, collector)
          collector.retryable = false
          bind_index = 0

          new_bind = lambda do |value|
            if Arel.arel_node?(value)
              visit value, collector
            elsif value.is_a?(Array)
              if value.empty?
                collector << @connection.quote(nil)
              else
                if value.none? { |v| Arel.arel_node?(v) }
                  collector.add_binds(value.map { |v| @connection.cast_bound_value(v) }, &bind_block)
                else
                  value.each_with_index do |v, i|
                    collector << ", " unless i == 0
                    if Arel.arel_node?(v)
                      visit v, collector
                    else
                      collector.add_bind(@connection.cast_bound_value(v), &bind_block)
                    end
                  end
                end
              end
            else
              collector.add_bind(@connection.cast_bound_value(value), &bind_block)
            end
          end

          if o.positional_binds
            o.sql_with_placeholders.scan(/\?|([^?]+)/) do
              if $1
                collector << $1
              else
                value = o.positional_binds[bind_index]
                bind_index += 1

                new_bind.call(value)
              end
            end
          else
            o.sql_with_placeholders.scan(/:(?<!::)([a-zA-Z]\w*)|([^:]+|.)/) do
              if $2
                collector << $2
              else
                value = o.named_binds[$1.to_sym]
                new_bind.call(value)
              end
            end
          end

          collector
        end