do_mysql 0.9.12-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,72 @@
1
+ if RUBY_PLATFORM =~ /darwin/
2
+ ENV["RC_ARCHS"] = `uname -m`.chomp if `uname -sr` =~ /^Darwin/
3
+
4
+ # On PowerPC the defaults are fine
5
+ ENV["RC_ARCHS"] = '' if `uname -m` =~ /^Power Macintosh/
6
+ end
7
+
8
+ require 'mkmf'
9
+
10
+ # All instances of mysql_config on PATH ...
11
+ def mysql_config_paths
12
+ ENV['PATH'].split(File::PATH_SEPARATOR).collect do |path|
13
+ [ "#{path}/mysql_config", "#{path}/mysql_config5" ].
14
+ detect { |bin| File.exist?(bin) }
15
+ end
16
+ end
17
+
18
+ # The first mysql_config binary on PATH ...
19
+ def default_mysql_config_path
20
+ mysql_config_paths.compact.first
21
+ end
22
+
23
+ def default_prefix
24
+ if mc = default_mysql_config_path
25
+ File.dirname(File.dirname(mc))
26
+ else
27
+ "/usr/local"
28
+ end
29
+ end
30
+
31
+ # Allow overriding path to mysql_config on command line using:
32
+ # ruby extconf.rb --with-mysql-config=/path/to/mysql_config
33
+ if RUBY_PLATFORM =~ /mswin|mingw/
34
+ dir_config('mysql')
35
+ have_header 'my_global.h'
36
+ have_header 'mysql.h' || exit(1)
37
+ have_library 'libmysql' || exit(1)
38
+ have_func('mysql_query', 'mysql.h') || exit(1)
39
+ have_func('mysql_ssl_set', 'mysql.h')
40
+ elsif mc = with_config('mysql-config', default_mysql_config_path)
41
+ mc = default_mysql_config_path if mc == true
42
+ cflags = `#{mc} --cflags`.chomp
43
+ exit 1 if $? != 0
44
+ libs = `#{mc} --libs`.chomp
45
+ exit 1 if $? != 0
46
+ $CPPFLAGS += ' ' + cflags
47
+ $libs = libs + " " + $libs
48
+ else
49
+ inc, lib = dir_config('mysql', default_prefix)
50
+ libs = ['m', 'z', 'socket', 'nsl']
51
+ lib_dirs =
52
+ [ lib, "/usr/lib", "/usr/local/lib", "/opt/local/lib" ].collect do |path|
53
+ [ path, "#{path}/mysql", "#{path}/mysql5/mysql" ]
54
+ end
55
+ find_library('mysqlclient', 'mysql_query', *lib_dirs.flatten) || exit(1)
56
+ find_header('mysql.h', *lib_dirs.flatten.map { |p| p.gsub('/lib', '/include') })
57
+ end
58
+
59
+ unless RUBY_PLATFORM =~ /mswin|mingw/
60
+ have_header 'mysql.h'
61
+ have_library 'mysqlclient' || exit(1)
62
+ have_func 'mysql_query' || exit(1)
63
+ have_func 'mysql_ssl_set'
64
+ end
65
+
66
+ $CFLAGS << ' -Wall ' unless RUBY_PLATFORM =~ /mswin/
67
+
68
+ if RUBY_VERSION < '1.8.6'
69
+ $CFLAGS << ' -DRUBY_LESS_THAN_186'
70
+ end
71
+
72
+ create_makefile('do_mysql_ext')
@@ -0,0 +1,44 @@
1
+ require 'rubygems'
2
+ require 'data_objects'
3
+ if RUBY_PLATFORM =~ /java/
4
+ require 'do_jdbc'
5
+ require 'java'
6
+ gem 'jdbc-mysql'
7
+ require 'jdbc/mysql' # the JDBC driver, packaged as a gem
8
+ end
9
+
10
+ require 'do_mysql_ext'
11
+ require File.expand_path(File.join(File.dirname(__FILE__), 'do_mysql', 'version'))
12
+ require File.expand_path(File.join(File.dirname(__FILE__), 'do_mysql', 'transaction'))
13
+
14
+ if RUBY_PLATFORM =~ /java/
15
+ # Another way of loading the JDBC Class. This seems to be more reliable
16
+ # than Class.forName() within the data_objects.Connection Java class,
17
+ # which is currently not working as expected.
18
+ import 'com.mysql.jdbc.Driver'
19
+
20
+ module DataObjects
21
+ module Mysql
22
+ class Connection
23
+ def self.pool_size
24
+ 20
25
+ end
26
+
27
+ def using_socket?
28
+ @using_socket
29
+ end
30
+
31
+ def character_set
32
+ # JDBC API does not provide an easy way to get the current character set
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
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+
44
+ end
@@ -0,0 +1,44 @@
1
+
2
+ module DataObjects
3
+
4
+ module Mysql
5
+
6
+ class Transaction < DataObjects::Transaction
7
+
8
+ def finalize_transaction
9
+ cmd = "XA END '#{id}'"
10
+ connection.create_command(cmd).execute_non_query
11
+ end
12
+
13
+ def begin
14
+ cmd = "XA START '#{id}'"
15
+ connection.create_command(cmd).execute_non_query
16
+ end
17
+
18
+ def commit
19
+ cmd = "XA COMMIT '#{id}'"
20
+ connection.create_command(cmd).execute_non_query
21
+ end
22
+
23
+ def rollback
24
+ finalize_transaction
25
+ cmd = "XA ROLLBACK '#{id}'"
26
+ connection.create_command(cmd).execute_non_query
27
+ end
28
+
29
+ def rollback_prepared
30
+ cmd = "XA ROLLBACK '#{id}'"
31
+ connection.create_command(cmd).execute_non_query
32
+ end
33
+
34
+ def prepare
35
+ finalize_transaction
36
+ cmd = "XA PREPARE '#{id}'"
37
+ connection.create_command(cmd).execute_non_query
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ end
@@ -0,0 +1,5 @@
1
+ module DataObjects
2
+ module Mysql
3
+ VERSION = "0.9.12"
4
+ end
5
+ end
Binary file
@@ -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
@@ -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/encoding_spec'
5
+
6
+ describe DataObjects::Mysql::Connection do
7
+ it_should_behave_like 'a driver supporting encodings'
8
+ end
@@ -0,0 +1,3 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', 'data_objects', 'spec', 'lib', 'rspec_immediate_feedback_formatter'))
@@ -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/reader_spec'
5
+
6
+ describe DataObjects::Mysql::Reader do
7
+ it_should_behave_like 'a Reader'
8
+ 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/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
@@ -0,0 +1,132 @@
1
+ $TESTING=true
2
+ JRUBY = RUBY_PLATFORM =~ /java/
3
+
4
+ require 'rubygems'
5
+
6
+ gem 'rspec', '>1.1.12'
7
+ require 'spec'
8
+
9
+ require 'date'
10
+ require 'ostruct'
11
+ require 'pathname'
12
+ require 'fileutils'
13
+
14
+ # put data_objects from repository in the load path
15
+ # DO NOT USE installed gem of data_objects!
16
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'data_objects', 'lib'))
17
+ require 'data_objects'
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
+
22
+ if JRUBY
23
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'do_jdbc', 'lib'))
24
+ require 'do_jdbc'
25
+ end
26
+
27
+ # put the pre-compiled extension in the path to be found
28
+ $:.unshift File.expand_path(File.join(File.dirname(__FILE__), '..', 'lib'))
29
+ require 'do_mysql'
30
+
31
+ log_path = File.expand_path(File.join(File.dirname(__FILE__), '..', 'log', 'do.log'))
32
+ FileUtils.mkdir_p(File.dirname(log_path))
33
+
34
+ DataObjects::Mysql.logger = DataObjects::Logger.new(log_path, :debug)
35
+
36
+ at_exit { DataObjects.logger.flush }
37
+
38
+ Spec::Runner.configure do |config|
39
+ config.include(DataObjects::Spec::PendingHelpers)
40
+ end
41
+
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'
49
+
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
54
+
55
+ def setup_test_environment
56
+ conn = DataObjects::Connection.new(CONFIG.uri)
57
+
58
+ conn.create_command(<<-EOF).execute_non_query
59
+ DROP TABLE IF EXISTS `invoices`
60
+ EOF
61
+
62
+ conn.create_command(<<-EOF).execute_non_query
63
+ DROP TABLE IF EXISTS `users`
64
+ EOF
65
+
66
+ conn.create_command(<<-EOF).execute_non_query
67
+ DROP TABLE IF EXISTS `widgets`
68
+ EOF
69
+
70
+ conn.create_command(<<-EOF).execute_non_query
71
+ CREATE TABLE `users` (
72
+ `id` int(11) NOT NULL auto_increment,
73
+ `name` varchar(200) default 'Billy' NULL,
74
+ `fired_at` timestamp,
75
+ PRIMARY KEY (`id`)
76
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
77
+ EOF
78
+
79
+ conn.create_command(<<-EOF).execute_non_query
80
+ CREATE TABLE `invoices` (
81
+ `id` int(11) NOT NULL auto_increment,
82
+ `invoice_number` varchar(50) NOT NULL,
83
+ PRIMARY KEY (`id`)
84
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
85
+ EOF
86
+
87
+ conn.create_command(<<-EOF).execute_non_query
88
+ CREATE TABLE `widgets` (
89
+ `id` int(11) NOT NULL auto_increment,
90
+ `code` char(8) default 'A14' NULL,
91
+ `name` varchar(200) default 'Super Widget' NULL,
92
+ `shelf_location` tinytext NULL,
93
+ `description` text NULL,
94
+ `image_data` blob NULL,
95
+ `ad_description` mediumtext NULL,
96
+ `ad_image` mediumblob NULL,
97
+ `whitepaper_text` longtext NULL,
98
+ `cad_drawing` longblob NULL,
99
+ `flags` tinyint(1) default 0,
100
+ `number_in_stock` smallint default 500,
101
+ `number_sold` mediumint default 0,
102
+ `super_number` bigint default 9223372036854775807,
103
+ `weight` float default 1.23,
104
+ `cost1` double default 10.23,
105
+ `cost2` decimal(8,2) default 50.23,
106
+ `release_date` date default '2008-02-14',
107
+ `release_datetime` datetime default '2008-02-14 00:31:12',
108
+ `release_timestamp` timestamp default '2008-02-14 00:31:31',
109
+ `status` enum('active','out of stock') NOT NULL default 'active',
110
+ PRIMARY KEY (`id`)
111
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
112
+ EOF
113
+
114
+ 1.upto(16) do |n|
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);
117
+ EOF
118
+ end
119
+
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
129
+
130
+ end
131
+
132
+ 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/array_spec'
5
+
6
+ describe 'DataObjects::Mysql with Array' do
7
+ it_should_behave_like 'supporting Array'
8
+ 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,8 @@
1
+ # encoding: utf-8
2
+
3
+ require File.expand_path(File.join(File.dirname(__FILE__), '..', 'spec_helper'))
4
+ require 'data_objects/spec/typecast/byte_array_spec'
5
+
6
+ describe 'DataObjects::Mysql with ByteArray' do
7
+ it_should_behave_like 'supporting ByteArray'
8
+ 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/class_spec'
5
+
6
+ describe 'DataObjects::Mysql with Class' do
7
+ it_should_behave_like 'supporting Class'
8
+ 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