gloo-sqlite 1.4 → 1.6

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/sqlite.rb +44 -40
  3. metadata +83 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c91d85a4fa16e10d1d47166aa8397246a4c6015a8a260023bb905d513eebc881
4
- data.tar.gz: 42c48e02697430e7a3aa7922a0772a5060d153c14f5d6188e8ae4718f78c103b
3
+ metadata.gz: 898b3e180f152ac26fb226f77030e2f3217b0a3a382465e07856cb1d0759e224
4
+ data.tar.gz: 60d2b107df04b32b3dfa8ca8d4eedc9724c9f3bba0ef16a5c4dff97a11e91558
5
5
  SHA512:
6
- metadata.gz: 295488d614f14d56ec3821084caa1f78f71a864cc9f289b6e2e8d42643fe9a62dcd2ef4bfedbc3ef23ddc08b0bfb84a074380487bdc149271f9794473d1fe695
7
- data.tar.gz: 0713fb14a914a7bbb709bd2fcce02b233adc9c1d3e10c9196d1796e8a9b330eca5c87107f32362251f79b4153d8ef4c92bc91be88e11f9b1e995d4aa4513276f
6
+ metadata.gz: ca86fe1d4d42834e656e2132fe37e7ef683df49fd4fc611c6908ffc25328cd195b4edab30616dba8c80954d408f20de2fb83653e14ab1bbf3217f3b09b0dc5c1
7
+ data.tar.gz: e6b11b592cde0167104d0f66b420b98c538606a46456adf8b233f77f1672c917d64fac8c7057036119017a5a7efc273a99912b154d7fa705e3c44b4ca15aaf36
data/lib/sqlite.rb CHANGED
@@ -16,9 +16,13 @@
16
16
  # replace `db.query()` with `db.get_first_value()`.
17
17
  #
18
18
  require 'sqlite3'
19
+ require 'db_connection'
19
20
 
20
21
  class Sqlite < Gloo::Core::Obj
21
22
 
23
+ # Shared driver behaviour from gloo-db: errors, verify, setup problems.
24
+ include DbConnection
25
+
22
26
  KEYWORD = 'sqlite'.freeze
23
27
  KEYWORD_SHORT = 'sqlite'.freeze
24
28
 
@@ -93,9 +97,22 @@ class Sqlite < Gloo::Core::Obj
93
97
  return
94
98
  end
95
99
 
96
- return unless connects?
100
+ verify_connection do
101
+ db = SQLite3::Database.open name
102
+ begin
103
+ db.get_first_value "SELECT COUNT(name) FROM sqlite_master WHERE type='table'"
104
+ ensure
105
+ db.close
106
+ end
107
+ end
108
+ end
97
109
 
98
- @engine.heap.it.set_to true
110
+ #
111
+ # The exception classes that are database errors (DbConnection):
112
+ # Query reports these as 'Query failed: …'.
113
+ #
114
+ def database_errors
115
+ return [ SQLite3::Exception ]
99
116
  end
100
117
 
101
118
  # ---------------------------------------------------------------------
@@ -108,28 +125,32 @@ class Sqlite < Gloo::Core::Obj
108
125
  #
109
126
  def query( sql, params = nil )
110
127
  name = db_value
111
- unless name
112
- @engine.err DB_REQUIRED_ERR
113
- return
114
- end
128
+ return setup_err( DB_REQUIRED_ERR ) if name.empty?
115
129
 
130
+ # A database file that doesn't exist is created.
116
131
  db = SQLite3::Database.open name
117
- # db.results_as_hash = true
118
- results = db.query( sql, params )
119
-
120
- return results
132
+ begin
133
+ results = db.query( sql, params )
134
+
135
+ rows = []
136
+ while ( row = results.next ) do
137
+ rows << row
138
+ end
139
+
140
+ # Return [ column names, rows ] - the same shape as gloo-mysql and
141
+ # gloo-pg, so callers (Query, Table) can treat every backend alike.
142
+ return [ results.columns, rows ]
143
+ ensure
144
+ results&.close
145
+ db.close
146
+ end
121
147
  end
122
148
 
123
- #
149
+ #
124
150
  # Based on the result set, build a QueryResult object.
125
- #
151
+ #
126
152
  def get_query_result( result )
127
- rows = []
128
- while ( row = result.next ) do
129
- rows << row
130
- end
131
-
132
- return QueryResult.new( result.columns, rows )
153
+ return QueryResult.new( result[0], result[1], @engine )
133
154
  end
134
155
 
135
156
 
@@ -141,30 +162,13 @@ class Sqlite < Gloo::Core::Obj
141
162
 
142
163
  #
143
164
  # Get the Database file from the child object.
144
- # Returns nil if there is none.
165
+ # Returns '' if there is none.
145
166
  #
146
167
  def db_value
147
168
  o = find_child DB
148
- return nil unless o
169
+ return '' unless o
149
170
 
150
- return o.value
151
- end
152
-
153
- #
154
- # Try the connection and make sure it works.
155
- # Returns true if we can connect and do a query.
156
- #
157
- def connects?
158
- begin
159
- db = SQLite3::Database.open db_value
160
- sql = "SELECT COUNT(name) FROM sqlite_master WHERE type='table'"
161
- db.get_first_value sql
162
- rescue => e
163
- @engine.log_exception e
164
- @engine.heap.it.set_to false
165
- return false
166
- end
167
- return true
171
+ return o.value.to_s
168
172
  end
169
173
 
170
174
  # ---------------------------------------------------------------------
@@ -180,10 +184,10 @@ class Sqlite < Gloo::Core::Obj
180
184
  :shortcut => KEYWORD_SHORT,
181
185
  :description => 'A Sqlite3 database connection.',
182
186
  :children => [
183
- "database (string) — Default: '#{DEFAULT_DB}'. The path to the database file."
187
+ "database (string) — Default: '#{DEFAULT_DB}'. The path to the database file. A query on a file that does not exist creates a new, empty database there."
184
188
  ],
185
189
  :messages => [
186
- 'verify — Verify that the database connection can be established.'
190
+ 'verify — Verify that the database connection can be established. It is true if it can, false if not: no database name, a file that does not exist, or a file that is not a database (with the reason in the error).'
187
191
  ],
188
192
  :examples => <<~EXAMPLES.strip
189
193
  sqlite [can] :
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gloo-sqlite
3
3
  version: !ruby/object:Gem::Version
4
- version: '1.4'
4
+ version: '1.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eric Crane
@@ -29,6 +29,88 @@ dependencies:
29
29
  - - ">="
30
30
  - !ruby/object:Gem::Version
31
31
  version: 1.4.2
32
+ - !ruby/object:Gem::Dependency
33
+ name: gloo
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '7.0'
39
+ type: :runtime
40
+ prerelease: false
41
+ version_requirements: !ruby/object:Gem::Requirement
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: '7.0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: gloo-db
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '1.3'
53
+ type: :runtime
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '1.3'
60
+ - !ruby/object:Gem::Dependency
61
+ name: bundler
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: minitest
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '5.1'
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 5.14.2
84
+ type: :development
85
+ prerelease: false
86
+ version_requirements: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: '5.1'
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 5.14.2
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '13.0'
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: 13.0.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '13.0'
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: 13.0.1
32
114
  description: Adds SQLite support to Gloo.
33
115
  email:
34
116
  - eric.crane@mac.com