ruby-plsql 0.4.1 → 0.4.2

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.
@@ -344,13 +344,12 @@ describe "Parameter type mapping /" do
344
344
  end
345
345
 
346
346
  it "should raise exception if procedure cannot be found based on number of arguments" do
347
- lambda { plsql.test_package2.test_procedure() }.should raise_error(ArgumentError)
347
+ lambda { plsql.test_package2.test_procedure() }.should raise_error(/wrong number or types of arguments/i)
348
348
  end
349
349
 
350
- # TODO: should try to implement matching by types of arguments
351
- # it "should find procedure based on types of arguments" do
352
- # plsql.test_package2.test_procedure(111, nil).should == {:p_result => '111'}
353
- # end
350
+ it "should find procedure based on types of arguments" do
351
+ plsql.test_package2.test_procedure(111, nil).should == {:p_result => '111'}
352
+ end
354
353
 
355
354
  it "should find procedure based on names of named arguments" do
356
355
  plsql.test_package2.test_procedure(:p_number => 111, :p_result => nil).should == {:p_result => '111'}
@@ -559,6 +558,28 @@ describe "Parameter type mapping /" do
559
558
  RETURN p_employee.first_name || ' ' || p_employee.last_name;
560
559
  END test_full_name;
561
560
  SQL
561
+ plsql.execute <<-SQL
562
+ CREATE OR REPLACE PACKAGE test_record IS
563
+ TYPE t_employee IS RECORD(
564
+ employee_id NUMBER(15),
565
+ first_name VARCHAR2(50),
566
+ last_name VARCHAR2(50),
567
+ hire_date DATE
568
+ );
569
+ FUNCTION test_full_name (p_employee t_employee)
570
+ RETURN VARCHAR2;
571
+ END;
572
+ SQL
573
+ plsql.execute <<-SQL
574
+ CREATE OR REPLACE PACKAGE BODY test_record IS
575
+ FUNCTION test_full_name (p_employee t_employee)
576
+ RETURN VARCHAR2
577
+ IS
578
+ BEGIN
579
+ RETURN p_employee.first_name || ' ' || p_employee.last_name;
580
+ END;
581
+ END;
582
+ SQL
562
583
  plsql.execute <<-SQL
563
584
  CREATE OR REPLACE FUNCTION test_employee_record (p_employee test_employees%ROWTYPE)
564
585
  RETURN test_employees%ROWTYPE
@@ -568,7 +589,7 @@ describe "Parameter type mapping /" do
568
589
  END test_employee_record;
569
590
  SQL
570
591
  plsql.execute <<-SQL
571
- CREATE OR REPLACE FUNCTION test_employee_record2 (p_employee test_employees%ROWTYPE, x_employee OUT test_employees%ROWTYPE)
592
+ CREATE OR REPLACE FUNCTION test_employee_record2 (p_employee test_employees%ROWTYPE, x_employee IN OUT test_employees%ROWTYPE)
572
593
  RETURN test_employees%ROWTYPE
573
594
  IS
574
595
  BEGIN
@@ -595,6 +616,7 @@ describe "Parameter type mapping /" do
595
616
 
596
617
  after(:all) do
597
618
  plsql.execute "DROP FUNCTION test_full_name"
619
+ plsql.execute "DROP PACKAGE test_record"
598
620
  plsql.execute "DROP FUNCTION test_employee_record"
599
621
  plsql.execute "DROP FUNCTION test_employee_record2"
600
622
  plsql.execute "DROP TABLE test_employees"
@@ -627,7 +649,11 @@ describe "Parameter type mapping /" do
627
649
  end
628
650
 
629
651
  it "should return record return value and output record parameter value" do
630
- plsql.test_employee_record2(@p_employee, nil).should == [@p_employee, {:x_employee => @p_employee}]
652
+ plsql.test_employee_record2(@p_employee, @p_employee2).should == [@p_employee, {:x_employee => @p_employee}]
653
+ end
654
+
655
+ it "should execute package function with parameter with record type defined in package" do
656
+ plsql.test_record.test_full_name(@p_employee).should == 'First Last'
631
657
  end
