mysql2 0.4.10 → 0.5.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.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +98 -38
  3. data/ext/mysql2/client.c +223 -76
  4. data/ext/mysql2/client.h +1 -39
  5. data/ext/mysql2/extconf.rb +46 -26
  6. data/ext/mysql2/mysql2_ext.c +8 -2
  7. data/ext/mysql2/mysql2_ext.h +8 -4
  8. data/ext/mysql2/mysql_enc_name_to_ruby.h +60 -56
  9. data/ext/mysql2/mysql_enc_to_ruby.h +64 -3
  10. data/ext/mysql2/result.c +242 -86
  11. data/ext/mysql2/result.h +3 -3
  12. data/ext/mysql2/statement.c +90 -73
  13. data/ext/mysql2/statement.h +0 -2
  14. data/ext/mysql2/wait_for_single_fd.h +2 -1
  15. data/lib/mysql2/client.rb +51 -28
  16. data/lib/mysql2/em.rb +2 -4
  17. data/lib/mysql2/error.rb +52 -22
  18. data/lib/mysql2/result.rb +2 -0
  19. data/lib/mysql2/statement.rb +3 -11
  20. data/lib/mysql2/version.rb +1 -1
  21. data/lib/mysql2.rb +18 -15
  22. data/support/3A79BD29.asc +49 -0
  23. data/support/5072E1F5.asc +5 -5
  24. data/support/mysql_enc_to_ruby.rb +8 -3
  25. data/support/ruby_enc_to_mysql.rb +7 -5
  26. metadata +14 -58
  27. data/examples/eventmachine.rb +0 -21
  28. data/examples/threaded.rb +0 -18
  29. data/spec/configuration.yml.example +0 -11
  30. data/spec/em/em_spec.rb +0 -136
  31. data/spec/my.cnf.example +0 -9
  32. data/spec/mysql2/client_spec.rb +0 -1039
  33. data/spec/mysql2/error_spec.rb +0 -82
  34. data/spec/mysql2/result_spec.rb +0 -545
  35. data/spec/mysql2/statement_spec.rb +0 -776
  36. data/spec/rcov.opts +0 -3
  37. data/spec/spec_helper.rb +0 -108
  38. data/spec/ssl/ca-cert.pem +0 -17
  39. data/spec/ssl/ca-key.pem +0 -27
  40. data/spec/ssl/ca.cnf +0 -22
  41. data/spec/ssl/cert.cnf +0 -22
  42. data/spec/ssl/client-cert.pem +0 -17
  43. data/spec/ssl/client-key.pem +0 -27
  44. data/spec/ssl/client-req.pem +0 -15
  45. data/spec/ssl/gen_certs.sh +0 -48
  46. data/spec/ssl/pkcs8-client-key.pem +0 -28
  47. data/spec/ssl/pkcs8-server-key.pem +0 -28
  48. data/spec/ssl/server-cert.pem +0 -17
  49. data/spec/ssl/server-key.pem +0 -27
  50. data/spec/ssl/server-req.pem +0 -15
  51. data/spec/test_data +0 -1
@@ -1,16 +1,8 @@
1
1
  module Mysql2
2
2
  class Statement
3
- include Enumerable
4
-
5
- if Thread.respond_to?(:handle_interrupt)
6
- def execute(*args)
7
- Thread.handle_interrupt(::Mysql2::Util::TimeoutError => :never) do
8
- _execute(*args)
9
- end
10
- end
11
- else
12
- def execute(*args)
13
- _execute(*args)
3
+ def execute(*args, **kwargs)
4
+ Thread.handle_interrupt(::Mysql2::Util::TIMEOUT_ERROR_NEVER) do
5
+ _execute(*args, **kwargs)
14
6
  end
15
7
  end
16
8
  end
@@ -1,3 +1,3 @@
1
1
  module Mysql2
2
- VERSION = "0.4.10"
2
+ VERSION = "0.5.4".freeze
3
3
  end
data/lib/mysql2.rb CHANGED
@@ -1,7 +1,5 @@
1
- # encoding: UTF-8
2
1
  require 'date'
3
2
  require 'bigdecimal'
