34 lines
1.1 KiB
Ruby
34 lines
1.1 KiB
Ruby
# Fix for SQLite FTS5 virtual table schema dumping
|
|
# Rails has a bug where it doesn't handle FTS5 content= and content_rowid= options
|
|
|
|
module SQLiteFTS5SchemaDumperFix
|
|
# Override the virtual_tables method to handle FTS5 syntax properly
|
|
def virtual_tables(stream)
|
|
# Query sqlite_master for all virtual tables
|
|
virtual_table_sqls = @connection.select_rows(
|
|
"SELECT name, sql FROM sqlite_master WHERE type='table' AND sql LIKE 'CREATE VIRTUAL TABLE%'"
|
|
)
|
|
|
|
virtual_table_sqls.each do |table_name, sql|
|
|
# Just output the raw SQL since create_virtual_table doesn't handle our syntax
|
|
stream.puts " execute #{sql.inspect}"
|
|
stream.puts
|
|
end
|
|
end
|
|
end
|
|
|
|
if ENV.fetch("DATABASE_ADAPTER", "mysql") == "sqlite"
|
|
ActiveSupport.on_load(:active_record) do
|
|
# Ensure schema dumper is loaded
|
|
begin
|
|
require 'active_record/connection_adapters/sqlite3/schema_dumper'
|
|
rescue LoadError
|
|
# SQLite3 adapter not available
|
|
end
|
|
|
|
if defined?(ActiveRecord::ConnectionAdapters::SQLite3::SchemaDumper)
|
|
ActiveRecord::ConnectionAdapters::SQLite3::SchemaDumper.prepend(SQLiteFTS5SchemaDumperFix)
|
|
end
|
|
end
|
|
end
|