mysql2 0.3.17 → 0.3.18

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
  SHA1:
3
- metadata.gz: afc3856c2a464bb4e2ef5420b2be66713ab2c35a
4
- data.tar.gz: 5cadd6917753f4df96c088f511d808df403a3035
3
+ metadata.gz: 791bc0352c6464ca1765498b0babcedfad3c284e
4
+ data.tar.gz: 08b44b761494ec18a0c9903fcb67bfe61718b77b
5
5
  SHA512:
6
- metadata.gz: 21707183394033e269afe2b5eb73b7aaca6467448f99733518ac9814e6b48beeada2cd60437f4fac0a0a4204bed98793fcf48a129da134c69add0e72113064d4
7
- data.tar.gz: 90d6a8411a5c5d908bc037b3307991e2a6e6a5ce306709fdd63d3ad081433ed8f7af0eef5d4039205295962cd7b3b93d950ddeeda0bdd44b35e23683934622b8
6
+ metadata.gz: 5554897f395a4fcd71e26612ef895da5d3e1d528ef29604380974950f7216783bf7636197d04228c39b471a51863f75c56e9140e05bb79410e1582c64842d0dc
7
+ data.tar.gz: afad060a7a899d69b75ca2c44aa69a07c743984fc6897cce825c6d9ec3269bbb3733671243afe7fb33a615e61e4aa8c7b9e7863fa18289578ab29abc8409e2e8
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # Mysql2 - A modern, simple and very fast MySQL library for Ruby - binding to libmysql
2
2
 