632
658
 
633
659
  end
@@ -852,12 +878,36 @@ describe "Parameter type mapping /" do
852
878
  END;
853
879
  SQL
854
880
 
855
- # Wrong type definition inside package
881
+ # Type definition inside package
856
882
  plsql.execute <<-SQL
857
883
  CREATE OR REPLACE PACKAGE test_collections IS
858
884
  TYPE t_numbers IS TABLE OF NUMBER(15);
859
885
  FUNCTION test_sum (p_numbers IN t_numbers)
860
886
  RETURN NUMBER;
887
+ FUNCTION test_numbers (p_numbers IN t_numbers, x_numbers OUT t_numbers)
888
+ RETURN t_numbers;
889
+ TYPE t_employee IS RECORD(
890
+ employee_id NUMBER(15),
891
+ first_name VARCHAR2(50),
892
+ last_name VARCHAR2(50),
893
+ hire_date DATE
894
+ );
895
+ TYPE t_employees IS TABLE OF t_employee;
896
+ FUNCTION test_employees (p_employees IN OUT t_employees)
897
+ RETURN t_employees;
898
+ -- these types with tables in lower level are not yet supported
899
+ TYPE t_employee2 IS RECORD(
900
+ employee_id NUMBER(15),
901
+ first_name VARCHAR2(50),
902
+ last_name VARCHAR2(50),
903
+ hire_date DATE,
904
+ numbers t_numbers
905
+ );
906
+ FUNCTION test_employee2 (p_employee IN OUT t_employee2)
907
+ RETURN t_employee2;
908
+ TYPE t_employees2 IS TABLE OF t_employee2;
909
+ FUNCTION test_employees2 (p_employees IN OUT t_employees2)
910
+ RETURN t_employees2;
861
911
  END;
862
912
  SQL
863
913
  plsql.execute <<-SQL
@@ -878,8 +928,41 @@ describe "Parameter type mapping /" do
878
928
  RETURN NULL;
879
929
  END IF;
880
930
  END;
931
+ FUNCTION test_numbers (p_numbers IN t_numbers, x_numbers OUT t_numbers)
932
+ RETURN t_numbers
933
+ IS
934
+ BEGIN
935
+ x_numbers := p_numbers;
936
+ RETURN p_numbers;
937
+ END;
938
+ FUNCTION test_employees (p_employees IN OUT t_employees)
939
+ RETURN t_employees
940
+ IS
941
+ BEGIN
942
+ RETURN p_employees;
943
+ END;
944
+ FUNCTION test_employee2 (p_employee IN OUT t_employee2)
945
+ RETURN t_employee2
946
+ IS
947
+ BEGIN
948
+ RETURN p_employee;
949
+ END;
950
+ FUNCTION test_employees2 (p_employees IN OUT t_employees2)
951
+ RETURN t_employees2
952
+ IS
953
+ BEGIN
954
+ RETURN p_employees;
955
+ END;
881
956
  END;
882
957
  SQL
958
+ @employees = (1..10).map do |i|
959
+ {
960
+ :employee_id => i,
961
+ :first_name => "First #{i}",
962
+ :last_name => "Last #{i}",
963
+ :hire_date => Time.local(2000,01,i),
964
+ }
965
+ end
883
966
 
884
967
  # Array of objects
885
968
  plsql.execute <<-SQL
@@ -912,6 +995,7 @@ describe "Parameter type mapping /" do
912
995
  plsql.execute "DROP TYPE t_strings"
913
996
  plsql.execute "DROP TYPE t_phones"
914
997
  plsql.execute "DROP TYPE t_phone"
998
+ plsql.connection.drop_session_ruby_temporary_tables
915
999
  end
916
1000
 
917
1001
  it "should find existing function" do
