method
table_structure_with_collation
v6.1.7.7 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::SQLite3Adapter
table_structure_with_collation(table_name, basic_structure)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb, line 487
def table_structure_with_collation(table_name, basic_structure)
collation_hash = {}
sql = <<~SQL
SELECT sql FROM
(SELECT * FROM sqlite_master UNION ALL
SELECT * FROM sqlite_temp_master)
WHERE type = 'table' AND name = #{quote(table_name)}
SQL
# Result will have following sample string
# CREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
# "password_digest" varchar COLLATE "NOCASE");
result = query_value(sql, "SCHEMA")
if result
# Splitting with left parentheses and discarding the first part will return all
# columns separated with comma(,).
columns_string = result.split("(", 2).last
columns_string.split(",").each do |column_string|
# This regex will match the column name and collation type and will save
# the value in $1 and $2 respectively.
collation_hash[$1] = $2 if COLLATE_REGEX =~ column_string
end
basic_structure.map do |column|
column_name = column["name"]
if collation_hash.has_key? column_name
column["collation"] = collation_hash[column_name]
end
column
end
else
basic_structure.to_a
end
end