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:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 91c46e715160345fb5ea4da1089dfcdf14c9f0cdfa57c07d3156487e5a82b5a6
|
|
4
|
+
data.tar.gz: f1c7cb98472f91cd10d6859a731dcebb1db99c57889f22afd2374ca0a9c535fb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
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?
|