sqlite3 2.3.1-x86-linux-musl → 2.4.0-x86-linux-musl

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f94712e3dfee8da8ec035bcf769bfbd302b8c4f46762e5f8d6551cd804a653ed
4
- data.tar.gz: 65528d46e1f55f34edc509142e6703891b848d40a80e2d9795e23c36dc6238b8
3
+ metadata.gz: b14f06ed2d94b4cf71749d566e5e1698d9a1149fe461a9a0981dc79b138df6ff
4
+ data.tar.gz: c6d908a82b806207b67ae35ae18d46f938ef3daec21f0d49132a3b86864e507f
5
5
  SHA512:
6
- metadata.gz: aa02468db887a9a60815ad7bd5ec0c20f0c82894b806049e2c1610b7ebcee8c0a29c9150ec12d2048dd653740aebe5f1beed86e2769b5f0fee87766564302042
7
- data.tar.gz: 4c61d71a0a3f29120adb23088900328f8e81b2712418aef817f50af6957e7791bb276de55d77da9a25aef02903ec8d17f0355f010f67203d87b2c47cbea616cb
6
+ metadata.gz: 213a3a854349de319a4b47077ac2f51361ba92f04f6cc2d1152bae20a8b1762a9e5867c0811a05fcef513b7001ceeaf252547c8991fe94d11fad1992fdaa7afe
7
+ data.tar.gz: df7f73ed3921d3a06c60a88c880f824fdb952e826fcd2253ed0916f196f9878a1aeabbc7eaafc3363b15be1e3603d794ee0b83b5fdab75489c41987c02bb736a
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # sqlite3-ruby Changelog
2
2
 
