You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Issue: Many of my complex sql statements were being performed by the primary instead of the replica. It turns out that the sql_replica_matchers regex is insufficient for queries that begin with CTE 'with' statements.
In lib/active_record/connection_adapters/makara_abstract_adapter.rb
[\s\S] is the difference and accounts for new lines.
This is because '.' regex doesn't account for new lines (which will obviously be there in complex sql statements).
My workaround is this. Hope this helps! :)
class ActiveRecord::ConnectionAdapters::MakaraAbstractAdapter < ::Makara::Proxy
CUSTOM_SQL_REPLICA_MATCHERS = [/\A\s*(select|with[\s\S]*\)\s*select)\s/i].map(&:freeze).freeze
def sql_slave_matchers
CUSTOM_SQL_REPLICA_MATCHERS
end
def sql_replica_matchers
CUSTOM_SQL_REPLICA_MATCHERS
end
end
The text was updated successfully, but these errors were encountered:
Issue: Many of my complex sql statements were being performed by the primary instead of the replica. It turns out that the sql_replica_matchers regex is insufficient for queries that begin with CTE 'with' statements.
In lib/active_record/connection_adapters/makara_abstract_adapter.rb
SQL_REPLICA_MATCHERS = [/\A\s*(select|with.+\)\s*select)\s/i].map(&:freeze).freeze
should be changed to
SQL_REPLICA_MATCHERS = [/\A\s*(select|with[\s\S]*\)\s*select)\s/i].map(&:freeze).freeze
[\s\S] is the difference and accounts for new lines.
This is because '.' regex doesn't account for new lines (which will obviously be there in complex sql statements).
My workaround is this. Hope this helps! :)
The text was updated successfully, but these errors were encountered: