do_mysql 0.10.0-java → 0.10.1-java
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog.markdown +27 -0
- data/LICENSE +1 -1
- data/README.markdown +104 -3
- data/Rakefile +56 -9
- data/ext/do_mysql/compat.h +55 -0
- data/ext/do_mysql/do_mysql.c +1065 -0
- data/ext/do_mysql/error.h +527 -0
- data/ext/do_mysql/extconf.rb +74 -0
- data/lib/do_mysql.rb +27 -11
- data/lib/do_mysql/do_mysql.jar +0 -0
- data/lib/do_mysql/version.rb +1 -1
- data/spec/command_spec.rb +2 -2
- data/spec/connection_spec.rb +16 -14
- data/spec/encoding_spec.rb +2 -1
- data/spec/reader_spec.rb +1 -1
- data/spec/result_spec.rb +3 -3
- data/spec/spec_helper.rb +21 -31
- data/spec/typecast/array_spec.rb +1 -1
- data/spec/typecast/bigdecimal_spec.rb +2 -2
- data/spec/typecast/boolean_spec.rb +2 -2
- data/spec/typecast/byte_array_spec.rb +1 -1
- data/spec/typecast/class_spec.rb +1 -1
- data/spec/typecast/date_spec.rb +2 -2
- data/spec/typecast/datetime_spec.rb +2 -2
- data/spec/typecast/float_spec.rb +2 -2
- data/spec/typecast/integer_spec.rb +1 -1
- data/spec/typecast/nil_spec.rb +3 -3
- data/spec/typecast/other_spec.rb +8 -0
- data/spec/typecast/range_spec.rb +1 -1
- data/spec/typecast/string_spec.rb +1 -1
- data/spec/typecast/time_spec.rb +1 -1
- data/tasks/compile.rake +65 -0
- data/tasks/release.rake +12 -71
- data/tasks/retrieve.rake +1 -1
- data/tasks/spec.rake +19 -15
- metadata +119 -107
- data/HISTORY.markdown +0 -17
- data/Manifest.txt +0 -32
- data/lib/do_mysql_ext.jar +0 -0
- data/spec/lib/rspec_immediate_feedback_formatter.rb +0 -3
- data/tasks/gem.rake +0 -8
- data/tasks/install.rake +0 -15
- data/tasks/native.rake +0 -31
@@ -0,0 +1,74 @@
|
|
1
|
+
ENV["RC_ARCHS"] = "" if RUBY_PLATFORM =~ /darwin/
|
2
|
+
|
3
|
+
require 'mkmf'
|
4
|
+
|
5
|
+
# Allow for custom compiler to be specified.
|
6
|
+
RbConfig::MAKEFILE_CONFIG['CC'] = ENV['CC'] if ENV['CC']
|
7
|
+
|
8
|
+
# All instances of mysql_config on PATH ...
|
9
|
+
def mysql_config_paths
|
10
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).collect do |path|
|
11
|
+
[ "#{path}/mysql_config", "#{path}/mysql_config5" ].
|
12
|
+
detect { |bin| File.exist?(bin) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# The first mysql_config binary on PATH ...
|
17
|
+
def default_mysql_config_path
|
18
|
+
mysql_config_paths.compact.first
|
19
|
+
end
|
20
|
+
|
21
|
+
def mysql_config(type)
|
22
|
+
IO.popen("#{default_mysql_config_path} --#{type}").readline.chomp rescue nil
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_prefix
|
26
|
+
if mc = default_mysql_config_path
|
27
|
+
File.dirname(File.dirname(mc))
|
28
|
+
else
|
29
|
+
"/usr/local"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# Allow overriding path to mysql_config on command line using:
|
34
|
+
# ruby extconf.rb --with-mysql-config=/path/to/mysql_config
|
35
|
+
if RUBY_PLATFORM =~ /mswin|mingw/
|
36
|
+
dir_config('mysql')
|
37
|
+
have_header 'my_global.h'
|
38
|
+
have_header 'mysql.h' || exit(1)
|
39
|
+
have_library 'libmysql' || exit(1)
|
40
|
+
have_func('mysql_query', 'mysql.h') || exit(1)
|
41
|
+
have_func('mysql_ssl_set', 'mysql.h')
|
42
|
+
elsif mc = with_config('mysql-config', default_mysql_config_path)
|
43
|
+
includes = mysql_config('include').split(/\s+/).map do |dir|
|
44
|
+
dir.gsub(/^-I/, "")
|
45
|
+
end.uniq
|
46
|
+
libs = mysql_config('libs').split(/\s+/).select {|lib| lib =~ /^-L/}.map do |dir|
|
47
|
+
dir.gsub(/^-L/, "")
|
48
|
+
end.uniq
|
49
|
+
dir_config('mysql', includes, libs)
|
50
|
+
else
|
51
|
+
inc, lib = dir_config('mysql', default_prefix)
|
52
|
+
libs = ['m', 'z', 'socket', 'nsl']
|
53
|
+
lib_dirs =
|
54
|
+
[ lib, "/usr/lib", "/usr/local/lib", "/opt/local/lib" ].collect do |path|
|
55
|
+
[ path, "#{path}/mysql", "#{path}/mysql5/mysql" ]
|
56
|
+
end
|
57
|
+
find_library('mysqlclient', 'mysql_query', *lib_dirs.flatten) || exit(1)
|
58
|
+
find_header('mysql.h', *lib_dirs.flatten.map { |p| p.gsub('/lib', '/include') })
|
59
|
+
end
|
60
|
+
|
61
|
+
unless RUBY_PLATFORM =~ /mswin|mingw/
|
62
|
+
have_header 'mysql.h'
|
63
|
+
have_library 'mysqlclient' || exit(1)
|
64
|
+
have_func 'mysql_query' || exit(1)
|
65
|
+
have_func 'mysql_ssl_set'
|
66
|
+
end
|
67
|
+
|
68
|
+
$CFLAGS << ' -Wall ' unless RUBY_PLATFORM =~ /mswin/
|
69
|
+
|
70
|
+
if RUBY_VERSION < '1.8.6'
|
71
|
+
$CFLAGS << ' -DRUBY_LESS_THAN_186'
|
72
|
+
end
|
73
|
+
|
74
|
+
create_makefile('do_mysql/do_mysql')
|
data/lib/do_mysql.rb
CHANGED
@@ -19,26 +19,42 @@ if RUBY_PLATFORM =~ /java/
|
|
19
19
|
|
20
20
|
end
|
21
21
|
|
22
|
-
|
22
|
+
begin
|
23
|
+
require 'do_mysql/do_mysql'
|
24
|
+
rescue LoadError
|
25
|
+
if RUBY_PLATFORM =~ /mingw|mswin/
|
26
|
+
RUBY_VERSION =~ /(\d+.\d+)/
|
27
|
+
require "do_mysql/#{$1}/do_mysql"
|
28
|
+
else
|
29
|
+
raise
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
23
33
|
require 'do_mysql/version'
|
24
|
-
require 'do_mysql/transaction'
|
34
|
+
require 'do_mysql/transaction' if RUBY_PLATFORM !~ /java/
|
25
35
|
require 'do_mysql/encoding'
|
26
36
|
|
27
37
|
if RUBY_PLATFORM =~ /java/
|
28
38
|
|
39
|
+
DataObjects::Mysql::Connection.class_eval do
|
40
|
+
|
41
|
+
def using_socket?
|
42
|
+
@using_socket
|
43
|
+
end
|
44
|
+
|
45
|
+
def secure?
|
46
|
+
false
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
else
|
52
|
+
|
29
53
|
module DataObjects
|
30
54
|
module Mysql
|
31
55
|
class Connection
|
32
|
-
def self.pool_size
|
33
|
-
20
|
34
|
-
end
|
35
|
-
|
36
|
-
def using_socket?
|
37
|
-
@using_socket
|
38
|
-
end
|
39
|
-
|
40
56
|
def secure?
|
41
|
-
|
57
|
+
!(@ssl_cipher.nil? || @ssl_cipher.empty?)
|
42
58
|
end
|
43
59
|
end
|
44
60
|
end
|
Binary file
|
data/lib/do_mysql/version.rb
CHANGED
data/spec/command_spec.rb
CHANGED
@@ -4,6 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/command_spec'
|
5
5
|
|
6
6
|
describe DataObjects::Mysql::Command do
|
7
|
-
|
8
|
-
|
7
|
+
behaves_like 'a Command'
|
8
|
+
behaves_like 'a Command with async'
|
9
9
|
end
|
data/spec/connection_spec.rb
CHANGED
@@ -6,19 +6,21 @@ require 'cgi'
|
|
6
6
|
|
7
7
|
describe DataObjects::Mysql::Connection do
|
8
8
|
|
9
|
-
before
|
10
|
-
@driver
|
11
|
-
@user
|
9
|
+
before do
|
10
|
+
@driver = CONFIG.scheme
|
11
|
+
@user = CONFIG.user
|
12
12
|
@password = CONFIG.pass
|
13
|
-
@host
|
14
|
-
@port
|
13
|
+
@host = CONFIG.host
|
14
|
+
@port = CONFIG.port
|
15
15
|
@database = CONFIG.database
|
16
|
-
@ssl
|
16
|
+
@ssl = CONFIG.ssl
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
behaves_like 'a Connection'
|
20
|
+
behaves_like 'a Connection with authentication support'
|
21
|
+
# FIXME: behaves_like 'a Connection with JDBC URL support' if JRUBY
|
22
|
+
behaves_like 'a Connection with SSL support' unless JRUBY
|
23
|
+
behaves_like 'a Connection via JDNI' if JRUBY
|
22
24
|
|
23
25
|
if DataObjectsSpecHelpers.test_environment_supports_ssl?
|
24
26
|
|
@@ -26,22 +28,22 @@ describe DataObjects::Mysql::Connection do
|
|
26
28
|
|
27
29
|
it 'should raise an error when passed ssl=true' do
|
28
30
|
lambda { DataObjects::Connection.new("#{CONFIG.uri}?ssl=true") }.
|
29
|
-
should
|
31
|
+
should.raise(ArgumentError)
|
30
32
|
end
|
31
33
|
|
32
34
|
it 'should raise an error when passed a nonexistent client certificate' do
|
33
35
|
lambda { DataObjects::Connection.new("#{CONFIG.uri}?ssl[client_cert]=nonexistent") }.
|
34
|
-
should
|
36
|
+
should.raise(ArgumentError)
|
35
37
|
end
|
36
38
|
|
37
39
|
it 'should raise an error when passed a nonexistent client key' do
|
38
40
|
lambda { DataObjects::Connection.new("#{CONFIG.uri}?ssl[client_key]=nonexistent") }.
|
39
|
-
should
|
41
|
+
should.raise(ArgumentError)
|
40
42
|
end
|
41
43
|
|
42
44
|
it 'should raise an error when passed a nonexistent ca certificate' do
|
43
45
|
lambda { DataObjects::Connection.new("#{CONFIG.uri}?ssl[ca_cert]=nonexistent") }.
|
44
|
-
should
|
46
|
+
should.raise(ArgumentError)
|
45
47
|
end
|
46
48
|
|
47
49
|
it 'should connect with a specified SSL cipher' do
|
@@ -51,7 +53,7 @@ describe DataObjects::Mysql::Connection do
|
|
51
53
|
|
52
54
|
it 'should raise an error with an invalid SSL cipher' do
|
53
55
|
lambda { DataObjects::Connection.new("#{CONFIG.uri}?#{CONFIG.ssl}&ssl[cipher]=invalid") }.
|
54
|
-
should
|
56
|
+
should.raise
|
55
57
|
end
|
56
58
|
|
57
59
|
end
|
data/spec/encoding_spec.rb
CHANGED
@@ -4,5 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/encoding_spec'
|
5
5
|
|
6
6
|
describe DataObjects::Mysql::Connection do
|
7
|
-
|
7
|
+
behaves_like 'a driver supporting different encodings'
|
8
|
+
behaves_like 'returning correctly encoded strings for the default encoding'
|
8
9
|
end
|
data/spec/reader_spec.rb
CHANGED
data/spec/result_spec.rb
CHANGED
@@ -4,13 +4,13 @@ require File.expand_path(File.join(File.dirname(__FILE__), 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/result_spec'
|
5
5
|
|
6
6
|
# splitting the descibe into two separate declaration avoids
|
7
|
-
# concurrent execution of the "
|
7
|
+
# concurrent execution of the "behaves_like ....."
|
8
8
|
# needed by some databases (sqlite3)
|
9
9
|
|
10
10
|
describe DataObjects::Mysql::Result do
|
11
|
-
|
11
|
+
behaves_like 'a Result'
|
12
12
|
end
|
13
13
|
|
14
14
|
describe DataObjects::Mysql::Result do
|
15
|
-
|
15
|
+
behaves_like 'a Result which returns inserted keys'
|
16
16
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -2,57 +2,45 @@ $TESTING=true
|
|
2
2
|
JRUBY = RUBY_PLATFORM =~ /java/
|
3
3
|
|
4
4
|
require 'rubygems'
|
5
|
-
|
6
|
-
gem 'rspec', '>1.1.12'
|
7
|
-
require 'spec'
|
8
|
-
|
9
5
|
require 'date'
|
10
6
|
require 'ostruct'
|
11
|
-
require 'pathname'
|
12
7
|
require 'fileutils'
|
8
|
+
require 'win32console' if RUBY_PLATFORM =~ /mingw|mswin/
|
9
|
+
|
10
|
+
driver_lib = File.expand_path('../../lib', __FILE__)
|
11
|
+
$LOAD_PATH.unshift(driver_lib) unless $LOAD_PATH.include?(driver_lib)
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
$LOAD_PATH.unshift do_lib_path unless $LOAD_PATH.include?(do_lib_path)
|
21
|
-
|
22
|
-
if JRUBY
|
23
|
-
jdbc_lib_path = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'do_jdbc', 'lib'))
|
24
|
-
$LOAD_PATH.unshift jdbc_lib_path unless $LOAD_PATH.include?(jdbc_lib_path)
|
25
|
-
require 'do_jdbc'
|
13
|
+
# Prepend data_objects/do_jdbc in the repository to the load path.
|
14
|
+
# DO NOT USE installed gems, except when running the specs from gem.
|
15
|
+
repo_root = File.expand_path('../../..', __FILE__)
|
16
|
+
(['data_objects'] << ('do_jdbc' if JRUBY)).compact.each do |lib|
|
17
|
+
lib_path = "#{repo_root}/#{lib}/lib"
|
18
|
+
$LOAD_PATH.unshift(lib_path) if File.directory?(lib_path) && !$LOAD_PATH.include?(lib_path)
|
26
19
|
end
|
27
20
|
|
28
21
|
require 'data_objects'
|
29
|
-
|
30
|
-
|
31
|
-
Pathname.glob((DATAOBJECTS_SPEC_ROOT + 'lib/**/*.rb').to_s).each { |f| require f }
|
32
|
-
|
22
|
+
require 'data_objects/spec/bacon'
|
23
|
+
require 'data_objects/spec/helpers/ssl'
|
33
24
|
require 'do_mysql'
|
34
25
|
|
35
|
-
|
36
|
-
FileUtils.mkdir_p(File.dirname(log_path))
|
37
|
-
|
38
|
-
DataObjects::Mysql.logger = DataObjects::Logger.new(log_path, :debug)
|
39
|
-
|
26
|
+
DataObjects::Mysql.logger = DataObjects::Logger.new(STDOUT, :off)
|
40
27
|
at_exit { DataObjects.logger.flush }
|
41
28
|
|
42
|
-
Spec::Runner.configure do |config|
|
43
|
-
config.include(DataObjects::Spec::PendingHelpers)
|
44
|
-
end
|
45
|
-
|
46
29
|
CONFIG = OpenStruct.new
|
47
30
|
CONFIG.scheme = 'mysql'
|
48
31
|
CONFIG.user = ENV['DO_MYSQL_USER'] || 'root'
|
49
32
|
CONFIG.pass = ENV['DO_MYSQL_PASS'] || ''
|
33
|
+
CONFIG.user_info = unless CONFIG.user == 'root' && CONFIG.pass.empty?
|
34
|
+
"#{CONFIG.user}:#{CONFIG.pass}@"
|
35
|
+
else
|
36
|
+
''
|
37
|
+
end
|
50
38
|
CONFIG.host = ENV['DO_MYSQL_HOST'] || 'localhost'
|
51
39
|
CONFIG.port = ENV['DO_MYSQL_PORT'] || '3306'
|
52
40
|
CONFIG.database = ENV['DO_MYSQL_DATABASE'] || '/do_test'
|
53
41
|
CONFIG.ssl = SSLHelpers.query(:ca_cert, :client_cert, :client_key)
|
54
42
|
|
55
|
-
CONFIG.uri = ENV["DO_MYSQL_SPEC_URI"] ||"#{CONFIG.scheme}://#{CONFIG.
|
43
|
+
CONFIG.uri = ENV["DO_MYSQL_SPEC_URI"] ||"#{CONFIG.scheme}://#{CONFIG.user_info}#{CONFIG.host}:#{CONFIG.port}#{CONFIG.database}"
|
56
44
|
CONFIG.sleep = "SELECT sleep(1)"
|
57
45
|
|
58
46
|
module DataObjectsSpecHelpers
|
@@ -226,3 +214,5 @@ module DataObjectsSpecHelpers
|
|
226
214
|
end
|
227
215
|
|
228
216
|
end
|
217
|
+
|
218
|
+
include DataObjectsSpecHelpers
|
data/spec/typecast/array_spec.rb
CHANGED
@@ -4,6 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/typecast/bigdecimal_spec'
|
5
5
|
|
6
6
|
describe 'DataObjects::Mysql with BigDecimal' do
|
7
|
-
|
8
|
-
|
7
|
+
behaves_like 'supporting BigDecimal'
|
8
|
+
behaves_like 'supporting BigDecimal autocasting'
|
9
9
|
end
|
@@ -4,6 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/typecast/boolean_spec'
|
5
5
|
|
6
6
|
describe 'DataObjects::Mysql with Boolean' do
|
7
|
-
|
8
|
-
|
7
|
+
behaves_like 'supporting Boolean'
|
8
|
+
behaves_like 'supporting Boolean autocasting'
|
9
9
|
end
|
@@ -4,5 +4,5 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/typecast/byte_array_spec'
|
5
5
|
|
6
6
|
describe 'DataObjects::Mysql with ByteArray' do
|
7
|
-
|
7
|
+
behaves_like 'supporting ByteArray'
|
8
8
|
end
|
data/spec/typecast/class_spec.rb
CHANGED
data/spec/typecast/date_spec.rb
CHANGED
@@ -4,6 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/typecast/date_spec'
|
5
5
|
|
6
6
|
describe 'DataObjects::Mysql with Date' do
|
7
|
-
|
8
|
-
|
7
|
+
behaves_like 'supporting Date'
|
8
|
+
behaves_like 'supporting Date autocasting'
|
9
9
|
end
|
@@ -4,6 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/typecast/datetime_spec'
|
5
5
|
|
6
6
|
describe 'DataObjects::Mysql with DateTime' do
|
7
|
-
|
8
|
-
|
7
|
+
behaves_like 'supporting DateTime'
|
8
|
+
behaves_like 'supporting DateTime autocasting'
|
9
9
|
end
|
data/spec/typecast/float_spec.rb
CHANGED
@@ -4,6 +4,6 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/typecast/float_spec'
|
5
5
|
|
6
6
|
describe 'DataObjects::Mysql with Float' do
|
7
|
-
|
8
|
-
|
7
|
+
behaves_like 'supporting Float'
|
8
|
+
behaves_like 'supporting Float autocasting'
|
9
9
|
end
|
data/spec/typecast/nil_spec.rb
CHANGED
@@ -4,7 +4,7 @@ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
|
4
4
|
require 'data_objects/spec/typecast/nil_spec'
|
5
5
|
|
6
6
|
describe 'DataObjects::Mysql with Nil' do
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
behaves_like 'supporting Nil'
|
8
|
+
behaves_like 'supporting writing an Nil'
|
9
|
+
behaves_like 'supporting Nil autocasting'
|
10
10
|
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
|
4
|
+
require 'data_objects/spec/typecast/other_spec'
|
5
|
+
|
6
|
+
describe 'DataObjects::H2 with other (unknown) type' do
|
7
|
+
behaves_like 'supporting other (unknown) type'
|
8
|
+
end
|
data/spec/typecast/range_spec.rb
CHANGED