From 8a8b86e31a3be7a981e26015a38af24192ca8318 Mon Sep 17 00:00:00 2001 From: "Brian J. Cardiff" Date: Fri, 29 Jan 2016 17:13:05 -0300 Subject: [PATCH] arguments support --- spec/std/db/dummy_driver.cr | 10 +++++++++- src/db/statement.cr | 26 +++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/spec/std/db/dummy_driver.cr b/spec/std/db/dummy_driver.cr index 2aac908..13cbbe6 100644 --- a/spec/std/db/dummy_driver.cr +++ b/spec/std/db/dummy_driver.cr @@ -8,7 +8,15 @@ class DummyDriver < DB::Driver super(driver) end - def exec(*args) + protected def add_parameter(index : Int32, value) + raise "not implemented" + end + + protected def add_parameter(name : String, value) + raise "not implemented" + end + + protected def execute DummyResultSet.new self, @items.each end end diff --git a/src/db/statement.cr b/src/db/statement.cr index 3bf6ff5..c9c4e40 100644 --- a/src/db/statement.cr +++ b/src/db/statement.cr @@ -5,6 +5,30 @@ module DB def initialize(@driver) end - abstract def exec(*args) : ResultSet + def exec(*args) : ResultSet + exec args + end + + def exec(args : Enumerable) + before_execute + args.each_with_index(1) do |arg, index| + if arg.is_a?(Hash) + arg.each do |key, value| + add_parameter key.to_s, value + end + else + add_parameter index, arg + end + end + execute + end + + protected def before_execute + end + + # 1-based positional arguments + protected abstract def add_parameter(index : Int32, value) + protected abstract def add_parameter(name : String, value) + protected abstract def execute : ResultSet end end