Module: Gemite::SQLite3FFI

Defined in:
lib/gemite/sqlite3_ffi.rb

Overview

libsqlite3 (システムに標準で入っている共有ライブラリ) を Fiddle 経由で直接呼び出す 低レベル層。sqlite3 gem のようなネイティブ拡張のビルド(コンパイラやヘッダが必要)を 一切必要とせず、gem install gemite が即座に完了することを狙う。

Defined Under Namespace

Modules: Lib Classes: Handle, LoadError

Constant Summary collapse

SQLITE_OK =
0
SQLITE_ROW =
100
SQLITE_DONE =
101
SQLITE_TRANSIENT =
-1
SQLITE_INTEGER =
1
SQLITE_FLOAT =
2
SQLITE_TEXT =
3
SQLITE_BLOB =
4
SQLITE_NULL =
5
CANDIDATE_LIBS =

OS ごとの共有ライブラリ名の候補。最初に見つかったものを使う。

[
  "libsqlite3.so.0",
  "libsqlite3.so",
  "sqlite3.so",
  "libsqlite3.dylib",
  "sqlite3.dll"
].freeze

Class Method Summary collapse

Class Method Details

.ensure_loaded!Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/gemite/sqlite3_ffi.rb', line 38

def self.ensure_loaded!
  return if @loaded

  last_error = nil
  CANDIDATE_LIBS.each do |name|
    begin
      Lib.dlload(name)
      @loaded = name
      break
    rescue Fiddle::DLError => e
      last_error = e
    end
  end

  unless @loaded
    raise LoadError,
          "libsqlite3 が見つかりませんでした。システムに SQLite3 のランタイムライブラリ " \
          "(libsqlite3-0 等) がインストールされているか確認してください。(#{last_error&.message})"
  end

  define_externs!
end