Skip to content

Commit 707f90b

Browse files
committed
myrocks support
1 parent 4a61a90 commit 707f90b

File tree

3 files changed

+60
-0
lines changed

3 files changed

+60
-0
lines changed

activerecord/lib/active_record/connection_adapters.rb

+1
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ def resolve(adapter_name) # :nodoc:
6767
register "sqlite3", "ActiveRecord::ConnectionAdapters::SQLite3Adapter", "active_record/connection_adapters/sqlite3_adapter"
6868
register "mysql2", "ActiveRecord::ConnectionAdapters::Mysql2Adapter", "active_record/connection_adapters/mysql2_adapter"
6969
register "trilogy", "ActiveRecord::ConnectionAdapters::TrilogyAdapter", "active_record/connection_adapters/trilogy_adapter"
70+
register "trilogy_myrocks", "ActiveRecord::ConnectionAdapters::TrilogyMyRocksAdapter", "active_record/connection_adapters/trilogy_myrocks_adapter"
7071
register "postgresql", "ActiveRecord::ConnectionAdapters::PostgreSQLAdapter", "active_record/connection_adapters/postgresql_adapter"
7172

7273
eager_autoload do

activerecord/lib/active_record/connection_adapters/abstract/transaction.rb

+46
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,44 @@ def commit
494494
end
495495
end
496496

497+
class FakeTransaction < Transaction
498+
def initialize(connection, parent_transaction, **options)
499+
super(connection, **options)
500+
501+
parent_transaction.state.add_child(@state)
502+
503+
if isolation_level
504+
raise ActiveRecord::TransactionIsolationError, "cannot set transaction isolation in a nested transaction"
505+
end
506+
end
507+
508+
def materialize!
509+
super
510+
end
511+
512+
def restart
513+
return unless materialized?
514+
515+
@instrumenter.finish(:restart)
516+
@instrumenter.start
517+
518+
@parent.restart
519+
end
520+
521+
def rollback
522+
@state.rollback!
523+
@instrumenter.finish(:rollback) if materialized?
524+
end
525+
526+
def commit
527+
@state.commit!
528+
@instrumenter.finish(:commit) if materialized?
529+
end
530+
531+
def full_rollback?; false; end
532+
end
533+
534+
497535
class TransactionManager # :nodoc:
498536
def initialize(connection)
499537
@stack = []
@@ -522,6 +560,14 @@ def begin_transaction(isolation: nil, joinable: true, _lazy: true)
522560
joinable: joinable,
523561
run_commit_callbacks: run_commit_callbacks
524562
)
563+
elsif !@connection.supports_savepoints?
564+
FakeTransaction.new(
565+
@connection,
566+
current_transaction,
567+
isolation: isolation,
568+
joinable: joinable,
569+
run_commit_callbacks: run_commit_callbacks
570+
)
525571
else
526572
SavepointTransaction.new(
527573
@connection,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# frozen_string_literal: true
2+
3+
module ActiveRecord
4+
module ConnectionAdapters
5+
class TrilogyMyRocksAdapter < TrilogyAdapter
6+
ADAPTER_NAME = "TrilogyMyRocks"
7+
8+
def supports_savepoints?
9+
false
10+
end
11+
end
12+
end
13+
end

0 commit comments

Comments
 (0)