db-mariadb 0.1.0 → 0.2.4
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.
- checksums.yaml +4 -4
- data/lib/db/mariadb/adapter.rb +4 -4
- data/lib/db/mariadb/connection.rb +29 -1
- data/lib/db/mariadb/error.rb +28 -0
- data/lib/db/mariadb/native/connection.rb +43 -28
- data/lib/db/mariadb/native/field.rb +3 -2
- data/lib/db/mariadb/version.rb +1 -1
- metadata +4 -4
- data/lib/.DS_Store +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a86f522a5df8d261feb1be7625f9ac23ba8768184f4103a3479a6d6acfb2638e
|
4
|
+
data.tar.gz: 551fe857397d0921d0f134c3701b26ff04cc4eabe1995c63128c0045350b17a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 978358ac2a66906fa116fa610d3280863b16412624f7d9ece0d17f010b70dd20a399d474c6005dc87ffb5756381ac8cf8dd4733935acd4cdc0deebcad195c137
|
7
|
+
data.tar.gz: 4f1a7fb2d36f7c243ad7e737bb75dc79cf352284975da61a95cbbb7d644539aa9e5131fb811ce34aba5b3cd24fa195dab09c30a1b622dca62e8fba8f8061679d
|
data/lib/db/mariadb/adapter.rb
CHANGED
@@ -27,14 +27,14 @@ module DB
|
|
27
27
|
LOCAL = "mysql://localhost/test"
|
28
28
|
|
29
29
|
class Adapter
|
30
|
-
def initialize(
|
31
|
-
@
|
30
|
+
def initialize(**options)
|
31
|
+
@options = options
|
32
32
|
end
|
33
33
|
|
34
|
-
attr :
|
34
|
+
attr :options
|
35
35
|
|
36
36
|
def call
|
37
|
-
Connection.new(
|
37
|
+
Connection.new(**@options)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
@@ -21,10 +21,18 @@
|
|
21
21
|
# THE SOFTWARE.
|
22
22
|
|
23
23
|
require 'async/pool/resource'
|
24
|
+
require 'async/io/generic'
|
25
|
+
|
24
26
|
require_relative 'native/connection'
|
25
27
|
|
26
28
|
module DB
|
27
29
|
module MariaDB
|
30
|
+
module IO
|
31
|
+
def self.new(fd, mode)
|
32
|
+
Async::IO::Generic.new(::IO.new(fd, mode, autoclose: false))
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
28
36
|
# This implements the interface between the underyling native interface interface and "standardised" connection interface.
|
29
37
|
class Connection < Async::Pool::Resource
|
30
38
|
def initialize(**options)
|
@@ -49,8 +57,12 @@ module DB
|
|
49
57
|
case value
|
50
58
|
when Numeric
|
51
59
|
buffer << value.to_s
|
60
|
+
when TrueClass
|
61
|
+
buffer << 'TRUE'
|
62
|
+
when FalseClass
|
63
|
+
buffer << 'FALSE'
|
52
64
|
when nil
|
53
|
-
buffer <<
|
65
|
+
buffer << 'NULL'
|
54
66
|
else
|
55
67
|
append_string(value, buffer)
|
56
68
|
end
|
@@ -64,11 +76,27 @@ module DB
|
|
64
76
|
return buffer
|
65
77
|
end
|
66
78
|
|
79
|
+
def id_column(name = 'id', primary_key: true)
|
80
|
+
buffer = String.new
|
81
|
+
|
82
|
+
append_identifier(name, buffer)
|
83
|
+
|
84
|
+
buffer << " BIGINT AUTO_INCREMENT"
|
85
|
+
|
86
|
+
if primary_key
|
87
|
+
buffer << " PRIMARY KEY"
|
88
|
+
end
|
89
|
+
|
90
|
+
return buffer
|
91
|
+
end
|
92
|
+
|
67
93
|
def status
|
68
94
|
@native.status
|
69
95
|
end
|
70
96
|
|
71
97
|
def send_query(statement)
|
98
|
+
@native.discard_results
|
99
|
+
|
72
100
|
@native.send_query(statement)
|
73
101
|
end
|
74
102
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Copyright, 2020, by Samuel G. D. Williams. <http://www.codeotaku.com>
|
4
|
+
#
|
5
|
+
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
# of this software and associated documentation files (the "Software"), to deal
|
7
|
+
# in the Software without restriction, including without limitation the rights
|
8
|
+
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
# copies of the Software, and to permit persons to whom the Software is
|
10
|
+
# furnished to do so, subject to the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be included in
|
13
|
+
# all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
# THE SOFTWARE.
|
22
|
+
|
23
|
+
module DB
|
24
|
+
module MariaDB
|
25
|
+
class Error < StandardError
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -19,7 +19,7 @@
|
|
19
19
|
# THE SOFTWARE.
|
20
20
|
|
21
21
|
require_relative 'result'
|
22
|
-
|
22
|
+
require_relative '../error'
|
23
23
|
|
24
24
|
module DB
|
25
25
|
module MariaDB
|
@@ -48,6 +48,7 @@ module DB
|
|
48
48
|
|
49
49
|
attach_function :mysql_use_result, [:pointer], :pointer
|
50
50
|
attach_function :mysql_next_result, [:pointer], :int
|
51
|
+
attach_function :mysql_more_results, [:pointer], :int
|
51
52
|
attach_function :mysql_free_result, [:pointer], :void
|
52
53
|
|
53
54
|
attach_function :mysql_affected_rows, [:pointer], :uint64
|
@@ -62,14 +63,8 @@ module DB
|
|
62
63
|
|
63
64
|
attach_function :mysql_real_escape_string, [:pointer, :pointer, :string, :size_t], :size_t
|
64
65
|
|
65
|
-
module IO
|
66
|
-
def self.new(fd, mode)
|
67
|
-
Async::IO::Generic.new(::IO.new(fd, mode, autoclose: false))
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
66
|
class Connection < FFI::Pointer
|
72
|
-
def self.connect(host: 'localhost', user: nil, password: nil, database: nil, port: 0, unix_socket: nil, client_flags: 0, compression: false, types: DEFAULT_TYPES, **options)
|
67
|
+
def self.connect(io: IO, host: 'localhost', user: nil, password: nil, database: nil, port: 0, unix_socket: nil, client_flags: 0, compression: false, types: DEFAULT_TYPES, **options)
|
73
68
|
pointer = Native.mysql_init(nil)
|
74
69
|
Native.mysql_options(pointer, MYSQL_OPT_NONBLOCK, nil)
|
75
70
|
|
@@ -100,13 +95,13 @@ module DB
|
|
100
95
|
end
|
101
96
|
|
102
97
|
if result.read_pointer.null?
|
103
|
-
raise "Could not connect: #{Native.mysql_error(pointer)}!"
|
98
|
+
raise Error, "Could not connect: #{Native.mysql_error(pointer)}!"
|
104
99
|
end
|
105
100
|
|
106
|
-
return self.new(pointer, io, types
|
101
|
+
return self.new(pointer, io, types, **options)
|
107
102
|
end
|
108
103
|
|
109
|
-
def initialize(address, io, types
|
104
|
+
def initialize(address, io, types, **options)
|
110
105
|
super(address)
|
111
106
|
|
112
107
|
@io = io
|
@@ -125,7 +120,7 @@ module DB
|
|
125
120
|
|
126
121
|
def check_error!(message)
|
127
122
|
if Native.mysql_errno(self) != 0
|
128
|
-
raise "#{message}: #{Native.mysql_error(self)}!"
|
123
|
+
raise Error, "#{message}: #{Native.mysql_error(self)}!"
|
129
124
|
end
|
130
125
|
end
|
131
126
|
|
@@ -174,42 +169,62 @@ module DB
|
|
174
169
|
end
|
175
170
|
|
176
171
|
if error.read_int != 0
|
177
|
-
raise "Could not send query: #{Native.mysql_error(self)}!"
|
172
|
+
raise Error, "Could not send query: #{Native.mysql_error(self)}!"
|
178
173
|
end
|
179
174
|
end
|
180
175
|
|
176
|
+
# @returns [Boolean] If there are more results.
|
177
|
+
def more_results?
|
178
|
+
Native.mysql_more_results(self) == 1
|
179
|
+
end
|
180
|
+
|
181
181
|
def next_result(types: @types)
|
182
|
+
if result = self.get_result
|
183
|
+
return Result.new(self, types, result)
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
# Silently discard any results that application didn't read.
|
188
|
+
def discard_results
|
189
|
+
while result = self.get_result
|
190
|
+
end
|
191
|
+
|
192
|
+
return nil
|
193
|
+
end
|
194
|
+
|
195
|
+
def affected_rows
|
196
|
+
Native.mysql_affected_rows(self)
|
197
|
+
end
|
198
|
+
|
199
|
+
def insert_id
|
200
|
+
Native.mysql_insert_id(self)
|
201
|
+
end
|
202
|
+
|
203
|
+
def info
|
204
|
+
Native.mysql_info(self)
|
205
|
+
end
|
206
|
+
|
207
|
+
protected
|
208
|
+
def get_result
|
182
209
|
if @result
|
183
210
|
self.free_result
|
184
211
|
|
185
212
|
# Successful and there are no more results:
|
186
213
|
return if Native.mysql_next_result(self) == -1
|
187
214
|
|
188
|
-
check_error!("
|
215
|
+
check_error!("Get result")
|
189
216
|
end
|
190
217
|
|
191
218
|
@result = Native.mysql_use_result(self)
|
192
219
|
|
193
220
|
if @result.null?
|
194
|
-
check_error!("
|
221
|
+
check_error!("Get result")
|
195
222
|
|
196
223
|
return nil
|
197
224
|
else
|
198
|
-
return
|
225
|
+
return @result
|
199
226
|
end
|
200
227
|
end
|
201
|
-
|
202
|
-
def affected_rows
|
203
|
-
Native.mysql_affected_rows(self)
|
204
|
-
end
|
205
|
-
|
206
|
-
def insert_id
|
207
|
-
Native.mysql_insert_id(self)
|
208
|
-
end
|
209
|
-
|
210
|
-
def info
|
211
|
-
Native.mysql_info(self)
|
212
|
-
end
|
213
228
|
end
|
214
229
|
end
|
215
230
|
end
|
@@ -25,7 +25,7 @@ require_relative 'types'
|
|
25
25
|
module DB
|
26
26
|
module MariaDB
|
27
27
|
module Native
|
28
|
-
Type = enum(
|
28
|
+
Type = enum(
|
29
29
|
:decimal,
|
30
30
|
:tiny,
|
31
31
|
:short,
|
@@ -98,7 +98,8 @@ module DB
|
|
98
98
|
:flags, :uint,
|
99
99
|
:decimals, :uint,
|
100
100
|
:charsetnr, :uint,
|
101
|
-
:type, Type
|
101
|
+
:type, Type,
|
102
|
+
:extension, :pointer,
|
102
103
|
)
|
103
104
|
|
104
105
|
def name
|
data/lib/db/mariadb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db-mariadb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -114,10 +114,10 @@ executables: []
|
|
114
114
|
extensions: []
|
115
115
|
extra_rdoc_files: []
|
116
116
|
files:
|
117
|
-
- lib/.DS_Store
|
118
117
|
- lib/db/mariadb.rb
|
119
118
|
- lib/db/mariadb/adapter.rb
|
120
119
|
- lib/db/mariadb/connection.rb
|
120
|
+
- lib/db/mariadb/error.rb
|
121
121
|
- lib/db/mariadb/native.rb
|
122
122
|
- lib/db/mariadb/native/connection.rb
|
123
123
|
- lib/db/mariadb/native/field.rb
|
@@ -143,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
143
143
|
- !ruby/object:Gem::Version
|
144
144
|
version: '0'
|
145
145
|
requirements: []
|
146
|
-
rubygems_version: 3.
|
146
|
+
rubygems_version: 3.0.3
|
147
147
|
signing_key:
|
148
148
|
specification_version: 4
|
149
149
|
summary: An event-driven interface for MariaDB and MySQL servers.
|
data/lib/.DS_Store
DELETED
Binary file
|