From 448a342d5ff4de1844c8cde4730b61af36b9dc7c Mon Sep 17 00:00:00 2001 From: Loic Nageleisen Date: Fri, 3 Mar 2017 14:53:28 +0100 Subject: [PATCH] arbitrary functions --- lib/rebel/sql.rb | 9 +++++++++ test/test_raw.rb | 4 ++++ 2 files changed, 13 insertions(+) diff --git a/lib/rebel/sql.rb b/lib/rebel/sql.rb index 252dd5a..d36b537 100644 --- a/lib/rebel/sql.rb +++ b/lib/rebel/sql.rb @@ -218,6 +218,11 @@ module Rebel::SQL ## Functions + def function(name, *args) + raw("#{name}(#{names_or_values(*args)})") + end + alias fn function + def count(*n) raw("COUNT(#{names(*n)})") end @@ -282,6 +287,10 @@ module Rebel::SQL item.is_a?(Symbol) ? name(item) : value(item) end + def names_or_values(*items) + list(items.map { |v| name_or_value(v) }) + end + def equal(l, r) "#{name_or_value(l)} = #{name_or_value(r)}" end diff --git a/test/test_raw.rb b/test/test_raw.rb index 9d5b707..cf84d20 100644 --- a/test/test_raw.rb +++ b/test/test_raw.rb @@ -68,4 +68,8 @@ class TestRaw < Minitest::Test def test_join assert_str_equal(Rebel::SQL.join(:foo), 'JOIN "foo"') end + + def test_function + assert_str_equal(Rebel::SQL.function('COALESCE', :foo, 0), 'COALESCE("foo", 0)') + end end