class ActiveRecord::ConnectionAdapters::TidbAdapter

Constants

ADAPTER_NAME

Public Class Methods

database_exists?(config) click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 99
def self.database_exists?(config)
  !ActiveRecord::Base.tidb_connection(config).nil?
rescue ActiveRecord::NoDatabaseError
  false
end
new(connection, logger, conn_params, config) click to toggle source
Calls superclass method
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 84
def initialize(connection, logger, conn_params, config)
  super(connection, logger, conn_params, config)

  tidb_version_string = query_value('select version()')
  @tidb_version = tidb_version_string[/TiDB-v([0-9.]+)/, 1]
end

Public Instance Methods

new_column_from_field(_table_name, field) click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 105
def new_column_from_field(_table_name, field)
  type_metadata = fetch_type_metadata(field[:Type], field[:Extra])
  default = field[:Default]
  default_function = nil

  if type_metadata.type == :datetime && /\ACURRENT_TIMESTAMP(?:\([0-6]?\))?\z/i.match?(default)
    default_function = default
    default = nil
  elsif type_metadata.extra == 'DEFAULT_GENERATED'
    default = +"(#{default})" unless default.start_with?('(')
    default_function = default
    default = nil
  elsif default.to_s =~ /nextval/i
    default_function = default
    default = nil
  end

  MySQL::Column.new(
    field[:Field],
    default,
    type_metadata,
    field[:Null] == 'YES',
    default_function,
    collation: field[:Collation],
    comment: field[:Comment].presence
  )
end
supports_advisory_locks?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 52
def supports_advisory_locks?
  false
end
supports_bulk_alter?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 48
def supports_bulk_alter?
  false
end
supports_common_table_expressions?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 73
def supports_common_table_expressions?
  tidb_version >= '5.1.0'
end
supports_expression_index?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 69
def supports_expression_index?
  false
end
supports_foreign_keys?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 44
def supports_foreign_keys?
  false
end
supports_index_sort_order?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 64
def supports_index_sort_order?
  # TODO: check TiDB version
  true
end
supports_json?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 60
def supports_json?
  true
end
supports_optimizer_hints?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 56
def supports_optimizer_hints?
  true
end
supports_savepoints?() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 40
def supports_savepoints?
  false
end
tidb_version() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 95
def tidb_version
  Version.new(tidb_version_string)
end
tidb_version_string() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 91
def tidb_version_string
  @tidb_version
end
transaction_isolation_levels() click to toggle source
# File lib/active_record/connection_adapters/tidb_adapter.rb, line 77
def transaction_isolation_levels
  {
    read_committed: 'READ COMMITTED',
    repeatable_read: 'REPEATABLE READ'
  }
end