4
- require 'rational' unless RUBY_VERSION >= '1.9.2'
5
3
 
6
4
  # Load libmysql.dll before requiring mysql2/mysql2.so
7
5
  # This gives a chance to be flexible about the load path
@@ -13,16 +11,23 @@ if RUBY_PLATFORM =~ /mswin|mingw/
13
11
  ENV['RUBY_MYSQL2_LIBMYSQL_DLL']
14
12
  elsif File.exist?(File.expand_path('../vendor/libmysql.dll', File.dirname(__FILE__)))
15
13
  # Use vendor/libmysql.dll if it exists, convert slashes for Win32 LoadLibrary
16
- File.expand_path('../vendor/libmysql.dll', File.dirname(__FILE__)).tr('/', '\\')
14
+ File.expand_path('../vendor/libmysql.dll', File.dirname(__FILE__))
15
+ elsif defined?(RubyInstaller)
16
+ # RubyInstaller-2.4+ native build doesn't need DLL preloading
17
17
  else
18
18
  # This will use default / system library paths
19
19
  'libmysql.dll'
20
20
  end
21
21
 
22
- require 'Win32API'
23
- LoadLibrary = Win32API.new('Kernel32', 'LoadLibrary', ['P'], 'I')
24
- if 0 == LoadLibrary.call(dll_path)
25
- abort "Failed to load libmysql.dll from #{dll_path}"
22
+ if dll_path
23
+ require 'fiddle'
24
+ kernel32 = Fiddle.dlopen 'kernel32'
25
+ load_library = Fiddle::Function.new(
26
+ kernel32['LoadLibraryW'], [Fiddle::TYPE_VOIDP], Fiddle::TYPE_INT,
27
+ )
28
+ if load_library.call(dll_path.encode('utf-16le')).zero?
29
+ abort "Failed to load libmysql.dll from #{dll_path}"
30
+ end
26
31
  end
27
32
  end
28
33
 
@@ -71,14 +76,12 @@ module Mysql2
71
76
  # Timeout::ExitException was removed in Ruby 2.3.0, 2.2.3, and 2.1.8,
72
77
  # but is present in earlier 2.1.x and 2.2.x, so we provide a shim.
73
78
  #
74
- if Thread.respond_to?(:handle_interrupt)
75
- require 'timeout'
76
- # rubocop:disable Style/ConstantName
77
- TimeoutError = if defined?(::Timeout::ExitException)
78
- ::Timeout::ExitException
79
- else
80
- ::Timeout::Error
81
- end
79
+ require 'timeout'
80
+ TIMEOUT_ERROR_CLASS = if defined?(::Timeout::ExitException)
81
+ ::Timeout::ExitException
82
+ else
83
+ ::Timeout::Error
82
84
  end
85
+ TIMEOUT_ERROR_NEVER = { TIMEOUT_ERROR_CLASS => :never }.freeze
83
86
  end
84
87
  end
@@ -0,0 +1,49 @@
1
+ -----BEGIN PGP PUBLIC KEY BLOCK-----
2
+ Version: SKS 1.1.6
3
+ Comment: Hostname: pgp.mit.edu
4
+
5
+ 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
47
+ sTSKHe+QnnnoFmu4gnmDU31i
48
+ =Xqbo
49
+ -----END PGP PUBLIC KEY BLOCK-----
data/support/5072E1F5.asc CHANGED
@@ -1,5 +1,5 @@
1
1
  -----BEGIN PGP PUBLIC KEY BLOCK-----
2
- Version: GnuPG v1.4.5 (GNU/Linux)
2
+ Version: GnuPG v1
3
3
 
4
4
  mQGiBD4+owwRBAC14GIfUfCyEDSIePvEW3SAFUdJBtoQHH/nJKZyQT7h9bPlUWC3
5
5
  RODjQReyCITRrdwyrKUGku2FmeVGwn2u2WmDMNABLnpprWPkBdCk96+OmSLN9brZ
@@ -11,9 +11,9 @@ kYpXBACmWpP8NJTkamEnPCia2ZoOHODANwpUkP43I7jsDmgtobZX9qnrAXw+uNDI
11
11
  QJEXM6FSbi0LLtZciNlYsafwAPEOMDKpMqAK6IyisNtPvaLd8lH0bPAnWqcyefep
