gloo-sqlite 1.5 → 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 +40 -38
  3. metadata +83 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 031ece6c532c4d196d93fd11988d615a6d1ebaccdf94fee1565718007e1149dc
4
- data.tar.gz: 1f20a1df8a62839a19714bae542568eff0d194167266f284a5603ac879f06a0e
3
+ metadata.gz: 898b3e180f152ac26fb226f77030e2f3217b0a3a382465e07856cb1d0759e224
4
+ data.tar.gz: 60d2b107df04b32b3dfa8ca8d4eedc9724c9f3bba0ef16a5c4dff97a11e91558
5
5
  SHA512:
6
- metadata.gz: ffa43408b50f6d1c10b38e75cd62b5841899e2606c9f763755a50b29e77f044f1c123ba8dc80f06115f77f2fdfa403980f8d623677998ae66a00510353c7cf25
7
- data.tar.gz: 1a8b4d9456a7015c62bda6f7323e6498bafa87f035596e95c944cc0960f7af8b8660f749edd1032a76ca331ecb9bce4f616b6bf5892f02b25b1ac82428a7c73d
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,23 +125,25 @@ 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
- rows = []
121
- while ( row = results.next ) do
122
- rows << row
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
123
146
  end
124
-
125
- # Return [ column names, rows ] - the same shape as gloo-mysql and
126
- # gloo-pg, so callers (Query, Table) can treat every backend alike.
127
- return [ results.columns, rows ]
128
147
  end
129
148
 
130
149
  #
@@ -143,30 +162,13 @@ class Sqlite < Gloo::Core::Obj
143
162
 
144
163
  #
145
164
  # Get the Database file from the child object.
146
- # Returns nil if there is none.
165
+ # Returns '' if there is none.
147
166
  #
148
167
  def db_value
149
168
  o = find_child DB
150
- return nil unless o
151
-
152
- return o.value
153
- end
169
+ return '' unless o
154
170
 
155
- #
156
- # Try the connection and make sure it works.
157
- # Returns true if we can connect and do a query.
158
- #
159
- def connects?
160
- begin
161
- db = SQLite3::Database.open db_value
162
- sql = "SELECT COUNT(name) FROM sqlite_master WHERE type='table'"
163
- db.get_first_value sql
164
- rescue => e
165
- @engine.log_exception e
166
- @engine.heap.it.set_to false
167
- return false
168
- end
169
- return true
171
+ return o.value.to_s
170
172
  end
171
173
 
172
174
  # ---------------------------------------------------------------------
@@ -182,10 +184,10 @@ class Sqlite < Gloo::Core::Obj
182
184
  :shortcut => KEYWORD_SHORT,
183
185
  :description => 'A Sqlite3 database connection.',
184
186
  :children => [
185
- "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."
186
188
  ],
187
189
  :messages => [
188
- '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).'
189
191
  ],
190
192
  :examples => <<~EXAMPLES.strip
191
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.5'
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