do_mysql 0.9.11 → 0.9.12
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +1 -1
- data/Manifest.txt +15 -4
- data/Rakefile +7 -122
- data/ext/do_mysql_ext/do_mysql_ext.c +154 -99
- data/ext/do_mysql_ext/extconf.rb +1 -0
- data/lib/do_mysql.rb +5 -2
- data/lib/do_mysql/version.rb +1 -1
- data/spec/command_spec.rb +9 -0
- data/spec/connection_spec.rb +19 -0
- data/spec/encoding_spec.rb +8 -0
- data/spec/lib/rspec_immediate_feedback_formatter.rb +3 -0
- data/spec/reader_spec.rb +8 -0
- data/spec/result_spec.rb +9 -0
- data/spec/spec_helper.rb +38 -47
- data/spec/typecast/array_spec.rb +8 -0
- data/spec/typecast/bigdecimal_spec.rb +9 -0
- data/spec/typecast/boolean_spec.rb +9 -0
- data/spec/typecast/byte_array_spec.rb +8 -0
- data/spec/typecast/class_spec.rb +8 -0
- data/spec/typecast/date_spec.rb +9 -0
- data/spec/typecast/datetime_spec.rb +9 -0
- data/spec/typecast/float_spec.rb +9 -0
- data/spec/typecast/integer_spec.rb +8 -0
- data/spec/typecast/nil_spec.rb +10 -0
- data/spec/typecast/range_spec.rb +8 -0
- data/spec/typecast/string_spec.rb +8 -0
- data/spec/typecast/time_spec.rb +8 -0
- data/tasks/gem.rake +60 -0
- data/tasks/install.rake +15 -0
- data/tasks/native.rake +31 -0
- data/tasks/release.rake +75 -0
- data/tasks/retrieve.rake +67 -0
- data/tasks/spec.rake +18 -0
- metadata +72 -40
- data/.gitignore +0 -0
- data/buildfile +0 -27
- data/ext-java/src/main/java/DoMysqlExtService.java +0 -23
- data/ext-java/src/main/java/do_mysql/MySqlDriverDefinition.java +0 -22
- data/ext/.gitignore +0 -2
- data/spec/integration/do_mysql_spec.rb +0 -341
- data/spec/integration/logging_spec.rb +0 -52
- data/spec/integration/quoting_spec.rb +0 -45
- data/spec/spec.opts +0 -2
- data/spec/unit/transaction_spec.rb +0 -35
data/ext/do_mysql_ext/extconf.rb
CHANGED
@@ -32,6 +32,7 @@ end
|
|
32
32
|
# ruby extconf.rb --with-mysql-config=/path/to/mysql_config
|
33
33
|
if RUBY_PLATFORM =~ /mswin|mingw/
|
34
34
|
dir_config('mysql')
|
35
|
+
have_header 'my_global.h'
|
35
36
|
have_header 'mysql.h' || exit(1)
|
36
37
|
have_library 'libmysql' || exit(1)
|
37
38
|
have_func('mysql_query', 'mysql.h') || exit(1)
|
data/lib/do_mysql.rb
CHANGED
@@ -30,8 +30,11 @@ if RUBY_PLATFORM =~ /java/
|
|
30
30
|
|
31
31
|
def character_set
|
32
32
|
# JDBC API does not provide an easy way to get the current character set
|
33
|
-
|
34
|
-
|
33
|
+
reader = self.create_command("SHOW VARIABLES LIKE 'character_set_client'").execute_reader
|
34
|
+
reader.next!
|
35
|
+
char_set = reader.values[1]
|
36
|
+
reader.close
|
37
|
+
char_set.downcase
|
35
38
|
end
|
36
39
|
|
37
40
|
end
|
data/lib/do_mysql/version.rb
CHANGED
@@ -0,0 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
4
|
+
require 'data_objects/spec/command_spec'
|
5
|
+
|
6
|
+
describe DataObjects::Mysql::Command do
|
7
|
+
it_should_behave_like 'a Command'
|
8
|
+
it_should_behave_like 'a Command with async'
|
9
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
4
|
+
require 'data_objects/spec/connection_spec'
|
5
|
+
|
6
|
+
describe DataObjects::Mysql::Connection do
|
7
|
+
|
8
|
+
before :all do
|
9
|
+
@driver = CONFIG.scheme
|
10
|
+
@user = CONFIG.user
|
11
|
+
@password = CONFIG.pass
|
12
|
+
@host = CONFIG.host
|
13
|
+
@port = CONFIG.port
|
14
|
+
@database = CONFIG.database
|
15
|
+
end
|
16
|
+
|
17
|
+
it_should_behave_like 'a Connection'
|
18
|
+
#it_should_behave_like 'a Connection with authentication support'
|
19
|
+
end
|
data/spec/reader_spec.rb
ADDED
data/spec/result_spec.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
4
|
+
require 'data_objects/spec/result_spec'
|
5
|
+
|
6
|
+
describe DataObjects::Mysql::Result do
|
7
|
+
it_should_behave_like 'a Result'
|
8
|
+
it_should_behave_like 'a Result which returns inserted keys'
|
9
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,7 +3,7 @@ JRUBY = RUBY_PLATFORM =~ /java/
|
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
5
|
|
6
|
-
gem 'rspec', '
|
6
|
+
gem 'rspec', '>1.1.12'
|
7
7
|
require 'spec'
|
8
8
|
|
9
9
|
require 'date'
|
@@ -16,6 +16,9 @@ require 'fileutils'
|
|
16
16
|
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data_objects', 'lib'))
|
17
17
|
require 'data_objects'
|
18
18
|
|
19
|
+
DATAOBJECTS_SPEC_ROOT = Pathname(__FILE__).dirname.parent.parent + 'data_objects' + 'spec'
|
20
|
+
Pathname.glob((DATAOBJECTS_SPEC_ROOT + 'lib/**/*.rb').to_s).each { |f| require f }
|
21
|
+
|
19
22
|
if JRUBY
|
20
23
|
$:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'do_jdbc', 'lib'))
|
21
24
|
require 'do_jdbc'
|
@@ -32,57 +35,39 @@ DataObjects::Mysql.logger = DataObjects::Logger.new(log_path, :debug)
|
|
32
35
|
|
33
36
|
at_exit { DataObjects.logger.flush }
|
34
37
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
MYSQL.host = ENV['DO_MYSQL_HOST'] || '127.0.0.1'
|
39
|
-
MYSQL.hostname = ENV['DO_MYSQL_HOSTNAME'] || 'localhost'
|
40
|
-
MYSQL.port = ENV['DO_MYSQL_PORT'] || '3306'
|
41
|
-
MYSQL.database = ENV['DO_MYSQL_DATABASE'] || 'do_mysql_test'
|
42
|
-
MYSQL.socket = ENV['DO_MYSQL_SOCKET'] || '/tmp/mysql.sock'
|
43
|
-
|
44
|
-
DO_MYSQL_SPEC_URI = Addressable::URI::parse(ENV["DO_MYSQL_SPEC_URI"] ||
|
45
|
-
"mysql://#{MYSQL.user}:#{MYSQL.pass}@#{MYSQL.host}:#{MYSQL.port}/#{MYSQL.database}")
|
46
|
-
|
47
|
-
module MysqlSpecHelpers
|
48
|
-
def insert(query, *args)
|
49
|
-
result = @secondary_connection.create_command(query).execute_non_query(*args)
|
50
|
-
result.insert_id
|
51
|
-
end
|
38
|
+
Spec::Runner.configure do |config|
|
39
|
+
config.include(DataObjects::Spec::PendingHelpers)
|
40
|
+
end
|
52
41
|
|
53
|
-
|
54
|
-
|
55
|
-
|
42
|
+
CONFIG = OpenStruct.new
|
43
|
+
CONFIG.scheme = 'mysql'
|
44
|
+
CONFIG.user = ENV['DO_MYSQL_USER'] || 'root'
|
45
|
+
CONFIG.pass = ENV['DO_MYSQL_PASS'] || ''
|
46
|
+
CONFIG.host = ENV['DO_MYSQL_HOST'] || 'localhost'
|
47
|
+
CONFIG.port = ENV['DO_MYSQL_PORT'] || '3306'
|
48
|
+
CONFIG.database = ENV['DO_MYSQL_DATABASE'] || '/do_test'
|
56
49
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
reader = command.execute_reader(*args)
|
62
|
-
reader.next!
|
63
|
-
yield reader if block_given?
|
64
|
-
ensure
|
65
|
-
reader.close if reader
|
66
|
-
end
|
67
|
-
end
|
50
|
+
CONFIG.uri = ENV["DO_MYSQL_SPEC_URI"] ||"#{CONFIG.scheme}://#{CONFIG.user}:#{CONFIG.pass}@#{CONFIG.host}:#{CONFIG.port}#{CONFIG.database}"
|
51
|
+
CONFIG.sleep = "SELECT sleep(1)"
|
52
|
+
|
53
|
+
module DataObjectsSpecHelpers
|
68
54
|
|
69
55
|
def setup_test_environment
|
70
|
-
|
71
|
-
@secondary_connection = DataObjects::Connection.new(DO_MYSQL_SPEC_URI)
|
56
|
+
conn = DataObjects::Connection.new(CONFIG.uri)
|
72
57
|
|
73
|
-
|
58
|
+
conn.create_command(<<-EOF).execute_non_query
|
74
59
|
DROP TABLE IF EXISTS `invoices`
|
75
60
|
EOF
|
76
61
|
|
77
|
-
|
62
|
+
conn.create_command(<<-EOF).execute_non_query
|
78
63
|
DROP TABLE IF EXISTS `users`
|
79
64
|
EOF
|
80
65
|
|
81
|
-
|
66
|
+
conn.create_command(<<-EOF).execute_non_query
|
82
67
|
DROP TABLE IF EXISTS `widgets`
|
83
68
|
EOF
|
84
69
|
|
85
|
-
|
70
|
+
conn.create_command(<<-EOF).execute_non_query
|
86
71
|
CREATE TABLE `users` (
|
87
72
|
`id` int(11) NOT NULL auto_increment,
|
88
73
|
`name` varchar(200) default 'Billy' NULL,
|
@@ -91,7 +76,7 @@ module MysqlSpecHelpers
|
|
91
76
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
92
77
|
EOF
|
93
78
|
|
94
|
-
|
79
|
+
conn.create_command(<<-EOF).execute_non_query
|
95
80
|
CREATE TABLE `invoices` (
|
96
81
|
`id` int(11) NOT NULL auto_increment,
|
97
82
|
`invoice_number` varchar(50) NOT NULL,
|
@@ -99,7 +84,7 @@ module MysqlSpecHelpers
|
|
99
84
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
100
85
|
EOF
|
101
86
|
|
102
|
-
|
87
|
+
conn.create_command(<<-EOF).execute_non_query
|
103
88
|
CREATE TABLE `widgets` (
|
104
89
|
`id` int(11) NOT NULL auto_increment,
|
105
90
|
`code` char(8) default 'A14' NULL,
|
@@ -116,7 +101,7 @@ module MysqlSpecHelpers
|
|
116
101
|
`number_sold` mediumint default 0,
|
117
102
|
`super_number` bigint default 9223372036854775807,
|
118
103
|
`weight` float default 1.23,
|
119
|
-
`cost1` double
|
104
|
+
`cost1` double default 10.23,
|
120
105
|
`cost2` decimal(8,2) default 50.23,
|
121
106
|
`release_date` date default '2008-02-14',
|
122
107
|
`release_datetime` datetime default '2008-02-14 00:31:12',
|
@@ -127,15 +112,21 @@ module MysqlSpecHelpers
|
|
127
112
|
EOF
|
128
113
|
|
129
114
|
1.upto(16) do |n|
|
130
|
-
|
131
|
-
insert into widgets(code, name, shelf_location, description, image_data, ad_description, ad_image, whitepaper_text, cad_drawing, super_number) VALUES ('W#{n.to_s.rjust(7,"0")}', 'Widget #{n}', 'A14', 'This is a description', 'IMAGE DATA', 'Buy this product now!', 'AD IMAGE DATA', '
|
115
|
+
conn.create_command(<<-EOF).execute_non_query
|
116
|
+
insert into widgets(code, name, shelf_location, description, image_data, ad_description, ad_image, whitepaper_text, cad_drawing, super_number, weight) VALUES ('W#{n.to_s.rjust(7,"0")}', 'Widget #{n}', 'A14', 'This is a description', 'IMAGE DATA', 'Buy this product now!', 'AD IMAGE DATA', 'String', 'CAD \001 \000 DRAWING', 1234, 13.4);
|
132
117
|
EOF
|
133
118
|
end
|
134
119
|
|
135
|
-
|
120
|
+
conn.create_command(<<-EOF).execute_non_query
|
121
|
+
update widgets set flags = 1 where id = 2
|
122
|
+
EOF
|
123
|
+
|
124
|
+
conn.create_command(<<-EOF).execute_non_query
|
125
|
+
update widgets set ad_description = NULL where id = 3
|
126
|
+
EOF
|
127
|
+
|
128
|
+
conn.close
|
136
129
|
|
137
|
-
def teardown_test_environment
|
138
|
-
@connection.close
|
139
|
-
@secondary_connection.close
|
140
130
|
end
|
131
|
+
|
141
132
|
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
4
|
+
require 'data_objects/spec/typecast/bigdecimal_spec'
|
5
|
+
|
6
|
+
describe 'DataObjects::Mysql with BigDecimal' do
|
7
|
+
it_should_behave_like 'supporting BigDecimal'
|
8
|
+
it_should_behave_like 'supporting BigDecimal autocasting'
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
4
|
+
require 'data_objects/spec/typecast/boolean_spec'
|
5
|
+
|
6
|
+
describe 'DataObjects::Mysql with Boolean' do
|
7
|
+
it_should_behave_like 'supporting Boolean'
|
8
|
+
it_should_behave_like 'supporting Boolean autocasting'
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
4
|
+
require 'data_objects/spec/typecast/date_spec'
|
5
|
+
|
6
|
+
describe 'DataObjects::Mysql with Date' do
|
7
|
+
it_should_behave_like 'supporting Date'
|
8
|
+
it_should_behave_like 'supporting Date autocasting'
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
4
|
+
require 'data_objects/spec/typecast/datetime_spec'
|
5
|
+
|
6
|
+
describe 'DataObjects::Mysql with DateTime' do
|
7
|
+
it_should_behave_like 'supporting DateTime'
|
8
|
+
it_should_behave_like 'supporting DateTime autocasting'
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
4
|
+
require 'data_objects/spec/typecast/float_spec'
|
5
|
+
|
6
|
+
describe 'DataObjects::Mysql with Float' do
|
7
|
+
it_should_behave_like 'supporting Float'
|
8
|
+
it_should_behave_like 'supporting Float autocasting'
|
9
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
4
|
+
require 'data_objects/spec/typecast/nil_spec'
|
5
|
+
|
6
|
+
describe 'DataObjects::Mysql with Nil' do
|
7
|
+
it_should_behave_like 'supporting Nil'
|
8
|
+
it_should_behave_like 'supporting writing an Nil'
|
9
|
+
it_should_behave_like 'supporting Nil autocasting'
|
10
|
+
end
|
data/tasks/gem.rake
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
require 'rubygems/package_task'
|
2
|
+
|
3
|
+
GEM_SPEC = Gem::Specification.new do |s|
|
4
|
+
# basic information
|
5
|
+
s.name = "do_mysql"
|
6
|
+
s.version = DataObjects::Mysql::VERSION
|
7
|
+
|
8
|
+
# description and details
|
9
|
+
s.summary = 'DataObjects MySQL Driver'
|
10
|
+
s.description = "Implements the DataObjects API for MySQL"
|
11
|
+
|
12
|
+
# dependencies
|
13
|
+
s.add_dependency "addressable", "~>2.0.0"
|
14
|
+
s.add_dependency "extlib", "~>0.9.12"
|
15
|
+
s.add_dependency "data_objects", DataObjects::Mysql::VERSION
|
16
|
+
|
17
|
+
if JRUBY
|
18
|
+
s.add_dependency "jdbc-mysql", ">=5.0.4"
|
19
|
+
s.add_dependency "do_jdbc", DataObjects::Mysql::VERSION
|
20
|
+
s.platform = "java"
|
21
|
+
# components, files and paths
|
22
|
+
s.files = FileList["lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake",
|
23
|
+
"LICENSE", "Rakefile", "*.{rdoc,txt,yml}", "lib/*.jar"]
|
24
|
+
else
|
25
|
+
s.platform = Gem::Platform::RUBY
|
26
|
+
s.extensions << 'ext/do_mysql_ext/extconf.rb'
|
27
|
+
s.files = FileList["lib/**/*.rb", "spec/**/*.rb", "tasks/**/*.rake", "ext/**/*.{rb,c}",
|
28
|
+
"LICENSE", "Rakefile", "*.{rdoc,txt,yml}"]
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
# development dependencies
|
33
|
+
s.add_development_dependency 'rspec', '~>1.2.0'
|
34
|
+
|
35
|
+
s.require_path = 'lib'
|
36
|
+
|
37
|
+
# documentation
|
38
|
+
s.has_rdoc = false
|
39
|
+
|
40
|
+
# project information
|
41
|
+
s.homepage = 'http://github.com/datamapper/do'
|
42
|
+
s.rubyforge_project = 'dorb'
|
43
|
+
|
44
|
+
# author and contributors
|
45
|
+
s.author = 'Dirkjan Bussink'
|
46
|
+
s.email = 'd.bussink@gmail.com'
|
47
|
+
end
|
48
|
+
|
49
|
+
gem_package = Gem::PackageTask.new(GEM_SPEC) do |pkg|
|
50
|
+
pkg.need_tar = false
|
51
|
+
pkg.need_zip = false
|
52
|
+
end
|
53
|
+
|
54
|
+
file "#{GEM_SPEC.name}.gemspec" => ['Rakefile', 'tasks/gem.rake'] do |t|
|
55
|
+
puts "Generating #{t.name}"
|
56
|
+
File.open(t.name, 'w') { |f| f.puts GEM_SPEC.to_yaml }
|
57
|
+
end
|
58
|
+
|
59
|
+
desc "Generate or update the standalone gemspec file for the project"
|
60
|
+
task :gemspec => ["#{GEM_SPEC.name}.gemspec"]
|
data/tasks/install.rake
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
def sudo_gem(cmd)
|
2
|
+
sh "#{SUDO} #{RUBY} -S gem #{cmd}", :verbose => false
|
3
|
+
end
|
4
|
+
|
5
|
+
# Installation
|
6
|
+
|
7
|
+
desc "Install #{GEM_SPEC.name} #{GEM_SPEC.version}"
|
8
|
+
task :install => [ :package ] do
|
9
|
+
sudo_gem "install pkg/#{GEM_SPEC.name}-#{GEM_SPEC.version} --no-update-sources"
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Uninstall #{GEM_SPEC.name} #{GEM_SPEC.version}"
|
13
|
+
task :uninstall => [ :clean ] do
|
14
|
+
sudo_gem "uninstall #{GEM_SPEC.name} -v#{GEM_SPEC.version} -I -x"
|
15
|
+
end
|