Class: ActiveRecord::ConnectionAdapters::AbstractAdapter

Inherits:
Object
  • Object
show all
Includes:
Benchmark
Defined in:
lib/active_record/connection_adapters/abstract_adapter.rb

Overview

All the concrete database adapters follow the interface laid down in this class. You can use this interface directly by borrowing the database connection from the Base with Base.connection.

Constant Summary collapse

@@row_even =
true

Instance Method Summary collapse

Constructor Details

#initialize(connection, logger = nil) ⇒ AbstractAdapter

:nodoc:



267
268
269
270
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 267

def initialize(connection, logger = nil) # :nodoc:
  @connection, @logger = connection, logger
  @runtime = 0
end

Instance Method Details

#adapter_nameObject

Returns the human-readable name of the adapter. Use mixed case - one can always use downcase if needed.



348
349
350
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 348

def adapter_name()
  'Abstract'
end

#add_column(table_name, column_name, type, options = {}) ⇒ Object



379
380
381
382
383
384
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 379

def add_column(table_name, column_name, type, options = {})
  add_column_sql = "ALTER TABLE #{table_name} ADD #{column_name} #{native_database_types[type]}"
  add_column_sql << "(#{limit})" if options[:limit]
  add_column_sql << " DEFAULT '#{options[:default]}'" if options[:default]
  execute(add_column_sql)
end

#add_limit!(sql, limit) ⇒ Object



355
356
357
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 355

def add_limit!(sql, limit)
  sql << " LIMIT #{limit}"
end

#begin_db_transactionObject

Begins the transaction (and turns off auto-committing).



312
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 312

def begin_db_transaction()    end

#columns(table_name, name = nil) ⇒ Object

Returns an array of column objects for the table specified by table_name.



279
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 279

def columns(table_name, name = nil) end

#commit_db_transactionObject

Commits the transaction (and turns on auto-committing).



315
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 315

def commit_db_transaction()   end

#create_table(name) ⇒ Object



369
370
371
372
373
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 369

def create_table(name)
  execute "CREATE TABLE #{name} (id #{native_database_types[:primary_key]})"
  table_definition = yield TableDefinition.new
  table_definition.columns.each { |column_name, type, options| add_column(name, column_name, type, options) }
end

#delete(sql, name = nil) ⇒ Object

Executes the delete statement and returns the number of rows affected.



288
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 288

def delete(sql, name = nil) end

#drop_table(name) ⇒ Object



375
376
377
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 375

def drop_table(name)
  execute "DROP TABLE #{name}"
end

#initialize_schema_informationObject



360
361
362
363
364
365
366
367
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 360

def initialize_schema_information
  begin
    execute "CREATE TABLE schema_info (version #{native_database_types[:integer]})"
    insert "INSERT INTO schema_info (version) VALUES(0)"
  rescue ActiveRecord::StatementInvalid
    # Schema has been intialized
  end
end

#insert(sql, name = nil, pk = nil, id_value = nil) ⇒ Object

Returns the last auto-generated ID from the affected table.



282
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 282

def insert(sql, name = nil, pk = nil, id_value = nil) end

#quote(value, column = nil) ⇒ Object



321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 321

def quote(value, column = nil)
  case value
    when String                
      if column && column.type == :binary
        "'#{quote_string(column.string_to_binary(value))}'" # ' (for ruby-mode)
      else
        "'#{quote_string(value)}'" # ' (for ruby-mode)
      end
    when NilClass              then "NULL"
    when TrueClass             then (column && column.type == :boolean ? "'t'" : "1")
    when FalseClass            then (column && column.type == :boolean ? "'f'" : "0")
    when Float, Fixnum, Bignum then value.to_s
    when Date                  then "'#{value.to_s}'" 
    when Time, DateTime        then "'#{value.strftime("%Y-%m-%d %H:%M:%S")}'"
    else                            "'#{quote_string(value.to_yaml)}'"
  end
end

#quote_column_name(name) ⇒ Object



343
344
345
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 343

def quote_column_name(name)
  name
end

#quote_string(s) ⇒ Object



339
340
341
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 339

def quote_string(s)
  s.gsub(/\\/, '\&\&').gsub(/'/, "''") # ' (for ruby-mode)
end

#remove_column(table_name, column_name) ⇒ Object



386
387
388
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 386

def remove_column(table_name, column_name)
  execute "ALTER TABLE #{table_name} DROP #{column_name}"
end

#reset_runtimeObject

:nodoc:



290
291
292
293
294
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 290

def reset_runtime # :nodoc:
  rt = @runtime
  @runtime = 0
  return rt
end

#rollback_db_transactionObject

Rolls back the transaction (and turns on auto-committing). Must be done if the transaction block raises an exception or returns false.



319
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 319

def rollback_db_transaction() end

#select_all(sql, name = nil) ⇒ Object

Returns an array of record hashes with the column names as a keys and fields as values.



273
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 273

def select_all(sql, name = nil) end

#select_one(sql, name = nil) ⇒ Object

Returns a record hash with the column names as a keys and fields as values.



276
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 276

def select_one(sql, name = nil) end

#structure_dumpObject

Returns a string of the CREATE TABLE SQL statements for recreating the entire structure of the database.



353
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 353

def structure_dump() end

#transaction(start_db_transaction = true) ⇒ Object

Wrap a block in a transaction. Returns result of block.



297
298
299
300
301
302
303
304
305
306
307
308
309
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 297

def transaction(start_db_transaction = true)
  begin
    if block_given?
      begin_db_transaction if start_db_transaction
      result = yield
      commit_db_transaction if start_db_transaction
      result
    end
  rescue Exception => database_transaction_rollback
    rollback_db_transaction if start_db_transaction
    raise
  end
end

#update(sql, name = nil) ⇒ Object

Executes the update statement and returns the number of rows affected.



285
# File 'lib/active_record/connection_adapters/abstract_adapter.rb', line 285

def update(sql, name = nil) end