ProductPromotion
Logo

Ruby

made by https://0x3d.site

GitHub - sparklemotion/sqlite3-ruby: Ruby bindings for the SQLite3 embedded database
Ruby bindings for the SQLite3 embedded database. Contribute to sparklemotion/sqlite3-ruby development by creating an account on GitHub.
Visit Site

GitHub - sparklemotion/sqlite3-ruby: Ruby bindings for the SQLite3 embedded database

GitHub - sparklemotion/sqlite3-ruby: Ruby bindings for the SQLite3 embedded database

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", "[email protected]", "A", "http://blog.janedoe.com"])

db.execute( "select * from students" ) do |row|
  p row
end
# => ["Jane", "[email protected]", "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.

More Resources
to explore the angular.

mail [email protected] to add your project or resources here 🔥.

Related Articles
to learn about angular.

FAQ's
to learn more about Angular JS.

mail [email protected] to add more queries here 🔍.

More Sites
to check out once you're finished browsing here.

0x3d
https://www.0x3d.site/
0x3d is designed for aggregating information.
NodeJS
https://nodejs.0x3d.site/
NodeJS Online Directory
Cross Platform
https://cross-platform.0x3d.site/
Cross Platform Online Directory
Open Source
https://open-source.0x3d.site/
Open Source Online Directory
Analytics
https://analytics.0x3d.site/
Analytics Online Directory
JavaScript
https://javascript.0x3d.site/
JavaScript Online Directory
GoLang
https://golang.0x3d.site/
GoLang Online Directory
Python
https://python.0x3d.site/
Python Online Directory
Swift
https://swift.0x3d.site/
Swift Online Directory
Rust
https://rust.0x3d.site/
Rust Online Directory
Scala
https://scala.0x3d.site/
Scala Online Directory
Ruby
https://ruby.0x3d.site/
Ruby Online Directory
Clojure
https://clojure.0x3d.site/
Clojure Online Directory
Elixir
https://elixir.0x3d.site/
Elixir Online Directory
Elm
https://elm.0x3d.site/
Elm Online Directory
Lua
https://lua.0x3d.site/
Lua Online Directory
C Programming
https://c-programming.0x3d.site/
C Programming Online Directory
C++ Programming
https://cpp-programming.0x3d.site/
C++ Programming Online Directory
R Programming
https://r-programming.0x3d.site/
R Programming Online Directory
Perl
https://perl.0x3d.site/
Perl Online Directory
Java
https://java.0x3d.site/
Java Online Directory
Kotlin
https://kotlin.0x3d.site/
Kotlin Online Directory
PHP
https://php.0x3d.site/
PHP Online Directory
React JS
https://react.0x3d.site/
React JS Online Directory
Angular
https://angular.0x3d.site/
Angular JS Online Directory