@@ -931,10 +1015,32 @@ describe "Parameter type mapping /" do
931
1015
  plsql.test_copy_strings(strings).should == [strings, {:x_strings => strings}]
932
1016
  end
933
1017
 
934
- it "should raise error if parameter type is defined inside package" do
935
- lambda do
936
- plsql.test_collections.test_sum([1,2,3,4])
937
- end.should raise_error(ArgumentError)
1018
+ it "should execute function with table of numbers type (defined inside package) parameter" do
1019
+ plsql.test_collections.test_sum([1,2,3,4]).should == 10
1020
+ end
1021
+
1022
+ it "should return table of numbers type (defined inside package)" do
1023
+ plsql.test_collections.test_numbers([1,2,3,4]).should == [[1,2,3,4], {:x_numbers => [1,2,3,4]}]
1024
+ end
1025
+
1026
+ it "should clear temporary tables after executing function with table of numbers type (defined inside package) parameter" do
1027
+ plsql.test_collections.test_numbers([1,2,3,4]).should == [[1,2,3,4], {:x_numbers => [1,2,3,4]}]
1028
+ # after first call temporary tables should be cleared
1029
+ plsql.test_collections.test_numbers([1,2,3,4]).should == [[1,2,3,4], {:x_numbers => [1,2,3,4]}]
1030
+ end
1031
+
1032
+ it "should clear temporary tables when autocommit with table of numbers type (defined inside package) parameter" do
1033
+ old_autocommit = plsql.connection.autocommit?
1034
+ plsql.connection.autocommit = true
1035
+ numbers_array = (1..400).to_a
1036
+ plsql.test_collections.test_numbers(numbers_array).should == [numbers_array, {:x_numbers => numbers_array}]
1037
+ # after first call temporary tables should be cleared
1038
+ plsql.test_collections.test_numbers(numbers_array).should == [numbers_array, {:x_numbers => numbers_array}]
1039
+ plsql.connection.autocommit = old_autocommit
1040
+ end
1041
+
1042
+ it "should execute function with table of records type (defined inside package) parameter" do
1043
+ plsql.test_collections.test_employees(@employees).should == [@employees, {:p_employees => @employees}]
938
1044
  end
939
1045
 
940
1046
  it "should execute function with object array and return object array output parameter" do
@@ -947,8 +1053,165 @@ describe "Parameter type mapping /" do
947
1053
  plsql.test_copy_objects(phones).should == [phones, {:x_phones => phones}]
948
1054
  end
949
1055
 
1056
+ it "should raise error with record parameter that has table as element" do
1057
+ lambda {
1058
+ plsql.test_collections.test_employee2(@employees[0]).should == [@employees[0], {:p_employee => @employees[0]}]
1059
+ }.should raise_error(ArgumentError, /TEST_COLLECTIONS\.T_NUMBERS definition inside package is not supported/)
1060
+ end
1061
+
1062
+ it "should raise error with table of records parameter when record has table as element" do
1063
+ lambda {
1064
+ plsql.test_collections.test_employees2(@employees).should == [@employees, {:p_employees => @employees}]
1065
+ }.should raise_error(ArgumentError, /TEST_COLLECTIONS\.T_NUMBERS definition inside package is not supported/)
1066
+ end
1067
+
950
1068
  end
951
1069
 
