db-mariadb 0.4.0 → 0.8.1

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: 5a5fec76a4d531cdcad6ea1d54e10b6a251895a47207d74acec924a02edc3da5
4
- data.tar.gz: a9890c37d02dc2e0493eee2d7af4f89f05de994464c99435eb10ff43bea13ef7
3
+ metadata.gz: 8ac7f702a2a637ea7c724bca60d40b1d6a664067a8680392040528a08a3ae91d
4
+ data.tar.gz: 1a6ad7a2cc5ba6afa86fe551cdf6dd41a368887868c67c8b708ea47e294f65d5
5
5
  SHA512:
6
- metadata.gz: 1f5aa5144c1194868398e71eaab0dd42361d2c2b8674e41d0f1dda22f2c2f73367f2eda61eca900e8bca5deb5b5a810848db6816a2343217bf0b45be720557a8
7
- data.tar.gz: a7a18fa736f1766dbbc0b38b01b71c15c6b844a5b8212063f85c6517db942588c63b92b036e9b229326cf55d2c99cde5c179592496149a05d3210824a0d5d9e3
6
+ metadata.gz: 0a978d8b4417533c91bec7c16ad1c8e7fdad35b1eacaa9b83ec44bc62d49b6a0a11871056945a81027b56e0f28f1de1bf81ede882cb50e50b4b0f0aa75cc29c4
7
+ data.tar.gz: 78ae9527dc839be6ebf6eb565d3311a9dc83563d685d376484d541f9f1905694626a4b2609884bf4699e51ba5ee7b39f6fafec10fd41f6daa39c7d5d5375facc
data/lib/.DS_Store ADDED
Binary file
@@ -24,8 +24,6 @@ require_relative 'connection'
24
24
 
25
25
  module DB
26
26
  module MariaDB
27
- LOCAL = "mysql://localhost/test"
28
-
29
27
  class Adapter
30
28
  def initialize(**options)
31
29
  @options = options
@@ -65,20 +65,33 @@ module DB
65
65
  end
66
66
 
67
67
  def append_identifier(value, buffer = String.new)
68
- buffer << "`" << @native.escape(value) << "`"
68
+ case value
69
+ when Array
70
+ first = true
71
+ value.each do |part|
72
+ buffer << '.' unless first
73
+ first = false
74
+
75
+ buffer << escape_identifier(part)
76
+ end
77
+ else
78
+ buffer << escape_identifier(value)
79
+ end
69
80
 
70
81
  return buffer
71
82
  end
72
83
 
73
- def id_column(name = 'id', primary_key: true)
84
+ def key_column(name = 'id', primary: true, null: false)
74
85
  buffer = String.new
75
86
 
76
87
  append_identifier(name, buffer)
77
88
 
78
- buffer << " BIGINT AUTO_INCREMENT"
89
+ buffer << " BIGINT"
79
90
 
80
- if primary_key
81
- buffer << " PRIMARY KEY"
91
+ if primary
92
+ buffer << " AUTO_INCREMENT PRIMARY KEY"
93
+ elsif !null
94
+ buffer << " NOT NULL"
82
95
  end
83
96
 
84
97
  return buffer
@@ -97,6 +110,12 @@ module DB
97
110
  def next_result
98
111
  @native.next_result
99
112
  end
113
+
114
+ protected
115
+
116
+ def escape_identifier(value)
117
+ "`#{@native.escape(value)}`"
118
+ end
100
119
  end
101
120
  end
102
121
  end
@@ -18,14 +18,40 @@
18
18
  # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
19
19
  # THE SOFTWARE.
20
20
 
21
- require 'ffi'
21
+ require 'ffi/module'
22
+ require 'ffi/module/config_tool'
22
23
 
23
24
  module DB
24
25
  module MariaDB
25
26
  module Native
26
- extend FFI::Library
27
+ extend FFI::Module::Library
28
+ extend FFI::Module::Loader
29
+ extend FFI::Module::ConfigTool
27
30
 
28
- ffi_lib 'mariadb'
31
+ ffi_load('mariadb') ||
32
+ ffi_load_using_config_tool(%w{mariadb_config --libs}) ||
33
+ ffi_load_using_config_tool(%w{mysql_config --libs}) ||
34
+ ffi_load_failure(<<~EOF)
35
+ Unable to load libmariadb!
36
+
37
+ ## Ubuntu
38
+
39
+ sudo apt-get install libmariadb-dev
40
+
41
+ ## Arch Linux
42
+
43
+ sudo pacman -S mariadb
44
+
45
+ ## MacPorts
46
+
47
+ sudo port install mariadb-10.5
48
+ sudo port select --set mysql mariadb-10.5
49
+
50
+ ## Homebrew
51
+
52
+ brew install mariadb
53
+
54
+ EOF
29
55
  end