12
12
  rv0sxxqUEMcM3o7wwgfN83POkDasDbs3pjwPhxvhz6//62zQJ7Q2TXlTUUwgUmVs
13
13
  ZWFzZSBFbmdpbmVlcmluZyA8bXlzcWwtYnVpbGRAb3NzLm9yYWNsZS5jb20+iGwE
14
- ExECACwCGyMCHgECF4ACGQEGCwkIBwMCBhUKCQgCAwUWAgMBAAUCWKcFIAUJHirJ
15
- FAAKCRCMcY07UHLh9VcFAJ46pUyVd8BZ2r5CppMC1tmyQ3ceRgCfVPwuVsiS0VER
16
- 5WUqtAQDt+DoetCIaQQTEQIAKQIbIwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAhkB
14
+ ExECACwCGyMCHgECF4ACGQEGCwkIBwMCBhUKCQgCAwUWAgMBAAUCXEBY+wUJI87e
15
+ 5AAKCRCMcY07UHLh9RZPAJ9uvm0zlzfCN+DHxHVaoFLFjdVYTQCfborsC9tmEZYa
16
+ whhogjeBkZkorbyIaQQTEQIAKQIbIwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAhkB
17
17
  BQJTAdRmBQkaZsvLAAoJEIxxjTtQcuH1X4MAoKNLWAbCBUj96637kv6Xa/fJuX5m
18
18
  AJwPtmgDfjUe2iuhXdTrFEPT19SB6ohmBBMRAgAmAhsjBgsJCAcDAgQVAggDBBYC
19
19
  AwECHgECF4AFAk53PioFCRP7AhUACgkQjHGNO1By4fUmzACeJdfqgc9gWTUhgmcM
@@ -428,5 +428,5 @@ GoaU9u41oyZTIiXPiFidJoIZCh7fdurP8pn3X+R5HUNXMr7M+ba8lSNxce/F3kmH
428
428
  0L7rsKqdh9d/aVxhJINJ+inVDnrXWVoXu9GBjT8Nco1iU9SIVAQYEQIADAUCTnc9
429
429
  7QUJE/sBuAASB2VHUEcAAQEJEIxxjTtQcuH1FJsAmwWK9vmwRJ/y9gTnJ8PWf0BV
430
430
  roUTAKClYAhZuX2nUNwH4vlEJQHDqYa5yQ==
431
- =HfUN
431
+ =ghXk
432
432
  -----END PGP PUBLIC KEY BLOCK-----
@@ -43,16 +43,21 @@ mysql_to_rb = {
43
43
  "geostd8" => "NULL",
44
44
  "cp932" => "Windows-31J",
45
45
  "eucjpms" => "eucJP-ms",
46
+ "utf16le" => "UTF-16LE",
47
+ "gb18030" => "GB18030",
46
48
  }
47
49
 
48
- client = Mysql2::Client.new(:username => user, :password => pass, :host => host, :port => port.to_i)
49
- collations = client.query "SHOW COLLATION", :as => :array
50
+ client = Mysql2::Client.new(username: user, password: pass, host: host, port: port.to_i)
51
+ collations = client.query "SHOW COLLATION", as: :array
50
52
  encodings = Array.new(collations.to_a.last[2].to_i)
51
53
  encodings_with_nil = Array.new(encodings.size)
52
54
 
53
55
  collations.each do |collation|
54
56
  mysql_col_idx = collation[2].to_i
55
- rb_enc = mysql_to_rb[collation[1]]
57
+ rb_enc = mysql_to_rb.fetch(collation[1]) do |mysql_enc|
58
+ $stderr.puts "WARNING: Missing mapping for collation \"#{collation[0]}\" with encoding \"#{mysql_enc}\" and id #{mysql_col_idx}, assuming NULL"
59
+ "NULL"
60
+ end
56
61
  encodings[mysql_col_idx - 1] = [mysql_col_idx, rb_enc]
57
62
  end
58
63
 