1070
+ describe "Function with table indexed by bynary integer parameter" do
1071
+
1072
+ before(:all) do
1073
+ plsql.execute <<-SQL
1074
+ CREATE TABLE test_employees (
1075
+ employee_id NUMBER(15),
1076
+ first_name VARCHAR2(50),
1077
+ last_name VARCHAR2(50),
1078
+ hire_date DATE
1079
+ )
1080
+ SQL
1081
+ # Type definition inside package
1082
+ plsql.execute <<-SQL
1083
+ CREATE OR REPLACE PACKAGE test_collections IS
1084
+ TYPE t_numbers IS TABLE OF NUMBER(15)
1085
+ INDEX BY BINARY_INTEGER;
1086
+ FUNCTION test_sum (p_numbers IN t_numbers)
1087
+ RETURN NUMBER;
1088
+ FUNCTION test_numbers (p_numbers IN t_numbers, x_numbers OUT t_numbers)
1089
+ RETURN t_numbers;
1090
+ TYPE t_employee IS RECORD(
1091
+ employee_id NUMBER(15),
1092
+ first_name VARCHAR2(50),
1093
+ last_name VARCHAR2(50),
1094
+ hire_date DATE
1095
+ );
1096
+ TYPE t_employees IS TABLE OF t_employee
1097
+ INDEX BY BINARY_INTEGER;
1098
+ FUNCTION test_employees (p_employees IN OUT t_employees)
1099
+ RETURN t_employees;
1100
+ PROCEDURE insert_employees(p_employees IN t_employees);
1101
+ END;
1102
+ SQL
1103
+ plsql.execute <<-SQL
1104
+ CREATE OR REPLACE PACKAGE BODY test_collections IS
1105
+ FUNCTION test_sum (p_numbers IN t_numbers)
1106
+ RETURN NUMBER
1107
+ IS
1108
+ l_sum NUMBER(15) := 0;
1109
+ i BINARY_INTEGER;
1110
+ BEGIN
1111
+ IF p_numbers.COUNT > 0 THEN
1112
+ i := p_numbers.FIRST;
1113
+ LOOP
1114
+ EXIT WHEN i IS NULL;
1115
+ l_sum := l_sum + p_numbers(i);
1116
+ i := p_numbers.NEXT(i);
1117
+ END LOOP;
1118
+ RETURN l_sum;
1119
+ ELSE
1120
+ RETURN NULL;
1121
+ END IF;
1122
+ END;
1123
+ FUNCTION test_numbers (p_numbers IN t_numbers, x_numbers OUT t_numbers)
1124
+ RETURN t_numbers
1125
+ IS
1126
+ BEGIN
1127
+ x_numbers := p_numbers;
1128
+ RETURN p_numbers;
1129
+ END;
1130
+ FUNCTION test_employees (p_employees IN OUT t_employees)
1131
+ RETURN t_employees
1132
+ IS
1133
+ BEGIN
1134
+ RETURN p_employees;
1135
+ END;
1136
+ PROCEDURE insert_employees(p_employees IN t_employees) IS
1137
+ BEGIN
1138
+ FORALL i IN p_employees.FIRST..p_employees.LAST
1139
+ INSERT INTO test_employees VALUES p_employees(i);
1140
+ END;
1141
+ END;
1142
+ SQL
1143
+ # test with negative PL/SQL table indexes
1144
+ @numbers = Hash[*(1..4).map{|i|[-i,i]}.flatten]
1145
+ # test with reversed PL/SQL table indexes
1146
+ @employees = Hash[*(1..10).map do |i|
1147
+ [11-i, {
1148
+ :employee_id => i,
1149
+ :first_name => "First #{i}",
1150
+ :last_name => "Last #{i}",
1151
+ :hire_date => Time.local(2000,01,i)
1152
+ }]
1153
+ end.flatten]
1154
+ end
1155
+
1156
+ after(:all) do
1157
+ plsql.execute "DROP PACKAGE test_collections"
1158
+ plsql.execute "DROP TABLE test_employees"
1159
+ plsql.connection.drop_session_ruby_temporary_tables
1160
+ end
1161
+
1162
+ it "should execute function with index-by table of numbers type (defined inside package) parameter" do
1163
+ plsql.test_collections.test_sum(@numbers).should == 10
1164
+ end
1165
+
1166
+ it "should return index-by table of numbers type (defined inside package)" do
1167
+ plsql.test_collections.test_numbers(@numbers).should == [@numbers, {:x_numbers => @numbers}]
1168
+ end
1169
+
1170
+ it "should clear temporary tables when autocommit with index-by table of numbers type (defined inside package) parameter" do
1171
+ old_autocommit = plsql.connection.autocommit?
1172
+ plsql.connection.autocommit = true
1173
+ numbers_hash = Hash[*(1..400).map{|i|[i,i]}.flatten]
1174
+ plsql.test_collections.test_numbers(numbers_hash).should == [numbers_hash, {:x_numbers => numbers_hash}]
1175
+ # after first call temporary tables should be cleared
1176
+ plsql.test_collections.test_numbers(numbers_hash).should == [numbers_hash, {:x_numbers => numbers_hash}]
1177
+ plsql.connection.autocommit = old_autocommit
1178
+ end
1179
+
1180
+ it "should execute function with index-by table of records type (defined inside package) parameter" do
1181
+ plsql.test_collections.test_employees(@employees).should == [@employees, {:p_employees => @employees}]
1182
+ end
1183
+
1184
+ it "should create temporary tables in autonomous transaction" do
1185
+ old_autocommit = plsql.connection.autocommit?
1186
+ plsql.connection.autocommit = false
1187
+ plsql.test_employees.insert @employees[1]
1188
+ # procedure call should not commit initial insert
1189
+ plsql.test_collections.insert_employees(2=>@employees[2], 3=>@employees[3])
1190
+ plsql.rollback
1191
+ plsql.test_employees.all.should be_empty
1192
+ plsql.connection.autocommit = old_autocommit
1193
+ end
1194
+
1195
+ describe "using Oracle 9.2" do
1196
+ before(:all) do
1197
+ # simulate Oracle 9.2 connection
1198
+ plsql(:oracle_9).connection = get_connection
1199
+ plsql(:oracle_9).connection.stub!(:database_version).and_return([9, 2])
1200
+ end
1201
+
1202
+ after(:all) do
1203
+ plsql(:oracle_9).logoff
1204
+ end
1205
+
1206
+ it "should create temporary tables when using Oracle 9.2" do
1207
+ plsql(:oracle_9).test_collections.test_numbers(@numbers).should == [@numbers, {:x_numbers => @numbers}]
1208
+ end
1209
+
1210
+ end
1211
+
1212
+ end
1213
+
1214
+
952
1215
  describe "Function with VARRAY parameter" do
