1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'mysql2'
user, pass, host, port = ENV.values_at('user', 'pass', 'host', 'port')
mysql_to_rb = {
"big5" => "Big5",
"dec8" => "NULL",
"cp850" => "CP850",
"hp8" => "NULL",
"koi8r" => "KOI8-R",
"latin1" => "ISO-8859-1",
"latin2" => "ISO-8859-2",
"swe7" => "NULL",
"ascii" => "US-ASCII",
"ujis" => "eucJP-ms",
"sjis" => "Shift_JIS",
"hebrew" => "ISO-8859-8",
"tis620" => "TIS-620",
"euckr" => "EUC-KR",
"koi8u" => "KOI8-R",
"gb2312" => "GB2312",
"greek" => "ISO-8859-7",
"cp1250" => "Windows-1250",
"gbk" => "GBK",
"latin5" => "ISO-8859-9",
"armscii8" => "NULL",
"utf8" => "UTF-8",
"ucs2" => "UTF-16BE",
"cp866" => "IBM866",
"keybcs2" => "NULL",
"macce" => "macCentEuro",
"macroman" => "macRoman",
"cp852" => "CP852",
"latin7" => "ISO-8859-13",
"utf8mb4" => "UTF-8",
"cp1251" => "Windows-1251",
"utf16" => "UTF-16",
"cp1256" => "Windows-1256",
"cp1257" => "Windows-1257",
"utf32" => "UTF-32",
"binary" => "ASCII-8BIT",
"geostd8" => "NULL",
"cp932" => "Windows-31J",
"eucjpms" => "eucJP-ms",
"utf16le" => "UTF-16LE",
"gb18030" => "GB18030",
}
client = Mysql2::Client.new(username: user, password: pass, host: host, port: port.to_i)
collations = client.query "SHOW COLLATION", as: :array
encodings = Array.new(collations.to_a.last[2].to_i)
encodings_with_nil = Array.new(encodings.size)
collations.each do |collation|
mysql_col_idx = collation[2].to_i
rb_enc = mysql_to_rb.fetch(collation[1]) do |mysql_enc|
warn "WARNING: Missing mapping for collation \"#{collation[0]}\" with encoding \"#{mysql_enc}\" and id #{mysql_col_idx}, assuming NULL"
"NULL"
end
encodings[mysql_col_idx - 1] = [mysql_col_idx, rb_enc]
end
encodings.each_with_index do |encoding, idx|
encodings_with_nil[idx] = (encoding || [idx, "NULL"])
end
encodings_with_nil.sort! do |a, b|
a[0] <=> b[0]
end
encodings_with_nil = encodings_with_nil.map do |encoding|
name = if encoding.nil? || encoding[1] == 'NULL'
'NULL'
else
"\"#{encoding[1]}\""
end
" #{name}"
end
# start printing output
puts "static const char *mysql2_mysql_enc_to_rb[] = {"
puts encodings_with_nil.join(",\n")
puts "};"
|