Class: TursoLibsql::Connection
- Inherits:
-
Object
- Object
- TursoLibsql::Connection
- Defined in:
- lib/turso_libsql/connection.rb
Overview
Hrana v2 HTTP プロトコルを使ったリモート接続Net::HTTP を使用するため fork 後も安全
Instance Attribute Summary collapse
-
#last_insert_rowid ⇒ Object
readonly
最後に挿入した行の rowid を返す.
Instance Method Summary collapse
-
#begin_transaction ⇒ Object
トランザクションを開始する.
-
#commit_transaction ⇒ Object
トランザクションをコミットする.
-
#execute(sql) ⇒ Object
SQL を実行し、影響を受けた行数を返す(INSERT/UPDATE/DELETE 用).
-
#execute_with_params(sql, params) ⇒ Object
プリペアドステートメントで SQL を実行(パラメータ付き).
-
#initialize(url, token) ⇒ Connection
constructor
A new instance of Connection.
-
#query(sql) ⇒ Object
SQL を実行し、結果を Array of Hash で返す(SELECT 用).
-
#rollback_transaction ⇒ Object
トランザクションをロールバックする.
Constructor Details
#initialize(url, token) ⇒ Connection
Returns a new instance of Connection.
11 12 13 14 15 16 17 |
# File 'lib/turso_libsql/connection.rb', line 11 def initialize(url, token) @hrana_url = hrana_url(url) @token = token @baton = nil @last_insert_rowid = 0 @last_affected_rows = 0 end |
Instance Attribute Details
#last_insert_rowid ⇒ Object (readonly)
最後に挿入した行の rowid を返す
73 74 75 |
# File 'lib/turso_libsql/connection.rb', line 73 def last_insert_rowid @last_insert_rowid end |
Instance Method Details
#begin_transaction ⇒ Object
トランザクションを開始する
36 37 38 39 40 41 |
# File 'lib/turso_libsql/connection.rb', line 36 def begin_transaction requests = [{ 'type' => 'execute', 'stmt' => { 'sql' => 'BEGIN' } }] resp = hrana_pipeline(nil, requests) @baton = resp['baton'] check_errors(resp) end |
#commit_transaction ⇒ Object
トランザクションをコミットする
44 45 46 47 48 49 50 51 52 |
# File 'lib/turso_libsql/connection.rb', line 44 def commit_transaction requests = [ { 'type' => 'execute', 'stmt' => { 'sql' => 'COMMIT' } }, { 'type' => 'close' } ] resp = hrana_pipeline(@baton, requests) @baton = nil check_errors(resp) end |
#execute(sql) ⇒ Object
SQL を実行し、影響を受けた行数を返す(INSERT/UPDATE/DELETE 用)
20 21 22 |
# File 'lib/turso_libsql/connection.rb', line 20 def execute(sql) execute_sql(sql, []) end |
#execute_with_params(sql, params) ⇒ Object
プリペアドステートメントで SQL を実行(パラメータ付き)
30 31 32 33 |
# File 'lib/turso_libsql/connection.rb', line 30 def execute_with_params(sql, params) json_params = params.map { |p| { 'type' => 'text', 'value' => p.to_s } } execute_sql(sql, json_params) end |
#query(sql) ⇒ Object
SQL を実行し、結果を Array of Hash で返す(SELECT 用)
25 26 27 |
# File 'lib/turso_libsql/connection.rb', line 25 def query(sql) query_sql(sql, []) end |
#rollback_transaction ⇒ Object
トランザクションをロールバックする
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/turso_libsql/connection.rb', line 55 def rollback_transaction requests = [ { 'type' => 'execute', 'stmt' => { 'sql' => 'ROLLBACK' } }, { 'type' => 'close' } ] # baton が無効になっている場合(サーバー側でエラー後に破棄された場合)は # baton なしで ROLLBACK を試みる。失敗しても無視する(接続は既に破棄済み) baton = @baton @baton = nil begin resp = hrana_pipeline(baton, requests) check_errors(resp) rescue StandardError # ROLLBACK 失敗は無視(接続が既に破棄されている場合) end end |