Class: ActiveRecord::ConnectionAdapters::MysqlAdapter
- Inherits:
-
AbstractAdapter
- Object
- AbstractAdapter
- ActiveRecord::ConnectionAdapters::MysqlAdapter
- Defined in:
- activerecord/lib/active_record/connection_adapters/mysql_adapter.rb
Overview
The MySQL adapter will work with both Ruby/MySQL, which is a Ruby-based MySQL adapter that comes bundled with Active Record, and with the faster C-based MySQL/Ruby adapter (available both as a gem and from www.tmtm.org/en/mysql/ruby/).
Options:
-
:host - Defaults to "localhost".
-
:port - Defaults to 3306.
-
:socket - Defaults to "/tmp/mysql.sock".
-
:username - Defaults to "root"
-
:password - Defaults to nothing.
-
:database - The name of the database. No default, must be provided.
-
:encoding - (Optional) Sets the client encoding by executing "SET NAMES <encoding>" after connection.
-
:reconnect - Defaults to false (See MySQL documentation: dev.mysql.com/doc/refman/5.0/en/auto-reconnect.html).
-
:sslca - Necessary to use MySQL with an SSL connection.
-
:sslkey - Necessary to use MySQL with an SSL connection.
-
:sslcert - Necessary to use MySQL with an SSL connection.
-
:sslcapath - Necessary to use MySQL with an SSL connection.
-
:sslcipher - Necessary to use MySQL with an SSL connection.
Constant Summary
- ADAPTER_NAME =
'MySQL'.freeze
- LOST_CONNECTION_ERROR_MESSAGES =
[ "Server shutdown in progress", "Broken pipe", "Lost connection to MySQL server during query", "MySQL server has gone away" ]
- NATIVE_DATABASE_TYPES =
{ :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY".freeze, :string => { :name => "varchar", :limit => 255 }, :text => { :name => "text" }, :integer => { :name => "int", :limit => 4 }, :float => { :name => "float" }, :decimal => { :name => "decimal" }, :datetime => { :name => "datetime" }, :timestamp => { :name => "datetime" }, :time => { :name => "time" }, :date => { :name => "date" }, :binary => { :name => "blob" }, :boolean => { :name => "tinyint", :limit => 1 } }
Instance Method Summary (collapse)
-
- (Boolean) active?
CONNECTION MANAGEMENT ====================================.
-
- (Object) adapter_name
:nodoc:.
- - (Object) add_column(table_name, column_name, type, options = {})
- - (Object) add_column_position!(sql, options)
-
- (Object) add_limit_offset!(sql, options)
:nodoc:.
-
- (Object) begin_db_transaction
:nodoc:.
- - (Object) case_sensitive_equality_operator
-
- (Object) change_column(table_name, column_name, type, options = {})
:nodoc:.
-
- (Object) change_column_default(table_name, column_name, default)
:nodoc:.
- - (Object) change_column_null(table_name, column_name, null, default = nil)
-
- (Object) charset
Returns the database character set.
-
- (Object) collation
Returns the database collation strategy.
-
- (Object) columns(table_name, name = nil)
:nodoc:.
-
- (Object) commit_db_transaction
:nodoc:.
-
- (Object) create_database(name, options = {})
Create a new MySQL database with optional :charset and :collation.
- - (Object) create_savepoint
-
- (Object) create_table(table_name, options = {})
:nodoc:.
- - (Object) current_database
-
- (Object) disable_referential_integrity
REFERENTIAL INTEGRITY ====================================.
- - (Object) disconnect!
-
- (Object) drop_database(name)
:nodoc:.
- - (Object) drop_table(table_name, options = {})
-
- (Object) execute(sql, name = nil)
Executes an SQL query and returns a MySQL::Result object.
-
- (Object) indexes(table_name, name = nil)
:nodoc:.
-
- (MysqlAdapter) initialize(connection, logger, connection_options, config)
constructor
A new instance of MysqlAdapter.
-
- (Object) insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
(also: #create)
:nodoc:.
- - (Object) limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key)
-
- (Object) native_database_types
:nodoc:.
-
- (Object) pk_and_sequence_for(table)
Returns a table's primary key and belonging sequence.
-
- (Object) primary_key(table)
Returns just a table's primary key.
-
- (Object) quote(value, column = nil)
QUOTING ==================================================.
-
- (Object) quote_column_name(name)
:nodoc:.
-
- (Object) quote_string(string)
:nodoc:.
-
- (Object) quote_table_name(name)
:nodoc:.
- - (Object) quoted_false
- - (Object) quoted_true
- - (Object) reconnect!
-
- (Object) recreate_database(name, options = {})
:nodoc:.
- - (Object) release_savepoint
-
- (Object) rename_column(table_name, column_name, new_column_name)
:nodoc:.
- - (Object) rename_table(table_name, new_name)
- - (Object) reset!
-
- (Object) rollback_db_transaction
:nodoc:.
- - (Object) rollback_to_savepoint
-
- (Object) select_rows(sql, name = nil)
DATABASE STATEMENTS ======================================.
-
- (Object) show_variable(name)
SHOW VARIABLES LIKE 'name'.
-
- (Object) structure_dump
SCHEMA STATEMENTS ========================================.
-
- (Boolean) supports_migrations?
:nodoc:.
-
- (Boolean) supports_primary_key?
:nodoc:.
-
- (Boolean) supports_savepoints?
:nodoc:.
-
- (Object) tables(name = nil)
:nodoc:.
-
- (Object) type_to_sql(type, limit = nil, precision = nil, scale = nil)
Maps logical Rails types to MySQL-specific data types.
-
- (Object) update_sql(sql, name = nil)
:nodoc:.
Methods inherited from AbstractAdapter
#current_savepoint_name, #decrement_open_transactions, #increment_open_transactions, #open_transactions, #prefetch_primary_key?, #raw_connection, #requires_reloading?, #supports_count_distinct?, #supports_ddl_transactions?, #transaction_joinable=, #verify!
Methods included from ActiveSupport::Callbacks
Methods included from ActiveSupport::Concern
#append_features, extended, #included
Methods inherited from QueryCache
Methods included from DatabaseLimits
#column_name_length, #columns_per_multicolumn_index, #columns_per_table, #in_clause_length, #index_name_length, #indexes_per_table, #joins_per_query, #sql_query_length, #table_alias_length, #table_name_length
Methods included from SchemaStatements
#add_column_options!, #add_index, #add_timestamps, #assume_migrated_upto_version, #change_table, #column_exists?, #distinct, #dump_schema_information, #index_exists?, #index_name, #index_name_exists?, #initialize_schema_migrations_table, #remove_column, #remove_index, #remove_index!, #remove_timestamps, #rename_index, #table_alias_for, #table_exists?
Methods included from DatabaseStatements
#add_transaction_record, #default_sequence_name, #delete, #empty_insert_statement_value, #insert, #insert_fixture, #outside_transaction?, #reset_sequence!, #select_all, #select_one, #select_value, #select_values, #transaction, #update
Methods included from Quoting
Constructor Details
- (MysqlAdapter) initialize(connection, logger, connection_options, config)
A new instance of MysqlAdapter
160 161 162 163 164 165 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 160 def initialize(connection, logger, , config) super(connection, logger) @connection_options, @config = , config @quoted_column_names, @quoted_table_names = {}, {} connect end |
Instance Method Details
- (Boolean) active?
CONNECTION MANAGEMENT ====================================
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 236 def active? if @connection.respond_to?(:stat) @connection.stat else @connection.query 'select 1' end # mysql-ruby doesn't raise an exception when stat fails. if @connection.respond_to?(:errno) @connection.errno.zero? else true end rescue Mysql::Error false end |
- (Object) adapter_name
:nodoc:
167 168 169 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 167 def adapter_name #:nodoc: ADAPTER_NAME end |
- (Object) add_column(table_name, column_name, type, options = {})
452 453 454 455 456 457 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 452 def add_column(table_name, column_name, type, = {}) add_column_sql = "ALTER TABLE #{quote_table_name(table_name)} ADD #{quote_column_name(column_name)} #{type_to_sql(type, [:limit], [:precision], [:scale])}" (add_column_sql, ) add_column_position!(add_column_sql, ) execute(add_column_sql) end |
- (Object) add_column_position!(sql, options)
519 520 521 522 523 524 525 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 519 def add_column_position!(sql, ) if [:first] sql << " FIRST" elsif [:after] sql << " AFTER #{quote_column_name([:after])}" end end |
- (Object) add_limit_offset!(sql, options)
:nodoc:
340 341 342 343 344 345 346 347 348 349 350 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 340 def add_limit_offset!(sql, ) #:nodoc: limit, offset = [:limit], [:offset] if limit && offset sql << " LIMIT #{offset.to_i}, #{sanitize_limit(limit)}" elsif limit sql << " LIMIT #{sanitize_limit(limit)}" elsif offset sql << " OFFSET #{offset.to_i}" end sql end |
- (Object) begin_db_transaction
:nodoc:
310 311 312 313 314 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 310 def begin_db_transaction #:nodoc: execute "BEGIN" rescue Exception # Transactions aren't supported end |
- (Object) case_sensitive_equality_operator
550 551 552 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 550 def case_sensitive_equality_operator "= BINARY" end |
- (Object) change_column(table_name, column_name, type, options = {})
:nodoc:
474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 474 def change_column(table_name, column_name, type, = {}) #:nodoc: column = column_for(table_name, column_name) unless () [:default] = column.default end unless .has_key?(:null) [:null] = column.null end change_column_sql = "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(column_name)} #{type_to_sql(type, [:limit], [:precision], [:scale])}" (change_column_sql, ) add_column_position!(change_column_sql, ) execute(change_column_sql) end |
- (Object) change_column_default(table_name, column_name, default)
:nodoc:
459 460 461 462 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 459 def change_column_default(table_name, column_name, default) #:nodoc: column = column_for(table_name, column_name) change_column table_name, column_name, column.sql_type, :default => default end |
- (Object) change_column_null(table_name, column_name, null, default = nil)
464 465 466 467 468 469 470 471 472 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 464 def change_column_null(table_name, column_name, null, default = nil) column = column_for(table_name, column_name) unless null || default.nil? execute("UPDATE #{quote_table_name(table_name)} SET #{quote_column_name(column_name)}=#{quote(default)} WHERE #{quote_column_name(column_name)} IS NULL") end change_column table_name, column_name, column.sql_type, :null => null end |
- (Object) charset
Returns the database character set.
396 397 398 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 396 def charset show_variable 'character_set_database' end |
- (Object) collation
Returns the database collation strategy.
401 402 403 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 401 def collation show_variable 'collation_database' end |
- (Object) columns(table_name, name = nil)
:nodoc:
435 436 437 438 439 440 441 442 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 435 def columns(table_name, name = nil)#:nodoc: sql = "SHOW FIELDS FROM #{quote_table_name(table_name)}" columns = [] result = execute(sql, :skip_logging) result.each { |field| columns << MysqlColumn.new(field[0], field[4], field[1], field[2] == "YES") } result.free columns end |
- (Object) commit_db_transaction
:nodoc:
316 317 318 319 320 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 316 def commit_db_transaction #:nodoc: execute "COMMIT" rescue Exception # Transactions aren't supported end |
- (Object) create_database(name, options = {})
Create a new MySQL database with optional :charset and :collation. Charset defaults to utf8.
Example:
create_database 'charset_test', :charset => 'latin1', :collation => 'latin1_bin'
create_database 'matt_development'
create_database 'matt_development', :charset => :big5
379 380 381 382 383 384 385 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 379 def create_database(name, = {}) if [:collation] execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{[:charset] || 'utf8'}` COLLATE `#{[:collation]}`" else execute "CREATE DATABASE `#{name}` DEFAULT CHARACTER SET `#{[:charset] || 'utf8'}`" end end |
- (Object) create_savepoint
328 329 330 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 328 def create_savepoint execute("SAVEPOINT #{current_savepoint_name}") end |
- (Object) create_table(table_name, options = {})
:nodoc:
444 445 446 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 444 def create_table(table_name, = {}) #:nodoc: super(table_name, .reverse_merge(:options => "ENGINE=InnoDB")) end |
- (Object) current_database
391 392 393 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 391 def current_database select_value 'SELECT DATABASE() as db' end |
- (Object) disable_referential_integrity
REFERENTIAL INTEGRITY ====================================
223 224 225 226 227 228 229 230 231 232 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 223 def disable_referential_integrity #:nodoc: old = select_value("SELECT @@FOREIGN_KEY_CHECKS") begin update("SET FOREIGN_KEY_CHECKS = 0") yield ensure update("SET FOREIGN_KEY_CHECKS = #{old}") end end |
- (Object) disconnect!
258 259 260 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 258 def disconnect! @connection.close rescue nil end |
- (Object) drop_database(name)
:nodoc:
387 388 389 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 387 def drop_database(name) #:nodoc: execute "DROP DATABASE IF EXISTS `#{name}`" end |
- (Object) drop_table(table_name, options = {})
413 414 415 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 413 def drop_table(table_name, = {}) super(table_name, ) end |
- (Object) execute(sql, name = nil)
Executes an SQL query and returns a MySQL::Result object. Note that you have to free the Result object after you're done using it.
285 286 287 288 289 290 291 292 293 294 295 296 297 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 285 def execute(sql, name = nil) #:nodoc: if name == :skip_logging @connection.query(sql) else log(sql, name) { @connection.query(sql) } end rescue ActiveRecord::StatementInvalid => exception if exception..split(":").first =~ /Packets out of order/ raise ActiveRecord::StatementInvalid, "'Packets out of order' error was received from the database. Please update your mysql bindings (gem install mysql) and read http://dev.mysql.com/doc/mysql/en/password-hashing.html for more information. If you're on Windows, use the Instant Rails installer to get the updated mysql bindings." else raise end end |
- (Object) indexes(table_name, name = nil)
:nodoc:
417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 417 def indexes(table_name, name = nil)#:nodoc: indexes = [] current_index = nil result = execute("SHOW KEYS FROM #{quote_table_name(table_name)}", name) result.each do |row| if current_index != row[2] next if row[2] == "PRIMARY" # skip the primary key current_index = row[2] indexes << IndexDefinition.new(row[0], row[2], row[1] == "0", [], []) end indexes.last.columns << row[4] indexes.last.lengths << row[7] end result.free indexes end |
- (Object) insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) Also known as: create
:nodoc:
299 300 301 302 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 299 def insert_sql(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc: super sql, name id_value || @connection.insert_id end |
- (Object) limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key)
554 555 556 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 554 def limited_update_conditions(where_sql, quoted_table_name, quoted_primary_key) where_sql end |
- (Object) native_database_types
:nodoc:
183 184 185 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 183 def native_database_types #:nodoc: NATIVE_DATABASE_TYPES end |
- (Object) pk_and_sequence_for(table)
Returns a table's primary key and belonging sequence.
534 535 536 537 538 539 540 541 542 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 534 def pk_and_sequence_for(table) #:nodoc: keys = [] result = execute("describe #{quote_table_name(table)}") result.each_hash do |h| keys << h["Field"]if h["Key"] == "PRI" end result.free keys.length == 1 ? [keys.first, nil] : nil end |
- (Object) primary_key(table)
Returns just a table's primary key
545 546 547 548 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 545 def primary_key(table) pk_and_sequence = pk_and_sequence_for(table) pk_and_sequence && pk_and_sequence.first end |
- (Object) quote(value, column = nil)
QUOTING ==================================================
190 191 192 193 194 195 196 197 198 199 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 190 def quote(value, column = nil) if value.kind_of?(String) && column && column.type == :binary && column.class.respond_to?(:string_to_binary) s = column.class.string_to_binary(value).unpack("H*")[0] "x'#{s}'" elsif value.kind_of?(BigDecimal) value.to_s("F") else super end end |
- (Object) quote_column_name(name)
:nodoc:
201 202 203 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 201 def quote_column_name(name) #:nodoc: @quoted_column_names[name] ||= "`#{name}`" end |
- (Object) quote_string(string)
:nodoc:
209 210 211 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 209 def quote_string(string) #:nodoc: @connection.quote(string) end |
- (Object) quote_table_name(name)
:nodoc:
205 206 207 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 205 def quote_table_name(name) #:nodoc: @quoted_table_names[name] ||= quote_column_name(name).gsub('.', '`.`') end |
- (Object) quoted_false
217 218 219 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 217 def quoted_false QUOTED_FALSE end |
- (Object) quoted_true
213 214 215 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 213 def quoted_true QUOTED_TRUE end |
- (Object) reconnect!
253 254 255 256 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 253 def reconnect! disconnect! connect end |
- (Object) recreate_database(name, options = {})
:nodoc:
367 368 369 370 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 367 def recreate_database(name, = {}) #:nodoc: drop_database(name) create_database(name, ) end |
- (Object) release_savepoint
336 337 338 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 336 def release_savepoint execute("RELEASE SAVEPOINT #{current_savepoint_name}") end |
- (Object) rename_column(table_name, column_name, new_column_name)
:nodoc:
491 492 493 494 495 496 497 498 499 500 501 502 503 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 491 def rename_column(table_name, column_name, new_column_name) #:nodoc: = {} if column = columns(table_name).find { |c| c.name == column_name.to_s } [:default] = column.default [:null] = column.null else raise ActiveRecordError, "No such column: #{table_name}.#{column_name}" end current_type = select_one("SHOW COLUMNS FROM #{quote_table_name(table_name)} LIKE '#{column_name}'")["Type"] rename_column_sql = "ALTER TABLE #{quote_table_name(table_name)} CHANGE #{quote_column_name(column_name)} #{quote_column_name(new_column_name)} #{current_type}" (rename_column_sql, ) execute(rename_column_sql) end |
- (Object) rename_table(table_name, new_name)
448 449 450 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 448 def rename_table(table_name, new_name) execute "RENAME TABLE #{quote_table_name(table_name)} TO #{quote_table_name(new_name)}" end |
- (Object) reset!
262 263 264 265 266 267 268 269 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 262 def reset! if @connection.respond_to?(:change_user) # See http://bugs.mysql.com/bug.php?id=33540 -- the workaround way to # reset the connection is to change the user to the same user. @connection.change_user(@config[:username], @config[:password], @config[:database]) configure_connection end end |
- (Object) rollback_db_transaction
:nodoc:
322 323 324 325 326 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 322 def rollback_db_transaction #:nodoc: execute "ROLLBACK" rescue Exception # Transactions aren't supported end |
- (Object) rollback_to_savepoint
332 333 334 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 332 def rollback_to_savepoint execute("ROLLBACK TO SAVEPOINT #{current_savepoint_name}") end |
- (Object) select_rows(sql, name = nil)
DATABASE STATEMENTS ======================================
273 274 275 276 277 278 279 280 281 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 273 def select_rows(sql, name = nil) @connection.query_with_result = true result = execute(sql, name) rows = [] result.each { |row| rows << row } result.free @connection.more_results && @connection.next_result # invoking stored procedures with CLIENT_MULTI_RESULTS requires this to tidy up else connection will be dropped rows end |
- (Object) show_variable(name)
SHOW VARIABLES LIKE 'name'
528 529 530 531 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 528 def show_variable(name) variables = select_all("SHOW VARIABLES LIKE '#{name}'") variables.first['Value'] unless variables.empty? end |
- (Object) structure_dump
SCHEMA STATEMENTS ========================================
354 355 356 357 358 359 360 361 362 363 364 365 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 354 def structure_dump #:nodoc: if supports_views? sql = "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'" else sql = "SHOW TABLES" end select_all(sql).map do |table| table.delete('Table_type') select_one("SHOW CREATE TABLE #{quote_table_name(table.to_a.first.last)}")["Create Table"] + ";\n\n" end.join("") end |
- (Boolean) supports_migrations?
:nodoc:
171 172 173 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 171 def supports_migrations? #:nodoc: true end |
- (Boolean) supports_primary_key?
:nodoc:
175 176 177 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 175 def supports_primary_key? #:nodoc: true end |
- (Boolean) supports_savepoints?
:nodoc:
179 180 181 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 179 def supports_savepoints? #:nodoc: true end |
- (Object) tables(name = nil)
:nodoc:
405 406 407 408 409 410 411 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 405 def tables(name = nil) #:nodoc: tables = [] result = execute("SHOW TABLES", name) result.each { |field| tables << field[0] } result.free tables end |
- (Object) type_to_sql(type, limit = nil, precision = nil, scale = nil)
Maps logical Rails types to MySQL-specific data types.
506 507 508 509 510 511 512 513 514 515 516 517 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 506 def type_to_sql(type, limit = nil, precision = nil, scale = nil) return super unless type.to_s == 'integer' case limit when 1; 'tinyint' when 2; 'smallint' when 3; 'mediumint' when nil, 4, 11; 'int(11)' # compatibility with MySQL default when 5..8; 'bigint' else raise(ActiveRecordError, "No integer type has byte size #{limit}") end end |
- (Object) update_sql(sql, name = nil)
:nodoc:
305 306 307 308 |
# File 'activerecord/lib/active_record/connection_adapters/mysql_adapter.rb', line 305 def update_sql(sql, name = nil) #:nodoc: super @connection.affected_rows end |