Class | PLRuby::Description::Function::SFRM |
In: |
plruby.rb
|
Parent: | Object |
The return type must be declared as SETOF
The function must call yield to return rows or return a String which must be a valid SELECT statement
For example to concatenate 2 rows create the function
plruby_test=# CREATE FUNCTION tu(varchar) RETURNS setof record plruby_test-# AS ' plruby_test'# size = PL.column_name(args[0]).size plruby_test'# res = nil plruby_test'# PL::Plan.new("select * from #{args[0]}", plruby_test'# "block" => 50).each do |row| plruby_test'# if res.nil? plruby_test'# res = row.values plruby_test'# else plruby_test'# res.concat row.values plruby_test'# yield res plruby_test'# res = nil plruby_test'# end plruby_test'# end plruby_test'# if res plruby_test'# res.concat Array.new(size) plruby_test'# yield res plruby_test'# end plruby_test'# ' language 'plruby'; CREATE FUNCTION plruby_test=# plruby_test=# select * from tt; a | b ---+---- 1 | 2 3 | 4 5 | 6 7 | 8 9 | 10 (5 rows) plruby_test=# select * from tu('tt') as tbl(a int, b int, c int, d int); a | b | c | d ---+----+---+--- 1 | 2 | 3 | 4 5 | 6 | 7 | 8 9 | 10 | | (3 rows) plruby_test=#