Module: UsesguidMigrations::ActiveRecordExtensions::ConnectionAdapters::MysqlAdapter

Defined in:
lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb

Instance Method Summary collapse

Instance Method Details

#foreign_keys(table_name, name = nil) ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 21

def foreign_keys( table_name, name=nil )
  results = execute( "SHOW CREATE TABLE `#{table_name}`", name )

  null_foreign_keys = []
  not_null_foreign_keys = []
  primary_keys = []

  results.each do |row|
    row[1].each do |line|
      null_foreign_keys << $1 if line =~ /^  [`"](.+?)[`"] varchar\(22\) character set latin1 collate latin1_bin default NULL?,?$/
      not_null_foreign_keys << $1 if line =~ /^  [`"](.+?)[`"] varchar\(22\) character set latin1 collate latin1_bin NOT NULL?,?$/
      primary_keys << $1 if line =~ /^  PRIMARY KEY  \([`"](.+?)[`"]\)$/
      primary_keys << $1 if line =~ /^  PRIMARY KEY  \([`"](.+?)[`"]\),$/
    end
  end

  return null_foreign_keys - primary_keys, not_null_foreign_keys - primary_keys
end

#primary_key_name(table_name, name = nil) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 4

def primary_key_name( table_name, name=nil )
  results = execute( "SHOW CREATE TABLE `#{table_name}`", name )
  keys = []
  primary_key = nil

  results.each do |row|
    row[1].each do |line|
      keys << $1 if line =~ /^  [`"](.+?)[`"] varchar\(22\) character set latin1 collate latin1_bin NOT NULL?,?$/
      primary_key = $1 if line =~ /^  PRIMARY KEY  \([`"](.+?)[`"]\)$/
      primary_key = $1 if line =~ /^  PRIMARY KEY  \([`"](.+?)[`"]\),$/
      primary_key = $1 if line =~ /^  PRIMARY KEY  \([`"](.+?)[`"]\), $/
    end
  end

  return keys.include?( primary_key ) ? primary_key : nil
end

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



57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 57

def uses_guid_add_column( table_name, column_name, type, options={} )
  column = ActiveRecord::ConnectionAdapters::ColumnDefinition.new( self, column_name, :string )
  if options[:limit]
    column.limit = options[:limit]
    #elsif native[type.to_sym].is_a?( Hash )
    #  column.limit = native[type.to_sym][:limit]
  end
  column.precision = options[:precision]
  column.scale = options[:scale]
  column.default = options[:default]
  column.null = options[:null]

  execute usesguid_add_column_statement( table_name, column )
end

#usesguid_add_column_statement(table_name, column_def) ⇒ Object



88
89
90
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 88

def usesguid_add_column_statement( table_name, column_def )
  "ALTER TABLE #{quote_table_name( table_name )} ADD #{quote_column_name( column_def.name )} VARCHAR(#{column_def.limit || 22}) BINARY CHARACTER SET latin1 COLLATE latin1_bin"
end

#usesguid_alter_column_statement(table_name, pk_name, options = {}) ⇒ Object



80
81
82
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 80

def usesguid_alter_column_statement( table_name, pk_name, options={} )
  "ALTER TABLE `#{table_name}` MODIFY COLUMN `#{pk_name}` VARCHAR(#{options[:limit] || 22}) BINARY CHARACTER SET latin1 COLLATE latin1_bin#{options[:null] == true ? '' : ' NOT NULL'};"
end

#usesguid_create_table(table_name, table_definition, options) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 40

def usesguid_create_table( table_name, table_definition, options )
  execute usesuid_create_table_statement( table_name, table_definition, options )

  unless table_name == "schema_migrations"
    unless options[:id] == false || options[:guid] == false
      execute usesguid_alter_column_statement( table_name, table_definition.primary_key_name, :null => false )
      execute usesguid_make_column_primary_key( table_name, table_definition.primary_key_name )
    end

    return if table_definition.associative_keys.nil?

    table_definition.associative_keys.each do |assoc|
      execute usesguid_alter_column_statement( table_name, assoc.name, assoc.options )
    end
  end
end

#usesguid_make_column_primary_key(table_name, pk_name) ⇒ Object



84
85
86
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 84

def usesguid_make_column_primary_key( table_name, pk_name )
  "ALTER TABLE `#{table_name}` ADD PRIMARY KEY (#{pk_name})"
end

#usesuid_create_table_statement(table_name, table_definition, options) ⇒ Object



72
73
74
75
76
77
78
# File 'lib/usesguid_migrations/active_record_extensions/connection_adapters/mysql_adapter.rb', line 72

def usesuid_create_table_statement( table_name, table_definition, options )
  create_sql = "CREATE#{' TEMPORARY' if options[:temporary]} TABLE "
  create_sql << "#{quote_table_name( table_name )} ("
  create_sql << table_definition.to_sql
  create_sql << ") #{options[:options]}"
  create_sql
end