activerecord-dbslayer-adapter 0.2.0 → 0.2.5
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/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
|