Module: Ridgepole::ExtTidb::Detector
- Defined in:
- lib/ridgepole/ext_tidb/detector.rb
Instance Method Summary collapse
-
#auto_random_base(table_name) ⇒ Object
AUTO_RANDOM_BASEテーブルオプションの検出.
-
#auto_random_column?(table_name, column_name) ⇒ Boolean
AUTO_RANDOMカラムの検出.
-
#tidb? ⇒ Boolean
TiDB接続の自動検出.
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カラムの検出
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接続の自動検出
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 |