@@ -38,9 +38,11 @@ mysql_to_rb = {
38
38
  "geostd8" => nil,
39
39
  "cp932" => "Windows-31J",
40
40
  "eucjpms" => "eucJP-ms",
41
+ "utf16le" => "UTF-16LE",
42
+ "gb18030" => "GB18030",
41
43
  }
42
44
 
43
- puts <<-header
45
+ puts <<-HEADER
44
46
  %readonly-tables
45
47
  %enum
46
48
  %define lookup-function-name mysql2_mysql_enc_name_to_rb
@@ -48,13 +50,13 @@ puts <<-header
48
50
  %struct-type
49
51
  struct mysql2_mysql_enc_name_to_rb_map { const char *name; const char *rb_name; }
50
52
  %%
51
- header
53
+ HEADER
52
54
 
53
55
  mysql_to_rb.each do |mysql, ruby|
54
- if ruby.nil?
55
- name = "NULL"
56
+ name = if ruby.nil?
57
+ "NULL"
56
58
  else
57
- name = "\"#{ruby}\""
59
+ "\"#{ruby}\""
58
60
  end
59
61
 
60
62
  puts "#{mysql}, #{name}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mysql2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.10
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Lopez
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-11-14 00:00:00.000000000 Z
12
+ date: 2022-05-03 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description:
15
15
  email:
@@ -23,8 +23,6 @@ files:
23
23
  - CHANGELOG.md
24
24
  - LICENSE
25
25
  - README.md
26
- - examples/eventmachine.rb
27
- - examples/threaded.rb
28
26
  - ext/mysql2/client.c
29
27
  - ext/mysql2/client.h
30
28
  - ext/mysql2/extconf.rb
@@ -48,37 +46,21 @@ files:
48
46
  - lib/mysql2/result.rb
49
47
  - lib/mysql2/statement.rb
50
48
  - lib/mysql2/version.rb
51
- - spec/configuration.yml.example
52
- - spec/em/em_spec.rb
53
- - spec/my.cnf.example
54
- - spec/mysql2/client_spec.rb
55
- - spec/mysql2/error_spec.rb
56
- - spec/mysql2/result_spec.rb
57
- - spec/mysql2/statement_spec.rb
58
- - spec/rcov.opts
59
- - spec/spec_helper.rb
60
- - spec/ssl/ca-cert.pem
61
- - spec/ssl/ca-key.pem
62
- - spec/ssl/ca.cnf
63
- - spec/ssl/cert.cnf
64
- - spec/ssl/client-cert.pem
65
- - spec/ssl/client-key.pem
66
- - spec/ssl/client-req.pem
67
- - spec/ssl/gen_certs.sh
68
- - spec/ssl/pkcs8-client-key.pem
69
- - spec/ssl/pkcs8-server-key.pem
70
- - spec/ssl/server-cert.pem
71
- - spec/ssl/server-key.pem
72
- - spec/ssl/server-req.pem
73
- - spec/test_data
49
+ - support/3A79BD29.asc
74
50
  - support/5072E1F5.asc
75
51
  - support/libmysql.def
76
52
  - support/mysql_enc_to_ruby.rb
77
53
  - support/ruby_enc_to_mysql.rb
78
- homepage: http://github.com/brianmario/mysql2
54
+ homepage: https://github.com/brianmario/mysql2
79
55
  licenses:
80
56
  - MIT
81
- metadata: {}
57
+ metadata:
58
+ bug_tracker_uri: https://github.com/brianmario/mysql2/issues
59
+ changelog_uri: https://github.com/brianmario/mysql2/releases/tag/0.5.4
60
+ documentation_uri: https://www.rubydoc.info/gems/mysql2/0.5.4
61
+ homepage_uri: https://github.com/brianmario/mysql2
62
+ source_code_uri: https://github.com/brianmario/mysql2/tree/0.5.4
63
+ msys2_mingw_dependencies: libmariadbclient
82
64
  post_install_message:
83
65
  rdoc_options:
84
66
  - "--charset=UTF-8"
@@ -88,41 +70,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
70
  requirements:
89
71
  - - ">="
90
72
  - !ruby/object:Gem::Version
91
- version: '0'
73
+ version: 2.0.0
92
74
  required_rubygems_version: !ruby/object:Gem::Requirement
