mysql 2.7 → 2.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +12 -0
- data/Manifest.txt +16 -0
- data/README.txt +23 -0
- data/Rakefile +22 -0
- data/ext/mysql_api/extconf.rb +98 -0
- data/{mysql.c.in → ext/mysql_api/mysql.c} +302 -213
- data/{README.html → extra/README.html} +97 -9
- data/{README_ja.html → extra/README_ja.html} +98 -9
- data/{tommy.css → extra/tommy.css} +0 -0
- data/lib/mysql.rb +16 -0
- data/tasks/gem.rake +24 -0
- data/tasks/native.rake +30 -0
- data/tasks/vendor_mysql.rake +41 -0
- data/{test.rb → test/test_mysql.rb} +189 -60
- metadata +90 -39
- data/extconf.rb +0 -67
- data/mysql.gemspec +0 -34
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
2
|
-
<!-- $Id: README.html
|
2
|
+
<!-- $Id: README.html 244 2009-02-01 08:43:39Z tommy $ -->
|
3
3
|
<html>
|
4
4
|
<head>
|
5
5
|
<meta http-equiv="content-style-type" content="text/css">
|
@@ -22,8 +22,8 @@
|
|
22
22
|
|
23
23
|
<h2>Requirement</h2>
|
24
24
|
<ul>
|
25
|
-
<li>MySQL
|
26
|
-
<li>Ruby 1.8.
|
25
|
+
<li>MySQL 5.0.67
|
26
|
+
<li>Ruby 1.8.7, 1.9.1
|
27
27
|
</ul>
|
28
28
|
<p>
|
29
29
|
The module may work for other versions, but that has not been verified.
|
@@ -84,7 +84,7 @@
|
|
84
84
|
2nd:
|
85
85
|
</p>
|
86
86
|
<pre class="code">
|
87
|
-
% ruby ./test.rb [<i>hostname</i> [<i>user</i> [<i>passwd</i> [<i>dbname</i> [<i>port</i> [<i>socket</i> [<i>flag</i>]]]]]]]
|
87
|
+
% ruby ./test.rb -- [<i>hostname</i> [<i>user</i> [<i>passwd</i> [<i>dbname</i> [<i>port</i> [<i>socket</i> [<i>flag</i>]]]]]]]
|
88
88
|
</pre>
|
89
89
|
|
90
90
|
<p>
|
@@ -103,6 +103,9 @@
|
|
103
103
|
<pre class="code">
|
104
104
|
% env LD_RUN_PATH=<i>libmysqlclient.so directory</i> make
|
105
105
|
</pre>
|
106
|
+
<p>
|
107
|
+
test.rb is tested on Linux only.
|
108
|
+
</p>
|
106
109
|
|
107
110
|
<h2>Usage</h2>
|
108
111
|
<p>
|
@@ -384,9 +387,13 @@
|
|
384
387
|
<dd>
|
385
388
|
<p>
|
386
389
|
do query and execute block with Mysql::Result object.
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
+
Mysql::Result object is freed when exiting block.
|
391
|
+
If multiple statement mode, it does repeat block each query.
|
392
|
+
</p>
|
393
|
+
<p>
|
394
|
+
Since MySQL/Ruby 2.8, it no longer turn on multiple statement mode automatically.
|
395
|
+
If you want to turn on multiple statement mode, set Mysql::CLIENT_MULTI_STATEMENTS for Mysql.connect or execute Mysql#set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON).
|
396
|
+
</p>
|
390
397
|
|
391
398
|
<dt>refresh(r)
|
392
399
|
<dd>
|
@@ -697,7 +704,7 @@ st.close
|
|
697
704
|
<tr><td>FLOAT, DOUBLE<td>Float
|
698
705
|
<tr><td>DECIMAL<td>String
|
699
706
|
<tr><td>DATE, DATETIME, TIMESTAMP, TIME<td>Mysql::Time
|
700
|
-
<tr><td>CHAR, VARCHAR, BINARY, VARBINARY, TINYBLOB, TINYTEXT, TINYBLOB, TINYTEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT, ENUM, SET<td>String
|
707
|
+
<tr><td>CHAR, VARCHAR, BINARY, VARBINARY, TINYBLOB, TINYTEXT, TINYBLOB, TINYTEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT, ENUM, SET, BIT<td>String
|
701
708
|
<tr><td>NULL<td>NilClass
|
702
709
|
</table>
|
703
710
|
|
@@ -811,6 +818,87 @@ st.close
|
|
811
818
|
|
812
819
|
<h2>History</h2>
|
813
820
|
<dl>
|
821
|
+
<dt>2009-02-01
|
822
|
+
<dd>
|
823
|
+
version 2.8.1<br>
|
824
|
+
<ul>
|
825
|
+
<li>correspond to Ruby 1.9.1
|
826
|
+
</ul>
|
827
|
+
|
828
|
+
<dt>2008-09-29
|
829
|
+
<dd>
|
830
|
+
version 2.8<br>
|
831
|
+
version 2.7.7
|
832
|
+
<ul>
|
833
|
+
<li>When connecting to MySQL, EINTR is occurred sometimes ([ruby-dev:31842])
|
834
|
+
<li>MySQL/Ruby 2.7.* can not be compiled on Ruby 1.8.5.
|
835
|
+
</ul>
|
836
|
+
|
837
|
+
<dt>2008-06-20
|
838
|
+
<dd>
|
839
|
+
version 2.8pre4<br>
|
840
|
+
<ul>
|
841
|
+
<li>[ruby-dev:35152]
|
842
|
+
</ul>
|
843
|
+
|
844
|
+
<dt>2008-06-17
|
845
|
+
<dd>
|
846
|
+
version 2.8pre3<br>
|
847
|
+
version 2.7.6
|
848
|
+
<ul>
|
849
|
+
<li>On 64bit machine, Mysql::Stmt#execute raise error on large numeric value(>= 2**30).
|
850
|
+
</ul>
|
851
|
+
|
852
|
+
<dt>2008-03-08
|
853
|
+
<dd>
|
854
|
+
version 2.8pre2<br>
|
855
|
+
version 2.7.5
|
856
|
+
<ul>
|
857
|
+
<li>On 64bit machine, Mysql::Stmt#fetch return invalid numeric value.
|
858
|
+
</ul>
|
859
|
+
|
860
|
+
<dt>2007-12-26
|
861
|
+
<dd>
|
862
|
+
version 2.8pre1
|
863
|
+
<ul>
|
864
|
+
<li>for Ruby 1.9.0
|
865
|
+
<li>Incompat: Mysql::Result#each_hash don't create column name string each row. it's shared.
|
866
|
+
<li>Incompat: Mysql#query with block no longer turn on multi-statements mode automatically.
|
867
|
+
</ul>
|
868
|
+
|
869
|
+
<dt>2007-08-22
|
870
|
+
<dd>
|
871
|
+
version 2.7.4
|
872
|
+
<ul>
|
873
|
+
<li>BUG: Mysql::Stmt#execute memory leak.
|
874
|
+
</ul>
|
875
|
+
|
876
|
+
<dt>2006-12-20
|
877
|
+
<dd>
|
878
|
+
version 2.7.3
|
879
|
+
<ul>
|
880
|
+
<li>BUG: Mysql#query with block is stopped when last query failed.
|
881
|
+
</ul>
|
882
|
+
|
883
|
+
<dt>2006-10-28
|
884
|
+
<dd>
|
885
|
+
version 2.7.2
|
886
|
+
<ul>
|
887
|
+
<li>BUG: Mysql::Stmt#result_metadata don't return nil. (Thanks to Hidetoshi)
|
888
|
+
<li>BUG: Mysql#close check mysql_errno.
|
889
|
+
<li>BUG: multistatement Mysql#query with block ignore error.
|
890
|
+
<li>extconf.rb for Visual C++. (Thanks to Shugo Maeda)
|
891
|
+
<li>support MySQL BIT type.
|
892
|
+
<li>add Mysql::Field::TYPE_BIT, TYPE_NEWDECIMAL.
|
893
|
+
</ul>
|
894
|
+
|
895
|
+
<dt>2006-06-04
|
896
|
+
<dd>
|
897
|
+
version 2.7.1
|
898
|
+
<ul>
|
899
|
+
<li>change free() to xfree(). To avoid crash on Windows. (Thanks Tobias Grimm)
|
900
|
+
</ul>
|
901
|
+
|
814
902
|
<dt>2005-08-22
|
815
903
|
<dd>
|
816
904
|
version 2.7
|
@@ -1004,7 +1092,7 @@ st.close
|
|
1004
1092
|
<address><a href="mailto:tommy@tmtm.org">TOMITA Masahiro</a></address>
|
1005
1093
|
<!-- Created: Sun Aug 29 11:52:09 JST 2004 -->
|
1006
1094
|
<!-- hhmts start -->
|
1007
|
-
Last modified:
|
1095
|
+
Last modified: Sun Feb 1 17:40:49 JST 2009
|
1008
1096
|
<!-- hhmts end -->
|
1009
1097
|
</body>
|
1010
1098
|
</html>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
2
|
-
<!-- $Id: README_ja.html
|
2
|
+
<!-- $Id: README_ja.html 244 2009-02-01 08:43:39Z tommy $ -->
|
3
3
|
<html>
|
4
4
|
<head>
|
5
5
|
<meta http-equiv="content-style-type" content="text/css">
|
@@ -21,8 +21,8 @@
|
|
21
21
|
|
22
22
|
<h2>ɬ�פʤ��</h2>
|
23
23
|
<ul>
|
24
|
-
<li>MySQL
|
25
|
-
<li>Ruby 1.8.
|
24
|
+
<li>MySQL 5.0.67
|
25
|
+
<li>Ruby 1.8.7, 1.9.1
|
26
26
|
</ul>
|
27
27
|
<p>
|
28
28
|
�����ʳ��Ǥ� make �Ǥ��뤫�⤷��ޤ�����ǧ���Ƥޤ���
|
@@ -80,7 +80,7 @@
|
|
80
80
|
���Ǵ�ñ�ʥƥ��Ȥ��Ǥ��ޤ���
|
81
81
|
</p>
|
82
82
|
<pre class="code">
|
83
|
-
% ruby ./test.rb [<i>hostname</i> [<i>user</i> [<i>passwd</i> [<i>dbname</i> [<i>port</i> [<i>socket</i> [<i>flag</i>]]]]]]]
|
83
|
+
% ruby ./test.rb -- [<i>hostname</i> [<i>user</i> [<i>passwd</i> [<i>dbname</i> [<i>port</i> [<i>socket</i> [<i>flag</i>]]]]]]]
|
84
84
|
</pre>
|
85
85
|
|
86
86
|
<p>
|
@@ -100,6 +100,10 @@
|
|
100
100
|
<pre class="code">
|
101
101
|
% env LD_RUN_PATH=<i>libmysqlclient.so��</i> make
|
102
102
|
</pre>
|
103
|
+
<p>
|
104
|
+
test.rb �� Linux ��Ǥ�ư�����ǧ���Ƥ��ޤ���
|
105
|
+
¾�Υץ�åȥե�����Ǥϥ��顼���Ф뤫�⤷��ޤ���
|
106
|
+
</p>
|
103
107
|
|
104
108
|
<h2>�Ȥ���</h2>
|
105
109
|
<p>
|
@@ -393,9 +397,13 @@
|
|
393
397
|
<p>
|
394
398
|
�������¹Ԥ��ޤ���
|
395
399
|
�����꤬��̤��֤���硢Mysql::Result ���֥������Ȥ�����Ȥ��ƥ֥��å���¹Ԥ��ޤ���
|
396
|
-
|
397
|
-
|
398
|
-
|
400
|
+
�֥��å���λ���� Mysql::Result ���֥������Ȥϲ�������ޤ���
|
401
|
+
�ޥ�����ơ��ȥ��ȥ⡼�ɤǡ������ˡ�;�פǶ��ڤ�줿ʣ���Υ��������ꤷ�����ϡ�������ο������֥��å����֤��ޤ���
|
402
|
+
</p>
|
403
|
+
<p>
|
404
|
+
MySQL/Ruby 2.8 ����ϡ���ưŪ�˥ޥ�����ơ��ȥ��ȥ⡼�ɤˤϤʤ�ʤ��ʤ�ޤ�����
|
405
|
+
Mysql.connect �� flag �� Mysql::CLIENT_MULTI_STATEMENTS ����ꤹ�뤫��Mysql#set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON) ��¹Ԥ��Ƥ���������
|
406
|
+
</p>
|
399
407
|
|
400
408
|
<dt>refresh(r)
|
401
409
|
<dd>
|
@@ -743,7 +751,7 @@ st.close
|
|
743
751
|
<tr><td>FLOAT, DOUBLE<td>Float
|
744
752
|
<tr><td>DECIMAL<td>String
|
745
753
|
<tr><td>DATE, DATETIME, TIMESTAMP, TIME<td>Mysql::Time
|
746
|
-
<tr><td>CHAR, VARCHAR, BINARY, VARBINARY, TINYBLOB, TINYTEXT, TINYBLOB, TINYTEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT, ENUM, SET<td>String
|
754
|
+
<tr><td>CHAR, VARCHAR, BINARY, VARBINARY, TINYBLOB, TINYTEXT, TINYBLOB, TINYTEXT, MEDIUMBLOB, MEDIUMTEXT, LONGBLOB, LONGTEXT, ENUM, SET, BIT<td>String
|
747
755
|
<tr><td>NULL<td>NilClass
|
748
756
|
</table>
|
749
757
|
|
@@ -891,6 +899,87 @@ st.close
|
|
891
899
|
|
892
900
|
<h2>����</h2>
|
893
901
|
<dl>
|
902
|
+
<dt>2009-02-01
|
903
|
+
<dd>
|
904
|
+
version 2.8.1<br>
|
905
|
+
<ul>
|
906
|
+
<li>Ruby 1.9.1 �����
|
907
|
+
</ul>
|
908
|
+
|
909
|
+
<dt>2008-09-29
|
910
|
+
<dd>
|
911
|
+
version 2.8<br>
|
912
|
+
version 2.7.7
|
913
|
+
<ul>
|
914
|
+
<li>MySQL�ؤ���³���� SIGVTALRM �� EINTR �ˤʤ뤳�Ȥ������������ ([ruby-dev:31842])
|
915
|
+
<li>MySQL/Ruby 2.7.* �� Ruby 1.8.5 �ǥ���ѥ���Ǥ��ʤ��ä���
|
916
|
+
</ul>
|
917
|
+
|
918
|
+
<dt>2008-06-20
|
919
|
+
<dd>
|
920
|
+
version 2.8pre4
|
921
|
+
<ul>
|
922
|
+
<li>���顼����ե��������������¾��[ruby-dev:35152]
|
923
|
+
</ul>
|
924
|
+
|
925
|
+
<dt>2008-06-17
|
926
|
+
<dd>
|
927
|
+
version 2.8pre3<br>
|
928
|
+
version 2.7.6
|
929
|
+
<ul>
|
930
|
+
<li>64bit �Ķ��� Mysql::Stmt#execute ���礭�ʿ���(2**30 �ʾ�)�ǥ��顼�ˤʤ����������
|
931
|
+
</ul>
|
932
|
+
|
933
|
+
<dt>2008-03-08
|
934
|
+
<dd>
|
935
|
+
version 2.8pre2<br>
|
936
|
+
version 2.7.5
|
937
|
+
<ul>
|
938
|
+
<li>64bit �Ķ��� Mysql::Stmt#fetch �ǿ��ͤ���������������
|
939
|
+
</ul>
|
940
|
+
|
941
|
+
<dt>2007-12-26
|
942
|
+
<dd>
|
943
|
+
version 2.8pre1
|
944
|
+
<ul>
|
945
|
+
<li>Ruby 1.9.0 �б�
|
946
|
+
<li>Incompat: Mysql::Result#each_hash ������˥����̾ʸ�������������ΤǤϤʤ�����ͭ����褦�ˤ�����
|
947
|
+
<li>Incompat: �֥��å��Ĥ� Mysql#query �Ǽ�ưŪ�˥ޥ�����ơ��ȥ��ȥ⡼�ɤˤʤ�ʤ��褦�ˤ�����
|
948
|
+
</ul>
|
949
|
+
|
950
|
+
<dt>2007-08-22
|
951
|
+
<dd>
|
952
|
+
version 2.7.4
|
953
|
+
<ul>
|
954
|
+
<li>BUG: Mysql::Stmt#execute �����������Ƥ�����
|
955
|
+
</ul>
|
956
|
+
|
957
|
+
<dt>2006-12-20
|
958
|
+
<dd>
|
959
|
+
version 2.7.3
|
960
|
+
<ul>
|
961
|
+
<li>BUG: �֥��å��Ĥ� Mysql#query �����Ǹ�Υ����꤬���顼�ξ�����ߤ��Ƥ��ޤ���
|
962
|
+
</ul>
|
963
|
+
|
964
|
+
<dt>2006-10-28
|
965
|
+
<dd>
|
966
|
+
version 2.7.2
|
967
|
+
<ul>
|
968
|
+
<li>BUG: ��̤��֤��ʤ�������� Mysql::Stmt#result_metadata �� nil ���Ѥ����褦�ˤ��� (Thanks to Hidetoshi)
|
969
|
+
<li>BUG: Mysql#close �� mysql_errno �ʤ��褦���ѹ�
|
970
|
+
<li>BUG: �֥��å��Ĥ� Mysql#query ��ʣ�����ơ��ȥ��Ȼ��˥��顼��̵�뤷�Ƥ�����
|
971
|
+
<li>extconf.rb �� Visual C++ �б� (Thanks to Shugo Maeda)
|
972
|
+
<li>BIT�����б�
|
973
|
+
<li>Mysql::Field �� TYPE_BIT, TYPE_NEWDECIMAL �ɲ�
|
974
|
+
</ul>
|
975
|
+
|
976
|
+
<dt>2006-06-04
|
977
|
+
<dd>
|
978
|
+
version 2.7.1
|
979
|
+
<ul>
|
980
|
+
<li>free() �� xfree() ���ѹ���Windows �ǤΥ���å���β���Τ��ᡣ(Tobias Grimm �˴���)
|
981
|
+
</ul>
|
982
|
+
|
894
983
|
<dt>2005-08-22
|
895
984
|
<dd>
|
896
985
|
version 2.7
|
@@ -1228,7 +1317,7 @@ st.close
|
|
1228
1317
|
<address><a href="mailto:tommy@tmtm.org">TOMITA Masahiro</a></address>
|
1229
1318
|
<!-- Created: Sun Aug 29 11:52:09 JST 2004 -->
|
1230
1319
|
<!-- hhmts start -->
|
1231
|
-
Last modified:
|
1320
|
+
Last modified: Sun Feb 1 17:41:18 JST 2009
|
1232
1321
|
<!-- hhmts end -->
|
1233
1322
|
</body>
|
1234
1323
|
</html>
|
File without changes
|
data/lib/mysql.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# support multiple ruby version (fat binaries under windows)
|
2
|
+
begin
|
3
|
+
require 'mysql_api'
|
4
|
+
rescue LoadError
|
5
|
+
if RUBY_PLATFORM =~ /mingw|mswin/ then
|
6
|
+
RUBY_VERSION =~ /(\d+.\d+)/
|
7
|
+
require "#{$1}/mysql_api"
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# define version string to be used internally for the Gem by Hoe.
|
12
|
+
class Mysql
|
13
|
+
module GemVersion
|
14
|
+
VERSION = '2.8.1'
|
15
|
+
end
|
16
|
+
end
|
data/tasks/gem.rake
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems/package_task'
|
2
|
+
require 'hoe'
|
3
|
+
|
4
|
+
HOE = Hoe.spec 'mysql' do
|
5
|
+
self.rubyforge_name = 'mysql-win'
|
6
|
+
self.author = ['TOMITA Masahiro']
|
7
|
+
self.email = %w[tommy@tmtm.org]
|
8
|
+
self.need_tar = false
|
9
|
+
self.need_zip = false
|
10
|
+
|
11
|
+
spec_extras[:required_ruby_version] = Gem::Requirement.new('>= 1.8.6')
|
12
|
+
|
13
|
+
spec_extras[:extensions] = ["ext/mysql_api/extconf.rb"]
|
14
|
+
|
15
|
+
extra_dev_deps << ['rake-compiler', "~> 0.5"]
|
16
|
+
end
|
17
|
+
|
18
|
+
file "#{HOE.spec.name}.gemspec" => ['Rakefile', 'tasks/gem.rake'] do |t|
|
19
|
+
puts "Generating #{t.name}"
|
20
|
+
File.open(t.name, 'w') { |f| f.puts HOE.spec.to_yaml }
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "Generate or update the standalone gemspec file for the project"
|
24
|
+
task :gemspec => ["#{HOE.spec.name}.gemspec"]
|
data/tasks/native.rake
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# use rake-compiler for building the extension
|
2
|
+
require 'rake/extensiontask'
|
3
|
+
|
4
|
+
MYSQL_VERSION = "5.0.83"
|
5
|
+
MYSQL_MIRROR = ENV['MYSQL_MIRROR'] || "http://mysql.localhost.net.ar"
|
6
|
+
|
7
|
+
Rake::ExtensionTask.new('mysql_api', HOE.spec) do |ext|
|
8
|
+
# reference where the vendored MySQL got extracted
|
9
|
+
mysql_lib = File.expand_path(File.join(File.dirname(__FILE__), '..', 'vendor', "mysql-#{MYSQL_VERSION}-win32"))
|
10
|
+
|
11
|
+
# define target for extension (supporting fat binaries)
|
12
|
+
if RUBY_PLATFORM =~ /mingw/ then
|
13
|
+
ruby_ver = RUBY_VERSION.match(/(\d+\.\d+)/)[1]
|
14
|
+
ext.lib_dir = "lib/#{ruby_ver}"
|
15
|
+
end
|
16
|
+
|
17
|
+
# automatically add build options to avoid need of manual input
|
18
|
+
if RUBY_PLATFORM =~ /mswin|mingw/ then
|
19
|
+
ext.config_options << "--with-mysql-include=#{mysql_lib}/include"
|
20
|
+
ext.config_options << "--with-mysql-lib=#{mysql_lib}/lib/opt"
|
21
|
+
else
|
22
|
+
ext.cross_compile = true
|
23
|
+
ext.cross_platform = ['i386-mingw32', 'i386-mswin32']
|
24
|
+
ext.cross_config_options << "--with-mysql-include=#{mysql_lib}/include"
|
25
|
+
ext.cross_config_options << "--with-mysql-lib=#{mysql_lib}/lib/opt"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# ensure things are compiled prior testing
|
30
|
+
task :test => [:compile]
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
require 'rake/extensioncompiler'
|
3
|
+
|
4
|
+
# download mysql library and headers
|
5
|
+
directory "vendor"
|
6
|
+
|
7
|
+
file "vendor/mysql-noinstall-#{MYSQL_VERSION}-win32.zip" => ['vendor'] do |t|
|
8
|
+
base_version = MYSQL_VERSION.gsub(/\.[0-9]+$/, '')
|
9
|
+
url = "http://dev.mysql.com/get/Downloads/MySQL-#{base_version}/#{File.basename(t.name)}/from/#{MYSQL_MIRROR}/"
|
10
|
+
when_writing "downloading #{t.name}" do
|
11
|
+
cd File.dirname(t.name) do
|
12
|
+
sh "wget -c #{url} || curl -C - -O #{url}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
file "vendor/mysql-#{MYSQL_VERSION}-win32/include/mysql.h" => ["vendor/mysql-noinstall-#{MYSQL_VERSION}-win32.zip"] do |t|
|
18
|
+
full_file = File.expand_path(t.prerequisites.last)
|
19
|
+
when_writing "creating #{t.name}" do
|
20
|
+
cd "vendor" do
|
21
|
+
sh "unzip #{full_file} mysql-#{MYSQL_VERSION}-win32/bin/** mysql-#{MYSQL_VERSION}-win32/include/** mysql-#{MYSQL_VERSION}-win32/lib/**"
|
22
|
+
end
|
23
|
+
# update file timestamp to avoid Rake perform this extraction again.
|
24
|
+
touch t.name
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# clobber expanded packages
|
29
|
+
CLOBBER.include("vendor/mysql-#{MYSQL_VERSION}-win32")
|
30
|
+
|
31
|
+
# vendor:mysql
|
32
|
+
task 'vendor:mysql' => ["vendor/mysql-#{MYSQL_VERSION}-win32/include/mysql.h"]
|
33
|
+
|
34
|
+
# hook into cross compilation vendored mysql dependency
|
35
|
+
if RUBY_PLATFORM =~ /mingw|mswin/ then
|
36
|
+
Rake::Task['compile'].prerequisites.unshift 'vendor:mysql'
|
37
|
+
else
|
38
|
+
if Rake::Task.tasks.map {|t| t.name }.include? 'cross'
|
39
|
+
Rake::Task['cross'].prerequisites.unshift 'vendor:mysql'
|
40
|
+
end
|
41
|
+
end
|
@@ -1,22 +1,36 @@
|
|
1
1
|
#!/usr/local/bin/ruby
|
2
|
-
# $Id: test.rb
|
2
|
+
# $Id: test.rb 244 2009-02-01 08:43:39Z tommy $
|
3
3
|
|
4
4
|
require "test/unit"
|
5
|
-
require
|
5
|
+
require 'ostruct'
|
6
|
+
require 'mysql'
|
7
|
+
|
8
|
+
CONFIG = OpenStruct.new
|
9
|
+
CONFIG.host = ENV['MYSQL_HOST'] || 'localhost'
|
10
|
+
CONFIG.port = ENV['MYSQL_PORT'] || '3306'
|
11
|
+
CONFIG.user = ENV['MYSQL_USER'] || 'root'
|
12
|
+
CONFIG.pass = ENV['MYSQL_PASS'] || ''
|
13
|
+
CONFIG.sock = ENV['MYSQL_SOCK']
|
14
|
+
CONFIG.flag = ENV['MYSQL_FLAG']
|
15
|
+
CONFIG.database = ENV['MYSQL_DATABASE'] || 'test'
|
6
16
|
|
7
17
|
class TC_Mysql < Test::Unit::TestCase
|
8
18
|
def setup()
|
9
|
-
@host
|
10
|
-
@
|
11
|
-
@
|
12
|
-
@
|
13
|
-
|
19
|
+
@host = CONFIG.host
|
20
|
+
@user = CONFIG.user
|
21
|
+
@pass = CONFIG.pass
|
22
|
+
@db = CONFIG.database
|
23
|
+
|
24
|
+
@port = CONFIG.port.to_i
|
25
|
+
@sock = CONFIG.sock
|
26
|
+
@flag = CONFIG.flag.to_i
|
14
27
|
end
|
28
|
+
|
15
29
|
def teardown()
|
16
30
|
end
|
17
31
|
|
18
32
|
def test_version()
|
19
|
-
assert_equal(
|
33
|
+
assert_equal(20801, Mysql::VERSION)
|
20
34
|
end
|
21
35
|
|
22
36
|
def test_init()
|
@@ -48,11 +62,11 @@ class TC_Mysql < Test::Unit::TestCase
|
|
48
62
|
end
|
49
63
|
|
50
64
|
def test_get_client_info()
|
51
|
-
assert_match(/^\d.\d+.\d+(-.*)?$/, Mysql.get_client_info())
|
65
|
+
assert_match(/^\d.\d+.\d+[a-z]?(-.*)?$/, Mysql.get_client_info())
|
52
66
|
end
|
53
67
|
|
54
68
|
def test_client_info()
|
55
|
-
assert_match(/^\d.\d+.\d+(-.*)?$/, Mysql.client_info())
|
69
|
+
assert_match(/^\d.\d+.\d+[a-z]?(-.*)?$/, Mysql.client_info())
|
56
70
|
end
|
57
71
|
|
58
72
|
def test_options()
|
@@ -95,15 +109,20 @@ end
|
|
95
109
|
|
96
110
|
class TC_Mysql2 < Test::Unit::TestCase
|
97
111
|
def setup()
|
98
|
-
@host
|
99
|
-
@
|
100
|
-
@
|
101
|
-
@
|
102
|
-
|
112
|
+
@host = CONFIG.host
|
113
|
+
@user = CONFIG.user
|
114
|
+
@pass = CONFIG.pass
|
115
|
+
@db = CONFIG.database
|
116
|
+
|
117
|
+
@port = CONFIG.port.to_i
|
118
|
+
@sock = CONFIG.sock
|
119
|
+
@flag = CONFIG.flag.to_i
|
120
|
+
|
103
121
|
@m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)
|
104
122
|
end
|
123
|
+
|
105
124
|
def teardown()
|
106
|
-
@m.close
|
125
|
+
@m.close if @m
|
107
126
|
end
|
108
127
|
|
109
128
|
def test_affected_rows()
|
@@ -142,6 +161,41 @@ class TC_Mysql2 < Test::Unit::TestCase
|
|
142
161
|
end
|
143
162
|
end if Mysql.client_version >= 40100
|
144
163
|
|
164
|
+
def test_query_with_block()
|
165
|
+
if @m.server_version >= 40100 then
|
166
|
+
@m.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON)
|
167
|
+
expect = [["1","2","3"], ["4","5","6"]]
|
168
|
+
@m.query("select 1,2,3; select 4,5,6") {|res|
|
169
|
+
assert_equal(1, res.num_rows)
|
170
|
+
assert_equal(expect.shift, res.fetch_row)
|
171
|
+
}
|
172
|
+
assert(expect.empty?)
|
173
|
+
expect = [["1","2","3"], ["4","5","6"]]
|
174
|
+
assert_raises(Mysql::Error) {
|
175
|
+
@m.query("select 1,2,3; hoge; select 4,5,6") {|res|
|
176
|
+
assert_equal(1, res.num_rows)
|
177
|
+
assert_equal(expect.shift, res.fetch_row)
|
178
|
+
}
|
179
|
+
}
|
180
|
+
assert_equal(1, expect.size)
|
181
|
+
expect = [["1","2","3"], ["4","5","6"]]
|
182
|
+
assert_raises(Mysql::Error) {
|
183
|
+
@m.query("select 1,2,3; select 4,5,6; hoge") {|res|
|
184
|
+
assert_equal(1, res.num_rows)
|
185
|
+
assert_equal(expect.shift, res.fetch_row)
|
186
|
+
}
|
187
|
+
}
|
188
|
+
assert(expect.empty?)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_query_with_block_single()
|
193
|
+
@m.query("select 1,2,3") {|res|
|
194
|
+
assert_equal(1, res.num_rows)
|
195
|
+
assert_equal(["1","2","3"], res.fetch_row)
|
196
|
+
}
|
197
|
+
end
|
198
|
+
|
145
199
|
def test_set_server_option()
|
146
200
|
if @m.server_version >= 40101 then
|
147
201
|
assert_equal(@m, @m.set_server_option(Mysql::OPTION_MULTI_STATEMENTS_ON))
|
@@ -151,11 +205,15 @@ class TC_Mysql2 < Test::Unit::TestCase
|
|
151
205
|
|
152
206
|
def test_sqlstate()
|
153
207
|
if @m.server_version >= 40100 then
|
154
|
-
|
208
|
+
if RUBY_PLATFORM !~ /mingw|mswin/ then
|
209
|
+
assert_equal("00000", @m.sqlstate)
|
210
|
+
else
|
211
|
+
assert_equal("HY000", @m.sqlstate)
|
212
|
+
end
|
155
213
|
assert_raises(Mysql::Error){@m.query("hogehoge")}
|
156
214
|
assert_equal("42000", @m.sqlstate)
|
157
215
|
end
|
158
|
-
end
|
216
|
+
end
|
159
217
|
|
160
218
|
def test_query_with_result()
|
161
219
|
assert_equal(true, @m.query_with_result)
|
@@ -176,16 +234,21 @@ end
|
|
176
234
|
|
177
235
|
class TC_MysqlRes < Test::Unit::TestCase
|
178
236
|
def setup()
|
179
|
-
@host
|
180
|
-
@
|
181
|
-
@
|
182
|
-
@
|
183
|
-
|
237
|
+
@host = CONFIG.host
|
238
|
+
@user = CONFIG.user
|
239
|
+
@pass = CONFIG.pass
|
240
|
+
@db = CONFIG.database
|
241
|
+
|
242
|
+
@port = CONFIG.port.to_i
|
243
|
+
@sock = CONFIG.sock
|
244
|
+
@flag = CONFIG.flag.to_i
|
245
|
+
|
184
246
|
@m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)
|
185
247
|
@m.query("create temporary table t (id int, str char(10), primary key (id))")
|
186
248
|
@m.query("insert into t values (1, 'abc'), (2, 'defg'), (3, 'hi'), (4, null)")
|
187
249
|
@res = @m.query("select * from t")
|
188
250
|
end
|
251
|
+
|
189
252
|
def teardown()
|
190
253
|
@res.free
|
191
254
|
@m.close
|
@@ -244,7 +307,7 @@ class TC_MysqlRes < Test::Unit::TestCase
|
|
244
307
|
@res.data_seek(1)
|
245
308
|
assert_equal(["2","defg"], @res.fetch_row)
|
246
309
|
end
|
247
|
-
|
310
|
+
|
248
311
|
def test_row_seek()
|
249
312
|
assert_equal(["1","abc"], @res.fetch_row)
|
250
313
|
pos = @res.row_tell
|
@@ -376,13 +439,18 @@ end
|
|
376
439
|
|
377
440
|
class TC_MysqlStmt < Test::Unit::TestCase
|
378
441
|
def setup()
|
379
|
-
@host
|
380
|
-
@
|
381
|
-
@
|
382
|
-
@
|
383
|
-
|
442
|
+
@host = CONFIG.host
|
443
|
+
@user = CONFIG.user
|
444
|
+
@pass = CONFIG.pass
|
445
|
+
@db = CONFIG.database
|
446
|
+
|
447
|
+
@port = CONFIG.port.to_i
|
448
|
+
@sock = CONFIG.sock
|
449
|
+
@flag = CONFIG.flag.to_i
|
450
|
+
|
384
451
|
@m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)
|
385
452
|
end
|
453
|
+
|
386
454
|
def teardown()
|
387
455
|
end
|
388
456
|
|
@@ -406,14 +474,19 @@ end if Mysql.client_version >= 40100
|
|
406
474
|
|
407
475
|
class TC_MysqlStmt2 < Test::Unit::TestCase
|
408
476
|
def setup()
|
409
|
-
@host
|
410
|
-
@
|
411
|
-
@
|
412
|
-
@
|
413
|
-
|
477
|
+
@host = CONFIG.host
|
478
|
+
@user = CONFIG.user
|
479
|
+
@pass = CONFIG.pass
|
480
|
+
@db = CONFIG.database
|
481
|
+
|
482
|
+
@port = CONFIG.port.to_i
|
483
|
+
@sock = CONFIG.sock
|
484
|
+
@flag = CONFIG.flag.to_i
|
485
|
+
|
414
486
|
@m = Mysql.new(@host, @user, @pass, @db, @port, @sock, @flag)
|
415
487
|
@s = @m.stmt_init()
|
416
488
|
end
|
489
|
+
|
417
490
|
def teardown()
|
418
491
|
@s.close
|
419
492
|
@m.close
|
@@ -457,7 +530,7 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
457
530
|
end
|
458
531
|
=end
|
459
532
|
|
460
|
-
def test_bind_result_nil()
|
533
|
+
def test_bind_result_nil()
|
461
534
|
if @m.server_version >= 40100 then
|
462
535
|
@m.query("create temporary table t (i int, c char(10), d double, t datetime)")
|
463
536
|
@m.query("insert into t values (123, '9abcdefg', 1.2345, 20050802235011)")
|
@@ -510,7 +583,7 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
510
583
|
@s.execute
|
511
584
|
a = @s.fetch
|
512
585
|
if Mysql.client_version < 50000 then
|
513
|
-
assert_equal([123, 9, 1, 2005], a)
|
586
|
+
assert_equal([123, 9, 1, 2005], a)
|
514
587
|
else
|
515
588
|
assert_equal([123, 9, 1, 20050802235011.0], a)
|
516
589
|
end
|
@@ -654,6 +727,17 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
654
727
|
end
|
655
728
|
end
|
656
729
|
|
730
|
+
def test_execute5()
|
731
|
+
if @m.server_version >= 40100 then
|
732
|
+
[30, 31, 32, 62, 63].each do |i|
|
733
|
+
v, = @m.prepare("select cast(? as signed)").execute(2**i-1).fetch
|
734
|
+
assert_equal(2**i-1, v)
|
735
|
+
v, = @m.prepare("select cast(? as signed)").execute(-(2**i)).fetch
|
736
|
+
assert_equal(-(2**i), v)
|
737
|
+
end
|
738
|
+
end
|
739
|
+
end
|
740
|
+
|
657
741
|
def test_fetch()
|
658
742
|
if @m.server_version >= 40100 then
|
659
743
|
@s.prepare("select 123, 'abc', null")
|
@@ -662,6 +746,31 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
662
746
|
end
|
663
747
|
end
|
664
748
|
|
749
|
+
def test_fetch_bit()
|
750
|
+
if @m.client_version >= 50003 and @m.server_version >= 50003 then
|
751
|
+
@m.query("create temporary table t (i bit(8))")
|
752
|
+
@m.query("insert into t values (0),(-1),(127),(-128),(255),(-255),(256)")
|
753
|
+
@s.prepare("select i from t")
|
754
|
+
@s.execute
|
755
|
+
assert_equal(["\x00"], @s.fetch)
|
756
|
+
assert_equal(["\xff"], @s.fetch)
|
757
|
+
assert_equal(["\x7f"], @s.fetch)
|
758
|
+
assert_equal(["\xff"], @s.fetch)
|
759
|
+
assert_equal(["\xff"], @s.fetch)
|
760
|
+
assert_equal(["\xff"], @s.fetch)
|
761
|
+
assert_equal(["\xff"], @s.fetch)
|
762
|
+
@m.query("create temporary table t2 (i bit(64))")
|
763
|
+
@m.query("insert into t2 values (0),(-1),(4294967296),(18446744073709551615),(18446744073709551616)")
|
764
|
+
@s.prepare("select i from t2")
|
765
|
+
@s.execute
|
766
|
+
assert_equal(["\x00\x00\x00\x00\x00\x00\x00\x00"], @s.fetch)
|
767
|
+
assert_equal(["\xff\xff\xff\xff\xff\xff\xff\xff"], @s.fetch)
|
768
|
+
assert_equal(["\x00\x00\x00\x01\x00\x00\x00\x00"], @s.fetch)
|
769
|
+
assert_equal(["\xff\xff\xff\xff\xff\xff\xff\xff"], @s.fetch)
|
770
|
+
assert_equal(["\xff\xff\xff\xff\xff\xff\xff\xff"], @s.fetch)
|
771
|
+
end
|
772
|
+
end
|
773
|
+
|
665
774
|
def test_fetch_tinyint()
|
666
775
|
if @m.server_version >= 40100 then
|
667
776
|
@m.query("create temporary table t (i tinyint)")
|
@@ -796,7 +905,11 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
796
905
|
assert_equal([-1], @s.fetch)
|
797
906
|
assert_equal([9223372036854775807], @s.fetch)
|
798
907
|
assert_equal([-9223372036854775808], @s.fetch)
|
799
|
-
|
908
|
+
if @m.server_version >= 50000 then
|
909
|
+
assert_equal([9223372036854775807], @s.fetch)
|
910
|
+
else
|
911
|
+
assert_equal([-1], @s.fetch) # MySQL problem
|
912
|
+
end
|
800
913
|
assert_equal([-9223372036854775808], @s.fetch)
|
801
914
|
assert_equal([9223372036854775807], @s.fetch)
|
802
915
|
end
|
@@ -809,16 +922,20 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
809
922
|
@s.prepare("select i from t")
|
810
923
|
@s.execute
|
811
924
|
assert_equal([0], @s.fetch)
|
812
|
-
|
813
|
-
|
814
|
-
if @m.server_version < 50000 then
|
815
|
-
assert_equal([-9223372036854775808], @s.fetch) # MySQL problem
|
925
|
+
if @m.server_version >= 50000 then
|
926
|
+
assert_equal([0], @s.fetch)
|
816
927
|
else
|
928
|
+
assert_equal([18446744073709551615], @s.fetch) # MySQL problem
|
929
|
+
end
|
930
|
+
assert_equal([9223372036854775807], @s.fetch)
|
931
|
+
if @m.server_version >= 50000 then
|
817
932
|
assert_equal([0], @s.fetch)
|
933
|
+
else
|
934
|
+
assert_equal([9223372036854775808], @s.fetch) # MySQL problem
|
818
935
|
end
|
819
|
-
assert_equal([
|
936
|
+
assert_equal([18446744073709551615], @s.fetch)
|
820
937
|
assert_equal([0], @s.fetch)
|
821
|
-
assert_equal([
|
938
|
+
assert_equal([18446744073709551615], @s.fetch)
|
822
939
|
end
|
823
940
|
end
|
824
941
|
|
@@ -857,12 +974,10 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
857
974
|
@s.prepare("select i from t")
|
858
975
|
@s.execute
|
859
976
|
assert_equal([0], @s.fetch)
|
860
|
-
|
861
|
-
|
862
|
-
|
863
|
-
|
864
|
-
assert_equal(Float::MAX, @s.fetch[0])
|
865
|
-
end
|
977
|
+
assert_in_delta(-Float::MAX, @s.fetch[0], Float::EPSILON)
|
978
|
+
assert_in_delta(-Float::MIN, @s.fetch[0], Float::EPSILON)
|
979
|
+
assert_in_delta(Float::MIN, @s.fetch[0], Float::EPSILON)
|
980
|
+
assert_in_delta(Float::MAX, @s.fetch[0], Float::EPSILON)
|
866
981
|
end
|
867
982
|
end
|
868
983
|
|
@@ -874,11 +989,9 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
874
989
|
@s.execute
|
875
990
|
assert_equal([0], @s.fetch)
|
876
991
|
assert_equal([0], @s.fetch)
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
assert_equal(Float::MAX, @s.fetch[0])
|
881
|
-
end
|
992
|
+
assert_equal([0], @s.fetch)
|
993
|
+
assert_in_delta(Float::MIN, @s.fetch[0], Float::EPSILON)
|
994
|
+
assert_in_delta(Float::MAX, @s.fetch[0], Float::EPSILON)
|
882
995
|
end
|
883
996
|
end
|
884
997
|
|
@@ -943,11 +1056,11 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
943
1056
|
def test_fetch_timestamp()
|
944
1057
|
if @m.server_version >= 40100 then
|
945
1058
|
@m.query("create temporary table t (i timestamp)")
|
946
|
-
@m.query("insert into t values ('1970-01-
|
1059
|
+
@m.query("insert into t values ('1970-01-02 00:00:00'),('2037-12-30 23:59:59')")
|
947
1060
|
@s.prepare("select i from t")
|
948
1061
|
@s.execute
|
949
|
-
assert_equal([Mysql::Time.new(1970,1,
|
950
|
-
assert_equal([Mysql::Time.new(2037,12,
|
1062
|
+
assert_equal([Mysql::Time.new(1970,1,2,0,0,0)], @s.fetch)
|
1063
|
+
assert_equal([Mysql::Time.new(2037,12,30,23,59,59)], @s.fetch)
|
951
1064
|
end
|
952
1065
|
end
|
953
1066
|
|
@@ -1006,7 +1119,11 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
1006
1119
|
@s.prepare("select i from t")
|
1007
1120
|
@s.execute
|
1008
1121
|
assert_equal([nil], @s.fetch)
|
1009
|
-
|
1122
|
+
if @m.server_version >= 50000 then
|
1123
|
+
assert_equal(["abc\0\0\0\0\0\0\0"], @s.fetch)
|
1124
|
+
else
|
1125
|
+
assert_equal(["abc"], @s.fetch)
|
1126
|
+
end
|
1010
1127
|
end
|
1011
1128
|
end
|
1012
1129
|
|
@@ -1246,6 +1363,14 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
1246
1363
|
end
|
1247
1364
|
end
|
1248
1365
|
|
1366
|
+
def test_result_metadata_nodata()
|
1367
|
+
if @m.server_version >= 40100 then
|
1368
|
+
@m.query("create temporary table t (i int)")
|
1369
|
+
@s.prepare("insert into t values (1)")
|
1370
|
+
assert_equal(nil, @s.result_metadata())
|
1371
|
+
end
|
1372
|
+
end
|
1373
|
+
|
1249
1374
|
def test_row_seek_tell()
|
1250
1375
|
if @m.server_version >= 40100 then
|
1251
1376
|
@m.query("create temporary table t (i int)")
|
@@ -1277,7 +1402,11 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
1277
1402
|
def test_sqlstate()
|
1278
1403
|
if @m.server_version >= 40100 then
|
1279
1404
|
@s.prepare("select 1")
|
1280
|
-
|
1405
|
+
if @m.client_version >= 50000 then
|
1406
|
+
assert_equal("00000", @s.sqlstate)
|
1407
|
+
else
|
1408
|
+
assert_equal("", @s.sqlstate)
|
1409
|
+
end
|
1281
1410
|
assert_raises(Mysql::Error){@s.prepare("hogehoge")}
|
1282
1411
|
assert_equal("42000", @s.sqlstate)
|
1283
1412
|
end
|
@@ -1288,7 +1417,7 @@ class TC_MysqlStmt2 < Test::Unit::TestCase
|
|
1288
1417
|
@s.store_result()
|
1289
1418
|
end
|
1290
1419
|
=end
|
1291
|
-
|
1420
|
+
|
1292
1421
|
end if Mysql.client_version >= 40100
|
1293
1422
|
|
1294
1423
|
class TC_MysqlTime < Test::Unit::TestCase
|