Class: TursoLibsql::LocalConnection

Inherits:
Object
  • Object
show all
Defined in:
lib/turso_libsql/database.rb

Overview

ローカル SQLite 接続(Embedded Replica 用)sqlite3 gem を使用sqlite3 gem 2.x は fork 後に接続を自動クローズする(ForkSafety)。AR の discard! が @raw_connection を nil にするので、子プロセスではreconnect が走って新しい接続が確立される。

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(path, remote_url, token, mode) ⇒ LocalConnection

Returns a new instance of LocalConnection.



113
114
115
116
117
118
119
120
121
122
123
# File 'lib/turso_libsql/database.rb', line 113

def initialize(path, remote_url, token, mode)
  require 'sqlite3'
  @path = path
  @remote_url = remote_url
  @token = token
  @mode = mode
  @db = SQLite3::Database.new(path)
  @db.results_as_hash = true
  @last_insert_rowid = 0
  @last_affected_rows = 0
end

Instance Attribute Details

#last_insert_rowidObject (readonly)

Returns the value of attribute last_insert_rowid.



163
164
165
# File 'lib/turso_libsql/database.rb', line 163

def last_insert_rowid
  @last_insert_rowid
end

Instance Method Details

#begin_transactionObject



143
144
145
# File 'lib/turso_libsql/database.rb', line 143

def begin_transaction
  @db.execute('BEGIN')
end

#commit_transactionObject



147
148
149
150
151
152
153
# File 'lib/turso_libsql/database.rb', line 147

def commit_transaction
  @db.execute('COMMIT')
rescue SQLite3::Exception => e
  # fork 後に接続が強制クローズされた場合など、トランザクションが
  # 既に存在しない状態での COMMIT は無視する
  raise unless e.message.include?('no transaction is active')
end

#execute(sql) ⇒ Object



125
126
127
128
129
130
# File 'lib/turso_libsql/database.rb', line 125

def execute(sql)
  @db.execute(sql)
  @last_affected_rows = @db.changes
  @last_insert_rowid = @db.last_insert_row_id
  @last_affected_rows
end

#execute_with_params(sql, params) ⇒ Object



136
137
138
139
140
141
# File 'lib/turso_libsql/database.rb', line 136

def execute_with_params(sql, params)
  @db.execute(sql, params)
  @last_affected_rows = @db.changes
  @last_insert_rowid = @db.last_insert_row_id
  @last_affected_rows
end

#query(sql) ⇒ Object



132
133
134
# File 'lib/turso_libsql/database.rb', line 132

def query(sql)
  @db.execute(sql)
end

#rollback_transactionObject



155
156
157
158
159
160
161
# File 'lib/turso_libsql/database.rb', line 155

def rollback_transaction
  @db.execute('ROLLBACK')
rescue SQLite3::Exception => e
  # fork 後に接続が強制クローズされた場合など、トランザクションが
  # 既に存在しない状態での ROLLBACK は無視する
  raise unless e.message.include?('no transaction is active')
end