activerecord-libsql 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc66869ba4dd6395bcac2e61abbef9e58dc7bb87f7fc23029aa19f2e5a2419b4
4
- data.tar.gz: 5a4feeb7234a157cec8b3f8f2be015d24f5163581e42dc5c501b844830e4b704
3
+ metadata.gz: a5d277e702ca4b1efc21294d5627a74553142befa52ea732c3bf6c24e85f0118
4
+ data.tar.gz: 15a1b97a80a4f50785dbd883eb224eda315d034f7dedd34923870cbee4235f9c
5
5
  SHA512:
6
- metadata.gz: 8aea75dac63b1dabf1775d84a99a7a7c80dde393436b72e9e76ae071889fc91f232d11cbcd272eac60c7ae734df2a6a805a3dc35ec976a58b191734b913c1a8e
7
- data.tar.gz: f18071f7a38d32d9ca84ae82ae8e529c5c7e2237b4db87bae0f12eb591f30fbe97b5df599470c17a2dc59676335610cafe78f86ffc263d112a5bf38fd706459d
6
+ metadata.gz: b234df8ecb2b8c8d52f02c336bf74a469df4c6a3667882422bb48792b2a395f2ecd562a426124c004b23847d1f38725475cf9861d4e85ad5daa89acb3dcc7715
7
+ data.tar.gz: 69cbc05cad1d6ae3a46c64e744ce32d08a1fa10a787713056b9c61d26b5fea7f8cb458ecd9ac296892bb836896667a72052f12918cecd4d8b05e3ebfa9e62b89
@@ -119,9 +119,9 @@ module ActiveRecord
119
119
  super
120
120
  end
121
121
 
122
- # fork 後の子プロセスで呼ばれる。親プロセスの Rust オブジェクトを
123
- # 子プロセスから触ると SEGV するため、参照を即座に破棄する。
124
- # さらに tokio ランタイムも fork で壊れるため reinitialize_runtime! で作り直す。
122
+ # fork 後の子プロセスで呼ばれる。
123
+ # sqlite3 gem の fork safety が接続を強制クローズするため、
124
+ # 参照を破棄して子プロセスで新しい接続を確立できるようにする。
125
125
  # AR の ConnectionPool が fork 後に各コネクションに対して呼ぶ。
126
126
  def discard!
127
127
  @raw_connection = nil
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module Libsql
5
- VERSION = '0.1.3'
5
+ VERSION = '0.1.4'
6
6
  end
7
7
  end
@@ -106,14 +106,18 @@ module TursoLibsql
106
106
 
107
107
  # ローカル SQLite 接続(Embedded Replica 用)
108
108
  # sqlite3 gem を使用
109
+ # sqlite3 gem 2.x は fork 後に接続を自動クローズする(ForkSafety)。
110
+ # AR の discard! が @raw_connection を nil にするので、子プロセスでは
111
+ # reconnect が走って新しい接続が確立される。
109
112
  class LocalConnection
110
113
  def initialize(path, remote_url, token, mode)
111
114
  require 'sqlite3'
112
- @db = SQLite3::Database.new(path)
113
- @db.results_as_hash = true
115
+ @path = path
114
116
  @remote_url = remote_url
115
117
  @token = token
116
118
  @mode = mode
119
+ @db = SQLite3::Database.new(path)
120
+ @db.results_as_hash = true
117
121
  @last_insert_rowid = 0
118
122
  @last_affected_rows = 0
119
123
  end
@@ -142,10 +146,18 @@ module TursoLibsql
142
146
 
143
147
  def commit_transaction
144
148
  @db.execute('COMMIT')
149
+ rescue SQLite3::Exception => e
150
+ # fork 後に接続が強制クローズされた場合など、トランザクションが
151
+ # 既に存在しない状態での COMMIT は無視する
152
+ raise unless e.message.include?('no transaction is active')
145
153
  end
146
154
 
147
155
  def rollback_transaction
148
156
  @db.execute('ROLLBACK')
157
+ rescue SQLite3::Exception => e
158
+ # fork 後に接続が強制クローズされた場合など、トランザクションが
159
+ # 既に存在しない状態での ROLLBACK は無視する
160
+ raise unless e.message.include?('no transaction is active')
149
161
  end
150
162
 
151
163
  attr_reader :last_insert_rowid
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activerecord-libsql
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - aileron