forked from rsim/ruby-plsql
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsql_statements_spec.rb
More file actions
89 lines (76 loc) · 2.45 KB
/
Copy pathsql_statements_spec.rb
File metadata and controls
89 lines (76 loc) · 2.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
RSpec.describe "SQL statements /" do
before(:all) do
plsql.connect! CONNECTION_PARAMS
plsql.connection.autocommit = false
end
after(:all) do
plsql.logoff
end
after(:each) do
plsql.rollback
end
describe "SELECT" do
before(:all) do
plsql.execute "DROP TABLE test_employees" rescue nil
plsql.execute <<-SQL
CREATE TABLE test_employees (
employee_id NUMBER(15),
first_name VARCHAR2(50),
last_name VARCHAR(50),
hire_date DATE
)
SQL
plsql.execute <<-SQL
CREATE OR REPLACE PROCEDURE test_insert_employee(p_employee test_employees%ROWTYPE)
IS
BEGIN
INSERT INTO test_employees
VALUES p_employee;
END;
SQL
@employees = (1..10).map do |i|
{
employee_id: i,
first_name: "First #{i}",
last_name: "Last #{i}",
hire_date: Time.local(2000, 01, i)
}
end
plsql.connection.prefetch_rows = 100
end
before(:each) do
@employees.each do |e|
plsql.test_insert_employee(e)
end
end
after(:all) do
plsql.execute "DROP PROCEDURE test_insert_employee"
plsql.execute "DROP TABLE test_employees"
plsql.connection.prefetch_rows = 1
end
it "should select first result" do
expect(plsql.select(:first, "SELECT * FROM test_employees WHERE employee_id = :employee_id",
@employees.first[:employee_id])).to eq(@employees.first)
end
it "should prefetch only one row when selecting first result" do
expect {
plsql.select(:first, "SELECT 1 FROM dual UNION ALL SELECT 1/0 FROM dual")
}.not_to raise_error
end
it "should select one value" do
expect(plsql.select_one("SELECT count(*) FROM test_employees")).to eq(@employees.size)
end
it "should return nil when selecting non-existing one value" do
expect(plsql.select_one("SELECT employee_id FROM test_employees WHERE 1=2")).to be_nil
end
it "should prefetch only one row when selecting one value" do
expect {
plsql.select_one("SELECT 1 FROM dual UNION ALL SELECT 1/0 FROM dual")
}.not_to raise_error
end
it "should select all results" do
expect(plsql.select(:all, "SELECT * FROM test_employees ORDER BY employee_id")).to eq(@employees)
expect(plsql.select("SELECT * FROM test_employees ORDER BY employee_id")).to eq(@employees)
end
end
end