sqlite3 2.0.0-aarch64-linux-musl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,96 @@
1
+ require "sqlite3/constants"
2
+ require "sqlite3/errors"
3
+
4
+ module SQLite3
5
+ # The ResultSet object encapsulates the enumerability of a query's output.
6
+ # It is a simple cursor over the data that the query returns. It will
7
+ # very rarely (if ever) be instantiated directly. Instead, clients should
8
+ # obtain a ResultSet instance via Statement#execute.
9
+ class ResultSet
10
+ include Enumerable
11
+
12
+ # Create a new ResultSet attached to the given database, using the
13
+ # given sql text.
14
+ def initialize db, stmt
15
+ @db = db
16
+ @stmt = stmt
17
+ end
18
+
19
+ # Reset the cursor, so that a result set which has reached end-of-file
20
+ # can be rewound and reiterated.
21
+ def reset(*bind_params)
22
+ @stmt.reset!
23
+ @stmt.bind_params(*bind_params)
24
+ end
25
+
26
+ # Query whether the cursor has reached the end of the result set or not.
27
+ def eof?
28
+ @stmt.done?
29
+ end
30
+
31
+ # Obtain the next row from the cursor. If there are no more rows to be
32
+ # had, this will return +nil+.
33
+ #
34
+ # The returned value will be an array, unless Database#results_as_hash has
35
+ # been set to +true+, in which case the returned value will be a hash.
36
+ #
37
+ # For arrays, the column names are accessible via the +fields+ property,
38
+ # and the column types are accessible via the +types+ property.
39
+ #
40
+ # For hashes, the column names are the keys of the hash, and the column
41
+ # types are accessible via the +types+ property.
42
+ def next
43
+ @stmt.step
44
+ end
45
+
46
+ # Required by the Enumerable mixin. Provides an internal iterator over the
47
+ # rows of the result set.
48
+ def each
49
+ while (node = self.next)
50
+ yield node
51
+ end
52
+ end
53
+
54
+ # Provides an internal iterator over the rows of the result set where
55
+ # each row is yielded as a hash.
56
+ def each_hash
57
+ while (node = next_hash)
58
+ yield node
59
+ end
60
+ end
61
+
62
+ # Closes the statement that spawned this result set.
63
+ # <em>Use with caution!</em> Closing a result set will automatically
64
+ # close any other result sets that were spawned from the same statement.
65
+ def close
66
+ @stmt.close
67
+ end
68
+
69
+ # Queries whether the underlying statement has been closed or not.
70
+ def closed?
71
+ @stmt.closed?
72
+ end
73
+
74
+ # Returns the types of the columns returned by this result set.
75
+ def types
76
+ @stmt.types
77
+ end
78
+
79
+ # Returns the names of the columns returned by this result set.
80
+ def columns
81
+ @stmt.columns
82
+ end
83
+
84
+ # Return the next row as a hash
85
+ def next_hash
86
+ row = @stmt.step
87
+ return nil if @stmt.done?
88
+
89
+ @stmt.columns.zip(row).to_h
90
+ end
91
+ end
92
+
93
+ class HashResultSet < ResultSet # :nodoc:
94
+ alias_method :next, :next_hash
95
+ end
96
+ end
@@ -0,0 +1,190 @@
1
+ require "sqlite3/errors"
2
+ require "sqlite3/resultset"
3
+
4
+ class String
5
+ def to_blob
6
+ SQLite3::Blob.new(self)
7
+ end
8
+ end
9
+
10
+ module SQLite3
11
+ # A statement represents a prepared-but-unexecuted SQL query. It will rarely
12
+ # (if ever) be instantiated directly by a client, and is most often obtained
13
+ # via the Database#prepare method.
14
+ class Statement
15
+ include Enumerable
16
+
17
+ # This is any text that followed the first valid SQL statement in the text
18
+ # with which the statement was initialized. If there was no trailing text,
19
+ # this will be the empty string.
20
+ attr_reader :remainder
21
+
22
+ # call-seq: SQLite3::Statement.new(db, sql)
23
+ #
24
+ # Create a new statement attached to the given Database instance, and which
25
+ # encapsulates the given SQL text. If the text contains more than one
26
+ # statement (i.e., separated by semicolons), then the #remainder property
27
+ # will be set to the trailing text.
28
+ def initialize(db, sql)
29
+ raise ArgumentError, "prepare called on a closed database" if db.closed?
30
+
31
+ sql = sql.encode(Encoding::UTF_8) if sql && sql.encoding != Encoding::UTF_8
32
+
33
+ @connection = db
34
+ @columns = nil
35
+ @types = nil
36
+ @remainder = prepare db, sql
37
+ end
38
+
39
+ # Binds the given variables to the corresponding placeholders in the SQL
40
+ # text.
41
+ #
42
+ # See Database#execute for a description of the valid placeholder
43
+ # syntaxes.
44
+ #
45
+ # Example:
46
+ #
47
+ # stmt = db.prepare( "select * from table where a=? and b=?" )
48
+ # stmt.bind_params( 15, "hello" )
49
+ #
50
+ # See also #execute, #bind_param, Statement#bind_param, and
51
+ # Statement#bind_params.
52
+ def bind_params(*bind_vars)
53
+ index = 1
54
+ bind_vars.flatten.each do |var|
55
+ if Hash === var
56
+ var.each { |key, val| bind_param key, val }
57
+ else
58
+ bind_param index, var
59
+ index += 1
60
+ end
61
+ end
62
+ end
63
+
64
+ # Execute the statement. This creates a new ResultSet object for the
65
+ # statement's virtual machine. If a block was given, the new ResultSet will
66
+ # be yielded to it; otherwise, the ResultSet will be returned.
67
+ #
68
+ # Any parameters will be bound to the statement using #bind_params.
69
+ #
70
+ # Example:
71
+ #
72
+ # stmt = db.prepare( "select * from table" )
73
+ # stmt.execute do |result|
74
+ # ...
75
+ # end
76
+ #
77
+ # See also #bind_params, #execute!.
78
+ def execute(*bind_vars)
79
+ reset! if active? || done?
80
+
81
+ bind_params(*bind_vars) unless bind_vars.empty?
82
+ results = @connection.build_result_set self
83
+
84
+ step if column_count == 0
85
+
86
+ yield results if block_given?
87
+ results
88
+ end
89
+
90
+ # Execute the statement. If no block was given, this returns an array of
91
+ # rows returned by executing the statement. Otherwise, each row will be
92
+ # yielded to the block.
93
+ #
94
+ # Any parameters will be bound to the statement using #bind_params.
95
+ #
96
+ # Example:
97
+ #
98
+ # stmt = db.prepare( "select * from table" )
99
+ # stmt.execute! do |row|
100
+ # ...
101
+ # end
102
+ #
103
+ # See also #bind_params, #execute.
104
+ def execute!(*bind_vars, &block)
105
+ execute(*bind_vars)
106
+ block ? each(&block) : to_a
107
+ end
108
+
109
+ # Returns true if the statement is currently active, meaning it has an
110
+ # open result set.
111
+ def active?
112
+ !done?
113
+ end
114
+
115
+ # Return an array of the column names for this statement. Note that this
116
+ # may execute the statement in order to obtain the metadata; this makes it
117
+ # a (potentially) expensive operation.
118
+ def columns
119
+ get_metadata unless @columns
120
+ @columns
121
+ end
122
+
123
+ def each
124
+ loop do
125
+ val = step
126
+ break self if done?
127
+ yield val
128
+ end
129
+ end
130
+
131
+ # Return an array of the data types for each column in this statement. Note
132
+ # that this may execute the statement in order to obtain the metadata; this
133
+ # makes it a (potentially) expensive operation.
134
+ def types
135
+ must_be_open!
136
+ get_metadata unless @types
137
+ @types
138
+ end
139
+
140
+ # Performs a sanity check to ensure that the statement is not
141
+ # closed. If it is, an exception is raised.
142
+ def must_be_open! # :nodoc:
143
+ if closed?
144
+ raise SQLite3::Exception, "cannot use a closed statement"
145
+ end
146
+ end
147
+
148
+ # Returns a Hash containing information about the statement.
149
+ # The contents of the hash are implementation specific and may change in
150
+ # the future without notice. The hash includes information about internal
151
+ # statistics about the statement such as:
152
+ # - +fullscan_steps+: the number of times that SQLite has stepped forward
153
+ # in a table as part of a full table scan
154
+ # - +sorts+: the number of sort operations that have occurred
155
+ # - +autoindexes+: the number of rows inserted into transient indices
156
+ # that were created automatically in order to help joins run faster
157
+ # - +vm_steps+: the number of virtual machine operations executed by the
158
+ # prepared statement
159
+ # - +reprepares+: the number of times that the prepare statement has been
160
+ # automatically regenerated due to schema changes or changes to bound
161
+ # parameters that might affect the query plan
162
+ # - +runs+: the number of times that the prepared statement has been run
163
+ # - +filter_misses+: the number of times that the Bloom filter returned
164
+ # a find, and thus the join step had to be processed as normal
165
+ # - +filter_hits+: the number of times that a join step was bypassed
166
+ # because a Bloom filter returned not-found
167
+ def stat key = nil
168
+ if key
169
+ stat_for(key)
170
+ else
171
+ stats_as_hash
172
+ end
173
+ end
174
+
175
+ private
176
+
177
+ # A convenience method for obtaining the metadata about the query. Note
178
+ # that this will actually execute the SQL, which means it can be a
179
+ # (potentially) expensive operation.
180
+ def get_metadata
181
+ @columns = Array.new(column_count) do |column|
182
+ column_name column
183
+ end
184
+ @types = Array.new(column_count) do |column|
185
+ val = column_decltype(column)
186
+ val&.downcase
187
+ end
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,54 @@
1
+ require "sqlite3/constants"
2
+
3
+ module SQLite3
4
+ class Value
5
+ attr_reader :handle
6
+
7
+ def initialize(db, handle)
8
+ @driver = db.driver
9
+ @handle = handle
10
+ end
11
+
12
+ def null?
13
+ type == :null
14
+ end
15
+
16
+ def to_blob
17
+ @driver.value_blob(@handle)
18
+ end
19
+
20
+ def length(utf16 = false)
21
+ if utf16
22
+ @driver.value_bytes16(@handle)
23
+ else
24
+ @driver.value_bytes(@handle)
25
+ end
26
+ end
27
+
28
+ def to_f
29
+ @driver.value_double(@handle)
30
+ end
31
+
32
+ def to_i
33
+ @driver.value_int(@handle)
34
+ end
35
+
36
+ def to_int64
37
+ @driver.value_int64(@handle)
38
+ end
39
+
40
+ def to_s(utf16 = false)
41
+ @driver.value_text(@handle, utf16)
42
+ end
43
+
44
+ def type
45
+ case @driver.value_type(@handle)
46
+ when Constants::ColumnType::INTEGER then :int
47
+ when Constants::ColumnType::FLOAT then :float
48
+ when Constants::ColumnType::TEXT then :text
49
+ when Constants::ColumnType::BLOB then :blob
50
+ when Constants::ColumnType::NULL then :null
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,3 @@
1
+ module SQLite3
2
+ VERSION = "2.0.0"
3
+ end
data/lib/sqlite3.rb ADDED
@@ -0,0 +1,17 @@
1
+ # support multiple ruby version (fat binaries under windows)
2
+ begin
3
+ RUBY_VERSION =~ /(\d+\.\d+)/
4
+ require "sqlite3/#{$1}/sqlite3_native"
5
+ rescue LoadError
6
+ require "sqlite3/sqlite3_native"
7
+ end
8
+
9
+ require "sqlite3/database"
10
+ require "sqlite3/version"
11
+
12
+ module SQLite3
13
+ # Was sqlite3 compiled with thread safety on?
14
+ def self.threadsafe?
15
+ threadsafe > 0
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sqlite3
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: aarch64-linux-musl
6
+ authors:
7
+ - Jamis Buck
8
+ - Luis Lavena
9
+ - Aaron Patterson
10
+ - Mike Dalessio
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2024-04-17 00:00:00.000000000 Z
15
+ dependencies: []
16
+ description: |
17
+ Ruby library to interface with the SQLite3 database engine (http://www.sqlite.org). Precompiled
18
+ binaries are available for common platforms for recent versions of Ruby.
19
+ email:
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files:
23
+ - CHANGELOG.md
24
+ - README.md
25
+ - ext/sqlite3/aggregator.c
26
+ - ext/sqlite3/backup.c
27
+ - ext/sqlite3/database.c
28
+ - ext/sqlite3/exception.c
29
+ - ext/sqlite3/sqlite3.c
30
+ - ext/sqlite3/statement.c
31
+ files:
32
+ - ".gemtest"
33
+ - CHANGELOG.md
34
+ - CONTRIBUTING.md
35
+ - FAQ.md
36
+ - INSTALLATION.md
37
+ - LICENSE
38
+ - README.md
39
+ - dependencies.yml
40
+ - ext/sqlite3/aggregator.c
41
+ - ext/sqlite3/aggregator.h
42
+ - ext/sqlite3/backup.c
43
+ - ext/sqlite3/backup.h
44
+ - ext/sqlite3/database.c
45
+ - ext/sqlite3/database.h
46
+ - ext/sqlite3/exception.c
47
+ - ext/sqlite3/exception.h
48
+ - ext/sqlite3/extconf.rb
49
+ - ext/sqlite3/sqlite3.c
50
+ - ext/sqlite3/sqlite3_ruby.h
51
+ - ext/sqlite3/statement.c
52
+ - ext/sqlite3/statement.h
53
+ - ext/sqlite3/timespec.h
54
+ - lib/sqlite3.rb
55
+ - lib/sqlite3/3.0/sqlite3_native.so
56
+ - lib/sqlite3/3.1/sqlite3_native.so
57
+ - lib/sqlite3/3.2/sqlite3_native.so
58
+ - lib/sqlite3/3.3/sqlite3_native.so
59
+ - lib/sqlite3/constants.rb
60
+ - lib/sqlite3/database.rb
61
+ - lib/sqlite3/errors.rb
62
+ - lib/sqlite3/pragmas.rb
63
+ - lib/sqlite3/resultset.rb
64
+ - lib/sqlite3/statement.rb
65
+ - lib/sqlite3/value.rb
66
+ - lib/sqlite3/version.rb
67
+ homepage: https://github.com/sparklemotion/sqlite3-ruby
68
+ licenses:
69
+ - BSD-3-Clause
70
+ metadata:
71
+ homepage_uri: https://github.com/sparklemotion/sqlite3-ruby
72
+ bug_tracker_uri: https://github.com/sparklemotion/sqlite3-ruby/issues
73
+ documentation_uri: https://www.rubydoc.info/gems/sqlite3
74
+ changelog_uri: https://github.com/sparklemotion/sqlite3-ruby/blob/master/CHANGELOG.md
75
+ source_code_uri: https://github.com/sparklemotion/sqlite3-ruby
76
+ rubygems_mfa_required: 'true'
77
+ post_install_message:
78
+ rdoc_options:
79
+ - "--main"
80
+ - README.md
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '3.0'
88
+ - - "<"
89
+ - !ruby/object:Gem::Version
90
+ version: 3.4.dev
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: 3.3.22
96
+ requirements: []
97
+ rubygems_version: 3.3.26
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: Ruby library to interface with the SQLite3 database engine (http://www.sqlite.org).
101
+ test_files: []