marjoree 0.0.1 → 0.0.9
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/Marjoree.iml +14 -0
- data/README +9 -36
- data/bin/create_marj_structure.rb +75 -0
- data/bin/create_odbc_connections.rb +39 -0
- data/bin/odbc_connection_finder.rb +46 -0
- data/examples/contains_example.rb +1 -1
- data/examples/count_and_insert_example.rb +1 -1
- data/examples/select_example.rb +1 -1
- data/html/classes/ExpectedResultSet.html +60 -33
- data/html/classes/ExpectedResultSet.src/M000002.html +6 -5
- data/html/classes/ExpectedResultSet.src/M000003.html +5 -5
- data/html/classes/ExpectedResultSet.src/M000004.html +5 -5
- data/html/classes/ExpectedResultSet.src/M000005.html +18 -0
- data/html/classes/ExpectedResultSet.src/M000006.html +24 -0
- data/html/classes/ExpectedResultSet.src/M000007.html +23 -0
- data/html/classes/ExpectedResultSet.src/M000008.html +29 -0
- data/html/classes/Fixnum.html +287 -0
- data/html/classes/Fixnum.src/M000031.html +18 -0
- data/html/classes/Fixnum.src/M000034.html +18 -0
- data/html/classes/Fixnum.src/M000037.html +18 -0
- data/html/classes/Fixnum.src/M000039.html +18 -0
- data/html/classes/Fixnum.src/M000041.html +18 -0
- data/html/classes/Hash.html +156 -0
- data/html/classes/Hash.src/M000009.html +21 -0
- data/html/classes/Hash.src/M000010.html +20 -0
- data/html/classes/Marjoree.html +268 -151
- data/html/classes/Marjoree.src/M000057.html +19 -0
- data/html/classes/Marjoree.src/M000058.html +18 -0
- data/html/classes/{ExpectedResultSet.src/M000001.html → Marjoree.src/M000059.html} +4 -4
- data/html/classes/Marjoree.src/{M000024.html → M000060.html} +4 -4
- data/html/classes/Marjoree.src/{M000031.html → M000061.html} +4 -4
- data/html/classes/Marjoree.src/{M000026.html → M000062.html} +3 -3
- data/html/classes/Marjoree.src/{M000027.html → M000063.html} +3 -3
- data/html/classes/Marjoree.src/{M000028.html → M000064.html} +3 -3
- data/html/classes/Marjoree.src/{M000029.html → M000065.html} +5 -6
- data/html/classes/Marjoree.src/{M000030.html → M000066.html} +5 -5
- data/html/classes/Marjoree.src/M000067.html +19 -0
- data/html/classes/Marjoree.src/{M000032.html → M000068.html} +3 -3
- data/html/classes/{ResultSetWrapper.src/M000009.html → Marjoree.src/M000069.html} +4 -4
- data/html/classes/{ResultSetWrapper.src/M000010.html → Marjoree.src/M000070.html} +4 -4
- data/html/classes/{ResultSetWrapper.src/M000011.html → Marjoree.src/M000071.html} +4 -4
- data/html/classes/Marjoree.src/M000072.html +20 -0
- data/html/classes/Marjoree.src/M000073.html +20 -0
- data/html/classes/Marjoree.src/M000074.html +20 -0
- data/html/classes/Marjoree.src/{M000033.html → M000075.html} +3 -3
- data/html/classes/Marjoree.src/{M000034.html → M000076.html} +4 -4
- data/html/classes/Marjoree.src/{M000035.html → M000077.html} +2 -2
- data/html/classes/Marjoree.src/{M000036.html → M000078.html} +4 -3
- data/html/classes/Marjoree.src/{M000037.html → M000079.html} +1 -1
- data/html/classes/Marjoree.src/{M000038.html → M000080.html} +3 -3
- data/html/classes/Marjoree.src/{M000039.html → M000081.html} +3 -4
- data/html/classes/Marjoree.src/{M000040.html → M000082.html} +3 -3
- data/html/classes/Marjoree.src/{M000041.html → M000083.html} +3 -3
- data/html/classes/{ResultSetWrapper.src/M000008.html → Marjoree.src/M000084.html} +4 -4
- data/html/classes/ODBC.html +4 -0
- data/html/classes/ODBC/Error.html +12 -12
- data/html/classes/ODBC/Error.src/M000047.html +21 -0
- data/html/classes/ODBC/Error.src/{M000021.html → M000048.html} +2 -2
- data/html/classes/ODBC/TimeStamp.html +48 -18
- data/html/classes/ODBC/TimeStamp.src/{M000017.html → M000042.html} +2 -2
- data/html/classes/ODBC/TimeStamp.src/M000043.html +22 -0
- data/html/classes/ODBC/TimeStamp.src/{M000019.html → M000044.html} +2 -3
- data/html/classes/ODBC/TimeStamp.src/M000045.html +18 -0
- data/html/classes/ODBC/TimeStamp.src/M000046.html +18 -0
- data/html/classes/OdbcConnectionWrapper.html +244 -0
- data/html/classes/OdbcConnectionWrapper.src/M000023.html +18 -0
- data/html/classes/OdbcConnectionWrapper.src/M000024.html +18 -0
- data/html/classes/OdbcConnectionWrapper.src/M000025.html +22 -0
- data/html/classes/OdbcConnectionWrapper.src/M000026.html +25 -0
- data/html/classes/OdbcConnectionWrapper.src/M000027.html +20 -0
- data/html/classes/OdbcConnectionWrapper.src/M000028.html +28 -0
- data/html/classes/OdbcConnectionWrapper.src/M000029.html +24 -0
- data/html/classes/OdbcConnectionWrapper.src/M000030.html +30 -0
- data/html/classes/{ResultSetWrapper.html → ResultSet.html} +71 -94
- data/html/classes/ResultSet.src/M000011.html +27 -0
- data/html/classes/ResultSet.src/M000012.html +21 -0
- data/html/classes/ResultSet.src/M000013.html +23 -0
- data/html/classes/ResultSet.src/M000014.html +18 -0
- data/html/classes/ResultSet.src/M000015.html +18 -0
- data/html/classes/ResultSet.src/M000016.html +18 -0
- data/html/classes/ResultSet.src/M000017.html +18 -0
- data/html/classes/ResultSet.src/M000018.html +20 -0
- data/html/classes/ResultSet.src/M000019.html +18 -0
- data/html/classes/ResultSet.src/M000020.html +22 -0
- data/html/classes/ResultSet.src/M000021.html +23 -0
- data/html/classes/ResultSet.src/M000022.html +22 -0
- data/html/classes/Test.html +107 -0
- data/html/classes/Test/Unit.html +107 -0
- data/html/classes/Test/Unit/TestCase.html +257 -0
- data/html/classes/Test/Unit/TestCase.src/M000049.html +18 -0
- data/html/classes/Test/Unit/TestCase.src/M000050.html +18 -0
- data/html/classes/Test/Unit/TestCase.src/M000051.html +17 -0
- data/html/classes/Test/Unit/TestCase.src/M000052.html +17 -0
- data/html/classes/Test/Unit/TestCase.src/M000053.html +25 -0
- data/html/classes/Test/Unit/TestCase.src/M000054.html +18 -0
- data/html/classes/Test/Unit/TestCase.src/M000055.html +18 -0
- data/html/classes/Test/Unit/TestCase.src/M000056.html +35 -0
- data/html/created.rid +1 -1
- data/html/files/README.html +2 -51
- data/html/files/lib/expected_result_set_rb.html +1 -16
- data/html/files/lib/marjoree/core_rb.html +111 -0
- data/html/files/lib/marjoree/fixtures_rb.html +111 -0
- data/html/files/lib/marjoree/odbc_connection_wrapper_rb.html +109 -0
- data/html/files/lib/marjoree/odbc_rb.html +108 -0
- data/html/files/lib/{odbc_overrides_rb.html → marjoree/result_set_rb.html} +5 -5
- data/html/files/lib/{result_set_wrapper_rb.html → marjoree/time_rb.html} +5 -5
- data/html/files/lib/marjoree_rb.html +3 -4
- data/html/files/lib/run_marjoree_rb.html +145 -0
- data/html/files/lib/run_marjoree_rb.src/M000001.html +34 -0
- data/html/fr_class_index.html +7 -1
- data/html/fr_file_index.html +7 -2
- data/html/fr_method_index.html +84 -42
- data/lib/Marjoree.iml +12 -0
- data/lib/expected_result_set.rb +51 -24
- data/lib/marjoree.rb +2 -344
- data/lib/marjoree/core.rb +388 -0
- data/lib/marjoree/fixtures.rb +156 -0
- data/lib/marjoree/odbc.rb +45 -0
- data/lib/marjoree/odbc_connection_wrapper.rb +79 -0
- data/lib/marjoree/result_set.rb +165 -0
- data/lib/marjoree/sybase_definitions.rb +223 -0
- data/lib/marjoree/time.rb +31 -0
- data/lib/proc_param_info.txt +20 -0
- data/lib/run_marjoree.rb +31 -0
- data/pkg/marjoree-0.0.9.gem +0 -0
- data/rakefile.rb +3 -3
- data/tests/all_cruby_tests.rb +24 -0
- data/tests/all_jruby_tests.rb +22 -0
- data/tests/all_tests.rb +9 -6
- data/tests/fixtures/A.yml +3 -0
- data/tests/fixtures/B.yml +5 -0
- data/tests/fixtures/first_db/FIRST.yml +8 -0
- data/tests/fixtures/second_db/SECOND.yml +9 -0
- data/tests/marjoree/test_assert_results.rb +82 -0
- data/tests/marjoree/test_connection_details.rb +44 -0
- data/tests/{test_contains.rb → marjoree/test_contains.rb} +0 -0
- data/tests/{test_delete.rb → marjoree/test_delete.rb} +0 -0
- data/tests/marjoree/test_drop_user_objects.rb +52 -0
- data/tests/marjoree/test_expected_result_set.rb +111 -0
- data/tests/marjoree/test_fixtures.rb +112 -0
- data/tests/{test_insert.rb → marjoree/test_insert.rb} +0 -0
- data/tests/{test_marjoree.rb → marjoree/test_marjoree.rb} +14 -2
- data/tests/marjoree/test_multiple_db_fixtures.rb +35 -0
- data/tests/{test_num_rows.rb → marjoree/test_num_rows.rb} +0 -0
- data/tests/marjoree/test_odbc_connection_wrapper.rb +47 -0
- data/tests/{test_result_set_wrapper.rb → marjoree/test_result_set_wrapper.rb} +8 -8
- data/tests/marjoree/test_select.rb +55 -0
- data/tests/marjoree/test_single_odbc_connection_wrapper.rb +39 -0
- data/tests/{test_sproc.rb → marjoree/test_sproc.rb} +3 -4
- data/tests/marjoree/test_time.rb +25 -0
- data/tests/{test_time_stamp.rb → marjoree/test_time_stamp.rb} +10 -1
- data/tests/{test_truncate.rb → marjoree/test_truncate.rb} +0 -0
- data/tests/{test_update.rb → marjoree/test_update.rb} +14 -14
- data/tests/multiple_odbc_config/connections.yml +13 -0
- data/tests/single_odbc_config/connections.yml +3 -0
- metadata +214 -112
- data/html/classes/Marjoree.src/M000022.html +0 -19
- data/html/classes/Marjoree.src/M000023.html +0 -20
- data/html/classes/Marjoree.src/M000025.html +0 -18
- data/html/classes/Marjoree.src/M000042.html +0 -25
- data/html/classes/ODBC/Error.src/M000020.html +0 -21
- data/html/classes/ODBC/TimeStamp.src/M000018.html +0 -22
- data/html/classes/ResultSetWrapper.src/M000005.html +0 -27
- data/html/classes/ResultSetWrapper.src/M000006.html +0 -24
- data/html/classes/ResultSetWrapper.src/M000007.html +0 -23
- data/html/classes/ResultSetWrapper.src/M000012.html +0 -20
- data/html/classes/ResultSetWrapper.src/M000013.html +0 -18
- data/html/classes/ResultSetWrapper.src/M000014.html +0 -22
- data/html/classes/ResultSetWrapper.src/M000015.html +0 -23
- data/html/classes/ResultSetWrapper.src/M000016.html +0 -27
- data/lib/odbc_overrides.rb +0 -33
- data/lib/result_set_wrapper.rb +0 -193
- data/tests/test_expected_result_set.rb +0 -40
- data/tests/test_select.rb +0 -30
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
module SybaseDefinitions
|
|
2
|
+
|
|
3
|
+
def view( view_name )
|
|
4
|
+
return View.new( view_name )
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def table( table_name )
|
|
8
|
+
return Table.new( table_name )
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def int_column( column_name )
|
|
12
|
+
return ColumnDefinition.new( column_name, "int" )
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def varchar_column( column_name )
|
|
16
|
+
return ColumnDefinition.new( column_name, "varchar" )
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def char_column( column_name )
|
|
20
|
+
return ColumnDefinition.new( column_name, "char" )
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def datetime_column( column_name )
|
|
24
|
+
return ColumnDefinition.new( column_name, "datetime" )
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def numeric_column( column_name )
|
|
28
|
+
return ColumnDefinition.new( column_name, "numeric" )
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def bit_column( column_name )
|
|
32
|
+
return ColumnDefinition.new( column_name, "bit" )
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# helper classes
|
|
36
|
+
|
|
37
|
+
class View
|
|
38
|
+
def initialize( view_name )
|
|
39
|
+
@view_name = view_name
|
|
40
|
+
#puts $connection.columns( @table_name ).columns.each_hash{ |key,value| puts "Key: #{key}, value: #{value}"}
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def exists?
|
|
44
|
+
fail( "View #{@view_name} does not exist" ) unless get_user_views.include? @view_name
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class Table
|
|
49
|
+
def initialize( table_name )
|
|
50
|
+
@table_name = table_name
|
|
51
|
+
#puts $connection.columns( @table_name ).columns.each_hash{ |key,value| puts "Key: #{key}, value: #{value}"}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def exists?
|
|
55
|
+
fail( "Table #{@table_name} does not exist" ) unless get_user_tables.include? @table_name
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def contains_data?( map )
|
|
59
|
+
if( count( @table_name, map ) == 0 )
|
|
60
|
+
fail( "#{@table_name} does not contain data" )
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
return true
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def does_not_contain_data?( map )
|
|
67
|
+
if( count( @table_name, map ) != 0 )
|
|
68
|
+
fail( "#{@table_name} does contain data" )
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
return true
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def contains_columns?( list_of_expected_columns_definitions )
|
|
75
|
+
list_of_expected_columns_definitions.each do |expected_column|
|
|
76
|
+
contains_column?( expected_column.to_hash )
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def has_index?( index_name )
|
|
81
|
+
$db.indexes( @table_name ).each_hash do |map,value|
|
|
82
|
+
return true if map["INDEX_NAME"].eql?( index_name )
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
fail "#{@table_name} does not have index '#{index_name}'"
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def has_dropped_index?( column_name )
|
|
89
|
+
$db.indexes( @table_name ).each_hash do |map,value|
|
|
90
|
+
fail "#{@table_name} does contain index '#{column_name}'" if map["INDEX_NAME"].eql?( column_name )
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
return true
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def has_primary_key_on?( column_name )
|
|
97
|
+
$db.primary_keys( @table_name ).each_hash do |map,value|
|
|
98
|
+
return true if map["COLUMN_NAME"].eql?( column_name )
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
fail "#{@table_name} does not have a primary key on '#{column_name}'"
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def is_referenced_by_foreign_key?( referring_table, column_name )
|
|
105
|
+
$db.foreign_keys( @table_name ).each_hash do |map,value|
|
|
106
|
+
#p map
|
|
107
|
+
return true if (map["FKCOLUMN_NAME"].eql?( column_name ) && map["FKTABLE_NAME"].eql?( referring_table ) )
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
fail "#{@table_name} does not have a foreign key on '#{column_name}'"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
def has_row_count?( expected_count )
|
|
114
|
+
actual_count = count( @table_name )
|
|
115
|
+
if( expected_count != count( @table_name ) )
|
|
116
|
+
fail( "Number of colums are not equal,\nExpected: #{expected_count}\nActual: #{actual_count}")
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
return self
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
private
|
|
123
|
+
|
|
124
|
+
def contains_column?( expected_column_details )
|
|
125
|
+
actual_column = column( expected_column_details[:name] )
|
|
126
|
+
|
|
127
|
+
type_match?(expected_column_details, actual_column )
|
|
128
|
+
nullability_match?(expected_column_details, actual_column )
|
|
129
|
+
column_size_match?(expected_column_details, actual_column )
|
|
130
|
+
|
|
131
|
+
return !actual_column.exists?
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def type_match?( expected_column, actual_column)
|
|
135
|
+
return do_they_match?( expected_column[:type], actual_column.type, "Type", expected_column[:name])
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def nullability_match?( expected_column, actual_column)
|
|
139
|
+
return do_they_match?( expected_column[:nullable], actual_column.nullable?, "Nullability", expected_column[:name])
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
def column_size_match?(expected_column, actual_column)
|
|
143
|
+
return do_they_match?( expected_column[:column_size], actual_column.column_size, "Column size", expected_column[:name])
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def column( column_name )
|
|
147
|
+
$db.columns( @table_name ).each_hash do |map,value|
|
|
148
|
+
return Column.new( map ) if map["COLUMN_NAME"].eql?( column_name )
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def do_they_match?( expected, actual, error_type, column_name )
|
|
153
|
+
if( !expected.nil? )
|
|
154
|
+
if( !expected.eql?( actual ) )
|
|
155
|
+
fail( "#{error_type} mismatch for column #{column_name}, \nExpected: #{expected}\nActual: #{actual}")
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
return true
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
class Column
|
|
164
|
+
def initialize( column_map )
|
|
165
|
+
@map = column_map
|
|
166
|
+
end
|
|
167
|
+
|
|
168
|
+
def type
|
|
169
|
+
return @map["TYPE_NAME"]
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def nullable?
|
|
173
|
+
return @map["IS_NULLABLE"].eql?( "YES" )
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def column_size
|
|
177
|
+
return @map["COLUMN_SIZE"]
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def exists?
|
|
181
|
+
return !@map.nil?
|
|
182
|
+
end
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
class ColumnDefinition
|
|
186
|
+
attr_accessor :name, :type
|
|
187
|
+
|
|
188
|
+
def initialize( name, type )
|
|
189
|
+
@name, @type = name, type
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
def to_hash
|
|
193
|
+
result = {}
|
|
194
|
+
|
|
195
|
+
result[:name] = @name unless @name.nil?
|
|
196
|
+
result[:type] = @type unless @type.nil?
|
|
197
|
+
result[:nullable] = @nullable unless @nullable.nil?
|
|
198
|
+
result[:column_size] = @size unless @size.nil?
|
|
199
|
+
|
|
200
|
+
return result
|
|
201
|
+
end
|
|
202
|
+
|
|
203
|
+
def with_size( size )
|
|
204
|
+
@size = size
|
|
205
|
+
return self
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def is_nullable
|
|
209
|
+
@nullable = true
|
|
210
|
+
return self
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
def is_not_nullable
|
|
214
|
+
@nullable = false
|
|
215
|
+
return self
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
def with_identity
|
|
219
|
+
@type += " identity";
|
|
220
|
+
return self
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class Fixnum
|
|
2
|
+
def secs
|
|
3
|
+
self
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
alias_method :seconds, :secs
|
|
7
|
+
alias_method :sec, :secs
|
|
8
|
+
|
|
9
|
+
def mins
|
|
10
|
+
self * 60
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
alias_method :minutes, :mins
|
|
14
|
+
alias_method :min, :mins
|
|
15
|
+
|
|
16
|
+
def hours
|
|
17
|
+
self * 60 * 60
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
alias_method :hour, :hours
|
|
21
|
+
|
|
22
|
+
def days
|
|
23
|
+
hours * 24
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
alias_method :day, :days
|
|
27
|
+
|
|
28
|
+
def ago
|
|
29
|
+
Time.new - self
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
# Get proc info result set
|
|
3
|
+
odbc_statement = $db.procedure_columns '<proc_name>'
|
|
4
|
+
results_set = ResultSet.new( odbc_statement )
|
|
5
|
+
|
|
6
|
+
# Three columns are of interest
|
|
7
|
+
# COLUMN_NAME - gives the param names for the sp
|
|
8
|
+
# COLUMN_TYPE - 1 means the param specified in COLUMN_NAME is an input param
|
|
9
|
+
- 2 means the param specified in COLUMN_NAME is an output param
|
|
10
|
+
# TYPE_NAME - is the type associated with the param. ie: int, varchar
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
| ORDINAL_POSITION | SQL_DATA_TYPE | REMARKS | NULLABLE | NUM_PREC_RADIX | PROCEDURE_NAME | CHAR_OCTET_LENGTH | PROCEDURE_SCHEM | COLUMN_SIZE | COLUMN_TYPE | IS_NULLABLE | DATA_TYPE | BUFFER_LENGTH | TYPE_NAME | SQL_DATETIME_SUB | DECIMAL_DIGITS | COLUMN_NAME | COLUMN_DEF | PROCEDURE_CAT |
|
|
14
|
+
------------------ --------------- --------- ---------- ---------------- ------------------------------- ------------------- ----------------- ------------- ------------- ------------- ----------- --------------- ----------- ------------------ ---------------- -------------------- ------------ ---------------
|
|
15
|
+
| 0 | 4 | | 1 | 10 | test_sproc_with_output_params | | dbo | 10 | 5 | YES | 4 | 4 | int | | 0 | RETURN_VALUE | | EMT |
|
|
16
|
+
| 1 | 4 | | 1 | 10 | test_sproc_with_output_params | | dbo | 10 | 1 | YES | 4 | 4 | int | | 0 | @input_param_one | | EMT |
|
|
17
|
+
| 2 | 4 | | 1 | 10 | test_sproc_with_output_params | | dbo | 10 | 4 | YES | 4 | 4 | int | | 0 | @output_number | | EMT |
|
|
18
|
+
| 3 | 12 | | 1 | | test_sproc_with_output_params | 10 | dbo | 10 | 1 | YES | 12 | 10 | varchar | | | @input_param_two | | EMT |
|
|
19
|
+
| 4 | 12 | | 1 | | test_sproc_with_output_params | 10 | dbo | 10 | 4 | YES | 12 | 10 | varchar | | | @output_text | | EMT |
|
|
20
|
+
| 5 | -7 | | 1 | 10 | test_sproc_with_output_params | | dbo | 1 | 1 | YES | -7 | 1 | bit | | 0 | @input_param_three | | EMT |
|
data/lib/run_marjoree.rb
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
$:.unshift File.dirname(__FILE__)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
require 'test/unit'
|
|
5
|
+
require 'marjoree'
|
|
6
|
+
require 'marjoree/fixtures'
|
|
7
|
+
require 'marjoree/odbc_connection_wrapper'
|
|
8
|
+
require 'test/unit'
|
|
9
|
+
#require 'util/majoree_util'
|
|
10
|
+
|
|
11
|
+
include Marjoree
|
|
12
|
+
|
|
13
|
+
def run_marjoree_tests_and_exit
|
|
14
|
+
Test::Unit.run=true
|
|
15
|
+
puts Test::Unit.run?
|
|
16
|
+
|
|
17
|
+
#OdbcConnectionWrapper.odbc_config_path = '../../../DatabaseTests/credit_manager/odbc_config/connections.yml'
|
|
18
|
+
OdbcConnectionWrapper.odbc_config_path = 'odbc_config/connections.yml'
|
|
19
|
+
|
|
20
|
+
odbc_connection = OdbcConnectionWrapper.new()
|
|
21
|
+
establish_connection_to( odbc_connection )
|
|
22
|
+
connect_me_to( 'EMT_TEST' )
|
|
23
|
+
|
|
24
|
+
# connect('EMT_TEST', 'sa', '' )
|
|
25
|
+
Kernel.at_exit { disconnect_me }
|
|
26
|
+
|
|
27
|
+
yield
|
|
28
|
+
|
|
29
|
+
passed = Test::Unit::AutoRunner.run
|
|
30
|
+
exit passed ? 0 : -1
|
|
31
|
+
end
|
|
Binary file
|
data/rakefile.rb
CHANGED
|
@@ -9,10 +9,10 @@ task :default => ['test', "rdoc"]
|
|
|
9
9
|
|
|
10
10
|
spec = Gem::Specification.new do |s|
|
|
11
11
|
s.name = 'marjoree'
|
|
12
|
-
s.version = "0.0.
|
|
12
|
+
s.version = "0.0.9"
|
|
13
13
|
s.platform = Gem::Platform::RUBY
|
|
14
14
|
s.summary = "Marjoree is the Stored Procedure Testing Library"
|
|
15
|
-
s.homepage = "http://
|
|
15
|
+
s.homepage = "http://marjoree.rubyforge.org"
|
|
16
16
|
s.files = Dir["./**/*"]
|
|
17
17
|
s.has_rdoc=true
|
|
18
18
|
s.author = "Peter Aitken, Ian Davies, Gus MacCuish"
|
|
@@ -33,6 +33,6 @@ end
|
|
|
33
33
|
|
|
34
34
|
Rake::TestTask.new do |t|
|
|
35
35
|
t.libs << "lib"
|
|
36
|
-
t.test_files = FileList['tests/
|
|
36
|
+
t.test_files = FileList['tests/all_cruby_tests.rb']
|
|
37
37
|
t.verbose = true
|
|
38
38
|
end
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
|
2
|
+
|
|
3
|
+
require 'marjoree'
|
|
4
|
+
require 'expected_result_set'
|
|
5
|
+
require 'marjoree/odbc_connection_wrapper'
|
|
6
|
+
|
|
7
|
+
include Marjoree
|
|
8
|
+
|
|
9
|
+
#Path from all_cruby_tests.rb
|
|
10
|
+
OdbcConnectionWrapper.odbc_config_path = './tests/multiple_odbc_config/connections.yml'
|
|
11
|
+
|
|
12
|
+
odbc_connection = OdbcConnectionWrapper.new()
|
|
13
|
+
establish_connection_to( odbc_connection )
|
|
14
|
+
|
|
15
|
+
Kernel.at_exit {
|
|
16
|
+
disconnect_me
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
Dir['**/test_*.rb'].each do |test_case|
|
|
20
|
+
require test_case
|
|
21
|
+
# puts "require \"#{test_case}\""
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
#require "tests/marjoree/test_assert_results.rb"
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#$:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
|
2
|
+
#
|
|
3
|
+
#require 'marjoree'
|
|
4
|
+
#require 'expected_result_set'
|
|
5
|
+
#require 'marjoree/jdbc_connection_wrapper'
|
|
6
|
+
#
|
|
7
|
+
#include Marjoree
|
|
8
|
+
#
|
|
9
|
+
#
|
|
10
|
+
#connection = JDBCConnectionWrapper.new( 'LGLAIB9B98T2J', 'EMT', 'sa', '' )
|
|
11
|
+
#connect_to(connection)
|
|
12
|
+
#
|
|
13
|
+
#Kernel.at_exit {
|
|
14
|
+
# disconnect
|
|
15
|
+
#}
|
|
16
|
+
#
|
|
17
|
+
#Dir['**/test_*.rb'].each do |test_case|
|
|
18
|
+
# require test_case
|
|
19
|
+
#end
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
puts "Running in JRUBY"
|
data/tests/all_tests.rb
CHANGED
|
@@ -2,14 +2,17 @@ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
|
|
|
2
2
|
|
|
3
3
|
require 'marjoree'
|
|
4
4
|
require 'expected_result_set'
|
|
5
|
-
require '
|
|
5
|
+
require 'marjoree/odbc_connection_wrapper'
|
|
6
6
|
|
|
7
7
|
include Marjoree
|
|
8
|
-
connect('ODBC_DATASOURCE_NAME', 'USERNAME', 'PASSWORD' )
|
|
9
|
-
Kernel.at_exit { disconnect }
|
|
10
8
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
end
|
|
9
|
+
connection = OdbcConnectionWrapper.new( 'EMT_LOCAL', 'sa', '' )
|
|
10
|
+
connect_to(connection)
|
|
14
11
|
|
|
12
|
+
Kernel.at_exit {
|
|
13
|
+
disconnect
|
|
14
|
+
}
|
|
15
15
|
|
|
16
|
+
Dir['**/test_*.rb'].each do |test_case|
|
|
17
|
+
require test_case
|
|
18
|
+
end
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
$:.unshift File.dirname(__FILE__) + "/../../lib"
|
|
2
|
+
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
require 'expected_result_set'
|
|
5
|
+
require 'marjoree/result_set'
|
|
6
|
+
require 'marjoree'
|
|
7
|
+
|
|
8
|
+
class TestAssertResults < Test::Unit::TestCase
|
|
9
|
+
include Marjoree
|
|
10
|
+
class StubStatement
|
|
11
|
+
def initialize( result_set_rows = [])
|
|
12
|
+
@result_set_rows = result_set_rows
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def each_hash
|
|
16
|
+
@result_set_rows.each { |row| yield row }
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def columns
|
|
20
|
+
return {"first"=>"val", "second"=>"val", "third"=>"val" }
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def setup
|
|
25
|
+
@expected = ExpectedResultSet.new
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def test_assert_equals_fails_when_expected_columns_not_found
|
|
29
|
+
@expected.columns = [:first, :beta]
|
|
30
|
+
other = ResultSet.new StubStatement.new
|
|
31
|
+
assert_raises(Test::Unit::AssertionFailedError) {assert_results @expected, other}
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def test_assert_unxexpected_columns_in_actual_ignored
|
|
35
|
+
@expected.columns = [:first]
|
|
36
|
+
other = ResultSet.new StubStatement.new
|
|
37
|
+
assert_results @expected, other
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_assert_equals_passes_with_empty_rows_and_identical_columns
|
|
41
|
+
@expected.columns = [:first, :second]
|
|
42
|
+
other = ResultSet.new StubStatement.new
|
|
43
|
+
assert_results @expected, other
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def test_assert_equals_fails_when_expected_row_count_excedes_actual
|
|
47
|
+
@expected.columns = [:first, :second]
|
|
48
|
+
@expected.rows << [1, 10]
|
|
49
|
+
other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}])
|
|
50
|
+
|
|
51
|
+
assert_raises(Test::Unit::AssertionFailedError) {assert_results @expected, other}
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_assert_equals_passes_when_actual_row_count_excedes_expected
|
|
56
|
+
@expected.columns = [:first, :second]
|
|
57
|
+
other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}, {}])
|
|
58
|
+
|
|
59
|
+
assert_results @expected, other
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def test_assert_equals_passes_when_row_value_are_equal
|
|
63
|
+
@expected.columns = [:first, :second]
|
|
64
|
+
@expected.rows << [1, 2]
|
|
65
|
+
other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}])
|
|
66
|
+
|
|
67
|
+
assert_results @expected, other
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def test_assert_equals_fails_when_row_count_differs
|
|
71
|
+
@expected.columns = [:first, :second]
|
|
72
|
+
@expected.rows << [1, 2]
|
|
73
|
+
@expected.rows << []
|
|
74
|
+
other = ResultSet.new StubStatement.new([{"first"=>1, "second"=>2}])
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
assert_raises(Test::Unit::AssertionFailedError) {assert_results @expected, other}
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
end
|