953
1216
 
954
1217
  before(:all) do
@@ -1293,6 +1556,50 @@ describe "Synonyms /" do
1293
1556
 
1294
1557
  end
1295
1558
 
1559
+ describe "invalid objects" do
1560
+ before(:all) do
1561
+ plsql.execute <<-SQL
1562
+ CREATE OR REPLACE FUNCTION test_invalid_function(p_dummy VARCHAR2) RETURN VARCHAR2 IS
1563
+ l_dummy invalid_table.invalid_column%TYPE;
1564
+ BEGIN
1565
+ RETURN p_dummy;
1566
+ END;
1567
+ SQL
1568
+ plsql.execute <<-SQL
1569
+ CREATE OR REPLACE PACKAGE test_invalid_package IS
1570
+ FUNCTION test_invalid_function(p_dummy VARCHAR2) RETURN VARCHAR2;
1571
+ END;
1572
+ SQL
1573
+ plsql.execute <<-SQL
1574
+ CREATE OR REPLACE PACKAGE BODY test_invalid_package IS
1575
+ FUNCTION test_invalid_function(p_dummy VARCHAR2) RETURN VARCHAR2 IS
1576
+ l_dummy1 invalid_table.invalid_column%TYPE;
1577
+ l_dummy2 invalid_table.invalid_column%TYPE;
1578
+ BEGIN
1579
+ RETURN p_dummy;
1580
+ END;
1581
+ END;
1582
+ SQL
1583
+ end
1584
+
1585
+ after(:all) do
1586
+ plsql.execute "DROP FUNCTION test_invalid_function"
1587
+ plsql.execute "DROP PACKAGE test_invalid_package"
1588
+ end
1589
+
1590
+ it "should raise error when invalid function is called" do
1591
+ lambda {
1592
+ plsql.test_invalid_function('test')
1593
+ }.should raise_error(ArgumentError, /is not in valid status/)
1594
+ end
1595
+
1596
+ it "should raise error when function from invalid package body is called" do
1597
+ lambda {
1598
+ plsql.test_invalid_package.test_invalid_function('test')
1599
+ }.should raise_error(ArgumentError, /body is not in valid status/)
1600
+ end
1601
+ end
1602
+
1296
1603
  end
