Module: Ridgepole::ExtTidb::Detector

Defined in:
lib/ridgepole/ext_tidb/detector.rb

Instance Method Summary collapse

Instance Method Details

#auto_random_base(table_name) ⇒ Object

AUTO_RANDOM_BASEテーブルオプションの検出



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/ridgepole/ext_tidb/detector.rb', line 55

def auto_random_base(table_name)
  return nil unless tidb?

  result = execute("SHOW CREATE TABLE #{quote_table_name(table_name)}")
  create_sql = result.first[1] if result.first

  if create_sql&.match(/AUTO_RANDOM_BASE=(\d+)/i)
    $1.to_i
  end
rescue
  nil
end

#auto_random_column?(table_name, column_name) ⇒ Boolean

AUTO_RANDOMカラムの検出

Returns:



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ridgepole/ext_tidb/detector.rb', line 22

def auto_random_column?(table_name, column_name)
  return false unless tidb?

  # SHOW CREATE TABLEでAUTO_RANDOMを検出
  result = execute("SHOW CREATE TABLE #{quote_table_name(table_name)}")
  create_sql = result.first[1] if result.first

  if create_sql
    # TiDBでのAUTO_RANDOM検出パターン
    patterns = [
      /AUTO_RANDOM\(\d+\)/i,
      /\/\*T!\[auto_rand\] AUTO_RANDOM\(\d+\) \*\//i
    ]

    patterns.any? { |pattern| create_sql.match?(pattern) }
  else
    # フォールバック: INFORMATION_SCHEMA.COLUMNSを確認
    extra = select_value("      SELECT EXTRA\n      FROM INFORMATION_SCHEMA.COLUMNS\n      WHERE TABLE_SCHEMA = DATABASE()\n        AND TABLE_NAME = \#{quote(table_name)}\n        AND COLUMN_NAME = \#{quote(column_name)}\n    SQL\n\n    extra&.downcase&.include?('auto_random') == true\n  end\nrescue => e\n  Rails.logger.debug \"AUTO_RANDOM detection failed: \#{e.message}\" if defined?(Rails)\n  false\nend\n")

#tidb?Boolean

TiDB接続の自動検出

Returns:



7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/ridgepole/ext_tidb/detector.rb', line 7

def tidb?
  return @tidb_detected if defined?(@tidb_detected)

  @tidb_detected = begin
    version_info = select_value('SELECT VERSION()')
    result = version_info&.include?('TiDB') == true
    Rails.logger.debug "TiDB detection: version=#{version_info}, result=#{result}" if defined?(Rails)
    result
  rescue => e
    Rails.logger.debug "TiDB detection failed: #{e.message}" if defined?(Rails)
    false
  end
end