123456789_123456789_123456789_123456789_123456789_

Module: ActiveRecord::ConnectionAdapters::Trilogy::DatabaseStatements

Relationships & Source Files
Extension / Inclusion / Inheritance Descendants
Included In:
Defined in: activerecord/lib/active_record/connection_adapters/trilogy/database_statements.rb

Instance Method Summary

Instance Method Details

#_exec_insert(intent, pk = nil, sequence_name = nil, returning: nil)

This method is for internal use only.
[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/trilogy/database_statements.rb', line 7

def _exec_insert(intent, pk = nil, sequence_name = nil, returning: nil) # :nodoc:
  sql, binds = sql_for_insert(intent.raw_sql, pk, intent.binds, returning)
  intent.raw_sql = sql
  intent.binds = binds

  # AbstractAdapter calls raw_exec_query (returning an AR::Result), but
  # our last_inserted_id needs the raw Trilogy result object
  raw_execute(intent)
end

#affected_rows(result) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/trilogy/database_statements.rb', line 55

def affected_rows(result)
  result.affected_rows
end

#cast_result(result) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/trilogy/database_statements.rb', line 47

def cast_result(result)
  if result.fields.empty?
    ActiveRecord::Result.empty(affected_rows: result.affected_rows)
  else
    ActiveRecord::Result.new(result.fields, result.rows, affected_rows: result.affected_rows)
  end
end

#execute_batch(statements, name = nil, **kwargs) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/trilogy/database_statements.rb', line 67

def execute_batch(statements, name = nil, **kwargs)
  combine_multi_statements(statements).each do |statement|
    intent = QueryIntent.new(
      processed_sql: statement,
      name: name,
      batch: true,
      binds: kwargs[:binds] || [],
      prepare: kwargs[:prepare] || false,
      async: kwargs[:async] || false,
      allow_retry: kwargs[:allow_retry] || false,
      materialize_transactions: kwargs[:materialize_transactions] != false
    )
    raw_execute(intent)
  end
end

#last_inserted_id(result) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/trilogy/database_statements.rb', line 59

def last_inserted_id(result)
  if supports_insert_returning?
    super
  else
    result.last_insert_id
  end
end

#perform_query(raw_connection, intent) (private)

[ GitHub ]

  
# File 'activerecord/lib/active_record/connection_adapters/trilogy/database_statements.rb', line 18

def perform_query(raw_connection, intent)
  reset_multi_statement = if intent.batch && !@config[:multi_statement]
    raw_connection.set_server_option(::Trilogy::SET_SERVER_MULTI_STATEMENTS_ON)
    true
  end

  # Make sure we carry over any changes to ActiveRecord.default_timezone that have been
  # made since we established the connection
  if default_timezone == :local
    raw_connection.query_flags |= ::Trilogy::QUERY_FLAGS_LOCAL_TIMEZONE
  else
    raw_connection.query_flags &= ~::Trilogy::QUERY_FLAGS_LOCAL_TIMEZONE
  end

  result = raw_connection.query(intent.processed_sql)
  while raw_connection.more_results_exist?
    raw_connection.next_result
  end
  verified!

  intent.notification_payload[:affected_rows] = result.affected_rows
  intent.notification_payload[:row_count] = result.count
  result
ensure
  if reset_multi_statement && active?
    raw_connection.set_server_option(::Trilogy::SET_SERVER_MULTI_STATEMENTS_OFF)
  end
end