30
56
  end
31
57
  end
@@ -24,6 +24,9 @@ require_relative '../error'
24
24
  module DB
25
25
  module MariaDB
26
26
  module Native
27
+ MYSQL_PROTOCOL_TCP = 1
28
+
29
+ MYSQL_OPT_PROTOCOL = 9
27
30
  MYSQL_OPT_NONBLOCK = 6000
28
31
 
29
32
  MYSQL_WAIT_READ = 1
@@ -36,32 +39,32 @@ module DB
36
39
  CLIENT_MULTI_STATEMENT = 0x00010000
37
40
  CLIENT_MULTI_RESULTS = 0x00020000
38
41
 
39
- attach_function :mysql_init, [:pointer], :pointer
40
- attach_function :mysql_options, [:pointer, :int, :pointer], :int
41
- attach_function :mysql_get_socket, [:pointer], :int
42
+ ffi_attach_function :mysql_init, [:pointer], :pointer
43
+ ffi_attach_function :mysql_options, [:pointer, :int, :pointer], :int
44
+ ffi_attach_function :mysql_get_socket, [:pointer], :int
42
45
 
43
- attach_function :mysql_real_connect_start, [:pointer, :pointer, :string, :string, :string, :string, :int, :string, :long], :int
44
- attach_function :mysql_real_connect_cont, [:pointer, :pointer, :int], :int
46
+ ffi_attach_function :mysql_real_connect_start, [:pointer, :pointer, :string, :string, :string, :string, :int, :string, :long], :int
47
+ ffi_attach_function :mysql_real_connect_cont, [:pointer, :pointer, :int], :int
45
48
 
46
- attach_function :mysql_real_query_start, [:pointer, :pointer, :string, :ulong], :int
47
- attach_function :mysql_real_query_cont, [:pointer, :pointer, :int], :int
49
+ ffi_attach_function :mysql_real_query_start, [:pointer, :pointer, :string, :ulong], :int
50
+ ffi_attach_function :mysql_real_query_cont, [:pointer, :pointer, :int], :int
48
51
 
49
- attach_function :mysql_use_result, [:pointer], :pointer
50
- attach_function :mysql_next_result, [:pointer], :int
51
- attach_function :mysql_more_results, [:pointer], :int
52
- attach_function :mysql_free_result, [:pointer], :void
52
+ ffi_attach_function :mysql_use_result, [:pointer], :pointer
53
+ ffi_attach_function :mysql_next_result, [:pointer], :int
54
+ ffi_attach_function :mysql_more_results, [:pointer], :int
55
+ ffi_attach_function :mysql_free_result, [:pointer], :void
53
56
 
54
- attach_function :mysql_affected_rows, [:pointer], :uint64
55
- attach_function :mysql_insert_id, [:pointer], :uint64
56
- attach_function :mysql_info, [:pointer], :string
57
+ ffi_attach_function :mysql_affected_rows, [:pointer], :uint64
58
+ ffi_attach_function :mysql_insert_id, [:pointer], :uint64
59
+ ffi_attach_function :mysql_info, [:pointer], :string
57
60
 
58
- attach_function :mysql_close, [:pointer], :void
59
- attach_function :mysql_errno, [:pointer], :uint
60
- attach_function :mysql_error, [:pointer], :string
61
+ ffi_attach_function :mysql_close, [:pointer], :void
62
+ ffi_attach_function :mysql_errno, [:pointer], :uint
63
+ ffi_attach_function :mysql_error, [:pointer], :string
61
64
 
62
- attach_function :mysql_stat, [:pointer], :string
65
+ ffi_attach_function :mysql_stat, [:pointer], :string
63
66
 
64
- attach_function :mysql_real_escape_string, [:pointer, :pointer, :string, :size_t], :size_t
67
+ ffi_attach_function :mysql_real_escape_string, [:pointer, :pointer, :string, :size_t], :size_t
65
68
 
66
69
  module IO
67
70
  def self.new(fd, mode)
@@ -70,10 +73,14 @@ module DB
70
73
  end
71
74
 
72
75
  class Connection < FFI::Pointer
