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
- Host: GitHub
- URL: https://github.com/sparklemotion/sqlite3-ruby
- Owner: sparklemotion
- License: bsd-3-clause
- Created: 2008-07-01T13:03:27.000Z (over 17 years ago)
- Default Branch: main
- Last Pushed: 2025-12-01T05:41:47.000Z (9 days ago)
- Last Synced: 2025-12-05T18:49:46.243Z (4 days ago)
- Topics: ruby, sqlite
- Language: Ruby
- Homepage: https://sparklemotion.github.io/sqlite3-ruby/
- Size: 5.01 MB
- Stars: 822
- Watchers: 26
- Forks: 210
- Open Issues: 28
- Releases: 47
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
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.
- Source code: https://github.com/sparklemotion/sqlite3-ruby
- Mailing list: http://groups.google.com/group/sqlite3-ruby
- Download: http://rubygems.org/gems/sqlite3
- Documentation: https://sparklemotion.github.io/sqlite3-ruby/
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:
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:
- by emailing the sqlite3-ruby mailing list
- by opening a discussion thread on Github
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
- Name: Sparkle Motion
- Login: sparklemotion
- Email:
- Kind: organization
- Description:
- Website: http://nokogiri.org/
- Location:
- Twitter:
- Company:
- Icon url: https://avatars.githubusercontent.com/u/1851072?v=4
- Repositories: 11
- Last ynced at: 2025-08-11T11:42:31.295Z
- Profile URL: https://github.com/sparklemotion
GitHub Events
Total
- Create event: 58
- Release event: 9
- Issues event: 22
- Watch event: 56
- Delete event: 41
- Issue comment event: 107
- Push event: 119
- Pull request review comment event: 11
- Pull request event: 118
- Pull request review event: 20
- Fork event: 9
Last Year
- Create event: 37
- Issues event: 14
- Release event: 4
- Watch event: 41
- Delete event: 30
- Issue comment event: 68
- Push event: 82
- Pull request review comment event: 9
- Pull request review event: 14
- Pull request event: 84
- Fork event: 8
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 | 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:
- redhat.com: 3
- braingourmets.com: 1
- aibor.de: 1
- phusion.nl: 1
- yandex.ru: 1
- hawthorn.email: 1
- yukinishijima.net: 1
- nomad-labs.com: 1
- theprintedbird.com: 1
- penguinpower.co.nz: 1
- jeremyevans.net: 1
- sevenfifty.com: 1
- ruby-lang.org: 1
- captnemo.in: 1
- alexcwatt.com: 1
- gmx.com: 1
- jberry.us: 1
- townsendsecurity.com: 1
- greiz-reinsdorf.de: 1
- airemix.jp: 1
- gmx.de: 1
- inversepath.com: 1
- 37signals.com: 1
- marache.com: 1
- timedia.co.jp: 1
- jc00ke.com: 1
- hailey.lol: 1
- gerritkaiser.de: 1
- verrot.fr: 1
- shopify.com: 1
- ptistefontaine.fr: 1
- softwarelivre.org: 1
- ankane.org: 1
- utilum.com: 1
- wjlr.org.uk: 1
- devbootcamp.com: 1
- begriffli.ch: 1
- dds.nl: 1
- lucianosousa.net: 1
- hummingbird.co: 1
- familiar-medical.jp: 1
- zetetic.net: 1
- sj26.com: 1
- codeodor.com: 1
- pawelurbanek.com: 1
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
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
- Total packages: 7
-
Total downloads:
- rubygems: 337,495,632 total
- Total docker downloads: 1,287,260,280
- Total dependent packages: 9,327 (may contain duplicates)
- Total dependent repositories: 555,575 (may contain duplicates)
- Total versions: 1,216
- Total maintainers: 6
- Total advisories: 1
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.
- 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-08T12:00:34.889Z (1 day ago)
- Versions: 576
- Dependent Packages: 9,327
- Dependent Repositories: 555,573
- Downloads: 168,747,921 Total
- Docker Downloads: 643,630,140
-
Rankings:
- Dependent packages count: 0.005%
- Dependent repos count: 0.026%
- Downloads: 0.13%
- Docker downloads count: 0.176%
- Average: 0.738%
- Forks count: 1.915%
- Stargazers count: 2.174%
- Maintainers (4)
- Advisories:
proxy.golang.org: github.com/sparklemotion/sqlite3-ruby
- Homepage:
- Documentation: https://pkg.go.dev/github.com/sparklemotion/sqlite3-ruby#section-documentation
- Licenses: bsd-3-clause
- Latest release: v2.8.1+incompatible (published 11 days ago)
- Last Synced: 2025-12-06T23:00:54.955Z (3 days ago)
- Versions: 56
- Dependent Packages: 0
- Dependent Repositories: 0
-
Rankings:
- Dependent packages count: 6.999%
- Average: 8.173%
- Dependent repos count: 9.346%
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
- 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
- actions/checkout v3 composite
- ruby/setup-ruby v1 composite
- 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
- 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
- actions/cache v4 composite
- actions/checkout v4 composite
- ruby/setup-ruby-pkgs v1 composite
Score: 32.385025608369226