mysql2 0.1.9 → 0.2.0
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.
- data/.gitignore +3 -0
- data/CHANGELOG.md +12 -1
- data/README.rdoc +69 -5
- data/Rakefile +4 -6
- data/VERSION +1 -1
- data/benchmark/active_record.rb +3 -0
- data/benchmark/allocations.rb +33 -0
- data/benchmark/escape.rb +24 -22
- data/benchmark/query_with_mysql_casting.rb +2 -2
- data/benchmark/query_without_mysql_casting.rb +2 -2
- data/benchmark/setup_db.rb +6 -2
- data/benchmark/thread_alone.rb +20 -0
- data/examples/threaded.rb +20 -0
- data/ext/mysql2/client.c +540 -0
- data/ext/mysql2/client.h +40 -0
- data/ext/mysql2/extconf.rb +6 -4
- data/ext/mysql2/mysql2_ext.c +3 -487
- data/ext/mysql2/mysql2_ext.h +1 -67
- data/ext/mysql2/result.c +151 -43
- data/ext/mysql2/result.h +13 -0
- data/lib/active_record/connection_adapters/em_mysql2_adapter.rb +14 -10
- data/lib/mysql2.rb +1 -1
- data/lib/mysql2/client.rb +17 -1
- data/mysql2.gemspec +14 -9
- data/spec/mysql2/client_spec.rb +50 -12
- data/spec/mysql2/result_spec.rb +25 -66
- data/spec/spec_helper.rb +62 -0
- data/tasks/benchmarks.rake +8 -0
- data/tasks/compile.rake +19 -0
- data/tasks/vendor_mysql.rake +41 -0
- metadata +14 -9
- data/lib/active_record/connection_adapters/mysql2_adapter.rb +0 -598
- data/lib/sequel/adapters/mysql2.rb +0 -237
- data/spec/active_record/active_record_spec.rb +0 -149
data/lib/mysql2/client.rb
CHANGED
@@ -1,6 +1,18 @@
|
|
1
1
|
module Mysql2
|
2
2
|
class Client
|
3
|
-
|
3
|
+
attr_reader :query_options
|
4
|
+
@@default_query_options = {
|
5
|
+
:as => :hash,
|
6
|
+
:async => false,
|
7
|
+
:cast_booleans => false,
|
8
|
+
:symbolize_keys => false,
|
9
|
+
:database_timezone => :local, # timezone Mysql2 will assume datetime objects are stored in
|
10
|
+
:application_timezone => nil # timezone Mysql2 will convert to before handing the object back to the caller
|
11
|
+
}
|
12
|
+
|
13
|
+
def initialize(opts = {})
|
14
|
+
@query_options = @@default_query_options.dup
|
15
|
+
|
4
16
|
init_connection
|
5
17
|
|
6
18
|
[:reconnect, :connect_timeout].each do |key|
|
@@ -22,6 +34,10 @@ module Mysql2
|
|
22
34
|
connect user, pass, host, port, database, socket
|
23
35
|
end
|
24
36
|
|
37
|
+
def self.default_query_options
|
38
|
+
@@default_query_options
|
39
|
+
end
|
40
|
+
|
25
41
|
# NOTE: from ruby-mysql
|
26
42
|
if defined? Encoding
|
27
43
|
CHARSET_MAP = {
|
data/mysql2.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mysql2}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brian Lopez"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-08-16}
|
13
13
|
s.email = %q{seniorlopez@gmail.com}
|
14
14
|
s.extensions = ["ext/mysql2/extconf.rb"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -23,19 +23,23 @@ Gem::Specification.new do |s|
|
|
23
23
|
"Rakefile",
|
24
24
|
"VERSION",
|
25
25
|
"benchmark/active_record.rb",
|
26
|
+
"benchmark/allocations.rb",
|
26
27
|
"benchmark/escape.rb",
|
27
28
|
"benchmark/query_with_mysql_casting.rb",
|
28
29
|
"benchmark/query_without_mysql_casting.rb",
|
29
30
|
"benchmark/sequel.rb",
|
30
31
|
"benchmark/setup_db.rb",
|
32
|
+
"benchmark/thread_alone.rb",
|
31
33
|
"examples/eventmachine.rb",
|
34
|
+
"examples/threaded.rb",
|
35
|
+
"ext/mysql2/client.c",
|
36
|
+
"ext/mysql2/client.h",
|
32
37
|
"ext/mysql2/extconf.rb",
|
33
38
|
"ext/mysql2/mysql2_ext.c",
|
34
39
|
"ext/mysql2/mysql2_ext.h",
|
35
40
|
"ext/mysql2/result.c",
|
36
41
|
"ext/mysql2/result.h",
|
37
42
|
"lib/active_record/connection_adapters/em_mysql2_adapter.rb",
|
38
|
-
"lib/active_record/connection_adapters/mysql2_adapter.rb",
|
39
43
|
"lib/active_record/fiber_patches.rb",
|
40
44
|
"lib/arel/engines/sql/compilers/mysql2_compiler.rb",
|
41
45
|
"lib/mysql2.rb",
|
@@ -43,16 +47,17 @@ Gem::Specification.new do |s|
|
|
43
47
|
"lib/mysql2/em.rb",
|
44
48
|
"lib/mysql2/error.rb",
|
45
49
|
"lib/mysql2/result.rb",
|
46
|
-
"lib/sequel/adapters/mysql2.rb",
|
47
50
|
"mysql2.gemspec",
|
48
|
-
"spec/active_record/active_record_spec.rb",
|
49
51
|
"spec/em/em_spec.rb",
|
50
52
|
"spec/mysql2/client_spec.rb",
|
51
53
|
"spec/mysql2/error_spec.rb",
|
52
54
|
"spec/mysql2/result_spec.rb",
|
53
55
|
"spec/rcov.opts",
|
54
56
|
"spec/spec.opts",
|
55
|
-
"spec/spec_helper.rb"
|
57
|
+
"spec/spec_helper.rb",
|
58
|
+
"tasks/benchmarks.rake",
|
59
|
+
"tasks/compile.rake",
|
60
|
+
"tasks/vendor_mysql.rake"
|
56
61
|
]
|
57
62
|
s.homepage = %q{http://github.com/brianmario/mysql2}
|
58
63
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -60,13 +65,13 @@ Gem::Specification.new do |s|
|
|
60
65
|
s.rubygems_version = %q{1.3.7}
|
61
66
|
s.summary = %q{A simple, fast Mysql library for Ruby, binding to libmysql}
|
62
67
|
s.test_files = [
|
63
|
-
"spec/
|
64
|
-
"spec/em/em_spec.rb",
|
68
|
+
"spec/em/em_spec.rb",
|
65
69
|
"spec/mysql2/client_spec.rb",
|
66
70
|
"spec/mysql2/error_spec.rb",
|
67
71
|
"spec/mysql2/result_spec.rb",
|
68
72
|
"spec/spec_helper.rb",
|
69
|
-
"examples/eventmachine.rb"
|
73
|
+
"examples/eventmachine.rb",
|
74
|
+
"examples/threaded.rb"
|
70
75
|
]
|
71
76
|
|
72
77
|
if s.respond_to? :specification_version then
|
data/spec/mysql2/client_spec.rb
CHANGED
@@ -14,6 +14,10 @@ describe Mysql2::Client do
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
it "should have a global default_query_options hash" do
|
18
|
+
Mysql2::Client.should respond_to(:default_query_options)
|
19
|
+
end
|
20
|
+
|
17
21
|
it "should be able to connect via SSL options" do
|
18
22
|
pending("DON'T WORRY, THIS TEST PASSES :) - but is machine-specific. You need to have MySQL running with SSL configured and enabled. Then update the paths in this test to your needs and remove the pending state.")
|
19
23
|
ssl_client = nil
|
@@ -38,26 +42,46 @@ describe Mysql2::Client do
|
|
38
42
|
end
|
39
43
|
|
40
44
|
it "should respond to #close" do
|
41
|
-
@client.should respond_to
|
45
|
+
@client.should respond_to(:close)
|
42
46
|
end
|
43
47
|
|
44
48
|
it "should be able to close properly" do
|
45
49
|
@client.close.should be_nil
|
46
50
|
end
|
47
51
|
|
48
|
-
it "should
|
49
|
-
@client.
|
50
|
-
lambda {
|
51
|
-
@client.close
|
52
|
-
}.should raise_error(Mysql2::Error)
|
52
|
+
it "should respond to #query" do
|
53
|
+
@client.should respond_to(:query)
|
53
54
|
end
|
54
55
|
|
55
|
-
|
56
|
-
|
56
|
+
context "#query" do
|
57
|
+
it "should accept an options hash that inherits from Mysql2::Client.default_query_options" do
|
58
|
+
@client.query "SELECT 1", :something => :else
|
59
|
+
@client.query_options.should eql(@client.query_options.merge(:something => :else))
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should return results as a hash by default" do
|
63
|
+
@client.query("SELECT 1").first.class.should eql(Hash)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should be able to return results as an array" do
|
67
|
+
@client.query("SELECT 1", :as => :array).first.class.should eql(Array)
|
68
|
+
@client.query("SELECT 1").each(:as => :array)
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should be able to return results with symbolized keys" do
|
72
|
+
@client.query("SELECT 1", :symbolize_keys => true).first.keys[0].class.should eql(Symbol)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "should not allow another query to be sent without fetching a result first" do
|
76
|
+
@client.query("SELECT 1", :async => true)
|
77
|
+
lambda {
|
78
|
+
@client.query("SELECT 1")
|
79
|
+
}.should raise_error(Mysql2::Error)
|
80
|
+
end
|
57
81
|
end
|
58
82
|
|
59
83
|
it "should respond to #escape" do
|
60
|
-
@client.should respond_to
|
84
|
+
@client.should respond_to(:escape)
|
61
85
|
end
|
62
86
|
|
63
87
|
it "#escape should return a new SQL-escape version of the passed string" do
|
@@ -70,7 +94,7 @@ describe Mysql2::Client do
|
|
70
94
|
end
|
71
95
|
|
72
96
|
it "should respond to #info" do
|
73
|
-
@client.should respond_to
|
97
|
+
@client.should respond_to(:info)
|
74
98
|
end
|
75
99
|
|
76
100
|
it "#info should return a hash containing the client version ID and String" do
|
@@ -102,7 +126,7 @@ describe Mysql2::Client do
|
|
102
126
|
end
|
103
127
|
|
104
128
|
it "should respond to #server_info" do
|
105
|
-
@client.should respond_to
|
129
|
+
@client.should respond_to(:server_info)
|
106
130
|
end
|
107
131
|
|
108
132
|
it "#server_info should return a hash containing the client version ID and String" do
|
@@ -134,7 +158,7 @@ describe Mysql2::Client do
|
|
134
158
|
end
|
135
159
|
|
136
160
|
it "should respond to #socket" do
|
137
|
-
@client.should respond_to
|
161
|
+
@client.should respond_to(:socket)
|
138
162
|
end
|
139
163
|
|
140
164
|
it "#socket should return a Fixnum (file descriptor from C)" do
|
@@ -152,6 +176,20 @@ describe Mysql2::Client do
|
|
152
176
|
}.should_not raise_error(Mysql2::Error)
|
153
177
|
end
|
154
178
|
|
179
|
+
it "threaded queries should be supported" do
|
180
|
+
threads, results = [], {}
|
181
|
+
connect = lambda{ Mysql2::Client.new(:host => "localhost", :username => "root") }
|
182
|
+
Timeout.timeout(0.7) do
|
183
|
+
5.times {
|
184
|
+
threads << Thread.new do
|
185
|
+
results[Thread.current.object_id] = connect.call.query("SELECT sleep(0.5) as result")
|
186
|
+
end
|
187
|
+
}
|
188
|
+
end
|
189
|
+
threads.each{|t| t.join }
|
190
|
+
results.keys.sort.should eql(threads.map{|t| t.object_id }.sort)
|
191
|
+
end
|
192
|
+
|
155
193
|
it "evented async queries should be supported" do
|
156
194
|
# should immediately return nil
|
157
195
|
@client.query("SELECT sleep(0.1)", :async => true).should eql(nil)
|
data/spec/mysql2/result_spec.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe Mysql2::Result do
|
5
|
-
before(:
|
5
|
+
before(:each) do
|
6
6
|
@client = Mysql2::Client.new :host => "localhost", :username => "root"
|
7
7
|
end
|
8
8
|
|
@@ -15,7 +15,7 @@ describe Mysql2::Result do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it "should respond to #each" do
|
18
|
-
@result.should respond_to
|
18
|
+
@result.should respond_to(:each)
|
19
19
|
end
|
20
20
|
|
21
21
|
it "should raise a Mysql2::Error exception upon a bad query" do
|
@@ -37,18 +37,23 @@ describe Mysql2::Result do
|
|
37
37
|
|
38
38
|
it "should yield rows as hash's with symbol keys if :symbolize_keys was set to true" do
|
39
39
|
@result.each(:symbolize_keys => true) do |row|
|
40
|
-
row.class.should eql(Hash)
|
41
40
|
row.keys.first.class.should eql(Symbol)
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
44
|
+
it "should be able to return results as an array" do
|
45
|
+
@result.each(:as => :array) do |row|
|
46
|
+
row.class.should eql(Array)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
45
50
|
it "should cache previously yielded results" do
|
46
51
|
@result.first.should eql(@result.first)
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
50
55
|
context "#fields" do
|
51
|
-
before(:
|
56
|
+
before(:each) do
|
52
57
|
@client.query "USE test"
|
53
58
|
@test_result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1")
|
54
59
|
end
|
@@ -64,67 +69,11 @@ describe Mysql2::Result do
|
|
64
69
|
end
|
65
70
|
|
66
71
|
context "row data type mapping" do
|
67
|
-
before(:
|
72
|
+
before(:each) do
|
68
73
|
@client.query "USE test"
|
69
|
-
@client.query %[
|
70
|
-
CREATE TABLE IF NOT EXISTS mysql2_test (
|
71
|
-
id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
72
|
-
null_test VARCHAR(10),
|
73
|
-
bit_test BIT(64),
|
74
|
-
tiny_int_test TINYINT,
|
75
|
-
small_int_test SMALLINT,
|
76
|
-
medium_int_test MEDIUMINT,
|
77
|
-
int_test INT,
|
78
|
-
big_int_test BIGINT,
|
79
|
-
float_test FLOAT(10,3),
|
80
|
-
double_test DOUBLE(10,3),
|
81
|
-
decimal_test DECIMAL(10,3),
|
82
|
-
date_test DATE,
|
83
|
-
date_time_test DATETIME,
|
84
|
-
timestamp_test TIMESTAMP,
|
85
|
-
time_test TIME,
|
86
|
-
year_test YEAR(4),
|
87
|
-
char_test CHAR(10),
|
88
|
-
varchar_test VARCHAR(10),
|
89
|
-
binary_test BINARY(10),
|
90
|
-
varbinary_test VARBINARY(10),
|
91
|
-
tiny_blob_test TINYBLOB,
|
92
|
-
tiny_text_test TINYTEXT,
|
93
|
-
blob_test BLOB,
|
94
|
-
text_test TEXT,
|
95
|
-
medium_blob_test MEDIUMBLOB,
|
96
|
-
medium_text_test MEDIUMTEXT,
|
97
|
-
long_blob_test LONGBLOB,
|
98
|
-
long_text_test LONGTEXT,
|
99
|
-
enum_test ENUM('val1', 'val2'),
|
100
|
-
set_test SET('val1', 'val2'),
|
101
|
-
PRIMARY KEY (id)
|
102
|
-
)
|
103
|
-
]
|
104
|
-
@client.query %[
|
105
|
-
INSERT INTO mysql2_test (
|
106
|
-
null_test, bit_test, tiny_int_test, small_int_test, medium_int_test, int_test, big_int_test,
|
107
|
-
float_test, double_test, decimal_test, date_test, date_time_test, timestamp_test, time_test,
|
108
|
-
year_test, char_test, varchar_test, binary_test, varbinary_test, tiny_blob_test,
|
109
|
-
tiny_text_test, blob_test, text_test, medium_blob_test, medium_text_test,
|
110
|
-
long_blob_test, long_text_test, enum_test, set_test
|
111
|
-
)
|
112
|
-
|
113
|
-
VALUES (
|
114
|
-
NULL, b'101', 1, 10, 10, 10, 10,
|
115
|
-
10.3, 10.3, 10.3, '2010-4-4', '2010-4-4 11:44:00', '2010-4-4 11:44:00', '11:44:00',
|
116
|
-
2009, "test", "test", "test", "test", "test",
|
117
|
-
"test", "test", "test", "test", "test",
|
118
|
-
"test", "test", 'val1', 'val1,val2'
|
119
|
-
)
|
120
|
-
]
|
121
74
|
@test_result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
|
122
75
|
end
|
123
76
|
|
124
|
-
after(:all) do
|
125
|
-
@client.query("DELETE FROM mysql2_test WHERE id=#{@test_result['id']}")
|
126
|
-
end
|
127
|
-
|
128
77
|
it "should return nil for a NULL value" do
|
129
78
|
@test_result['null_test'].class.should eql(NilClass)
|
130
79
|
@test_result['null_test'].should eql(nil)
|
@@ -140,6 +89,20 @@ describe Mysql2::Result do
|
|
140
89
|
@test_result['tiny_int_test'].should eql(1)
|
141
90
|
end
|
142
91
|
|
92
|
+
it "should return TrueClass or FalseClass for a TINYINT value if :cast_booleans is enabled" do
|
93
|
+
@client.query 'INSERT INTO mysql2_test (bool_cast_test) VALUES (1)'
|
94
|
+
id1 = @client.last_id
|
95
|
+
@client.query 'INSERT INTO mysql2_test (bool_cast_test) VALUES (0)'
|
96
|
+
id2 = @client.last_id
|
97
|
+
|
98
|
+
result1 = @client.query 'SELECT bool_cast_test FROM mysql2_test WHERE bool_cast_test = 1 LIMIT 1', :cast_booleans => true
|
99
|
+
result2 = @client.query 'SELECT bool_cast_test FROM mysql2_test WHERE bool_cast_test = 0 LIMIT 1', :cast_booleans => true
|
100
|
+
result1.first['bool_cast_test'].should be_true
|
101
|
+
result2.first['bool_cast_test'].should be_false
|
102
|
+
|
103
|
+
@client.query "DELETE from mysql2_test WHERE id IN(#{id1},#{id2})"
|
104
|
+
end
|
105
|
+
|
143
106
|
it "should return Fixnum for a SMALLINT value" do
|
144
107
|
[Fixnum, Bignum].should include(@test_result['small_int_test'].class)
|
145
108
|
@test_result['small_int_test'].should eql(10)
|
@@ -192,11 +155,7 @@ describe Mysql2::Result do
|
|
192
155
|
|
193
156
|
it "should return Time for a TIME value" do
|
194
157
|
@test_result['time_test'].class.should eql(Time)
|
195
|
-
|
196
|
-
@test_result['time_test'].strftime("%F %T").should eql('0000-01-01 11:44:00')
|
197
|
-
else
|
198
|
-
@test_result['time_test'].strftime("%F %T").should eql('2000-01-01 11:44:00')
|
199
|
-
end
|
158
|
+
@test_result['time_test'].strftime("%F %T").should eql('2000-01-01 11:44:00')
|
200
159
|
end
|
201
160
|
|
202
161
|
it "should return Date for a DATE value" do
|
data/spec/spec_helper.rb
CHANGED
@@ -3,3 +3,65 @@ $LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/..')
|
|
3
3
|
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
4
|
|
5
5
|
require 'mysql2'
|
6
|
+
require 'timeout'
|
7
|
+
|
8
|
+
Spec::Runner.configure do |config|
|
9
|
+
config.before(:all) do
|
10
|
+
client = Mysql2::Client.new :database => 'test'
|
11
|
+
client.query %[
|
12
|
+
CREATE TABLE IF NOT EXISTS mysql2_test (
|
13
|
+
id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
14
|
+
null_test VARCHAR(10),
|
15
|
+
bit_test BIT(64),
|
16
|
+
tiny_int_test TINYINT,
|
17
|
+
bool_cast_test TINYINT(1),
|
18
|
+
small_int_test SMALLINT,
|
19
|
+
medium_int_test MEDIUMINT,
|
20
|
+
int_test INT,
|
21
|
+
big_int_test BIGINT,
|
22
|
+
float_test FLOAT(10,3),
|
23
|
+
float_zero_test FLOAT(10,3),
|
24
|
+
double_test DOUBLE(10,3),
|
25
|
+
decimal_test DECIMAL(10,3),
|
26
|
+
decimal_zero_test DECIMAL(10,3),
|
27
|
+
date_test DATE,
|
28
|
+
date_time_test DATETIME,
|
29
|
+
timestamp_test TIMESTAMP,
|
30
|
+
time_test TIME,
|
31
|
+
year_test YEAR(4),
|
32
|
+
char_test CHAR(10),
|
33
|
+
varchar_test VARCHAR(10),
|
34
|
+
binary_test BINARY(10),
|
35
|
+
varbinary_test VARBINARY(10),
|
36
|
+
tiny_blob_test TINYBLOB,
|
37
|
+
tiny_text_test TINYTEXT,
|
38
|
+
blob_test BLOB,
|
39
|
+
text_test TEXT,
|
40
|
+
medium_blob_test MEDIUMBLOB,
|
41
|
+
medium_text_test MEDIUMTEXT,
|
42
|
+
long_blob_test LONGBLOB,
|
43
|
+
long_text_test LONGTEXT,
|
44
|
+
enum_test ENUM('val1', 'val2'),
|
45
|
+
set_test SET('val1', 'val2'),
|
46
|
+
PRIMARY KEY (id)
|
47
|
+
)
|
48
|
+
]
|
49
|
+
client.query %[
|
50
|
+
INSERT INTO mysql2_test (
|
51
|
+
null_test, bit_test, tiny_int_test, bool_cast_test, small_int_test, medium_int_test, int_test, big_int_test,
|
52
|
+
float_test, float_zero_test, double_test, decimal_test, decimal_zero_test, date_test, date_time_test, timestamp_test, time_test,
|
53
|
+
year_test, char_test, varchar_test, binary_test, varbinary_test, tiny_blob_test,
|
54
|
+
tiny_text_test, blob_test, text_test, medium_blob_test, medium_text_test,
|
55
|
+
long_blob_test, long_text_test, enum_test, set_test
|
56
|
+
)
|
57
|
+
|
58
|
+
VALUES (
|
59
|
+
NULL, b'101', 1, 1, 10, 10, 10, 10,
|
60
|
+
10.3, 0, 10.3, 10.3, 0, '2010-4-4', '2010-4-4 11:44:00', '2010-4-4 11:44:00', '11:44:00',
|
61
|
+
2009, "test", "test", "test", "test", "test",
|
62
|
+
"test", "test", "test", "test", "test",
|
63
|
+
"test", "test", 'val1', 'val1,val2'
|
64
|
+
)
|
65
|
+
]
|
66
|
+
end
|
67
|
+
end
|
data/tasks/compile.rake
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
gem 'rake-compiler', '~> 0.7.1'
|
2
|
+
require "rake/extensiontask"
|
3
|
+
|
4
|
+
MYSQL_VERSION = "5.1.49"
|
5
|
+
MYSQL_MIRROR = ENV['MYSQL_MIRROR'] || "http://mysql.localhost.net.ar"
|
6
|
+
|
7
|
+
Rake::ExtensionTask.new("mysql2", JEWELER.gemspec) 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
|
+
# automatically add build options to avoid need of manual input
|
12
|
+
if RUBY_PLATFORM =~ /mswin|mingw/ then
|
13
|
+
ext.config_options << "--with-mysql-include=#{mysql_lib}/include"
|
14
|
+
ext.config_options << "--with-mysql-lib=#{mysql_lib}/lib/opt"
|
15
|
+
end
|
16
|
+
|
17
|
+
ext.lib_dir = File.join 'lib', 'mysql2'
|
18
|
+
end
|
19
|
+
Rake::Task[:spec].prerequisites << :compile
|