A summary of data about the Ruby ecosystem.

https://github.com/sparklemotion/sqlite3-ruby

Ruby bindings for the SQLite3 embedded database
https://github.com/sparklemotion/sqlite3-ruby

Keywords

ruby sqlite

Keywords from Contributors

activerecord rubygems activejob mvc ruby-gem rack xslt xerces sax nokogiri

Last synced: about 5 hours ago
JSON representation

Repository metadata

Ruby bindings for the SQLite3 embedded database

README.md

Ruby Interface for SQLite3

Overview

This library allows Ruby programs to use the SQLite3 database engine (http://www.sqlite.org).

Note that this module is only compatible with SQLite 3.6.16 or newer.

Test suite

Quick start

For help understanding the SQLite3 Ruby API, please read the FAQ and the full API documentation.

A few key classes whose APIs are often-used are:

  • SQLite3::Database (rdoc)
  • SQLite3::Statement (rdoc)
  • SQLite3::ResultSet (rdoc)

If you have any questions that you feel should be addressed in the FAQ, please send them to the mailing list or open a discussion thread.

require "sqlite3"

# Open a database
db = SQLite3::Database.new "test.db"

# Create a table
rows = db.execute <<-SQL
  create table numbers (
    name varchar(30),
    val int
  );
SQL

# Execute a few inserts
{
  "one" => 1,
  "two" => 2,
}.each do |pair|
  db.execute "insert into numbers values ( ?, ? )", pair
end

# Find a few rows
db.execute( "select * from numbers" ) do |row|
  p row
end
# => ["one", 1]
#    ["two", 2]

# Create another table with multiple columns
db.execute <<-SQL
  create table students (
    name varchar(50),
    email varchar(50),
    grade varchar(5),
    blog varchar(50)
  );
SQL

# Execute inserts with parameter markers
db.execute("INSERT INTO students (name, email, grade, blog)
            VALUES (?, ?, ?, ?)", ["Jane", "me@janedoe.com", "A", "http://blog.janedoe.com"])

db.execute( "select * from students" ) do |row|
  p row
end
# => ["Jane", "me@janedoe.com", "A", "http://blog.janedoe.com"]

Thread Safety

When SQLite3.threadsafe? returns true, then SQLite3 has been compiled to
support running in a multithreaded environment. However, this doesn't mean
that all classes in the SQLite3 gem can be considered "thread safe".

When SQLite3.threadsafe? returns true, it is safe to share only
SQLite3::Database instances among threads without providing your own locking
mechanism. For example, the following code is fine because only the database
instance is shared among threads:

require 'sqlite3'

db = SQLite3::Database.new ":memory:"

latch = Queue.new

ts = 10.times.map {
  Thread.new {
    latch.pop
    db.execute "SELECT '#{Thread.current.inspect}'"
  }
}
10.times { latch << nil }

p ts.map(&:value)

Other instances can be shared among threads, but they require that you provide
your own locking for thread safety. For example, SQLite3::Statement objects
(prepared statements) are mutable, so applications must take care to add
appropriate locks to avoid data race conditions when sharing these objects
among threads.

Lets rewrite the above example but use a prepared statement and safely share
the prepared statement among threads:

db = SQLite3::Database.new ":memory:"

# Prepare a statement
stmt = db.prepare "SELECT :inspect"
stmt_lock = Mutex.new

latch = Queue.new

ts = 10.times.map {
  Thread.new {
    latch.pop

    # Add a lock when using the prepared statement.
    # Binding values, and walking over results will mutate the statement, so
    # in order to prevent other threads from "seeing" this thread's data, we
    # must lock when using the statement object
    stmt_lock.synchronize do
      stmt.execute(Thread.current.inspect).to_a
    end
  }
}

10.times { latch << nil }

p ts.map(&:value)

stmt.close

It is generally recommended that if applications want to share a database among
threads, they only share the database instance object. Other objects are
fine to share, but may require manual locking for thread safety.

Fork Safety

Sqlite is not fork
safe

and instructs users to not carry an open writable database connection across a fork(). Using an inherited
connection in the child may corrupt your database, leak memory, or cause other undefined behavior.

To help protect users of this gem from accidental corruption due to this lack of fork safety, the gem will immediately close any open writable databases in the child after a fork. Discarding writable
connections in the child will incur a small one-time memory leak per connection, but that's
preferable to potentially corrupting your database.

Whenever possible, close writable connections in the parent before forking. If absolutely necessary (and you know what you're doing), you may suppress the fork safety warnings by calling SQLite3::ForkSafety.suppress_warnings!.

See ./adr/2024-09-fork-safety.md for more information and context.

Support

Installation or database extensions

If you're having trouble with installation, please first read INSTALLATION.md.

General help requests

You can ask for help or support:

Bug reports

You can file the bug at the github issues page.

Contributing

See CONTRIBUTING.md.

License

This library is licensed under BSD-3-Clause, see LICENSE.

Dependencies

The source code of sqlite is distributed in the "ruby platform" gem. This code is public domain,
see https://www.sqlite.org/copyright.html for details.


Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 1 day ago

Total Commits: 1,131
Total Committers: 84
Avg Commits per committer: 13.464
Development Distribution Score (DDS): 0.72

Commits in past year: 73
Committers in past year: 5
Avg Commits per committer in past year: 14.6
Development Distribution Score (DDS) in past year: 0.411

Name Email Commits
Mike Dalessio m****o@g****m 317
Aaron Patterson a****n@g****m 243
Luis Lavena l****a@g****m 168
Jamis Buck j****s@3****m 66
dependabot[bot] 4****] 51
Stephen Margheim s****m@g****m 49
Rob Holland r****b@i****m 23
Jonathan Metter J****r@g****e 19
NARUSE, Yui n****e@a****p 17
gazayas g****s@h****m 14
Lars Kanis l****s@g****e 13
Jim Flood j****d@t****m 11
Jean Boussier j****r@g****m 8
MSP-Greg G****s@g****m 8
Caleb Albritton w****e@g****m 7
James Berry j****s@j****s 6
Rich Meyers r****s@g****m 5
Alex Watt a****x@a****m 5
Nemo c****s@c****n 4
Peter Goldstein p****n@g****m 4
Nobuyoshi Nakada n****u@r****g 4
Mike Wojciechowski m****w@s****m 4
Jeremy Evans c****e@j****t 3
Robert McLeod r****t@p****z 3
iain barnett h****n@t****m 3
kashif k****f@n****m 3
Yuki Nishijima m****l@y****t 2
Yasuo Honda y****a@g****m 2
Vipul A M v****d@g****m 2
Ryuta Kamizono k****o@g****m 2
and 54 more...

Committer domains:


Issue and Pull Request metadata

Last synced: 2 days ago

Total issues: 101
Total pull requests: 374
Average time to close issues: almost 2 years
Average time to close pull requests: 2 months
Total issue authors: 79
Total pull request authors: 34
Average comments per issue: 3.3
Average comments per pull request: 1.07
Merged pull request: 299
Bot issues: 0
Bot pull requests: 87

Past year issues: 10
Past year pull requests: 79
Past year average time to close issues: 9 days
Past year average time to close pull requests: 3 days
Past year issue authors: 9
Past year pull request authors: 8
Past year average comments per issue: 3.2
Past year average comments per pull request: 0.58
Past year merged pull request: 53
Past year bot issues: 0
Past year bot pull requests: 37

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/sparklemotion/sqlite3-ruby

Top Issue Authors

  • flavorjones (10)
  • tenderlove (3)
  • audibleblink (2)
  • fractaledmind (2)
  • rongcuid (2)
  • forthrin (2)
  • caponecicero (2)
  • penguinpowernz (2)
  • voxik (2)
  • rickhull (2)
  • collimarco (2)
  • jirislaby (2)
  • penberg (2)
  • walterdavis (1)
  • soukouki (1)

Top Pull Request Authors

  • flavorjones (180)
  • dependabot[bot] (87)
  • tenderlove (38)
  • fractaledmind (15)
  • alexcwatt (8)
  • casperisfine (4)
  • masamitsu-murase (3)
  • MSP-Greg (3)
  • tonytonyjan (2)
  • byroot (2)
  • miyucy (2)
  • stevecj (2)
  • wjlroe (2)
  • pawurb (2)
  • haileys (2)

Top Issue Labels

  • feature (9)
  • installation (6)
  • performance (2)
  • bug (2)
  • upstream (1)
  • help-wanted (1)
  • platform/windows (1)

Top Pull Request Labels

  • dependencies (86)
  • ruby (76)
  • github_actions (10)
  • blocked (2)
  • bug (1)
  • performance (1)
  • feature (1)

Package metadata

gem.coop: sqlite3

Ruby library to interface with the SQLite3 database engine (http://www.sqlite.org). Precompiled binaries are available for common platforms for recent versions of Ruby.

  • Homepage: https://github.com/sparklemotion/sqlite3-ruby
  • Documentation: http://www.rubydoc.info/gems/sqlite3/
  • Licenses: BSD-3-Clause
  • Latest release: 2.8.1 (published 11 days ago)
  • Last Synced: 2025-12-08T00:03:02.761Z (2 days ago)
  • Versions: 576
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 168,716,195 Total
  • Docker Downloads: 643,630,140
  • Rankings:
    • Dependent repos count: 0.0%
    • Dependent packages count: 0.0%
    • Average: 0.072%
    • Docker downloads count: 0.141%
    • Downloads: 0.147%
  • Maintainers (4)
rubygems.org: sqlite3

Ruby library to interface with the SQLite3 database engine (http://www.sqlite.org). Precompiled binaries are available for common platforms for recent versions of Ruby.

proxy.golang.org: github.com/sparklemotion/sqlite3-ruby

gem.coop: sqlite3-full

This module allows Ruby programs to interface with the SQLite3 database engine (http://www.sqlite.org). You must have the SQLite engine installed in order to build this module.

  • Homepage: https://github.com/sparklemotion/sqlite3-ruby
  • Documentation: http://www.rubydoc.info/gems/sqlite3-full/
  • Licenses: BSD-3
  • Latest release: 1.3.9.3 (published almost 11 years ago)
  • Last Synced: 2025-12-06T23:00:55.227Z (3 days ago)
  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 9,988 Total
  • Rankings:
    • Dependent repos count: 0.0%
    • Dependent packages count: 0.0%
    • Average: 15.673%
    • Downloads: 47.018%
  • Maintainers (1)
rubygems.org: openaustralia-sqlite3

This module allows Ruby programs to interface with the SQLite3 database engine (http://www.sqlite.org). You must have the SQLite engine installed in order to build this module. Note that this module is only compatible with SQLite 3.6.16 or newer.

  • Homepage: https://github.com/sparklemotion/sqlite3-ruby
  • Documentation: http://www.rubydoc.info/gems/openaustralia-sqlite3/
  • Licenses: BSD-3
  • Latest release: 1.0.0 (published almost 12 years ago)
  • Last Synced: 2025-12-06T23:00:55.490Z (3 days ago)
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 2
  • Downloads: 5,770 Total
  • Rankings:
    • Forks count: 1.91%
    • Stargazers count: 2.168%
    • Dependent repos count: 15.44%
    • Dependent packages count: 15.783%
    • Average: 19.731%
    • Downloads: 63.355%
  • Maintainers (1)
gem.coop: openaustralia-sqlite3

This module allows Ruby programs to interface with the SQLite3 database engine (http://www.sqlite.org). You must have the SQLite engine installed in order to build this module. Note that this module is only compatible with SQLite 3.6.16 or newer.

  • Homepage: https://github.com/sparklemotion/sqlite3-ruby
  • Documentation: http://www.rubydoc.info/gems/openaustralia-sqlite3/
  • Licenses: BSD-3
  • Latest release: 1.0.0 (published almost 12 years ago)
  • Last Synced: 2025-12-06T23:00:55.779Z (3 days ago)
  • Versions: 1
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 5,770 Total
  • Rankings:
    • Dependent repos count: 0.0%
    • Dependent packages count: 0.0%
    • Average: 21.283%
    • Downloads: 63.848%
  • Maintainers (1)
rubygems.org: sqlite3-full

This module allows Ruby programs to interface with the SQLite3 database engine (http://www.sqlite.org). You must have the SQLite engine installed in order to build this module.

  • Homepage: https://github.com/sparklemotion/sqlite3-ruby
  • Documentation: http://www.rubydoc.info/gems/sqlite3-full/
  • Licenses: BSD-3
  • Latest release: 1.3.9.3 (published almost 11 years ago)
  • Last Synced: 2025-12-06T23:00:55.226Z (3 days ago)
  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Downloads: 9,988 Total
  • Rankings:
    • Forks count: 1.764%
    • Stargazers count: 2.009%
    • Dependent packages count: 15.706%
    • Average: 22.903%
    • Dependent repos count: 46.782%
    • Downloads: 48.253%
  • Maintainers (1)

Dependencies

Gemfile rubygems
  • hoe-bundler ~> 1.0 development
  • hoe-gemspec ~> 1.0 development
  • mini_portile2 ~> 2.0 development
  • minitest ~> 5.11 development
  • rake-compiler ~> 1.0 development
  • rake-compiler-dock ~> 0.6.0 development
  • rdoc >= 4.0, < 6 development
.github/workflows/upstream.yml actions
  • actions/checkout v3 composite
  • ruby/setup-ruby v1 composite
sqlite3.gemspec rubygems
  • minitest ~> 5.15 development
  • psych ~> 4.0 development
  • rake-compiler ~> 1.2.0 development
  • rake-compiler-dock ~> 1.2.1 development
  • rdoc >= 4.0, < 7 development
  • mini_portile2 ~> 2.8.0
.github/workflows/ci.yml actions
  • actions/cache v4 composite
  • actions/checkout v4 composite
  • actions/download-artifact v3 composite
  • actions/upload-artifact v3 composite
  • ruby/setup-ruby v1 composite
  • ruby/setup-ruby-pkgs v1 composite
.github/workflows/downstream.yml actions
  • actions/cache v4 composite
  • actions/checkout v4 composite
  • ruby/setup-ruby-pkgs v1 composite

Score: 32.385025608369226