Skip to content

Commit b1c41a4

Browse files
authored
case-insensitive table names and proc params (#185)
* case-insensitve object keys when inserting into table * case-insensitive procedure params * tests
1 parent c025448 commit b1c41a4

File tree

4 files changed

+35
-0
lines changed

4 files changed

+35
-0
lines changed

lib/plsql/procedure_call.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ def initialize(procedure, args = [], options = {})
66
@dbms_output_stream = @schema.dbms_output_stream
77
@skip_self = options[:skip_self]
88
@self = options[:self]
9+
10+
if args.size == 1 && args[0].is_a?(Hash) && args[0].keys.all? { |k| k.is_a?(Symbol) }
11+
args[0] = args[0].map { |k, v| [k.downcase, v] }.to_h
12+
end
13+
914
@overload = get_overload_from_arguments_list(args)
1015
@procedure.ensure_tmp_tables_created(@overload) if @procedure.respond_to?(:ensure_tmp_tables_created)
1116
construct_sql(args)

lib/plsql/table.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ def insert(record)
172172
end
173173

174174
table_proc = TableProcedure.new(@schema, self, :insert)
175+
record = record.map { |k, v| [k.downcase.to_sym, v] }.to_h
175176
table_proc.add_insert_arguments(record)
176177

177178
call = ProcedureCall.new(table_proc, table_proc.argument_values)

spec/plsql/procedure_spec.rb

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2358,3 +2358,27 @@ def new_candidate(status)
23582358
end
23592359
end
23602360
end
2361+
2362+
describe "case-insensitive params" do
2363+
before(:all) do
2364+
plsql.connect! CONNECTION_PARAMS
2365+
plsql.execute <<-SQL
2366+
CREATE OR REPLACE FUNCTION test_func
2367+
( p_string VARCHAR2 )
2368+
RETURN VARCHAR2
2369+
IS
2370+
BEGIN
2371+
RETURN UPPER(p_string);
2372+
END test_func;
2373+
SQL
2374+
end
2375+
2376+
after(:all) do
2377+
plsql.execute "DROP FUNCTION test_func"
2378+
plsql.logoff
2379+
end
2380+
2381+
it "should call procedure/function with case-insensitive param names" do
2382+
expect { plsql.test_func(p_STRING: "xxx") }.not_to raise_error
2383+
end
2384+
end

spec/plsql/table_spec.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,11 @@
215215
expect(plsql.test_employees2.all("ORDER BY employee_id")).to eq(@employees2)
216216
end
217217

218+
it "should insert with case-insensetive table name" do
219+
plsql.test_employees.insert @employees.first.map { |k, v| [k.upcase.to_sym, v] }.to_h
220+
expect(plsql.test_employees.all).to eq([@employees.first])
221+
end
222+
218223
end
219224

220225
describe "insert values" do

0 commit comments

Comments
 (0)