diff --git a/lib/arjdbc/abstract/database_statements.rb b/lib/arjdbc/abstract/database_statements.rb index 856619a23..f6de22c5d 100644 --- a/lib/arjdbc/abstract/database_statements.rb +++ b/lib/arjdbc/abstract/database_statements.rb @@ -9,7 +9,7 @@ module DatabaseStatements NO_BINDS = [].freeze - unless method_defined?(:mark_transaction_written_if_write) + unless ::ActiveRecord::ConnectionAdapters::AbstractAdapter.method_defined?(:mark_transaction_written_if_write) def mark_transaction_written_if_write(sql) if write_query?(sql) ensure_writes_are_allowed(sql) @@ -18,7 +18,7 @@ def mark_transaction_written_if_write(sql) end end - unless method_defined?(:check_if_write_query) + unless ::ActiveRecord::ConnectionAdapters::AbstractAdapter.method_defined?(:check_if_write_query) def check_if_write_query(sql) ensure_writes_are_allowed(sql) if write_query?(sql) end diff --git a/lib/arjdbc/sqlite3/adapter.rb b/lib/arjdbc/sqlite3/adapter.rb index b97f73f73..158abd74b 100644 --- a/lib/arjdbc/sqlite3/adapter.rb +++ b/lib/arjdbc/sqlite3/adapter.rb @@ -90,6 +90,9 @@ module SQLite3 "cache_size" => 2000 } + COLUMN_TAKES_CAST_TYPE = ConnectionAdapters::Column.instance_method(:initialize). + parameters.any? { |_kind, name| name == :cast_type } + class StatementPool < ConnectionAdapters::StatementPool # :nodoc: private def dealloc(stmt) @@ -471,12 +474,17 @@ def new_column_from_field(table_name, field, definitions) rowid = is_column_the_rowid?(field, definitions) - ActiveRecord::ConnectionAdapters::SQLite3Column.new( - field["name"], + column_args = [field["name"]] + column_args << lookup_cast_type(field["type"]) if COLUMN_TAKES_CAST_TYPE + column_args.push( default_value, type_metadata, field["notnull"].to_i == 0, - default_function, + default_function + ) + + ActiveRecord::ConnectionAdapters::SQLite3Column.new( + *column_args, collation: field["collation"], auto_increment: field["auto_increment"], rowid: rowid, @@ -609,7 +617,7 @@ def copy_table(from, to, options = {}) column_options[:stored] = column.virtual_stored? column_options[:type] = column.type elsif column.has_default? - type = lookup_cast_type_from_column(column) + type = column.respond_to?(:fetch_cast_type) ? column.fetch_cast_type(self) : lookup_cast_type_from_column(column) default = type.deserialize(column.default) default = -> { column.default_function } if default.nil? @@ -870,6 +878,10 @@ def dbconsole(config, options = {}) def jdbc_connection_class ::ActiveRecord::ConnectionAdapters::SQLite3JdbcConnection end + + def native_database_types # :nodoc: + ArJdbc::SQLite3::NATIVE_DATABASE_TYPES + end end # NOTE: include these modules before all then override some methods with the diff --git a/lib/arjdbc/sqlite3/column.rb b/lib/arjdbc/sqlite3/column.rb index 5191118c5..6193c8b1f 100644 --- a/lib/arjdbc/sqlite3/column.rb +++ b/lib/arjdbc/sqlite3/column.rb @@ -9,7 +9,7 @@ def initialize(*, auto_increment: nil, rowid: false, generated_type: nil, **) super @auto_increment = auto_increment - @default = nil if default =~ /NULL/ + @default = nil if default.is_a?(String) && default.match?(/NULL/) @rowid = rowid @generated_type = generated_type end