jdbc-helper 0.7.3 → 0.7.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +20 -0
- data/CHANGELOG.markdown +158 -0
- data/Gemfile +4 -0
- data/README.markdown +34 -6
- data/Rakefile +24 -0
- data/VERSION +1 -0
- data/jdbc-helper.gemspec +22 -0
- data/lib/jdbc-helper/connection.rb +3 -3
- data/lib/jdbc-helper/connector/cassandra.rb +21 -0
- data/lib/jdbc-helper/connector/mssql.rb +40 -0
- data/lib/jdbc-helper/connector/mysql.rb +36 -0
- data/lib/jdbc-helper/connector/oracle.rb +58 -0
- data/lib/jdbc-helper/connector/postgresql.rb +40 -0
- data/lib/jdbc-helper/connector.rb +27 -13
- data/lib/jdbc-helper/constants.rb +19 -15
- data/lib/jdbc-helper/version.rb +3 -0
- data/lib/jdbc-helper.rb +2 -0
- data/test/helper.rb +6 -4
- data/test/test_connection.rb +10 -8
- data/test/test_connectors.rb +97 -1
- metadata +132 -161
- data/lib/jdbc-helper/connector/mysql_connector.rb +0 -37
- data/lib/jdbc-helper/connector/oracle_connector.rb +0 -46
- data/lib/jdbc-helper/connector/postgres_connector.rb +0 -37
- data/lib/jdbc-helper/connector/sql_server_connector.rb +0 -37
- data/test/database.yml.local +0 -31
data/.gitignore
ADDED
data/CHANGELOG.markdown
ADDED
@@ -0,0 +1,158 @@
|
|
1
|
+
### 0.7.4 / 2012/07/09
|
2
|
+
* Revised Connectors
|
3
|
+
* Use `JDBCHelper::MySQL` instead of `JDBCHelper::MySQLConnector`
|
4
|
+
* Optional `timeout` parameter has been removed. For backward-compatibility, `XXXConnector` still receives timeout parameter, though deprecated.
|
5
|
+
* Added Cassandra connector
|
6
|
+
* `JDBCHelper::Cassandra#connect`
|
7
|
+
|
8
|
+
### 0.7.3 / 2012/05/11
|
9
|
+
* Fixed occasional error when rolling back transaction: "Can't call rollback when autocommit=true"
|
10
|
+
|
11
|
+
### 0.7.2 / 2012/03/07
|
12
|
+
* Added JDBCHelper::Connection#execute, JDBCHelper::PreparedStatement#execute
|
13
|
+
* Returns update count as Fixnum or JDBCHelper::Connection::ResultSetEnumerator
|
14
|
+
depending on the type of the given statement.
|
15
|
+
* Bug fix: Setting nil value for PreparedStatements fails on SQL Server
|
16
|
+
* Modified to refer to ParameterMetaData when calling setNull method
|
17
|
+
* Current version of SQL Server driver has some crazy bugs with PreparedStatements.
|
18
|
+
You may notice that SQL Server complains on a perfectly fine SQL statement
|
19
|
+
only when you try to access the metadata of its wrapping PreparedStatement.
|
20
|
+
For such cases, where we can't refer to ParameterMetaData (and you will see a warning log),
|
21
|
+
setting nulls should still fail.
|
22
|
+
|
23
|
+
### 0.7.1 / 2012/02/28
|
24
|
+
* Modified nextval/currval syntax in JDBCHelper::SequenceWrapper
|
25
|
+
* PostgreSQL: nextval('[sequence]')
|
26
|
+
* Others: [sequence].nextval
|
27
|
+
* Bug fix: JDBCHelper::Connection#inspect returns invalid data
|
28
|
+
|
29
|
+
### 0.7.0 / 2012/01/30
|
30
|
+
* Helper methods for generating where clauses for TableWarppers
|
31
|
+
* `JDBCHelper::SQL.expr` (`JDBCHelper::SQL` deprecated in favor of `expr`)
|
32
|
+
* `JDBCHelper::SQL.ne`
|
33
|
+
* `JDBCHelper::SQL.gt`
|
34
|
+
* `JDBCHelper::SQL.ge`
|
35
|
+
* `JDBCHelper::SQL.lt`
|
36
|
+
* `JDBCHelper::SQL.le`
|
37
|
+
* `JDBCHelper::SQL.like`
|
38
|
+
* `JDBCHelper::SQL.not_like`
|
39
|
+
* `JDBCHelper::SQL.not_null`
|
40
|
+
* Tested on PostgreSQL
|
41
|
+
* Tested on MS SQL Server
|
42
|
+
* JDBCHelper::PostgresConnector added.
|
43
|
+
* JDBCHelper::SqlServerConnector added.
|
44
|
+
|
45
|
+
|
46
|
+
### 0.6.3 / 2011/11/09
|
47
|
+
* Added flexibility when writing TableWrapper conditions with the new ActiveRecord-like Array-expression.
|
48
|
+
|
49
|
+
```ruby
|
50
|
+
table.count(["title != ? or year <= ?", 'N/A', '2011'], :month => (1..3), :day => 10)
|
51
|
+
```
|
52
|
+
|
53
|
+
### 0.6.2 / 2011/10/27
|
54
|
+
* Bug fix: JDBCHelper::Connection#initialize *still* modifies its input Hash
|
55
|
+
|
56
|
+
### 0.6.1 / 2011/09/05
|
57
|
+
* Minor fix for an inefficient type conversion
|
58
|
+
* More tests. Test coverage over 97%.
|
59
|
+
|
60
|
+
### 0.6.0 / 2011/09/05
|
61
|
+
* Datatype handling
|
62
|
+
* Proper BLOB handling.
|
63
|
+
* Proper handling of Numeric types.
|
64
|
+
* Numeric value will be returned as Fixnum, Bignum, Float or BigDecimal. (No more Strings!)
|
65
|
+
* ParameterizedStatement#set_param achieves better precision with Time#to_f
|
66
|
+
* Increased test coverage
|
67
|
+
|
68
|
+
### 0.5.1 / 2011/08/29
|
69
|
+
* Bug fix: TableWrapper objects are cached to prevent proliferation of PreparedStatements.
|
70
|
+
|
71
|
+
```ruby
|
72
|
+
# In the previous version, codes like the following generated too many prepared statements.
|
73
|
+
(0..10000).each do |i|
|
74
|
+
db.table(:my_table).count(:id => i)
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
### 0.5.0 / 2011/08/29
|
79
|
+
* TableWrapper internally uses PreparedStatements instead of regular statements for better performance. <b>However, this makes it impossible to serialize batched operations.</b> Thus, you should not use batched statements with TableWrapper when the order of operations is important.
|
80
|
+
* TableWrapper#close closes cached PreparedStatements.
|
81
|
+
* Connection#execute_batch and Connection#clear_batch have been modified to execute or clear every PreparedStatment of the Connection.
|
82
|
+
* Connection overrides clone method to create another connection to the same database.
|
83
|
+
|
84
|
+
### 0.4.10 / 2011/08/09
|
85
|
+
* Sadly, I found that with Oracle, precision and scale information from ResultSetMetaData is completely unreliable. Going conservative.
|
86
|
+
|
87
|
+
### 0.4.9 / 2011/08/09
|
88
|
+
* Oracle NUMBER datatype is retrived as Fixnum or Bignum or String depending on its precision and scale.
|
89
|
+
|
90
|
+
### 0.4.8 / 2011/07/12
|
91
|
+
* Improved fetch size interface
|
92
|
+
* Supports non-string property values in the input parameter for Connection object
|
93
|
+
|
94
|
+
### 0.4.7 / 2011/06/28
|
95
|
+
* PreparedStatement performance improvement. Minimized unneccesary to_s call when setting parameters. 10% to 30% improvement observed for usual bulk insertion.
|
96
|
+
|
97
|
+
### 0.4.6 / 2011/06/20
|
98
|
+
* Bug fix: Invalid alias for JDBCHelper::TableWrapper#drop!
|
99
|
+
* Bug fix: JDBCHelper::Connection#initialize modifies its input Hash
|
100
|
+
* Added attr_readers for url and driver to JDBCHelper::Connection
|
101
|
+
|
102
|
+
### 0.4.5 / 2011/06/10
|
103
|
+
* JDBCHelper::TableWrapper#default method added which allows you to specify common default values for the subsequent inserts and updates.
|
104
|
+
|
105
|
+
### 0.4.4 / 2011/06/08
|
106
|
+
* Where conditions have become accumulative, which means you can chain multiple JDBCHelper::TableWrapper#where methods to further limit the scope.
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
users = conn.table(:users).where(:status => 1).where(:age => 20..30).to_a
|
110
|
+
```
|
111
|
+
|
112
|
+
### 0.4.3 / 2011/06/06
|
113
|
+
* Improved handling of hash parameters for JDBCHelper::ProcedureWrapper. Missing parameters in the given Hash are treated as nulls. And now it works for both Oracle and MySQL.
|
114
|
+
* Users are encouraged to update their MySQL JDBC driver to the latest version. Some features of ProcedureWrapper may not work properly on older versions.
|
115
|
+
|
116
|
+
### 0.4.2 / 2011/06/03
|
117
|
+
* JDBCHelper::SequenceWrapper added.
|
118
|
+
* JDBCHelper::TableWrapper#drop!, JDBCHelper::TableWrapper#truncate!
|
119
|
+
|
120
|
+
### 0.4.1 / 2011/06/01
|
121
|
+
* Methods in JDBCHelper::TableWrapper which take where conditions as their arguments are modified to take varible length arguments.
|
122
|
+
|
123
|
+
### 0.4.0 / 2011/05/31
|
124
|
+
* Rewrote JDBCHelper::TableWrapper interface
|
125
|
+
* JDBCHelper::TableWrapper has become Enumerable with new select, where, and order methods
|
126
|
+
* JDBCHelper::TableWrapper now supports batch updates
|
127
|
+
* WARNING: JDBCHelper::TableWrapper#select and methods in JDBCHelper::SQL are not backward-compatible.
|
128
|
+
|
129
|
+
### 0.3.2 / 2011/05/25
|
130
|
+
* JDBCHelper::MySQLConnector.connect and JDBCHelper::OracleConnector.connect can take a block
|
131
|
+
|
132
|
+
### 0.3.0 / 2011/05/21
|
133
|
+
* Supports CallableStatement with IN/INOUT/OUT parameters
|
134
|
+
* Added JDBCHelper::FunctionWrapper
|
135
|
+
* Added JDBCHelper::ProcedureWrapper
|
136
|
+
* Performance tuning (10-20% improvement for some scenarios)
|
137
|
+
* Removed PreparedStatement caching since PreparedStatement can be invalidated after DDLs
|
138
|
+
* Revised JDBCHelper::SQL methods (JDBCHelper::SQL#where now prepends `where')
|
139
|
+
* Minor bug fixes
|
140
|
+
* Tested with MySQL and Oracle
|
141
|
+
|
142
|
+
### 0.2.1 / 2011/05/19
|
143
|
+
* JDBCHelper::Connection::Row can now be accessed with Range, Symbol and *[offset, length] index
|
144
|
+
|
145
|
+
### 0.2.0 / 2011/05/19
|
146
|
+
* Feature: JDBCHelper::TableWrapper added to reduce the hassle of writing SQLs.
|
147
|
+
* YARD documentation
|
148
|
+
|
149
|
+
### 0.1.3 / 2011/04/22
|
150
|
+
* Bug fix: setTimestamp now works correctly for java.sql.Timestamp
|
151
|
+
* Usability: Ruby Time object is automatically converted to java.sql.Timestamp object if the type of the target column is Timestamp.
|
152
|
+
|
153
|
+
### 0.1.1-0.1.2 / 2011/04/01
|
154
|
+
* Yanked bad gem.
|
155
|
+
|
156
|
+
### 0.1.0 / 2011/03/31
|
157
|
+
* Created. Based on samdorr-db 0.2.7. samdorr-db will be no longer maintained from now on.
|
158
|
+
|
data/Gemfile
ADDED
data/README.markdown
CHANGED
@@ -17,7 +17,7 @@ crucial database operations from primitive selects and updates to more complex o
|
|
17
17
|
batch updates, prepared statements and transactions.
|
18
18
|
As the name implies, this gem only works on JRuby.
|
19
19
|
|
20
|
-
Tested on MySQL 5.5, Oracle 11g R2, PostgreSQL 9.0.4
|
20
|
+
Tested on MySQL 5.5, Oracle 11g R2, PostgreSQL 9.0.4, MS SQL Server 2008 R2 and Cassandra 1.1.1 (CQL3).
|
21
21
|
|
22
22
|
## Installation
|
23
23
|
### Install gem
|
@@ -52,21 +52,49 @@ conn = JDBCHelper::Connection.new(
|
|
52
52
|
:driver => 'com.mysql.jdbc.Driver',
|
53
53
|
:url => 'jdbc:mysql://localhost/test',
|
54
54
|
:user => 'mysql',
|
55
|
-
:password =>
|
55
|
+
:password => password)
|
56
56
|
conn.close
|
57
|
+
```
|
58
|
+
|
59
|
+
### Shortcut connectors
|
60
|
+
|
61
|
+
jdbc-helper provides shortcut connectors for the following databases
|
62
|
+
so that you don't have to specify lengthy class names and JDBC URLs.
|
57
63
|
|
64
|
+
* MySQL (`JDBCHelper::MySQL`)
|
65
|
+
* Oracle (`JDBCHelper::Oracle`)
|
66
|
+
* PostgreSQL (`JDBCHelper::PostgreSQL`)
|
67
|
+
* MS SQL Server (`JDBCHelper::MSSQL`)
|
68
|
+
* Cassandra (`JDBCHelper::Cassandra`)
|
58
69
|
|
70
|
+
```ruby
|
59
71
|
# MySQL shortcut connector
|
60
|
-
JDBCHelper::
|
72
|
+
mc = JDBCHelper::MySQL.connect(host, user, password, db)
|
61
73
|
|
62
74
|
# Oracle shortcut connector
|
63
|
-
JDBCHelper::
|
75
|
+
oc = JDBCHelper::Oracle.connect(host, user, password, service_name)
|
64
76
|
|
65
77
|
# PostgreSQL shortcut connector
|
66
|
-
JDBCHelper::
|
78
|
+
pc = JDBCHelper::PostgreSQL.connect(host, user, password, db)
|
67
79
|
|
68
80
|
# MS SQL Server shortcut connector
|
69
|
-
JDBCHelper::
|
81
|
+
sc = JDBCHelper::MSSQL.connect(host, user, password, db)
|
82
|
+
|
83
|
+
# Cassandra CQL3 connector
|
84
|
+
cc = JDBCHelper::Cassandra.connect(host, keyspace)
|
85
|
+
|
86
|
+
# Extra parameters
|
87
|
+
mc = JDBCHelper::MySQL.connect(host, user, password, db,
|
88
|
+
:rewriteBatchedStatements => true)
|
89
|
+
|
90
|
+
# With connection timeout of 30 seconds
|
91
|
+
mc = JDBCHelper::MySQL.connect(host, user, password, db,
|
92
|
+
:rewriteBatchedStatements => true, :timeout => 30)
|
93
|
+
|
94
|
+
# When block is given, connection is automatically closed after the block is executed
|
95
|
+
JDBCHelper::Cassandra.connect(host, keyspace) do |cc|
|
96
|
+
# ...
|
97
|
+
end
|
70
98
|
```
|
71
99
|
|
72
100
|
### Querying database table
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require "bundler/gem_tasks"
|
3
|
+
|
4
|
+
require 'rake/testtask'
|
5
|
+
Rake::TestTask.new(:test) do |test|
|
6
|
+
test.libs << 'lib' << 'test'
|
7
|
+
test.pattern = 'test/**/test_*.rb'
|
8
|
+
test.verbose = true
|
9
|
+
end
|
10
|
+
|
11
|
+
Rake::TestTask.new(:performance) do |test|
|
12
|
+
test.libs << 'lib' << 'test'
|
13
|
+
test.pattern = 'test/performance.rb'
|
14
|
+
test.verbose = true
|
15
|
+
end
|
16
|
+
|
17
|
+
require 'rcov/rcovtask'
|
18
|
+
Rcov::RcovTask.new do |test|
|
19
|
+
test.libs << 'test'
|
20
|
+
test.pattern = 'test/**/test_*.rb'
|
21
|
+
test.rcov_opts << '--exclude rcov'
|
22
|
+
test.verbose = true
|
23
|
+
end
|
24
|
+
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.7.4
|
data/jdbc-helper.gemspec
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/jdbc-helper/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Junegunn Choi"]
|
6
|
+
gem.email = ["junegunn.c@gmail.com"]
|
7
|
+
gem.description = %q{A JDBC helper for JRuby/Database developers.}
|
8
|
+
gem.summary = %q{A JDBC helper for JRuby/Database developers.}
|
9
|
+
gem.homepage = "https://github.com/junegunn/jdbc-helper"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "jdbc-helper"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = JDBCHelper::VERSION
|
17
|
+
|
18
|
+
gem.add_runtime_dependency 'insensitive_hash', '~> 0.2.4'
|
19
|
+
gem.add_development_dependency "bundler", "~> 1.1.4"
|
20
|
+
gem.add_development_dependency "rcov", "~> 0.9"
|
21
|
+
gem.add_development_dependency "test-unit", ">= 2.3.0"
|
22
|
+
end
|
@@ -147,7 +147,7 @@ class Connection
|
|
147
147
|
def initialize(args = {})
|
148
148
|
# Subsequent deletes should not affect the input
|
149
149
|
@args = Marshal.load(Marshal.dump(args))
|
150
|
-
args = InsensitiveHash[
|
150
|
+
args = InsensitiveHash[ @args ]
|
151
151
|
|
152
152
|
raise ArgumentError.new("driver not given") unless args.has_key? :driver
|
153
153
|
raise ArgumentError.new("url not given") unless args.has_key? :url
|
@@ -167,8 +167,8 @@ class Connection
|
|
167
167
|
end
|
168
168
|
|
169
169
|
props = java.util.Properties.new
|
170
|
-
args.
|
171
|
-
props.setProperty(
|
170
|
+
args.each do |k, v|
|
171
|
+
props.setProperty(k.to_s, v.to_s) if v
|
172
172
|
end
|
173
173
|
|
174
174
|
@conn = java.sql.DriverManager.get_connection(@url, props)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Junegunn Choi (junegunn.c@gmail.com)
|
3
|
+
|
4
|
+
module JDBCHelper
|
5
|
+
# Shortcut connector for Cassandra CQL3
|
6
|
+
# @since 0.7.4
|
7
|
+
module Cassandra
|
8
|
+
extend Connector
|
9
|
+
|
10
|
+
# @param [String] host
|
11
|
+
# @param [String] keyspace
|
12
|
+
# @param [Hash] extra_params
|
13
|
+
# @return [JDBCHelper::Connection]
|
14
|
+
def self.connect(host, keyspace, extra_params = {}, &block)
|
15
|
+
connect_impl :cassandra, {
|
16
|
+
:url => ["jdbc:cassandra://#{host}", keyspace].compact.join('/')
|
17
|
+
}, extra_params, &block
|
18
|
+
end
|
19
|
+
end#Cassandra
|
20
|
+
end#JDBCHelper
|
21
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Junegunn Choi (junegunn.c@gmail.com)
|
3
|
+
|
4
|
+
module JDBCHelper
|
5
|
+
# Shortcut connector for MS SQL Server
|
6
|
+
module MSSQL
|
7
|
+
extend Connector
|
8
|
+
|
9
|
+
# @param [String] host
|
10
|
+
# @param [String] user
|
11
|
+
# @param [String] password
|
12
|
+
# @param [String] db
|
13
|
+
# @param [Hash] extra_params
|
14
|
+
# @return [JDBCHelper::Connection]
|
15
|
+
def self.connect(host, user, password, db, extra_params = {}, &block)
|
16
|
+
connect_impl :sqlserver, {
|
17
|
+
:url => "jdbc:sqlserver://#{host};databaseName=#{db};",
|
18
|
+
:user => user,
|
19
|
+
:password => password
|
20
|
+
}, extra_params, &block
|
21
|
+
end
|
22
|
+
end#SqlServer
|
23
|
+
|
24
|
+
# Alias
|
25
|
+
SqlServer = MSSQL
|
26
|
+
|
27
|
+
# Backward-compatibility
|
28
|
+
# @deprecated
|
29
|
+
module SqlServerConnector
|
30
|
+
extend Connector
|
31
|
+
def self.connect(host, user, password, db,
|
32
|
+
timeout = Constants::DEFAULT_LOGIN_TIMEOUT,
|
33
|
+
extra_params = {}, &block)
|
34
|
+
check_params extra_params
|
35
|
+
MSSQL.connect(host, user, password, db,
|
36
|
+
{:timeout => timeout}.merge(extra_params), &block)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end#JDBCHelper
|
40
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Junegunn Choi (junegunn.c@gmail.com)
|
3
|
+
|
4
|
+
module JDBCHelper
|
5
|
+
# Shortcut connector for MySQL
|
6
|
+
module MySQL
|
7
|
+
extend Connector
|
8
|
+
|
9
|
+
# @param [String] host
|
10
|
+
# @param [String] user
|
11
|
+
# @param [String] password
|
12
|
+
# @param [String] db
|
13
|
+
# @param [Hash] extra_params
|
14
|
+
# @return [JDBCHelper::Connection]
|
15
|
+
def self.connect(host, user, password, db, extra_params = {}, &block)
|
16
|
+
connect_impl :mysql, {
|
17
|
+
:url => "jdbc:mysql://#{host}/#{db}",
|
18
|
+
:user => user,
|
19
|
+
:password => password
|
20
|
+
}, extra_params, &block
|
21
|
+
end
|
22
|
+
end#MySQLConnector
|
23
|
+
|
24
|
+
# @deprecated
|
25
|
+
module MySQLConnector
|
26
|
+
extend Connector
|
27
|
+
def self.connect(host, user, password, db,
|
28
|
+
timeout = Constants::DEFAULT_LOGIN_TIMEOUT,
|
29
|
+
extra_params = {}, &block)
|
30
|
+
check_params extra_params
|
31
|
+
MySQL.connect(host, user, password, db,
|
32
|
+
{:timeout => timeout}.merge(extra_params), &block)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end#JDBCHelper
|
36
|
+
|
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Junegunn Choi (junegunn.c@gmail.com)
|
3
|
+
|
4
|
+
module JDBCHelper
|
5
|
+
# Shortcut connector for Oracle
|
6
|
+
module Oracle
|
7
|
+
extend Connector
|
8
|
+
|
9
|
+
# @param [String] host
|
10
|
+
# @param [String] user
|
11
|
+
# @param [String] password
|
12
|
+
# @param [String] service_name
|
13
|
+
# @return [JDBCHelper::Connection]
|
14
|
+
def self.connect(host, user, password, service_name, extra_params = {}, &block)
|
15
|
+
connect_impl :oracle, {
|
16
|
+
:url => "jdbc:oracle:thin:@#{host}/#{service_name}",
|
17
|
+
:user => user,
|
18
|
+
:password => password
|
19
|
+
}, {}, &block
|
20
|
+
end
|
21
|
+
|
22
|
+
# @param [String] host
|
23
|
+
# @param [String] user
|
24
|
+
# @param [String] password
|
25
|
+
# @param [String] sid
|
26
|
+
# @return [JDBCHelper::Connection]
|
27
|
+
# @deprecated
|
28
|
+
def self.connect_by_sid(host, user, password, sid,
|
29
|
+
extra_params = {}, &block)
|
30
|
+
connect_impl :oracle, {
|
31
|
+
:url => "jdbc:oracle:thin:@#{host}:#{sid}",
|
32
|
+
:user => user,
|
33
|
+
:password => password
|
34
|
+
}, {}, &block
|
35
|
+
end
|
36
|
+
end#OracleConnector
|
37
|
+
|
38
|
+
# @deprecated
|
39
|
+
module OracleConnector
|
40
|
+
extend Connector
|
41
|
+
def self.connect(host, user, password, service_name,
|
42
|
+
timeout = Constants::DEFAULT_LOGIN_TIMEOUT,
|
43
|
+
extra_params = {}, &block)
|
44
|
+
check_params extra_params
|
45
|
+
Oracle.connect(host, user, password, service_name,
|
46
|
+
{:timeout => timeout}.merge(extra_params), &block)
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.connect_by_sid(host, user, password, sid,
|
50
|
+
timeout = Constants::DEFAULT_LOGIN_TIMEOUT,
|
51
|
+
extra_params = {}, &block)
|
52
|
+
check_params extra_params
|
53
|
+
Oracle.connect_by_sid(host, user, password, sid,
|
54
|
+
{:timeout => timeout}.merge(extra_params), &block)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end#JDBCHelper
|
58
|
+
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# Junegunn Choi (junegunn.c@gmail.com)
|
3
|
+
|
4
|
+
module JDBCHelper
|
5
|
+
# Shortcut connector for PostgreSQL
|
6
|
+
module PostgreSQL
|
7
|
+
extend Connector
|
8
|
+
|
9
|
+
# @param [String] host
|
10
|
+
# @param [String] user
|
11
|
+
# @param [String] password
|
12
|
+
# @param [String] db
|
13
|
+
# @param [Hash] extra_params
|
14
|
+
# @return [JDBCHelper::Connection]
|
15
|
+
def self.connect(host, user, password, db, extra_params = {}, &block)
|
16
|
+
connect_impl :postgres, {
|
17
|
+
:url => "jdbc:postgresql://#{host}/#{db}",
|
18
|
+
:user => user,
|
19
|
+
:password => password
|
20
|
+
}, extra_params, &block
|
21
|
+
end
|
22
|
+
end#Postgres
|
23
|
+
|
24
|
+
# Alias
|
25
|
+
Postgres = PostgreSQL
|
26
|
+
|
27
|
+
# Backward-compatibility
|
28
|
+
# @deprecated
|
29
|
+
module PostgresConnector
|
30
|
+
extend Connector
|
31
|
+
def self.connect(host, user, password, db,
|
32
|
+
timeout = Constants::DEFAULT_LOGIN_TIMEOUT,
|
33
|
+
extra_params = {}, &block)
|
34
|
+
check_params extra_params
|
35
|
+
PostgreSQL.connect(host, user, password, db,
|
36
|
+
{:timeout => timeout}.merge(extra_params), &block)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end#JDBCHelper
|
40
|
+
|
@@ -2,20 +2,34 @@
|
|
2
2
|
# Junegunn Choi (junegunn.c@gmail.com)
|
3
3
|
|
4
4
|
module JDBCHelper
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
conn.close rescue nil
|
12
|
-
end
|
5
|
+
module Connector
|
6
|
+
def ensure_close conn
|
7
|
+
begin
|
8
|
+
yield conn
|
9
|
+
ensure
|
10
|
+
conn.close rescue nil
|
13
11
|
end
|
14
|
-
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def check_params params
|
15
|
+
if params && !params.is_a?(Hash)
|
16
|
+
raise ArgumentError.new('extra_params must be a hash')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def connect_impl type, params, extra_params, &block
|
21
|
+
check_params extra_params
|
22
|
+
|
23
|
+
conn = Connection.new(
|
24
|
+
Constants::Connector::DEFAULT_PARAMETERS[type].merge(extra_params || {}).merge(params))
|
25
|
+
block_given? ? ensure_close(conn, &block) : conn
|
26
|
+
end
|
27
|
+
end#Connector
|
15
28
|
end#JDBCHelper
|
16
29
|
|
17
|
-
require 'jdbc-helper/connector/
|
18
|
-
require 'jdbc-helper/connector/
|
19
|
-
require 'jdbc-helper/connector/
|
20
|
-
require 'jdbc-helper/connector/
|
30
|
+
require 'jdbc-helper/connector/oracle'
|
31
|
+
require 'jdbc-helper/connector/mysql'
|
32
|
+
require 'jdbc-helper/connector/postgresql'
|
33
|
+
require 'jdbc-helper/connector/mssql'
|
34
|
+
require 'jdbc-helper/connector/cassandra'
|
21
35
|
|
@@ -11,26 +11,30 @@ module Constants
|
|
11
11
|
|
12
12
|
# Constants only for Connectors
|
13
13
|
module Connector
|
14
|
-
JDBC_DRIVER = {
|
15
|
-
:oracle => 'oracle.jdbc.driver.OracleDriver',
|
16
|
-
:mysql => 'com.mysql.jdbc.Driver',
|
17
|
-
:postgres => 'org.postgresql.Driver',
|
18
|
-
:sqlserver => 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
|
19
|
-
}
|
20
|
-
|
21
14
|
DEFAULT_PARAMETERS = {
|
22
15
|
:mysql => {
|
23
|
-
|
24
|
-
|
16
|
+
:driver => 'com.mysql.jdbc.Driver',
|
17
|
+
:zeroDateTimeBehavior => 'convertToNull',
|
18
|
+
# Removed from 0.6.3:
|
25
19
|
# This can have a performance hit when batch size is large
|
26
|
-
#
|
27
|
-
|
28
|
-
|
20
|
+
# :rewriteBatchedStatements => 'true',
|
21
|
+
:useServerPrepStmts => 'true',
|
22
|
+
:useCursorFetch => 'true',
|
23
|
+
},
|
24
|
+
:oracle => {
|
25
|
+
:driver => 'oracle.jdbc.driver.OracleDriver',
|
26
|
+
},
|
27
|
+
:postgres => {
|
28
|
+
:driver => 'org.postgresql.Driver',
|
29
|
+
:stringtype => 'unspecified',
|
29
30
|
},
|
30
|
-
:
|
31
|
-
|
31
|
+
:sqlserver => {
|
32
|
+
:driver => 'com.microsoft.sqlserver.jdbc.SQLServerDriver',
|
32
33
|
},
|
33
|
-
:
|
34
|
+
:cassandra => {
|
35
|
+
:driver => 'org.apache.cassandra.cql.jdbc.CassandraDriver',
|
36
|
+
:cqlVersion => '3.0.0',
|
37
|
+
}
|
34
38
|
}
|
35
39
|
end#Connector
|
36
40
|
end#Constants
|
data/lib/jdbc-helper.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'bundler'
|
3
|
+
require 'insensitive_hash'
|
3
4
|
#require 'pry'
|
4
5
|
|
5
6
|
begin
|
@@ -23,7 +24,7 @@ module JDBCHelperTestHelper
|
|
23
24
|
def config
|
24
25
|
path = File.dirname(__FILE__) + '/database.yml'
|
25
26
|
path += '.local' if File.exists?(path + '.local')
|
26
|
-
@db_config ||= YAML.load
|
27
|
+
@db_config ||= YAML.load(File.read(path)).insensitive
|
27
28
|
end
|
28
29
|
|
29
30
|
def create_test_procedure_simple conn, name
|
@@ -76,9 +77,8 @@ module JDBCHelperTestHelper
|
|
76
77
|
|
77
78
|
def each_connection(&block)
|
78
79
|
config.each do | db, conn_info |
|
79
|
-
conn = JDBCHelper::Connection.new(conn_info.reject { |k,v| k == 'database'})
|
80
80
|
# Just for quick and dirty testing
|
81
|
-
@type = case conn_info[
|
81
|
+
@type = case conn_info[:driver]
|
82
82
|
when /mysql/i
|
83
83
|
:mysql
|
84
84
|
when /oracle/i
|
@@ -88,10 +88,12 @@ module JDBCHelperTestHelper
|
|
88
88
|
when /sqlserver/i
|
89
89
|
:sqlserver
|
90
90
|
else
|
91
|
-
p conn_info
|
92
91
|
:unknown
|
93
92
|
end
|
94
93
|
|
94
|
+
next if @type == :unknown
|
95
|
+
|
96
|
+
conn = JDBCHelper::Connection.new(conn_info.reject { |k,v| k == 'database'})
|
95
97
|
conn.update 'set global max_allowed_packet = 1073741824' if @type == :mysql
|
96
98
|
|
97
99
|
begin
|