Comments (5)
Hi @palkan, are there any ideas how this could be implemented?
from logidze.
I have one idea which could described as follows:
# add an option to specify whether we want a transaction or not
# (this is mostly for backward compatibility)
def with_meta(data, transactional: true, &block)
# transactional_with_meta is the current implementation
return MetaTransaction.wrap(data, &block) if transactional
MetaNoTransaction.wrap(data, &block)
end
# the same as current MetaTransaction with the only one change
class Meta
def perform
raise ArgumentError, "Block must be given" unless block
call_block_in_meta_context
end
def call_block_in_meta_context
prev_meta = current_meta
meta_stack.push(meta)
pg_set_meta_param(current_meta)
result = block.call
result
ensure
# That's the only difference: we move reset to ensure to call it in case of exceptions
pg_reset_meta_param(prev_meta)
meta_stack.pop
end
end
class MetaTransaction < BaseMeta
def call_block_in_meta_context
ActiveRecord::Base.transaction { super }
end
end
I hope, that should be enough)
from logidze.
Hi @palkan, I don't really get how the SET LOCAL is done without transaction based on your example.
from logidze.
Yeah, there is the point missing; when we're not within a transaction, we can only use SET
(w/o LOCAL
); and that's why we have to cleanup manually.
from logidze.
Closed by #143
from logidze.
Related Issues (20)
- How to list all versions of a record? HOT 4
- Association versioning with ignore_log_data and at(version: ) doesn't return expected results HOT 5
- Partition-friendly logging (triggers) HOT 3
- JSONB column and switch_to! with append: true HOT 2
- PG::UndefinedFunction: ERROR: function hstore(model_name) does not exist HOT 1
- Meta per request HOT 1
- Logidze.ignore_log_data_by_default causing db:migrate errors HOT 2
- Responsible from different sources HOT 3
- Associations versioning - accessing versions with `at(version: #)` HOT 2
- How to tell logidze about a new column HOT 8
- GlobalID support for metadata
- `responsible_id` is not updated on relation with `touch: true` HOT 6
- reload_log_data doesn't work when used with acts_as_paranoid and deleted records HOT 2
- docs: logdize cannot set session meta data when using a connection pool HOT 1
- How can I get the last 100 versions of a model? regardless of the record HOT 2
- Saving log with only metadata changes HOT 1
- Not possible to use latest logidze and anyway_config with Ruby 3.3.0 HOT 1
- Make Sequel support independent from ActiveRecord and ActiveSupport
- Updating history when column names change HOT 3
- Filter by changed attrs HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from logidze.