jdbc-helper 0.7.0 → 0.7.1
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/lib/jdbc-helper/connection.rb +14 -12
- data/lib/jdbc-helper/connection/callable_statement.rb +2 -2
- data/lib/jdbc-helper/connection/parameterized_statement.rb +2 -2
- data/lib/jdbc-helper/connection/result_set_enumerator.rb +6 -6
- data/lib/jdbc-helper/connection/row.rb +3 -3
- data/lib/jdbc-helper/connection/statement_pool.rb +4 -4
- data/lib/jdbc-helper/connection/type_map.rb +20 -20
- data/lib/jdbc-helper/constants.rb +7 -6
- data/lib/jdbc-helper/sql/sql_prepared.rb +3 -4
- data/lib/jdbc-helper/wrapper/sequence_wrapper.rb +4 -4
- data/lib/jdbc-helper/wrapper/table_wrapper.rb +3 -3
- data/test/database.yml +20 -20
- data/test/database.yml.local +21 -21
- data/test/test_connection.rb +16 -0
- metadata +3 -3
@@ -425,7 +425,9 @@ class Connection
|
|
425
425
|
end
|
426
426
|
|
427
427
|
def inspect
|
428
|
-
InsensitiveHash[@args].merge({ :closed? => closed? }).
|
428
|
+
InsensitiveHash[@args].merge({ :closed? => closed? }).tap { |c|
|
429
|
+
c.delete(:password)
|
430
|
+
}.inspect
|
429
431
|
end
|
430
432
|
|
431
433
|
# Statistics
|
@@ -433,10 +435,10 @@ class Connection
|
|
433
435
|
attr_accessor :type, :elapsed, :success_count, :fail_count
|
434
436
|
|
435
437
|
def initialize(t, e, s, f)
|
436
|
-
self.type
|
437
|
-
self.elapsed
|
438
|
+
self.type = t
|
439
|
+
self.elapsed = e
|
438
440
|
self.success_count = s
|
439
|
-
self.fail_count
|
441
|
+
self.fail_count = f
|
440
442
|
end
|
441
443
|
end
|
442
444
|
|
@@ -494,21 +496,21 @@ private
|
|
494
496
|
end
|
495
497
|
|
496
498
|
def update_stat(type, elapsed, success_count, fail_count) # :nodoc:
|
497
|
-
@prev_stat.type
|
498
|
-
@prev_stat.elapsed
|
499
|
+
@prev_stat.type = type
|
500
|
+
@prev_stat.elapsed = elapsed
|
499
501
|
@prev_stat.success_count = success_count
|
500
|
-
@prev_stat.fail_count
|
502
|
+
@prev_stat.fail_count = fail_count
|
501
503
|
|
502
|
-
accum
|
503
|
-
accum.elapsed
|
504
|
+
accum = @stats[type]
|
505
|
+
accum.elapsed += elapsed
|
504
506
|
accum.success_count += success_count
|
505
|
-
accum.fail_count
|
507
|
+
accum.fail_count += fail_count
|
506
508
|
end
|
507
509
|
|
508
510
|
def measure_exec(type)
|
509
511
|
begin
|
510
|
-
st
|
511
|
-
ret
|
512
|
+
st = Time.now
|
513
|
+
ret = yield
|
512
514
|
elapsed = Time.now - st
|
513
515
|
update_stat(type, elapsed, 1, 0)
|
514
516
|
rescue Exception
|
@@ -19,8 +19,8 @@ class CallableStatement < ParameterizedStatement
|
|
19
19
|
|
20
20
|
result = {}
|
21
21
|
out_params.each do |idx, jtype|
|
22
|
-
getter
|
23
|
-
value
|
22
|
+
getter = JDBCHelper::Connection::GETTER_MAP.fetch(jtype, :get_string)
|
23
|
+
value = @java_obj.send(getter, idx.is_a?(Symbol) ? idx.to_s : idx)
|
24
24
|
result[idx] = @java_obj.was_null ? nil : value
|
25
25
|
end
|
26
26
|
result
|
@@ -72,12 +72,12 @@ private
|
|
72
72
|
end
|
73
73
|
|
74
74
|
@close_callback = close_callback
|
75
|
-
@rset
|
76
|
-
@rsmd
|
77
|
-
@num_col
|
78
|
-
@getters
|
79
|
-
@col_labels
|
80
|
-
@col_labels_d
|
75
|
+
@rset = rset
|
76
|
+
@rsmd = @rset.get_meta_data
|
77
|
+
@num_col = @rsmd.get_column_count
|
78
|
+
@getters = []
|
79
|
+
@col_labels = []
|
80
|
+
@col_labels_d = []
|
81
81
|
(1..@num_col).each do | i |
|
82
82
|
type = @rsmd.get_column_type(i)
|
83
83
|
|
@@ -101,10 +101,10 @@ class Row
|
|
101
101
|
|
102
102
|
private
|
103
103
|
def initialize(col_labels, col_labels_d, values, rownum) # :nodoc:
|
104
|
-
@labels
|
104
|
+
@labels = col_labels
|
105
105
|
@labels_d = col_labels_d
|
106
|
-
@values
|
107
|
-
@rownum
|
106
|
+
@values = values
|
107
|
+
@rownum = rownum
|
108
108
|
|
109
109
|
# @labels_d.each do | l |
|
110
110
|
# (class << self; self; end).instance_eval do
|
@@ -8,9 +8,9 @@ class Connection
|
|
8
8
|
# @private
|
9
9
|
class StatementPool
|
10
10
|
def initialize(conn, max_size = JDBCHelper::Constants::MAX_STATEMENT_NESTING_LEVEL)
|
11
|
-
@conn
|
11
|
+
@conn = conn
|
12
12
|
@max_size = max_size # TODO
|
13
|
-
@free
|
13
|
+
@free = []
|
14
14
|
@occupied = []
|
15
15
|
end
|
16
16
|
|
@@ -49,8 +49,8 @@ class StatementPool
|
|
49
49
|
(@free + @occupied).each do | stmt |
|
50
50
|
stmt.close
|
51
51
|
end
|
52
|
-
@conn
|
53
|
-
@free
|
52
|
+
@conn = nil
|
53
|
+
@free = []
|
54
54
|
@occupied = []
|
55
55
|
end
|
56
56
|
|
@@ -13,36 +13,36 @@ class Connection
|
|
13
13
|
|
14
14
|
GETTER_MAP =
|
15
15
|
{
|
16
|
-
java.sql.Types::TINYINT
|
17
|
-
java.sql.Types::SMALLINT
|
18
|
-
java.sql.Types::INTEGER
|
19
|
-
java.sql.Types::BIGINT
|
20
|
-
|
21
|
-
java.sql.Types::CHAR
|
22
|
-
java.sql.Types::VARCHAR
|
23
|
-
java.sql.Types::LONGVARCHAR
|
16
|
+
java.sql.Types::TINYINT => :getInt,
|
17
|
+
java.sql.Types::SMALLINT => :getInt,
|
18
|
+
java.sql.Types::INTEGER => :getInt,
|
19
|
+
java.sql.Types::BIGINT => :getLong,
|
20
|
+
|
21
|
+
java.sql.Types::CHAR => :getString,
|
22
|
+
java.sql.Types::VARCHAR => :getString,
|
23
|
+
java.sql.Types::LONGVARCHAR => :getString,
|
24
24
|
(java.sql.Types::NCHAR rescue nil) => :getString,
|
25
25
|
(java.sql.Types::NVARCHAR rescue nil) => :getString,
|
26
26
|
(java.sql.Types::LONGNVARCHAR rescue nil) => :getString,
|
27
27
|
|
28
28
|
# !! MySQL function returns VARBINARY type
|
29
|
-
java.sql.Types::BINARY
|
30
|
-
java.sql.Types::VARBINARY
|
31
|
-
java.sql.Types::LONGVARBINARY
|
29
|
+
java.sql.Types::BINARY => :getBinaryStream,
|
30
|
+
java.sql.Types::VARBINARY => :getBinaryStream,
|
31
|
+
java.sql.Types::LONGVARBINARY => :getBinaryStream,
|
32
32
|
|
33
|
-
java.sql.Types::REAL
|
34
|
-
java.sql.Types::FLOAT
|
35
|
-
java.sql.Types::DOUBLE
|
33
|
+
java.sql.Types::REAL => :getDouble,
|
34
|
+
java.sql.Types::FLOAT => :getFloat,
|
35
|
+
java.sql.Types::DOUBLE => :getDouble,
|
36
36
|
|
37
|
-
java.sql.Types::DATE
|
38
|
-
java.sql.Types::TIME
|
39
|
-
java.sql.Types::TIMESTAMP
|
37
|
+
java.sql.Types::DATE => :getDate,
|
38
|
+
java.sql.Types::TIME => :getTime,
|
39
|
+
java.sql.Types::TIMESTAMP => :getTimestamp,
|
40
40
|
|
41
|
-
java.sql.Types::BLOB
|
42
|
-
java.sql.Types::CLOB
|
41
|
+
java.sql.Types::BLOB => :getBlob,
|
42
|
+
java.sql.Types::CLOB => :getString,
|
43
43
|
(java.sql.Types::NCLOB rescue nil) => :getString,
|
44
44
|
|
45
|
-
java.sql.Types::BOOLEAN
|
45
|
+
java.sql.Types::BOOLEAN => :getBoolean
|
46
46
|
} # :nodoc:
|
47
47
|
end#Connection
|
48
48
|
end#JDBCHelper
|
@@ -12,19 +12,20 @@ module Constants
|
|
12
12
|
# Constants only for Connectors
|
13
13
|
module Connector
|
14
14
|
JDBC_DRIVER = {
|
15
|
-
:oracle
|
16
|
-
:mysql
|
17
|
-
:postgres
|
15
|
+
:oracle => 'oracle.jdbc.driver.OracleDriver',
|
16
|
+
:mysql => 'com.mysql.jdbc.Driver',
|
17
|
+
:postgres => 'org.postgresql.Driver',
|
18
18
|
:sqlserver => 'com.microsoft.sqlserver.jdbc.SQLServerDriver'
|
19
19
|
}
|
20
20
|
|
21
21
|
DEFAULT_PARAMETERS = {
|
22
22
|
:mysql => {
|
23
23
|
'zeroDateTimeBehavior' => 'convertToNull',
|
24
|
-
# Removed from 0.6.3:
|
24
|
+
# Removed from 0.6.3:
|
25
|
+
# This can have a performance hit when batch size is large
|
25
26
|
# 'rewriteBatchedStatements' => 'true',
|
26
|
-
'useServerPrepStmts'
|
27
|
-
'useCursorFetch'
|
27
|
+
'useServerPrepStmts' => 'true',
|
28
|
+
'useCursorFetch' => 'true'
|
28
29
|
},
|
29
30
|
:postgres => {
|
30
31
|
'stringtype' => 'unspecified'
|
@@ -77,9 +77,8 @@ class SQLPrepared < JDBCHelper::SQL
|
|
77
77
|
|
78
78
|
private
|
79
79
|
def self.where_internal conds
|
80
|
-
conds
|
81
|
-
|
82
|
-
binds = []
|
80
|
+
conds = [conds] unless conds.is_a? Array
|
81
|
+
binds = []
|
83
82
|
clauses = []
|
84
83
|
conds.compact.each do |cond|
|
85
84
|
c, b = where_unit cond
|
@@ -157,7 +156,7 @@ class SQLPrepared < JDBCHelper::SQL
|
|
157
156
|
end
|
158
157
|
|
159
158
|
def self.insert_internal cmd, table, data_hash
|
160
|
-
binds
|
159
|
+
binds = []
|
161
160
|
values = data_hash.values.map { |v|
|
162
161
|
case v
|
163
162
|
when JDBCHelper::SQL::ScalarExpression
|
@@ -19,12 +19,12 @@ class SequenceWrapper < ObjectWrapper
|
|
19
19
|
super conn, name
|
20
20
|
|
21
21
|
case conn.driver
|
22
|
-
when /
|
23
|
-
@nextval_sql = "select #{name}.nextval from dual"
|
24
|
-
@currval_sql = "select #{name}.currval from dual"
|
25
|
-
else
|
22
|
+
when /postgres/
|
26
23
|
@nextval_sql = "select nextval('#{name}')"
|
27
24
|
@currval_sql = "select currval('#{name}')"
|
25
|
+
else
|
26
|
+
@nextval_sql = "select #{name}.nextval from dual"
|
27
|
+
@currval_sql = "select #{name}.currval from dual"
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -98,9 +98,9 @@ class TableWrapper < ObjectWrapper
|
|
98
98
|
# :where element of the given hash can (usually should) point to another Hash representing update filters.
|
99
99
|
# @return [Fixnum] Number of affected records
|
100
100
|
def update data_hash_with_where = {}
|
101
|
-
where_ext
|
102
|
-
where_ext
|
103
|
-
sql, binds = JDBCHelper::SQLPrepared.update(name,
|
101
|
+
where_ext = data_hash_with_where.delete(:where)
|
102
|
+
where_ext = [where_ext] unless where_ext.is_a? Array
|
103
|
+
sql, binds = JDBCHelper::SQLPrepared.update(name,
|
104
104
|
@query_default.merge(data_hash_with_where),
|
105
105
|
@query_where + where_ext.compact)
|
106
106
|
pstmt = prepare :update, sql
|
data/test/database.yml
CHANGED
@@ -1,28 +1,28 @@
|
|
1
1
|
---
|
2
2
|
mysql:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
3
|
+
driver: com.mysql.jdbc.Driver
|
4
|
+
url: jdbc:mysql://localhost/test
|
5
|
+
database: test
|
6
|
+
user: root
|
7
|
+
password:
|
8
|
+
timeout: 5
|
9
|
+
useServerPrepStmts: true
|
10
10
|
|
11
11
|
postgres:
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
driver: org.postgresql.Driver
|
13
|
+
url: jdbc:postgresql://localhost/test?stringtype=unspecified
|
14
|
+
database: test
|
15
|
+
timeout: 5
|
16
16
|
|
17
17
|
oracle:
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
driver: oracle.jdbc.driver.OracleDriver
|
19
|
+
url: jdbc:oracle:thin:@localhost/svc
|
20
|
+
database: test
|
21
|
+
user: testuser
|
22
|
+
password: testpassword
|
23
23
|
|
24
24
|
sqlserver:
|
25
|
-
driver:
|
26
|
-
url:
|
27
|
-
user:
|
28
|
-
password:
|
25
|
+
driver: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
26
|
+
url: jdbc:sqlserver://localhost;databaseName=test;
|
27
|
+
user: test
|
28
|
+
password: test
|
data/test/database.yml.local
CHANGED
@@ -1,31 +1,31 @@
|
|
1
1
|
---
|
2
2
|
mysql:
|
3
|
-
driver:
|
4
|
-
url:
|
5
|
-
database:
|
6
|
-
user:
|
3
|
+
driver: com.mysql.jdbc.Driver
|
4
|
+
url: jdbc:mysql://localhost/test
|
5
|
+
database: test
|
6
|
+
user: root
|
7
7
|
password:
|
8
|
-
timeout:
|
9
|
-
useServerPrepStmts:
|
8
|
+
timeout: 5
|
9
|
+
useServerPrepStmts: true
|
10
10
|
|
11
11
|
oracle:
|
12
|
-
driver:
|
13
|
-
url:
|
14
|
-
database:
|
15
|
-
user:
|
16
|
-
password:
|
17
|
-
timeout:
|
12
|
+
driver: oracle.jdbc.driver.OracleDriver
|
13
|
+
url: jdbc:oracle:thin:@10.20.253.105/didev
|
14
|
+
database: wisefn
|
15
|
+
user: wisefn
|
16
|
+
password: wisefndb
|
17
|
+
timeout: 5
|
18
18
|
|
19
19
|
postgres:
|
20
|
-
driver:
|
21
|
-
url:
|
22
|
-
database:
|
23
|
-
timeout:
|
24
|
-
stringtype:
|
20
|
+
driver: org.postgresql.Driver
|
21
|
+
url: jdbc:postgresql://localhost/test
|
22
|
+
database: test
|
23
|
+
timeout: 5
|
24
|
+
stringtype: unspecified
|
25
25
|
|
26
26
|
sqlserver:
|
27
|
-
driver:
|
28
|
-
url:
|
29
|
-
user:
|
30
|
-
password:
|
27
|
+
driver: com.microsoft.sqlserver.jdbc.SQLServerDriver
|
28
|
+
url: jdbc:sqlserver://192.168.62.26;databaseName=gunn_db;
|
29
|
+
user: gunn
|
30
|
+
password: gunn
|
31
31
|
|
data/test/test_connection.rb
CHANGED
@@ -72,6 +72,22 @@ class TestConnection < Test::Unit::TestCase
|
|
72
72
|
}
|
73
73
|
end
|
74
74
|
|
75
|
+
def test_inspect
|
76
|
+
config.each do | db, conn_info_org |
|
77
|
+
conn_info = conn_info_org.reject { |k,v| k == 'database' }
|
78
|
+
conn = JDBCHelper::Connection.new(conn_info)
|
79
|
+
insp = InsensitiveHash[ eval( conn.inspect.gsub('=>', ' => ') ) ]
|
80
|
+
|
81
|
+
conn_info.each do |k, v|
|
82
|
+
if k == 'password'
|
83
|
+
assert_nil insp[k]
|
84
|
+
else
|
85
|
+
assert_equal v, insp[k]
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
75
91
|
def test_connect_clone_and_close
|
76
92
|
config.each do | db, conn_info_org |
|
77
93
|
4.times do | i |
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: jdbc-helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.7.
|
5
|
+
version: 0.7.1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Junegunn Choi
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-02-
|
13
|
+
date: 2012-02-28 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: insensitive_hash
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
requirements:
|
20
20
|
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 0.2.3
|
23
23
|
requirement: *id001
|
24
24
|
prerelease: false
|
25
25
|
type: :runtime
|