73
- def self.connect(wrapper: IO, host: 'localhost', user: nil, password: nil, database: nil, port: 0, unix_socket: nil, client_flags: 0, compression: false, types: DEFAULT_TYPES, **options)
76
+ def self.connect(wrapper: IO, host: 'localhost', username: nil, password: nil, database: nil, port: 0, unix_socket: nil, client_flags: 0, compression: false, types: DEFAULT_TYPES, **options)
74
77
  pointer = Native.mysql_init(nil)
75
78
  Native.mysql_options(pointer, MYSQL_OPT_NONBLOCK, nil)
76
79
 
80
+ # if protocol
81
+ # Native.mysql_options(pointer, MYSQL_OPT_PROTOCOL, FFI::MemoryPointer.new(:uint, protocol))
82
+ # end
83
+
77
84
  client_flags |= CLIENT_MULTI_STATEMENT | CLIENT_MULTI_RESULTS
78
85
 
79
86
  if compression
@@ -82,11 +89,11 @@ module DB
82
89
 
83
90
  result = FFI::MemoryPointer.new(:pointer)
84
91
 
85
- status = Native.mysql_real_connect_start(result, pointer, host, user, password, database, port, unix_socket, client_flags);
92
+ status = Native.mysql_real_connect_start(result, pointer, host, username, password, database, port, unix_socket, client_flags);
93
+
94
+ io = wrapper.new(Native.mysql_get_socket(pointer), "r+")
86
95
 
87
96
  if status > 0
88
- io = wrapper.new(Native.mysql_get_socket(pointer), "r+")
89
-
90
97
  while status > 0
91
98
  if status & MYSQL_WAIT_READ
92
99
  io.wait_readable
@@ -22,10 +22,13 @@ require_relative '../native'
22
22
 
23
23
  require_relative 'types'
24
24
 
25
+ require 'date'
26
+ require 'json'
27
+
25
28
  module DB
26
29
  module MariaDB
27
30
  module Native
28
- Type = enum(
31
+ Type = ffi_define_enumeration(:field_type, [
29
32
  :decimal,
30
33
  :tiny,
31
34
  :short,
@@ -54,7 +57,7 @@ module DB
54
57
  :var_string,
55
58
  :string,
56
59
  :geometry,
57
- )
60
+ ])
58
61
 
59
62
  DEFAULT_TYPES = {
60
63
  decimal: Types::Decimal,
@@ -23,13 +23,13 @@ require_relative 'field'
23
23
  module DB
24
24
  module MariaDB
25
25
  module Native
26
- attach_function :mysql_fetch_row_start, [:pointer, :pointer], :int
27
- attach_function :mysql_fetch_row_cont, [:pointer, :pointer, :int], :int
26
+ ffi_attach_function :mysql_fetch_row_start, [:pointer, :pointer], :int
27
+ ffi_attach_function :mysql_fetch_row_cont, [:pointer, :pointer, :int], :int
28
28
 
29
- attach_function :mysql_num_rows, [:pointer], :uint64
30
- attach_function :mysql_num_fields, [:pointer], :uint32
29
+ ffi_attach_function :mysql_num_rows, [:pointer], :uint64
30
+ ffi_attach_function :mysql_num_fields, [:pointer], :uint32
31
31
 
32
- attach_function :mysql_fetch_fields, [:pointer], :pointer
32
+ ffi_attach_function :mysql_fetch_fields, [:pointer], :pointer
33
33
 
34
34
  class Result < FFI::Pointer
35
35
  def initialize(connection, types = {}, address)
@@ -20,6 +20,6 @@
20
20
 
21
21
  module DB
22
22
  module MariaDB
23
- VERSION = "0.4.0"
23
+ VERSION = "0.8.1"
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: db-mariadb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.8.1
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-07-06 00:00:00.000000000 Z
11
+ date: 2021-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: ffi
14
+ name: ffi-module
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.3.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.3.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: async-io
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +114,7 @@ executables: []
114
114
  extensions: []
115
115
  extra_rdoc_files: []
116
116
  files:
117
+ - lib/.DS_Store
117
118
  - lib/db/mariadb.rb
118
119
  - lib/db/mariadb/adapter.rb
119
120
  - lib/db/mariadb/connection.rb
@@ -143,7 +144,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
143
144
  - !ruby/object:Gem::Version
144
145
  version: '0'
145
146
  requirements: []
146
- rubygems_version: 3.1.2
147
+ rubygems_version: 3.2.3
147
148
  signing_key:
148
149
  specification_version: 4
149
150
  summary: An event-driven interface for MariaDB and MySQL servers.