activerecord-dbslayer-adapter 0.2.0 → 0.2.5
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +9 -2
- data/Manifest.txt +1 -0
- data/lib/active_record/connection_adapters/dbslayer_connection.rb +16 -11
- data/lib/activerecord-dbslayer-adapter.rb +1 -1
- data/tasks/rcov.rake +9 -0
- data/test/helper.rb +26 -1
- data/test/test_dbslayer_connection.rb +54 -9
- data/website/index.txt +0 -2
- metadata +3 -2
data/History.txt
CHANGED
@@ -1,10 +1,17 @@
|
|
1
|
-
== 0.
|
1
|
+
== 0.2.5 2008-05-06
|
2
|
+
|
3
|
+
* 3 minor enhancements:
|
4
|
+
* passes test for multiple results
|
5
|
+
* passes test for null results
|
6
|
+
* rcov rake task
|
7
|
+
|
8
|
+
== 0.2.0 2008-05-01
|
2
9
|
|
3
10
|
* 2 major enhancments:
|
4
11
|
* tests
|
5
12
|
* it actually works!
|
6
13
|
|
7
|
-
== 0.0
|
14
|
+
== 0.1.0 2008-04-15
|
8
15
|
|
9
16
|
* 1 major enhancement:
|
10
17
|
* Initial release
|
data/Manifest.txt
CHANGED
@@ -70,16 +70,21 @@ module ActiveRecord
|
|
70
70
|
def sql_query(sql)
|
71
71
|
dbslay_results = cmd_execute(:db, 'SQL' => sql)
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
73
|
+
# check for an error
|
74
|
+
if dbslay_results['MYSQL_ERROR']
|
75
|
+
raise DbslayerException, "MySQL Error #{dbslay_results['MYSQL_ERRNO']}: #{dbslay_results['MYSQL_ERROR']}"
|
76
|
+
elsif dbslay_results['RESULT']
|
77
|
+
result = dbslay_results['RESULT']
|
78
|
+
case result
|
79
|
+
when Hash
|
80
|
+
DbslayerResult.new(result)
|
81
|
+
when Array
|
82
|
+
result.map {|r| DbslayerResult.new(r) }
|
83
|
+
else
|
84
|
+
raise DbslayerException, "Unknown format for SQL results from DBSlayer"
|
80
85
|
end
|
81
|
-
|
82
|
-
dbslay_results
|
86
|
+
elsif dbslay_results['SUCCESS']
|
87
|
+
return dbslay_results['SUCCESS']
|
83
88
|
else
|
84
89
|
raise DbslayerException, "Unknown format for SQL results from DBSlayer"
|
85
90
|
end
|
@@ -106,14 +111,14 @@ module ActiveRecord
|
|
106
111
|
|
107
112
|
def client_version_num
|
108
113
|
if @client_version.nil?
|
109
|
-
@client_version = cmd_execute(:db, 'CLIENT_VERSION' => true)["CLIENT_VERSION"]
|
114
|
+
@client_version = Integer(cmd_execute(:db, 'CLIENT_VERSION' => true)["CLIENT_VERSION"])
|
110
115
|
end
|
111
116
|
@client_version
|
112
117
|
end
|
113
118
|
|
114
119
|
def server_version_num
|
115
120
|
if @server_version.nil?
|
116
|
-
@server_version = cmd_execute(:db, 'SERVER_VERSION' => true)["SERVER_VERSION"]
|
121
|
+
@server_version = Integer(cmd_execute(:db, 'SERVER_VERSION' => true)["SERVER_VERSION"])
|
117
122
|
end
|
118
123
|
@server_version
|
119
124
|
end
|
data/tasks/rcov.rake
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
desc 'Measures test coverage'
|
2
|
+
task :test_coverage do
|
3
|
+
rm_f "coverage"
|
4
|
+
rm_f "coverage.data"
|
5
|
+
rcov = "rcov --aggregate coverage.data --text-summary -Ilib"
|
6
|
+
system("#{rcov} --html test/test_*.rb")
|
7
|
+
system("open coverage/index.html") if PLATFORM['darwin']
|
8
|
+
end
|
9
|
+
|
data/test/helper.rb
CHANGED
@@ -10,6 +10,10 @@ require 'active_record/connection_adapters/dbslayer_adapter'
|
|
10
10
|
|
11
11
|
STAT_REPLY = {"STAT" => "STAT"}
|
12
12
|
|
13
|
+
CLIENT_INFO_REPLY = {"CLIENT_INFO" => "5.2.27"}
|
14
|
+
|
15
|
+
VERSION_NUM_REPLY = {"SERVER_VERSION" => "50037", "CLIENT_VERSION" => "50037"}
|
16
|
+
|
13
17
|
# Let's mock out the DBSlayer reply
|
14
18
|
CITY_ROWS = [[123, "Mumbai (Bombay)" , "India" , 10500000] ,
|
15
19
|
[4112, "Seoul" , "South Korea" , 9981619] ,
|
@@ -23,7 +27,7 @@ CITY_ROWS = [[123, "Mumbai (Bombay)" , "India" , 10500000] ,
|
|
23
27
|
[1, "New York" , "United States" , 8008278]
|
24
28
|
].freeze
|
25
29
|
|
26
|
-
CITY_TYPES = ["MYSQL_TYPE_STRING", "MYSQL_TYPE_STRING" , "MYSQL_TYPE_LONG"].freeze
|
30
|
+
CITY_TYPES = ["MYSQL_TYPE_INTEGER", "MYSQL_TYPE_STRING", "MYSQL_TYPE_STRING" , "MYSQL_TYPE_LONG"].freeze
|
27
31
|
|
28
32
|
CITY_HEADER = ["id", "city_name" , "country_name" , "population"].freeze
|
29
33
|
|
@@ -34,6 +38,27 @@ CITY_RESULTS = {
|
|
34
38
|
}
|
35
39
|
}.freeze
|
36
40
|
|
41
|
+
COUNTRY_ROWS = [[1, 'United States'], [2, 'Canada'], [3, 'India']].freeze
|
42
|
+
|
43
|
+
COUNTRY_TYPES = ["MYSQL_TYPE_INTEGER", "MYSQL_TYPE_STRING"]
|
44
|
+
|
45
|
+
COUNTRY_HEADER = ["id", "name"]
|
46
|
+
|
47
|
+
MULTIPLE_RESULTS = {
|
48
|
+
"RESULT" => [{"TYPES" => CITY_TYPES,
|
49
|
+
"HEADER" => CITY_HEADER,
|
50
|
+
"ROWS" => CITY_ROWS
|
51
|
+
},
|
52
|
+
|
53
|
+
{"TYPES" => COUNTRY_TYPES,
|
54
|
+
"HEADER" => COUNTRY_HEADER,
|
55
|
+
"ROWS" => COUNTRY_ROWS
|
56
|
+
}
|
57
|
+
|
58
|
+
]
|
59
|
+
}.freeze
|
60
|
+
|
61
|
+
NULL_RESULT = {"SUCCESS" => true}
|
37
62
|
|
38
63
|
SHOW_TABLES_REPLY = {"RESULT"=> {"HEADER"=> ["Tables_in_Test_Database"],
|
39
64
|
"ROWS" => [["table1"], ["table2"]],
|
@@ -2,18 +2,28 @@ require File.dirname(__FILE__) + '/helper.rb'
|
|
2
2
|
|
3
3
|
class TestDbslayerConnection < Test::Unit::TestCase
|
4
4
|
|
5
|
-
STAT_REPLY = {
|
6
|
-
"STAT" => "THIS IS A STAT REPLY"
|
7
|
-
}.freeze
|
8
|
-
|
9
|
-
CLIENT_INFO_REPLY = {
|
10
|
-
"CLIENT_INFO" => "5.2.27"
|
11
|
-
}.freeze
|
12
|
-
|
13
5
|
def setup
|
14
6
|
@slayer = ActiveRecord::ConnectionAdapters::DbslayerConnection.new
|
15
7
|
end
|
16
8
|
|
9
|
+
def test_query_string
|
10
|
+
query = {"foo" => "bar"}
|
11
|
+
assert_equal URI.encode(query.to_json), @slayer.send('query_string', query)
|
12
|
+
end
|
13
|
+
|
14
|
+
# def cmd_execute(endpoint, commands)
|
15
|
+
# 147 url = "http://#{host}:#{port}/#{endpoint.to_s}?#{query_string(commands)}"
|
16
|
+
# 148 open(url) do |file|
|
17
|
+
# 149 JSON.parse(file.read)
|
18
|
+
# 150 end
|
19
|
+
|
20
|
+
# def test_cmd_execute_url
|
21
|
+
# query = {"SQL" => "select * from cities"}
|
22
|
+
# test = ActiveRecord::ConnectionAdapters::DbslayerConnection.new('localhost', 9090)
|
23
|
+
# URI.expects(:open).with("http://localhost:9090/db?#{test.send(:query_string, query)}")
|
24
|
+
# test.send :cmd_execute, :db, query
|
25
|
+
# end
|
26
|
+
|
17
27
|
def test_sql_query
|
18
28
|
sql_command = "select * from cities limit 10"
|
19
29
|
@slayer.stubs(:cmd_execute).with(:db, {"SQL" => sql_command}).returns(CITY_RESULTS)
|
@@ -24,6 +34,26 @@ class TestDbslayerConnection < Test::Unit::TestCase
|
|
24
34
|
assert_not_nil reply.rows
|
25
35
|
end
|
26
36
|
|
37
|
+
def test_sql_null_return
|
38
|
+
sql_command = "update set posted = 1"
|
39
|
+
@slayer.stubs(:cmd_execute).with(:db, {"SQL" => sql_command}).returns(NULL_RESULT)
|
40
|
+
|
41
|
+
status = @slayer.sql_query(sql_command)
|
42
|
+
assert_equal true, status
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_multiple_results
|
46
|
+
sql_command = "select * from cities limit 10; select * from countries limit 3"
|
47
|
+
@slayer.stubs(:cmd_execute).with(:db, {"SQL" => sql_command}).returns(MULTIPLE_RESULTS)
|
48
|
+
|
49
|
+
reply = @slayer.sql_query(sql_command)
|
50
|
+
assert_kind_of Array, reply
|
51
|
+
assert_equal 2, reply.size
|
52
|
+
reply.each {|i| assert_kind_of(ActiveRecord::ConnectionAdapters::DbslayerResult, i)}
|
53
|
+
assert_equal CITY_ROWS, reply[0].rows
|
54
|
+
assert_equal COUNTRY_ROWS, reply[1].rows
|
55
|
+
end
|
56
|
+
|
27
57
|
def test_stat
|
28
58
|
@slayer.stubs(:cmd_execute).with(:db, {"STAT" => true}).returns(STAT_REPLY)
|
29
59
|
reply = @slayer.mysql_stats
|
@@ -40,6 +70,21 @@ class TestDbslayerConnection < Test::Unit::TestCase
|
|
40
70
|
|
41
71
|
def test_server_error
|
42
72
|
@slayer.stubs(:cmd_execute).returns(ERROR_REPLY)
|
43
|
-
assert_raise(DbslayerException) { @slayer.sql_query("SELECT * FROM items") }
|
73
|
+
assert_raise(ActiveRecord::ConnectionAdapters::DbslayerException) { @slayer.sql_query("SELECT * FROM items") }
|
44
74
|
end
|
75
|
+
|
76
|
+
def test_client_num
|
77
|
+
@slayer.stubs(:cmd_execute).with(:db, {"CLIENT_VERSION" => true}).returns(VERSION_NUM_REPLY)
|
78
|
+
reply = @slayer.client_version_num
|
79
|
+
|
80
|
+
assert_equal 50037, reply
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_server_num
|
84
|
+
@slayer.stubs(:cmd_execute).with(:db, {"SERVER_VERSION" => true}).returns(VERSION_NUM_REPLY)
|
85
|
+
reply = @slayer.server_version_num
|
86
|
+
|
87
|
+
assert_equal 50037, reply
|
88
|
+
end
|
89
|
+
|
45
90
|
end
|
data/website/index.txt
CHANGED
@@ -21,8 +21,6 @@ h2. Forum
|
|
21
21
|
|
22
22
|
"http://groups.google.com/group/activerecord_dbslayer_adapter":http://groups.google.com/group/activerecord_dbslayer_adapter
|
23
23
|
|
24
|
-
TODO - create Google Group - activerecord_dbslayer_adapter
|
25
|
-
|
26
24
|
h2. How to submit patches
|
27
25
|
|
28
26
|
Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-dbslayer-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jacob Harris
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-05-
|
12
|
+
date: 2008-05-08 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -45,6 +45,7 @@ files:
|
|
45
45
|
- setup.rb
|
46
46
|
- tasks/deployment.rake
|
47
47
|
- tasks/environment.rake
|
48
|
+
- tasks/rcov.rake
|
48
49
|
- tasks/website.rake
|
49
50
|
- test/helper.rb
|
50
51
|
- test/localtest.rb
|