Sha256: a6d1ba1c3dee79da4ff7fd62e5bc3933c027db05b54ab2a7791e39e4050dcc53

Contents?: true

Size: 1.69 KB

Versions: 2

Compression:

Stored size: 1.69 KB

Contents

# frozen_string_literal: true

module MiniSql
  module Mysql
    class Connection < MiniSql::Connection
      attr_reader :param_encoder, :raw_connection, :deserializer_cache

      def initialize(raw_connection, args = nil)
        @raw_connection = raw_connection
        @param_encoder = (args && args[:param_encoder]) || InlineParamEncoder.new(self)
        @deserializer_cache = (args && args[:deserializer_cache]) || DeserializerCache.new
      end

      def prepared(condition = true)
        if condition
          @prepared ||= PreparedConnection.new(self)
        else
          self
        end
      end

      def query_single(sql, *params)
        run(sql, :array, params).to_a.flatten!
      end

      def query_hash(sql, *params)
        result = run(sql, :hash, params)
        result.to_a
      end

      def query_array(sql, *params)
        run(sql, :array, params).to_a
      end

      def exec(sql, *params)
        run(sql, :array, params)
        raw_connection.affected_rows
      end

      def query(sql, *params)
        result = run(sql, :array, params)
        deserializer_cache.materialize(result)
      end

      def query_decorator(decorator, sql, *params)
        result = run(sql, :array, params)
        deserializer_cache.materialize(result, decorator)
      end

      def escape_string(str)
        raw_connection.escape(str)
      end

      private

      def run(sql, as, params)
        raw_connection.query(
          to_sql(sql, *params),
          as: as,
          database_timezone: :utc,
          application_timezone: :utc,
          cast_booleans: true,
          cast: true,
          cache_rows: true,
          symbolize_keys: false
        )
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mini_sql-1.6.0 lib/mini_sql/mysql/connection.rb
mini_sql-1.5.0 lib/mini_sql/mysql/connection.rb