3
- [![Build Status](https://travis-ci.org/brianmario/mysql2.png)](https://travis-ci.org/brianmario/mysql2)
3
+ Travis CI [![Travis CI Status](https://travis-ci.org/brianmario/mysql2.png)](https://travis-ci.org/brianmario/mysql2)
4
+ Appveyor CI [![Appveyor CI Status](https://ci.appveyor.com/api/projects/status/github/sodabrew/mysql2)](https://ci.appveyor.com/project/sodabrew/mysql2)
4
5
 
5
6
  The Mysql2 gem is meant to serve the extremely common use-case of connecting, querying and iterating on results.
6
7
  Some database libraries out there serve as direct 1:1 mappings of the already complex C APIs available.
@@ -15,12 +16,16 @@ The API consists of two classes:
15
16
  `Mysql2::Result` - returned from issuing a #query on the connection. It includes Enumerable.
16
17
 
17
18
  ## Installing
18
- ### OSX / Linux
19
+ ### General Instructions
19
20
  ``` sh
20
21
  gem install mysql2
21
22
  ```
22
23
 
23
- This gem links against MySQL's `libmysqlclient` C shared library. You may need to install a package such as `libmysqlclient-dev`, `mysql-devel`, or other appropriate package for your system.
24
+ This gem links against MySQL's `libmysqlclient` library or `Connector/C`
25
+ library, and compatible alternatives such as MariaDB.
26
+ You may need to install a package such as `libmysqlclient-dev`, `mysql-devel`,
27
+ or other appropriate package for your system. See below for system-specific
28
+ instructions.
24
29
 
25
30
  By default, the mysql2 gem will try to find a copy of MySQL in this order:
26
31
 
@@ -51,25 +56,35 @@ This may be needed if you deploy to a system where these libraries
51
56
  are located somewhere different than on your build system.
52
57
  This overrides any rpath calculated by default or by the options above.
53
58
 
54
- ### Windows
55
- First, make sure you have the DevKit installed (http://rubyinstaller.org/downloads/) and its variables
56
- are loaded by running devkit\devktvars.bat .
59
+ ### Linux and other Unixes
60
+
61
+ You may need to install a package such as `libmysqlclient-dev` or `mysql-devel`;
62
+ refer to your distribution's package guide to find the particular package.
63
+ The most common issue we see is a user who has the library file `libmysqlclient.so` but is
64
+ missing the header file `mysql.h` -- double check that you have the _-dev_ packages installed.
57
65
 
58
- Next, you need a MySQL library to link against. If you have MySQL loaded on your development machine,
59
- you can use that. If not, you will need to either copy the MySQL directory from your server, or else
60
- obtain a copy of the MySQL C connector: http://dev.mysql.com/downloads/connector/c/
66
+ ### Mac OS X
61
67
 
62
- If you're using the connector, I recommend just getting the .zip file and unzipping it someplace convenient.
68
+ You may use MacPorts, Homebrew, or a native MySQL installer package. The most
69
+ common paths will be automatically searched. If you want to select a specific
70
+ MySQL directory, use the `--with-mysql-dir` or `--with-mysql-config` options above.
71
+
72
+ ### Windows
73
+ Make sure that you have Ruby and the DevKit compilers installed. We recommend
74
+ the [Ruby Installer](http://rubyinstaller.org) distribution.
63
75
 
64
- Now you can install mysql2. You must use the `--with-mysql-dir` option to tell gem where your MySQL library
65
- files are. For example, if you unzipped the connector to c:\mysql-connector-c-6.1.1-win32 you would install
66
- the gem like this:
76
+ By default, the mysql2 gem will download and use MySQL Connector/C from
77
+ mysql.com. If you prefer to use a local installation of Connector/C, add the
78
+ flag `--with-mysql-dir=c:/mysql-connector-c-x-y-z` (_this path may use forward slashes_).
67
79
 
68
- gem install mysql2 -- --with-mysql-dir=c:\mysql-connector-c-6.1.1-win32
80
+ By default, the `libmysql.dll` library will be copied into the mysql2 gem
81
+ directory. To prevent this, add the flag `--no-vendor-libmysql`. The mysql2 gem
82
+ will search for `libmysql.dll` in the following paths, in order:
69
83
 
70
- Finally, you must copy libmysql.dll from the lib subdirectory of your MySQL or MySQL connector directory into
71
- your ruby\bin directory. In the above example, libmysql.dll would be located at
72
- c:\mysql-connector-c-6.1.1-win32\lib .
84
+ * Environment variable `RUBY_MYSQL2_LIBMYSQL_DLL=C:\path\to\libmysql.dll`
85
+ (_note the Windows-style backslashes_).
86
+ * In the mysql2 gem's own directory `vendor/libmysql.dll`
87
+ * In the system's default library search paths.
73
88
 
74
89
  ## Usage
75
90
 
@@ -422,13 +437,13 @@ As for field values themselves, I'm workin on it - but expect that soon.
422
437
 
423
438
  This gem is tested with the following Ruby versions on Linux and Mac OS X:
424
439
 
425
- * Ruby MRI 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1.x (ongoing patch releases)
440
+ * Ruby MRI 1.8.7, 1.9.2, 1.9.3, 2.0.0, 2.1.x, 2.2.x (ongoing patch releases)
426
441
  * Ruby Enterprise Edition (based on MRI 1.8.7)
427
442
  * Rubinius 2.x
428
443
 
429
444
  This gem is tested with the following MySQL and MariaDB versions:
430
445
 
431
- * MySQL 5.0, 5.1, 5.5, 5.6
446
+ * MySQL 5.0, 5.1, 5.5, 5.6, 5.7
432
447
  * MySQL Connector/C 6.0 and 6.1 (primarily on Windows)
433
448
  * MariaDB 5.5, 10.0
434
449
 
@@ -438,7 +438,7 @@ static void *nogvl_do_result(void *ptr, char use_result) {
438
438
  MYSQL_RES *result;
439
439
 
440
440
  wrapper = (mysql_client_wrapper *)ptr;
441
- if(use_result) {
441
+ if (use_result) {
442
442
  result = mysql_use_result(wrapper->client);
443
443
  } else {
444
444
  result = mysql_store_result(wrapper->client);
@@ -483,7 +483,7 @@ static VALUE rb_mysql_client_async_result(VALUE self) {
483
483
  }
484
484
 
485
485
  is_streaming = rb_hash_aref(rb_iv_get(self, "@current_query_options"), sym_stream);
486
- if(is_streaming == Qtrue) {
486
+ if (is_streaming == Qtrue) {
487
487
  result = (MYSQL_RES *)rb_thread_call_without_gvl(nogvl_use_result, wrapper, RUBY_UBF_IO, 0);
488
488
  } else {
489
489
  result = (MYSQL_RES *)rb_thread_call_without_gvl(nogvl_store_result, wrapper, RUBY_UBF_IO, 0);
@@ -20,13 +20,13 @@ dirs = ENV['PATH'].split(File::PATH_SEPARATOR) + %w[
20
20
  /opt
21
21
  /opt/local
22
22
  /opt/local/mysql
23
- /opt/local/lib/mysql5
23
+ /opt/local/lib/mysql5*
24
24
  /usr
25
25
  /usr/mysql
26
26
  /usr/local
27
27
  /usr/local/mysql
28
28
  /usr/local/mysql-*
29
- /usr/local/lib/mysql5
29
+ /usr/local/lib/mysql5*
30
30
  ].map{|dir| "#{dir}/bin" }
31
31
 
32
32
  GLOB = "{#{dirs.join(',')}}/{mysql_config,mysql_config5}"
@@ -74,10 +74,6 @@ else
74
74
  rpath_dir = lib
75
75
  end
76
76
 
77
- if RUBY_PLATFORM =~ /mswin|mingw/
78
- exit 1 unless have_library('libmysql')
79
- end
80
-
81
77
  if have_header('mysql.h')
82
78
  prefix = nil
83
79
  elsif have_header('mysql/mysql.h')
@@ -98,31 +94,82 @@ if try_link('int main() {return 0;}', gcc_flags)
98
94
  $CFLAGS << gcc_flags
99
95
  end
100
96
 
101
- case explicit_rpath = with_config('mysql-rpath')
102
- when true
103
- abort "-----\nOption --with-mysql-rpath must have an argument\n-----"
104
- when false
105
- warn "-----\nOption --with-mysql-rpath has been disabled at your request\n-----"
106
- when String
107
- # The user gave us a value so use it
108
- rpath_flags = " -Wl,-rpath,#{explicit_rpath}"
109
- warn "-----\nSetting mysql rpath to #{explicit_rpath}\n-----"
110
- $LDFLAGS << rpath_flags
97
+ if RUBY_PLATFORM =~ /mswin|mingw/
98
+ # Build libmysql.a interface link library
99
+ require 'rake'
100
+
101
+ # Build libmysql.a interface link library
102
+ # Use rake to rebuild only if these files change
103
+ deffile = File.expand_path('../../../support/libmysql.def', __FILE__)
104
+ libfile = File.expand_path(File.join(rpath_dir, 'libmysql.lib'))
105
+ file 'libmysql.a' => [deffile, libfile] do |t|
106
+ when_writing 'building libmysql.a' do
107
+ # Ruby kindly shows us where dllwrap is, but that tool does more than we want.
108
+ # Maybe in the future Ruby could provide RbConfig::CONFIG['DLLTOOL'] directly.
109
+ dlltool = RbConfig::CONFIG['DLLWRAP'].gsub('dllwrap', 'dlltool')
110
+ sh dlltool, '--kill-at',
111
+ '--dllname', 'libmysql.dll',
112
+ '--output-lib', 'libmysql.a',
113
+ '--input-def', deffile, libfile
114
+ end
115
+ end
116
+
117
+ Rake::Task['libmysql.a'].invoke
118
+ $LOCAL_LIBS << ' ' << 'libmysql.a'
119
+
120
+ # Make sure the generated interface library works (if cross-compiling, trust without verifying)
121
+ unless RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
122
+ abort "-----\nCannot find libmysql.a\n----" unless have_library('libmysql')
123
+ abort "-----\nCannot link to libmysql.a (my_init)\n----" unless have_func('my_init')
124
+ end
125
+
126
+ # Vendor libmysql.dll
127
+ vendordir = File.expand_path('../../../vendor/', __FILE__)
128
+ directory vendordir
129
+
130
+ vendordll = File.join(vendordir, 'libmysql.dll')
131
+ dllfile = File.expand_path(File.join(rpath_dir, 'libmysql.dll'))
132
+ file vendordll => [dllfile, vendordir] do |t|
133
+ when_writing 'copying libmysql.dll' do
134
+ cp dllfile, vendordll
135
+ end
136
+ end
137
+
138
+ # Copy libmysql.dll to the local vendor directory by default
139
+ if arg_config('--no-vendor-libmysql')
140
+ # Fine, don't.
141
+ puts "--no-vendor-libmysql"
142
+ else # Default: arg_config('--vendor-libmysql')
143
+ # Let's do it!
144
+ Rake::Task[vendordll].invoke
145
+ end
111
146
  else
112
- if libdir = rpath_dir[%r{(-L)?(/[^ ]+)}, 2]
113
- rpath_flags = " -Wl,-rpath,#{libdir}"
114
- if RbConfig::CONFIG["RPATHFLAG"].to_s.empty? && try_link('int main() {return 0;}', rpath_flags)
115
- # Usually Ruby sets RPATHFLAG the right way for each system, but not on OS X.
116
- warn "-----\nSetting rpath to #{libdir}\n-----"
117
- $LDFLAGS << rpath_flags
118
- else
119
- if RbConfig::CONFIG["RPATHFLAG"].to_s.empty?
120
- # If we got here because try_link failed, warn the user
121
- warn "-----\nDon't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load\n-----"
147
+ case explicit_rpath = with_config('mysql-rpath')
148
+ when true
149
+ abort "-----\nOption --with-mysql-rpath must have an argument\n-----"
150
+ when false
151
+ warn "-----\nOption --with-mysql-rpath has been disabled at your request\n-----"
152
+ when String
153
+ # The user gave us a value so use it
154
+ rpath_flags = " -Wl,-rpath,#{explicit_rpath}"
155
+ warn "-----\nSetting mysql rpath to #{explicit_rpath}\n-----"
156
+ $LDFLAGS << rpath_flags
157
+ else
158
+ if libdir = rpath_dir[%r{(-L)?(/[^ ]+)}, 2]
159
+ rpath_flags = " -Wl,-rpath,#{libdir}"
160
+ if RbConfig::CONFIG["RPATHFLAG"].to_s.empty? && try_link('int main() {return 0;}', rpath_flags)
161
+ # Usually Ruby sets RPATHFLAG the right way for each system, but not on OS X.
162
+ warn "-----\nSetting rpath to #{libdir}\n-----"
163
+ $LDFLAGS << rpath_flags
164
+ else
165
+ if RbConfig::CONFIG["RPATHFLAG"].to_s.empty?
166
+ # If we got here because try_link failed, warn the user
167
+ warn "-----\nDon't know how to set rpath on your system, if MySQL libraries are not in path mysql2 may not load\n-----"
168
+ end
169
+ # Make sure that LIBPATH gets set if we didn't explicitly set the rpath.
170
+ warn "-----\nSetting libpath to #{libdir}\n-----"
171
+ $LIBPATH << libdir unless $LIBPATH.include?(libdir)
122
172
  end
123
- # Make sure that LIBPATH gets set if we didn't explicitly set the rpath.
124
- warn "-----\nSetting libpath to #{libdir}\n-----"
125
- $LIBPATH << libdir unless $LIBPATH.include?(libdir)
126
173
  end
127
174
  end
128
175
  end
@@ -232,7 +232,7 @@ static VALUE rb_mysql_result_fetch_row(VALUE self, ID db_timezone, ID app_timezo
232
232
  VALUE val = Qnil;
233
233
  enum enum_field_types type = fields[i].type;
234
234
 
235
- if(!cast) {
235
+ if (!cast) {
236
236
  if (type == MYSQL_TYPE_NULL) {
237
237
  val = Qnil;
238
238
  } else {
@@ -297,7 +297,7 @@ static VALUE rb_mysql_result_fetch_row(VALUE self, ID db_timezone, ID app_timezo
297
297
  break;
298
298
  }
299
299
  msec = msec_char_to_uint(msec_char, sizeof(msec_char));
300
- val = rb_funcall(rb_cTime, db_timezone, 6, opt_time_year, opt_time_month, opt_time_month, UINT2NUM(hour), UINT2NUM(min), UINT2NUM(sec), UINT2NUM(msec));
300
+ val = rb_funcall(rb_cTime, db_timezone, 7, opt_time_year, opt_time_month, opt_time_month, UINT2NUM(hour), UINT2NUM(min), UINT2NUM(sec), UINT2NUM(msec));
301
301
  if (!NIL_P(app_timezone)) {
302
302
  if (app_timezone == intern_local) {
303
303
  val = rb_funcall(val, intern_localtime, 0);
@@ -479,11 +479,11 @@ static VALUE rb_mysql_result_each(int argc, VALUE * argv, VALUE self) {
479
479
  cast = 0;
480
480
  }
481
481
 
482
- if(rb_hash_aref(opts, sym_stream) == Qtrue) {
482
+ if (rb_hash_aref(opts, sym_stream) == Qtrue) {
483
483
  streaming = 1;
484
484
  }
485
485
 
486
- if(streaming && cacheRows) {
486
+ if (streaming && cacheRows) {
487
487
  rb_warn("cacheRows is ignored if streaming is true");
488
488
  }
489
489
 
@@ -601,7 +601,7 @@ static VALUE rb_mysql_result_count(VALUE self) {
601
601
  mysql2_result_wrapper *wrapper;
602
602
 
603
603
  GetMysql2Result(self, wrapper);
604
- if(wrapper->resultFreed) {
604
+ if (wrapper->resultFreed) {
605
605
  if (wrapper->streamingComplete){
606
606
  return LONG2NUM(wrapper->numberOfRows);
607
607
  } else {
@@ -3,6 +3,29 @@ require 'date'
3
3
  require 'bigdecimal'
4
4
  require 'rational' unless RUBY_VERSION >= '1.9.2'
5
5
 
6
+ # Load libmysql.dll before requiring mysql2/mysql2.so
7
+ # This gives a chance to be flexible about the load path
8
+ # Or to bomb out with a clear error message instead of a linker crash
9
+ if RUBY_PLATFORM =~ /mswin|mingw/
10
+ dll_path = if ENV['RUBY_MYSQL2_LIBMYSQL_DLL']
11
+ # If this environment variable is set, it overrides any other paths
12
+ # The user is advised to use backslashes not forward slashes
13
+ ENV['RUBY_MYSQL2_LIBMYSQL_DLL'].dup
14
+ elsif File.exist?(File.expand_path('../vendor/libmysql.dll', File.dirname(__FILE__)))
15
+ # Use vendor/libmysql.dll if it exists, convert slashes for Win32 LoadLibrary
16
+ File.expand_path('../vendor/libmysql.dll', File.dirname(__FILE__)).gsub('/', '\\')
17
+ else
18
+ # This will use default / system library paths
19
+ 'libmysql.dll'
20
+ end
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}"
26
+ end
27
+ end
28
+
6
29
  require 'mysql2/version' unless defined? Mysql2::VERSION
7
30
  require 'mysql2/error'
8
31
  require 'mysql2/mysql2'
@@ -10,6 +10,7 @@ module Mysql2
10
10
  def initialize(client, deferable)
11
11
  @client = client
12
12
  @deferable = deferable
13
+ @is_watching = true
13
14
  end
14
15
 
15
16
  def notify_readable
@@ -22,11 +23,19 @@ module Mysql2
22
23
  @deferable.succeed(result)
23
24
  end
24
25
  end
26
+
27
+ def watching?
28
+ @is_watching
29
+ end
30
+
31
+ def unbind
32
+ @is_watching = false
33
+ end
25
34
  end
26
35
 
27
36
  def close(*args)
28
37
  if @watch
29
- @watch.detach
38
+ @watch.detach if @watch.watching?
30
39
  end
31
40
  super(*args)
32
41
  end
@@ -1,3 +1,3 @@
1
1
  module Mysql2
2
- VERSION = "0.3.17"
2
+ VERSION = "0.3.18"
3
3
  end
@@ -108,6 +108,27 @@ begin
108
108
  callbacks_run.should == [:errback]
109
109
  end
110
110
  end
111
+
112
+ it "should not raise error when closing client with no query running" do
113
+ callbacks_run = []
114
+ EM.run do
115
+ client = Mysql2::EM::Client.new DatabaseCredentials['root']
116
+ defer = client.query("select sleep(0.025)")
117
+ defer.callback do |result|
118
+ callbacks_run << :callback
119
+ end
120
+ defer.errback do |err|
121
+ callbacks_run << :errback
122
+ end
123
+ EM.add_timer(0.1) do
124
+ callbacks_run.should == [:callback]
125
+ lambda {
126
+ client.close
127
+ }.should_not raise_error(/invalid binding to detach/)
128
+ EM.stop_event_loop
129
+ end
130
+ end
131
+ end
111
132
  end
112
133
  rescue LoadError
113
134
  puts "EventMachine not installed, skipping the specs that use it"
@@ -564,7 +564,7 @@ describe Mysql2::Client do
564
564
  end
565
565
 
566
566
  it "should raise an exception when one of multiple statements fails" do
567
- result = @multi_client.query("SELECT 1 as 'set_1'; SELECT * FROM invalid_table_name;SELECT 2 as 'set_2';")
567
+ result = @multi_client.query("SELECT 1 AS 'set_1'; SELECT * FROM invalid_table_name; SELECT 2 AS 'set_2';")
568
568
  result.first['set_1'].should be(1)
569
569
  lambda {
570
570
  @multi_client.next_result
@@ -573,7 +573,7 @@ describe Mysql2::Client do
573
573
  end
574
574
 
575
575
  it "returns multiple result sets" do
576
- @multi_client.query( "select 1 as 'set_1'; select 2 as 'set_2'").first.should eql({ 'set_1' => 1 })
576
+ @multi_client.query("SELECT 1 AS 'set_1'; SELECT 2 AS 'set_2'").first.should eql({ 'set_1' => 1 })
577
577
 
578
578
  @multi_client.next_result.should be_true
579
579
  @multi_client.store_result.first.should eql({ 'set_2' => 2 })
@@ -582,12 +582,12 @@ describe Mysql2::Client do
582
582
  end
583
583
 
584
584
  it "does not interfere with other statements" do
585
- @multi_client.query( "select 1 as 'set_1'; select 2 as 'set_2'")
585
+ @multi_client.query("SELECT 1 AS 'set_1'; SELECT 2 AS 'set_2'")
586
586
  while( @multi_client.next_result )
587
587
  @multi_client.store_result
588
588
  end
589
589
 
590
- @multi_client.query( "select 3 as 'next'").first.should == { 'next' => 3 }
590
+ @multi_client.query("SELECT 3 AS 'next'").first.should == { 'next' => 3 }
591
591
  end
592
592
 
593
593
  it "will raise on query if there are outstanding results to read" do
@@ -606,7 +606,7 @@ describe Mysql2::Client do
606
606
  end
607
607
 
608
608
  it "#more_results? should work" do
609
- @multi_client.query( "select 1 as 'set_1'; select 2 as 'set_2'")
609
+ @multi_client.query("SELECT 1 AS 'set_1'; SELECT 2 AS 'set_2'")
610
610
  @multi_client.more_results?.should be_true
611
611
 
612
612
  @multi_client.next_result
@@ -136,7 +136,7 @@ describe Mysql2::Result do
136
136
  it "should raise an exception if streaming ended due to a timeout" do
137
137
  # Create an extra client instance, since we're going to time it out
138
138
  client = Mysql2::Client.new DatabaseCredentials['root']
139
- client.query "CREATE TEMPORARY TABLE streamingTest (val BINARY(255))"
139
+ client.query "CREATE TEMPORARY TABLE streamingTest (val BINARY(255)) ENGINE=MEMORY"
140
140
 
141
141
  # Insert enough records to force the result set into multiple reads
142
142
  # (the BINARY type is used simply because it forces full width results)
@@ -0,0 +1,219 @@
1
+ ; MySQL's Connector/C ships with a libmysql.dll main library and libmysql.lib
2
+ ; interface library. However, the interface library is not linkable by MinGW.
3
+ ;
4
+ ; At compile time, we generate a libmysql.a interface library with dlltool.exe.
5
+ ;
6
+ ; This def file can be re-generated using the reimp.exe or gendef.exe tools.
7
+ ;
8
+ LIBRARY libmysql.dll
9
+ EXPORTS
10
+ mysql_affected_rows
11
+ mysql_affected_rows@4
12
+ mysql_change_user
13
+ mysql_change_user@16
14
+ mysql_character_set_name
15
+ mysql_character_set_name@4
16
+ mysql_close
17
+ mysql_close@4
18
+ mysql_data_seek
19
+ mysql_data_seek@12
20
+ mysql_debug
21
+ mysql_debug@4
22
+ mysql_dump_debug_info
23
+ mysql_dump_debug_info@4
24
+ mysql_eof
25
+ mysql_eof@4
26
+ mysql_errno
27
+ mysql_errno@4
28
+ mysql_error
29
+ mysql_error@4
30
+ mysql_escape_string
31
+ mysql_escape_string@12
32
+ mysql_fetch_field
33
+ mysql_fetch_field@4
34
+ mysql_fetch_field_direct
35
+ mysql_fetch_field_direct@8
36
+ mysql_fetch_fields
37
+ mysql_fetch_fields@4
38
+ mysql_fetch_lengths
39
+ mysql_fetch_lengths@4
40
+ mysql_fetch_row
41
+ mysql_fetch_row@4
42
+ mysql_field_count
43
+ mysql_field_count@4
44
+ mysql_field_seek
45
+ mysql_field_seek@8
46
+ mysql_field_tell
47
+ mysql_field_tell@4
48
+ mysql_free_result
49
+ mysql_free_result@4
50
+ mysql_get_client_info
51
+ mysql_get_client_info@0
52
+ mysql_get_client_version
53
+ mysql_get_client_version@0
54
+ mysql_get_host_info
55
+ mysql_get_host_info@4
56
+ mysql_get_option
57
+ mysql_get_option@12
58
+ mysql_get_proto_info
59
+ mysql_get_proto_info@4
60
+ mysql_get_server_info
61
+ mysql_get_server_info@4
62
+ mysql_get_server_version
63
+ mysql_get_server_version@4
64
+ mysql_get_ssl_cipher
65
+ mysql_get_ssl_cipher@4
66
+ mysql_hex_string
67
+ mysql_hex_string@12
68
+ mysql_info
69
+ mysql_info@4
70
+ mysql_init
71
+ mysql_init@4
72
+ mysql_insert_id
73
+ mysql_insert_id@4
74
+ mysql_kill
75
+ mysql_kill@8
76
+ mysql_library_end
77
+ mysql_library_end@0
78
+ mysql_library_init
79
+ mysql_library_init@12
80
+ mysql_list_dbs
81
+ mysql_list_dbs@8
82
+ mysql_list_fields
83
+ mysql_list_fields@12
84
+ mysql_list_processes
85
+ mysql_list_processes@4
86
+ mysql_list_tables
87
+ mysql_list_tables@8
88
+ mysql_more_results
89
+ mysql_more_results@4
90
+ mysql_next_result
91
+ mysql_next_result@4
92
+ mysql_num_fields
93
+ mysql_num_fields@4
94
+ mysql_num_rows
95
+ mysql_num_rows@4
96
+ mysql_options
97
+ mysql_options@12
98
+ mysql_options4
99
+ mysql_options4@16
100
+ mysql_ping
101
+ mysql_ping@4
102
+ mysql_query
103
+ mysql_query@8
104
+ mysql_read_query_result
105
+ mysql_read_query_result@4
106
+ mysql_real_connect
107
+ mysql_real_connect@32
108
+ mysql_real_escape_string
109
+ mysql_real_escape_string@16
110
+ mysql_real_query
111
+ mysql_real_query@12
112
+ mysql_refresh
113
+ mysql_refresh@8
114
+ mysql_reset_connection
115
+ mysql_reset_connection@4
116
+ mysql_rollback
117
+ mysql_rollback@4
118
+ mysql_row_seek
119
+ mysql_row_seek@8
120
+ mysql_row_tell
121
+ mysql_row_tell@4
122
+ mysql_select_db
123
+ mysql_select_db@8
124
+ mysql_send_query
125
+ mysql_send_query@12
126
+ mysql_server_end
127
+ mysql_server_end@0
128
+ mysql_server_init
129
+ mysql_server_init@12
130
+ mysql_session_track_get_first
131
+ mysql_session_track_get_first@16
132
+ mysql_session_track_get_next
133
+ mysql_session_track_get_next@16
134
+ mysql_set_character_set
135
+ mysql_set_character_set@8
136
+ mysql_set_local_infile_default
137
+ mysql_set_local_infile_default@4
138
+ mysql_set_local_infile_handler
139
+ mysql_set_local_infile_handler@24
140
+ mysql_set_server_option
141
+ mysql_set_server_option@8
142
+ mysql_shutdown
143
+ mysql_shutdown@8
144
+ mysql_sqlstate
145
+ mysql_sqlstate@4
146
+ mysql_ssl_set
147
+ mysql_ssl_set@24
148
+ mysql_stat
149
+ mysql_stat@4
150
+ mysql_stmt_affected_rows
151
+ mysql_stmt_affected_rows@4
152
+ mysql_stmt_attr_get
153
+ mysql_stmt_attr_get@12
154
+ mysql_stmt_attr_set
155
+ mysql_stmt_attr_set@12
156
+ mysql_stmt_bind_param
157
+ mysql_stmt_bind_param@8
158
+ mysql_stmt_bind_result
159
+ mysql_stmt_bind_result@8
160
+ mysql_stmt_close
161
+ mysql_stmt_close@4
162
+ mysql_stmt_data_seek
163
+ mysql_stmt_data_seek@12
164
+ mysql_stmt_errno
165
+ mysql_stmt_errno@4
166
+ mysql_stmt_error
167
+ mysql_stmt_error@4
168
+ mysql_stmt_execute
169
+ mysql_stmt_execute@4
170
+ mysql_stmt_fetch
171
+ mysql_stmt_fetch@4
172
+ mysql_stmt_fetch_column
173
+ mysql_stmt_fetch_column@16
174
+ mysql_stmt_field_count
175
+ mysql_stmt_field_count@4
176
+ mysql_stmt_free_result
177
+ mysql_stmt_free_result@4
178
+ mysql_stmt_init
179
+ mysql_stmt_init@4
180
+ mysql_stmt_insert_id
181
+ mysql_stmt_insert_id@4
182
+ mysql_stmt_next_result
183
+ mysql_stmt_next_result@4
184
+ mysql_stmt_num_rows
185
+ mysql_stmt_num_rows@4
186
+ mysql_stmt_param_count
187
+ mysql_stmt_param_count@4
188
+ mysql_stmt_param_metadata
189
+ mysql_stmt_param_metadata@4
190
+ mysql_stmt_prepare
191
+ mysql_stmt_prepare@12
192
+ mysql_stmt_reset
193
+ mysql_stmt_reset@4
194
+ mysql_stmt_result_metadata
195
+ mysql_stmt_result_metadata@4
196
+ mysql_stmt_row_seek
197
+ mysql_stmt_row_seek@8
198
+ mysql_stmt_row_tell
199
+ mysql_stmt_row_tell@4
200
+ mysql_stmt_send_long_data
201
+ mysql_stmt_send_long_data@16
202
+ mysql_stmt_sqlstate
203
+ mysql_stmt_sqlstate@4
204
+ mysql_stmt_store_result
205
+ mysql_stmt_store_result@4
206
+ mysql_store_result
207
+ mysql_store_result@4
208
+ mysql_thread_end
209
+ mysql_thread_end@0
210
+ mysql_thread_id
211
+ mysql_thread_id@4
212
+ mysql_thread_init
213
+ mysql_thread_init@0
214
+ mysql_thread_safe
215
+ mysql_thread_safe@0
216
+ mysql_use_result
217
+ mysql_use_result@4
218
+ mysql_warning_count
219
+ mysql_warning_count@4
metadata CHANGED
@@ -1,43 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mysql2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.17
4
+ version: 0.3.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Lopez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-11 00:00:00.000000000 Z
11
+ date: 2015-02-17 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: eventmachine
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - '>='
18
- - !ruby/object:Gem::Version
19
- version: '0'
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - '>='
25
- - !ruby/object:Gem::Version
26
- version: '0'
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: rake-compiler
29
15
  requirement: !ruby/object:Gem::Requirement
30
16
  requirements:
31
17
  - - ~>
32
18
  - !ruby/object:Gem::Version
33
- version: 0.8.1
19
+ version: 0.9.5
34
20
  type: :development
35
21
  prerelease: false
36
22
  version_requirements: !ruby/object:Gem::Requirement
37
23
  requirements:
38
24
  - - ~>
39
25
  - !ruby/object:Gem::Version
40
- version: 0.8.1
26
+ version: 0.9.5
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: rake
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -73,7 +59,6 @@ extensions:
73
59
  - ext/mysql2/extconf.rb
74
60
  extra_rdoc_files: []
75
61
  files:
76
- - MIT-LICENSE
77
62
  - README.md
78
63
  - ext/mysql2/client.c
79
64
  - ext/mysql2/client.h
@@ -94,6 +79,7 @@ files:
94
79
  - lib/mysql2/error.rb
95
80
  - lib/mysql2/result.rb
96
81
  - lib/mysql2/version.rb
82
+ - support/libmysql.def
97
83
  - support/mysql_enc_to_ruby.rb
98
84
  - support/ruby_enc_to_mysql.rb
99
85
  - examples/eventmachine.rb
@@ -1,20 +0,0 @@
1
- Copyright (c) 2010-2011 Brian Lopez - http://github.com/brianmario
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.