1297
1604
 
1298
1605
  describe "SYS.STANDARD procedures /" do
@@ -1309,4 +1616,21 @@ describe "SYS.STANDARD procedures /" do
1309
1616
  plsql.upper('abc').should == 'ABC'
1310
1617
  end
1311
1618
 
1619
+ it "should find function overload based on types of sequential arguments" do
1620
+ plsql.nvl(1, 2).should == 1
1621
+ plsql.nvl(nil, 2).should == 2
1622
+ plsql.nvl(1.1, 2.2).should == 1.1
1623
+ plsql.nvl(nil, 2.2).should == 2.2
1624
+ plsql.nvl(BigDecimal('1.1'), BigDecimal('2.2')).should == BigDecimal('1.1')
1625
+ plsql.nvl(nil, BigDecimal('2.2')).should == BigDecimal('2.2')
1626
+ plsql.nvl('a', 'b').should == 'a'
1627
+ plsql.nvl(nil, 'b').should == 'b'
1628
+ plsql.nvl(Date.new(2010,1,13), Date.new(2010,1,19)).should == Time.local(2010,1,13)
1629
+ plsql.nvl(nil, Date.new(2010,1,19)).should == Time.local(2010,1,19)
1630
+ plsql.nvl(Time.local(2010,1,13), Time.local(2010,1,19)).should == Time.local(2010,1,13)
1631
+ plsql.nvl(nil, Time.local(2010,1,19)).should == Time.local(2010,1,19)
1632
+ plsql.nvl(true, false).should == true
1633
+ plsql.nvl(nil, false).should == false
1634
+ end
1635
+
1312
1636
  end
@@ -50,6 +50,52 @@ describe "Schema connection" do
50
50
 
51
51
  end
52
52
 
53
+ describe "Connection with connect!" do
54
+
55
+ before(:all) do
56
+ @username, @password = DATABASE_USERS_AND_PASSWORDS[0]
57
+ @database = DATABASE_NAME
58
+ @host = DATABASE_HOST
59
+ @port = DATABASE_PORT
60
+ end
61
+
62
+ after(:each) do
63
+ plsql.logoff if plsql.connection
64
+ end
65
+
66
+ it "should connect with username, password and database alias" do
67
+ plsql.connect! @username, @password, @database
68
+ plsql.connection.should_not be_nil
69
+ plsql.schema_name.should == @username.upcase
70
+ end
71
+
72
+ it "should connect with username, password, host, port and database name" do
73
+ plsql.connect! @username, @password, :host => @host, :port => @port, :database => @database
74
+ plsql.connection.should_not be_nil
75
+ plsql.schema_name.should == @username.upcase
76
+ end
77
+
78
+ it "should connect with username, password, host, database name and default port" do
79
+ pending "Non-default port used for test database" unless @port == 1521
80
+ plsql.connect! @username, @password, :host => @host, :database => @database
81
+ plsql.connection.should_not be_nil
82
+ plsql.schema_name.should == @username.upcase
83
+ end
84
+
85
+ it "should not connect with wrong port number" do
86
+ lambda {
87
+ plsql.connect! @username, @password, :host => @host, :port => 9999, :database => @database
88
+ }.should raise_error(/no listener|could not establish the connection/)
89
+ end
90
+
91
+ it "should connect with one Hash parameter" do
92
+ plsql.connect! :username => @username, :password => @password, :database => @database
93
+ plsql.connection.should_not be_nil
94
+ plsql.schema_name.should == @username.upcase
95
+ end
96
+
97
+ end
98
+
53
99
  describe "Named Schema" do
