activerecord-libsql 0.1.4 → 0.1.5

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: a5d277e702ca4b1efc21294d5627a74553142befa52ea732c3bf6c24e85f0118
4
- data.tar.gz: 15a1b97a80a4f50785dbd883eb224eda315d034f7dedd34923870cbee4235f9c
3
+ metadata.gz: 91c46e715160345fb5ea4da1089dfcdf14c9f0cdfa57c07d3156487e5a82b5a6
4
+ data.tar.gz: f1c7cb98472f91cd10d6859a731dcebb1db99c57889f22afd2374ca0a9c535fb
5
5
  SHA512:
6
- metadata.gz: b234df8ecb2b8c8d52f02c336bf74a469df4c6a3667882422bb48792b2a395f2ecd562a426124c004b23847d1f38725475cf9861d4e85ad5daa89acb3dcc7715
7
- data.tar.gz: 69cbc05cad1d6ae3a46c64e744ce32d08a1fa10a787713056b9c61d26b5fea7f8cb458ecd9ac296892bb836896667a72052f12918cecd4d8b05e3ebfa9e62b89
6
+ metadata.gz: 6f62ea58378238d64192c0e0875d303fc41c96bb1ccfe28f6849ec88f12f0ce3e314bfa3c762d77d69443808e03276f5c9f80400949dfd16e39d5561e4c8310c
7
+ data.tar.gz: '094e0a7294dc60962b2c826de5cbc0fa3c156f4df2c33da9aaaeda6f38df8844ddb5f9319c6c6219ff7674d10fbad9d20aa3df98e020ff4945b3388b6926c712'
@@ -171,6 +171,11 @@ module ActiveRecord
171
171
  sql
172
172
  end
173
173
 
174
+ # libSQL / SQLite は FOR UPDATE / FOR UPDATE SKIP LOCKED / FOR SHARE を
175
+ # サポートしない。AR の SQLite3 adapter はこれらを除去するが、
176
+ # libsql_adapter は直接 Hrana HTTP / SQLite3::Database を呼ぶため自前で除去する。
177
+ expanded_sql = sanitize_for_update(expanded_sql)
178
+
174
179
  if read_query?(expanded_sql)
175
180
  rows = raw_connection.query(expanded_sql)
176
181
  notification_payload[:row_count] = rows.size if notification_payload
@@ -368,6 +373,15 @@ module ActiveRecord
368
373
  sql.lstrip.match?(/\A\s*(SELECT|PRAGMA|EXPLAIN|WITH)\b/i)
369
374
  end
370
375
 
376
+ # libSQL / SQLite は FOR UPDATE / FOR UPDATE SKIP LOCKED / FOR SHARE を
377
+ # サポートしない。これらの句を除去して安全に実行できるようにする。
378
+ # SQLite は書き込みがシリアライズされるため、行レベルロックは不要。
379
+ FOR_UPDATE_PATTERN = %r{\s+FOR\s+(?:UPDATE|SHARE)(?:\s+SKIP\s+LOCKED)?(?:\s+OF\s+\S+)?\s*(?=/\*|$)}i
380
+
381
+ def sanitize_for_update(sql)
382
+ sql.gsub(FOR_UPDATE_PATTERN, ' ')
383
+ end
384
+
371
385
  # Array of Hash → ActiveRecord::Result
372
386
  def build_result(rows)
373
387
  return ActiveRecord::Result.new([], []) if rows.empty?
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecord
4
4
  module Libsql
5
- VERSION = '0.1.4'
5
+ VERSION = '0.1.5'
6
6
  end
7
7
  end
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.4
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - aileron