3
+ ## 2.4.0 / 2024-12-03
4
+
5
+ ### Added
6
+
7
+ - `Database#load_extension` now accepts any object that responds to `#to_path`, in addition to String filesystem paths. [#586] @flavorjones
8
+ - `Database.new` now accepts an `extensions:` parameter, which is an array of SQLite extensions that will be loaded during initialization. The array may contain String filesystem paths and objects that respond to `#to_path`. [#586] @flavorjones
9
+
10
+
3
11
  ## 2.3.1 / 2024-11-25
4
12
 
5
13
  ### Dependencies
@@ -771,14 +771,8 @@ collation(VALUE self, VALUE name, VALUE comparator)
771
771
  }
772
772
 
773
773
  #ifdef HAVE_SQLITE3_LOAD_EXTENSION
774
- /* call-seq: db.load_extension(file)
775
- *
776
- * Loads an SQLite extension library from the named file. Extension
777
- * loading must be enabled using db.enable_load_extension(true) prior
778
- * to calling this API.
779
- */
780
774
  static VALUE
781
- load_extension(VALUE self, VALUE file)
775
+ load_extension_internal(VALUE self, VALUE file)
782
776
  {
783
777
  sqlite3RubyPtr ctx;
784
778
  int status;
@@ -997,7 +991,7 @@ init_sqlite3_database(void)
997
991
  rb_define_private_method(cSqlite3Database, "db_filename", db_filename, 1);
998
992
 
999
993
  #ifdef HAVE_SQLITE3_LOAD_EXTENSION
1000
- rb_define_method(cSqlite3Database, "load_extension", load_extension, 1);
994
+ rb_define_private_method(cSqlite3Database, "load_extension_internal", load_extension_internal, 1);
1001
995
  #endif
1002
996
 
1003
997
  #ifdef HAVE_SQLITE3_ENABLE_LOAD_EXTENSION
Binary file
Binary file
Binary file
@@ -8,8 +8,10 @@ require "sqlite3/value"
8
8
  require "sqlite3/fork_safety"
9
9
 
10
10
  module SQLite3
11
- # The Database class encapsulates a single connection to a SQLite3 database.
12
- # Its usage is very straightforward:
11
+ # == Overview
12
+ #
13
+ # The Database class encapsulates a single connection to a SQLite3 database. Here's a
14
+ # straightforward example of usage:
13
15
  #
14
16
  # require 'sqlite3'
15
17
  #
@@ -19,28 +21,59 @@ module SQLite3
19
21
  # end
20
22
  # end
21
23
  #
22
- # It wraps the lower-level methods provided by the selected driver, and
23
- # includes the Pragmas module for access to various pragma convenience
24
- # methods.
24
+ # It wraps the lower-level methods provided by the selected driver, and includes the Pragmas
25
+ # module for access to various pragma convenience methods.
25
26
  #
26
- # The Database class provides type translation services as well, by which
27
- # the SQLite3 data types (which are all represented as strings) may be
28
- # converted into their corresponding types (as defined in the schemas
29
- # for their tables). This translation only occurs when querying data from
27
+ # The Database class provides type translation services as well, by which the SQLite3 data types
28
+ # (which are all represented as strings) may be converted into their corresponding types (as
29
+ # defined in the schemas for their tables). This translation only occurs when querying data from
30
30
  # the database--insertions and updates are all still typeless.
31
31
  #
32
- # Furthermore, the Database class has been designed to work well with the
33
- # ArrayFields module from Ara Howard. If you require the ArrayFields
34
- # module before performing a query, and if you have not enabled results as
35
- # hashes, then the results will all be indexible by field name.
32
+ # Furthermore, the Database class has been designed to work well with the ArrayFields module from
33
+ # Ara Howard. If you require the ArrayFields module before performing a query, and if you have not
34
+ # enabled results as hashes, then the results will all be indexible by field name.
35
+ #
36
+ # == Thread safety
37
+ #
38
+ # When SQLite3.threadsafe? returns true, it is safe to share instances of the database class
39
+ # among threads without adding specific locking. Other object instances may require applications
40
+ # to provide their own locks if they are to be shared among threads. Please see the README.md for
41
+ # more information.
42
+ #
43
+ # == SQLite Extensions
44
+ #
45
+ # SQLite3::Database supports the universe of {sqlite
46
+ # extensions}[https://www.sqlite.org/loadext.html]. It's possible to load an extension into an
47
+ # existing Database object using the #load_extension method and passing a filesystem path:
48
+ #
49
+ # db = SQLite3::Database.new(":memory:")
50
+ # db.enable_load_extension(true)
51
+ # db.load_extension("/path/to/extension")
52
+ #
53
+ # As of v2.4.0, it's also possible to pass an object that responds to +#to_path+. This
54
+ # documentation will refer to the supported interface as +_ExtensionSpecifier+, which can be
55
+ # expressed in RBS syntax as:
56
+ #
57
+ # interface _ExtensionSpecifier
58
+ # def to_path: () → String
59
+ # end
36
60
  #
37
- # Thread safety:
61
+ # So, for example, if you are using the {sqlean gem}[https://github.com/flavorjones/sqlean-ruby]
62
+ # which provides modules that implement this interface, you can pass the module directly:
63
+ #
64
+ # db = SQLite3::Database.new(":memory:")
65
+ # db.enable_load_extension(true)
66
+ # db.load_extension(SQLean::Crypto)
67
+ #
68
+ # It's also possible in v2.4.0+ to load extensions via the SQLite3::Database constructor by using
69
+ # the +extensions:+ keyword argument to pass an array of String paths or extension specifiers:
70
+ #
71
+ # db = SQLite3::Database.new(":memory:", extensions: ["/path/to/extension", SQLean::Crypto])
72
+ #
73
+ # Note that when loading extensions via the constructor, there is no need to call
74
+ # #enable_load_extension; however it is still necessary to call #enable_load_extensions before any
75
+ # subsequently invocations of #load_extension on the initialized Database object.
38
76
  #
39
- # When `SQLite3.threadsafe?` returns true, it is safe to share instances of
40
- # the database class among threads without adding specific locking. Other
41
- # object instances may require applications to provide their own locks if
42
- # they are to be shared among threads. Please see the README.md for more
43
- # information.
44
77
  class Database
45
78
  attr_reader :collations
46
79
 
@@ -76,23 +109,25 @@ module SQLite3
76
109
  # as hashes or not. By default, rows are returned as arrays.
77
110
  attr_accessor :results_as_hash
78
111
 
79
- # call-seq: SQLite3::Database.new(file, options = {})
112
+ # call-seq:
113
+ # SQLite3::Database.new(file, options = {})
80
114
  #
81
115
  # Create a new Database object that opens the given file.
82
116
  #
83
117
  # Supported permissions +options+:
84
118
  # - the default mode is <tt>READWRITE | CREATE</tt>
85
- # - +:readonly+: boolean (default false), true to set the mode to +READONLY+
86
- # - +:readwrite+: boolean (default false), true to set the mode to +READWRITE+
87
- # - +:flags+: set the mode to a combination of SQLite3::Constants::Open flags.
119
+ # - +readonly:+ boolean (default false), true to set the mode to +READONLY+
120
+ # - +readwrite:+ boolean (default false), true to set the mode to +READWRITE+
121
+ # - +flags:+ set the mode to a combination of SQLite3::Constants::Open flags.
88
122
  #
89
123
  # Supported encoding +options+:
90
- # - +:utf16+: boolean (default false), is the filename's encoding UTF-16 (only needed if the filename encoding is not UTF_16LE or BE)
124
+ # - +utf16:+ +boolish+ (default false), is the filename's encoding UTF-16 (only needed if the filename encoding is not UTF_16LE or BE)
91
125
  #
92
126
  # Other supported +options+:
93
- # - +:strict+: boolean (default false), disallow the use of double-quoted string literals (see https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted)
94
- # - +:results_as_hash+: boolean (default false), return rows as hashes instead of arrays
95
- # - +:default_transaction_mode+: one of +:deferred+ (default), +:immediate+, or +:exclusive+. If a mode is not specified in a call to #transaction, this will be the default transaction mode.
127
+ # - +strict:+ +boolish+ (default false), disallow the use of double-quoted string literals (see https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted)
128
+ # - +results_as_hash:+ +boolish+ (default false), return rows as hashes instead of arrays
129
+ # - +default_transaction_mode:+ one of +:deferred+ (default), +:immediate+, or +:exclusive+. If a mode is not specified in a call to #transaction, this will be the default transaction mode.
130
+ # - +extensions:+ <tt>Array[String | _ExtensionSpecifier]</tt> SQLite extensions to load into the database. See Database@SQLite+Extensions for more information.
96
131
  #
97
132
  def initialize file, options = {}, zvfs = nil
98
133
  mode = Constants::Open::READWRITE | Constants::Open::CREATE
@@ -135,6 +170,8 @@ module SQLite3
135
170
  @readonly = mode & Constants::Open::READONLY != 0
136
171
  @default_transaction_mode = options[:default_transaction_mode] || :deferred
137
172
 
173
+ initialize_extensions(options[:extensions])
174
+
138
175
  ForkSafety.track(self)
139
176
 
140
177
  if block_given?
@@ -658,6 +695,52 @@ module SQLite3
658
695
  end
659
696
  end
660
697
 
698
+ # call-seq:
699
+ # load_extension(extension_specifier) -> self
700
+ #
701
+ # Loads an SQLite extension library from the named file. Extension loading must be enabled using
702
+ # #enable_load_extension prior to using this method.
703
+ #
704
+ # See also: Database@SQLite+Extensions
705
+ #
706
+ # [Parameters]
707
+ # - +extension_specifier+: (String | +_ExtensionSpecifier+) If a String, it is the filesystem path
708
+ # to the sqlite extension file. If an object that responds to #to_path, the
709
+ # return value of that method is used as the filesystem path to the sqlite extension file.
710
+ #
711
+ # [Example] Using a filesystem path:
712
+ #
713
+ # db.load_extension("/path/to/my_extension.so")
714
+ #
715
+ # [Example] Using the {sqlean gem}[https://github.com/flavorjones/sqlean-ruby]:
716
+ #
717
+ # db.load_extension(SQLean::VSV)
718
+ #
719
+ def load_extension(extension_specifier)
720
+ if extension_specifier.respond_to?(:to_path)
721
+ extension_specifier = extension_specifier.to_path
722
+ elsif !extension_specifier.is_a?(String)
723
+ raise TypeError, "extension_specifier #{extension_specifier.inspect} is not a String or a valid extension specifier object"
724
+ end
725
+ load_extension_internal(extension_specifier)
726
+ end
727
+
728
+ def initialize_extensions(extensions) # :nodoc:
729
+ return if extensions.nil?
730
+ raise TypeError, "extensions must be an Array" unless extensions.is_a?(Array)
731
+ return if extensions.empty?
732
+
733
+ begin
734
+ enable_load_extension(true)
735
+
736
+ extensions.each do |extension|
737
+ load_extension(extension)
738
+ end
739
+ ensure
740
+ enable_load_extension(false)
741
+ end
742
+ end
743
+
661
744
  # A helper class for dealing with custom functions (see #create_function,
662
745
  # #create_aggregate, and #create_aggregate_handler). It encapsulates the
663
746
  # opaque function object that represents the current invocation. It also
@@ -1,4 +1,4 @@
1
1
  module SQLite3
2
2
  # (String) the version of the sqlite3 gem, e.g. "2.1.1"
3
- VERSION = "2.3.1"
3
+ VERSION = "2.4.0"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqlite3
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1
4
+ version: 2.4.0
5
5
  platform: x86-linux-musl
6
6
  authors:
7
7
  - Jamis Buck
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2024-11-25 00:00:00.000000000 Z
14
+ date: 2024-12-03 00:00:00.000000000 Z
15
15
  dependencies: []
16
16
  description: |
17
17
  Ruby library to interface with the SQLite3 database engine (http://www.sqlite.org). Precompiled