54
100
  before(:all) do
55
101
  plsql.connection = @conn = get_connection
@@ -80,30 +126,54 @@ end
80
126
  describe "Schema commit and rollback" do
81
127
  before(:all) do
82
128
  plsql.connection = @conn = get_connection
129
+ plsql.connection.autocommit = false
130
+ plsql.execute "CREATE TABLE test_commit (dummy VARCHAR2(100))"
131
+ @data = {:dummy => 'test'}
132
+ @data2 = {:dummy => 'test2'}
83
133
  end
84
134
 
85
135
  after(:all) do
86
- plsql.connection.logoff
136
+ plsql.execute "DROP TABLE test_commit"
137
+ plsql.logoff
138
+ end
139
+
140
+ after(:each) do
141
+ plsql.test_commit.delete
142
+ plsql.commit
87
143
  end
88
144
 
89
145
  it "should do commit" do
146
+ plsql.test_commit.insert @data
90
147
  plsql.commit
148
+ plsql.test_commit.first.should == @data
91
149
  end
92
-
150
+
93
151
  it "should do rollback" do
152
+ plsql.test_commit.insert @data
94
153
  plsql.rollback
154
+ plsql.test_commit.first.should be_nil
95
155
  end
156
+
157
+ it "should create savepoint and rollback to savepoint" do
158
+ plsql.test_commit.insert @data
159
+ plsql.savepoint 'test'
160
+ plsql.test_commit.insert @data2
161
+ plsql.test_commit.all.should == [@data, @data2]
162
+ plsql.rollback_to 'test'
163
+ plsql.test_commit.all.should == [@data]
164
+ end
165
+
96
166
  end
97
167
 
98
168
  describe "ActiveRecord connection" do
99
169
  before(:all) do
100
170
  ActiveRecord::Base.establish_connection(CONNECTION_PARAMS)
101
171
  end
102
-
172
+
103
173
  before(:each) do
104
174
  plsql.activerecord_class = ActiveRecord::Base
105
175
  end
106
-
176
+
107
177
  it "should connect to test database" do
108
178
  unless defined?(JRUBY_VERSION)
109
179
  plsql.connection.is_a?(PLSQL::OCIConnection).should be_true
@@ -111,20 +181,20 @@ describe "ActiveRecord connection" do
111
181
  plsql.connection.is_a?(PLSQL::JDBCConnection).should be_true
112
182
  end
113
183
  end
114
-
184
+
115
185
  it "should return schema name" do
116
186
  plsql.schema_name.should == 'HR'
117
187
  end
118
-
188
+
119
189
  it "should use ActiveRecord::Base.default_timezone as default" do
120
190
  ActiveRecord::Base.default_timezone = :utc
121
191
  plsql.default_timezone.should == :utc
122
192
  end
123
-
193
+
124
194
  it "should have the same connection as default schema" do
125
195
  plsql.hr.connection.should == plsql.connection
126
196
  end
127
- end
197
+ end if defined?(ActiveRecord)
128
198
 
129
199
  describe "DBMS_OUTPUT logging" do
130
200
 
@@ -158,6 +228,7 @@ describe "DBMS_OUTPUT logging" do
158
228
  after(:all) do
159
229
  plsql.dbms_output_stream = nil
160
230
  plsql.execute "DROP PROCEDURE test_dbms_output"
231
+ plsql.execute "DROP PROCEDURE test_dbms_output_large"
161
232
  plsql.logoff
162
233
  end
163
234
 
@@ -230,6 +301,6 @@ describe "DBMS_OUTPUT logging" do
230
301
  @buffer.string.should == "DBMS_OUTPUT: after reconnection\n"
231
302
  end
232
303
 
233
- end
304
+ end if defined?(ActiveRecord)
234
305
 
235
306
  end