93
75
  requirements:
94
76
  - - ">="
95
77
  - !ruby/object:Gem::Version
96
78
  version: '0'
97
79
  requirements: []
98
- rubyforge_project:
99
- rubygems_version: 2.5.2
80
+ rubygems_version: 3.0.3.1
100
81
  signing_key:
101
82
  specification_version: 4
102
83
  summary: A simple, fast Mysql library for Ruby, binding to libmysql
103
- test_files:
104
- - examples/eventmachine.rb
105
- - examples/threaded.rb
106
- - spec/configuration.yml.example
107
- - spec/em/em_spec.rb
108
- - spec/my.cnf.example
109
- - spec/mysql2/client_spec.rb
110
- - spec/mysql2/error_spec.rb
111
- - spec/mysql2/result_spec.rb
112
- - spec/mysql2/statement_spec.rb
113
- - spec/rcov.opts
114
- - spec/spec_helper.rb
115
- - spec/ssl/ca-cert.pem
116
- - spec/ssl/ca-key.pem
117
- - spec/ssl/ca.cnf
118
- - spec/ssl/cert.cnf
119
- - spec/ssl/client-cert.pem
120
- - spec/ssl/client-key.pem
121
- - spec/ssl/client-req.pem
122
- - spec/ssl/gen_certs.sh
123
- - spec/ssl/pkcs8-client-key.pem
124
- - spec/ssl/pkcs8-server-key.pem
125
- - spec/ssl/server-cert.pem
126
- - spec/ssl/server-key.pem
127
- - spec/ssl/server-req.pem
128
- - spec/test_data
84
+ test_files: []
@@ -1,21 +0,0 @@
1
- # encoding: utf-8
2
-
3
- $LOAD_PATH.unshift 'lib'
4
-
5
- require 'rubygems'
6
- require 'eventmachine'
7
- require 'mysql2/em'
8
-
9
- EM.run do
10
- client1 = Mysql2::EM::Client.new
11
- defer1 = client1.query "SELECT sleep(3) as first_query"
12
- defer1.callback do |result|
13
- puts "Result: #{result.to_a.inspect}"
14
- end
15
-
16
- client2 = Mysql2::EM::Client.new
17
- defer2 = client2.query "SELECT sleep(1) second_query"
18
- defer2.callback do |result|
19
- puts "Result: #{result.to_a.inspect}"
20
- end
21
- end
data/examples/threaded.rb DELETED
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
-
3
- $LOAD_PATH.unshift 'lib'
4
- require 'mysql2'
5
- require 'timeout'
6
-
7
- # Should never exceed worst case 3.5 secs across all 20 threads
8
- Timeout.timeout(3.5) do
9
- 20.times.map do
10
- Thread.new do
11
- overhead = rand(3)
12
- puts ">> thread #{Thread.current.object_id} query, #{overhead} sec overhead"
13
- # 3 second overhead per query
14
- Mysql2::Client.new(:host => "localhost", :username => "root").query("SELECT sleep(#{overhead}) as result")
15
- puts "<< thread #{Thread.current.object_id} result, #{overhead} sec overhead"
16
- end
17
- end.each(&:join)
18
- end
@@ -1,11 +0,0 @@
1
- root:
2
- host: localhost
3
- username: root
4
- password:
5
- database: test
6
-
7
- user:
8
- host: localhost
9
- username: LOCALUSERNAME
10
- password:
11
- database: mysql2_test
data/spec/em/em_spec.rb DELETED
@@ -1,136 +0,0 @@
1
- # encoding: UTF-8
2
- require 'spec_helper'
3
- begin
4
- require 'eventmachine'
5
- require 'mysql2/em'
6
-
7
- RSpec.describe Mysql2::EM::Client do
8
- it "should support async queries" do
9
- results = []
10
- EM.run do
11
- client1 = Mysql2::EM::Client.new DatabaseCredentials['root']
12
- defer1 = client1.query "SELECT sleep(0.1) as first_query"
13
- defer1.callback do |result|
14
- results << result.first
15
- client1.close
16
- EM.stop_event_loop
17
- end
18
-
19
- client2 = Mysql2::EM::Client.new DatabaseCredentials['root']
20
- defer2 = client2.query "SELECT sleep(0.025) second_query"
21
- defer2.callback do |result|
22
- results << result.first
23
- client2.close
24
- end
25
- end
26
-
27
- expect(results[0].keys).to include("second_query")
28
- expect(results[1].keys).to include("first_query")
29
- end
30
-
31
- it "should support queries in callbacks" do
32
- results = []
33
- EM.run do
34
- client = Mysql2::EM::Client.new DatabaseCredentials['root']
35
- defer1 = client.query "SELECT sleep(0.025) as first_query"
36
- defer1.callback do |result|
37
- results << result.first
38
- defer2 = client.query "SELECT sleep(0.025) as second_query"
39
- defer2.callback do |r|
40
- results << r.first
41
- client.close
42
- EM.stop_event_loop
43
- end
44
- end
45
- end
46
-
47
- expect(results[0].keys).to include("first_query")
48
- expect(results[1].keys).to include("second_query")
49
- end
50
-
51
- it "should not swallow exceptions raised in callbacks" do
52
- expect {
53
- EM.run do
54
- client = Mysql2::EM::Client.new DatabaseCredentials['root']
55
- defer = client.query "SELECT sleep(0.1) as first_query"
56
- defer.callback do
57
- client.close
58
- fail 'some error'
59
- end
60
- defer.errback do
61
- # This _shouldn't_ be run, but it needed to prevent the specs from
62
- # freezing if this test fails.
63
- EM.stop_event_loop
64
- end
65
- end
66
- }.to raise_error('some error')
67
- end
68
-
69
- context 'when an exception is raised by the client' do
70
- let(:client) { Mysql2::EM::Client.new DatabaseCredentials['root'] }
71
- let(:error) { StandardError.new('some error') }
72
- before { allow(client).to receive(:async_result).and_raise(error) }
73
- after { client.close }
74
-
75
- it "should swallow exceptions raised in by the client" do
76
- errors = []
77
- EM.run do
78
- defer = client.query "SELECT sleep(0.1) as first_query"
79
- defer.callback do
80
- # This _shouldn't_ be run, but it is needed to prevent the specs from
81
- # freezing if this test fails.
82
- EM.stop_event_loop
83
- end
84
- defer.errback do |err|
85
- errors << err
86
- EM.stop_event_loop
87
- end
88
- end
89
- expect(errors).to eq([error])
90
- end
91
-
92
- it "should fail the deferrable" do
93
- callbacks_run = []
94
- EM.run do
95
- defer = client.query "SELECT sleep(0.025) as first_query"
96
- EM.add_timer(0.1) do
97
- defer.callback do
98
- callbacks_run << :callback
99
- # This _shouldn't_ be run, but it is needed to prevent the specs from
100
- # freezing if this test fails.
101
- EM.stop_event_loop
102
- end
103
- defer.errback do
104
- callbacks_run << :errback
105
- EM.stop_event_loop
106
- end
107
- end
108
- end
109
- expect(callbacks_run).to eq([:errback])
110
- end
111
- end
112
-
113
- it "should not raise error when closing client with no query running" do
114
- callbacks_run = []
115
- EM.run do
116
- client = Mysql2::EM::Client.new DatabaseCredentials['root']
117
- defer = client.query("select sleep(0.025)")
118
- defer.callback do
119
- callbacks_run << :callback
120
- end
121
- defer.errback do
122
- callbacks_run << :errback
123
- end
124
- EM.add_timer(0.1) do
125
- expect(callbacks_run).to eq([:callback])
126
- expect {
127
- client.close
128
- }.not_to raise_error
129
- EM.stop_event_loop
130
- end
131
- end
132
- end
133
- end
134
- rescue LoadError
135
- puts "EventMachine not installed, skipping the specs that use it"
136
- end
data/spec/my.cnf.example DELETED
@@ -1,9 +0,0 @@
1
- [root]
2
- host=localhost
3
- user=LOCALUSERNAME
4
- password=
5
-
6
- [client]
7
- host=localhost
8
- user=LOCALUSERNAME
9
- password=