momomoto 0.1.16 → 0.1.17
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/momomoto/procedure.rb +5 -1
- data/sql/procedures.sql +9 -7
- data/test/test_functions.sql +3 -0
- data/test/test_procedure.rb +6 -0
- metadata +2 -2
data/lib/momomoto/procedure.rb
CHANGED
@@ -65,7 +65,11 @@ module Momomoto
|
|
65
65
|
|
66
66
|
# executes the stored procedure
|
67
67
|
def call( params = {}, conditions = {}, options = {} )
|
68
|
-
|
68
|
+
if columns.length > 0
|
69
|
+
sql = "SELECT #{columns.keys.join(',')} FROM "
|
70
|
+
else
|
71
|
+
sql = "SELECT "
|
72
|
+
end
|
69
73
|
sql += "#{full_name}(#{compile_parameter(params)})"
|
70
74
|
sql += compile_where( conditions )
|
71
75
|
sql += compile_order( options[:order] ) if options[:order]
|
data/sql/procedures.sql
CHANGED
@@ -41,13 +41,15 @@ BEGIN
|
|
41
41
|
END LOOP;
|
42
42
|
ELSIF typ.typtype = 'p' THEN
|
43
43
|
-- pseudo type
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
IF typ.typname <> 'void' THEN
|
45
|
+
FOR i IN array_lower(proc.proallargtypes, 1) .. array_upper(proc.proallargtypes, 1)
|
46
|
+
LOOP
|
47
|
+
CONTINUE WHEN proc.proargmodes[ i ] = 'i';
|
48
|
+
col.column_name = proc.proargnames[ i ];
|
49
|
+
col.data_type = format_type( proc.proallargtypes[ i ], NULL );
|
50
|
+
RETURN NEXT col;
|
51
|
+
END LOOP;
|
52
|
+
END IF;
|
51
53
|
ELSE
|
52
54
|
RAISE EXCEPTION 'Not yet implemented';
|
53
55
|
END IF;
|
data/test/test_functions.sql
CHANGED
@@ -32,6 +32,9 @@ CREATE OR REPLACE FUNCTION test_set_returning( person_id INTEGER ) RETURNS SETOF
|
|
32
32
|
END;
|
33
33
|
$$ LANGUAGE plpgsql;
|
34
34
|
|
35
|
+
CREATE OR REPLACE FUNCTION test_returns_void() RETURNS VOID AS $$
|
36
|
+
$$ LANGUAGE SQL;
|
37
|
+
|
35
38
|
CREATE OR REPLACE FUNCTION test_parameter_inout_sql( IN param1 INTEGER, OUT ret1 INTEGER ) AS $$
|
36
39
|
SELECT $1;
|
37
40
|
$$ LANGUAGE sql;
|
data/test/test_procedure.rb
CHANGED
@@ -77,6 +77,12 @@ class TestProcedure < Test::Unit::TestCase
|
|
77
77
|
Test_set_returning.call({:person_id => 5},{:person_id => 5},{:order=>:person_id,:limit=>10} )
|
78
78
|
end
|
79
79
|
|
80
|
+
def test_returns_void
|
81
|
+
self.class.const_set(:Test_returns_void, Class.new( Momomoto::Procedure ) )
|
82
|
+
assert_equal( "test_returns_void", Test_returns_void.procedure_name )
|
83
|
+
Test_returns_void.call()
|
84
|
+
end
|
85
|
+
|
80
86
|
def test_call_strict
|
81
87
|
a = Class.new(Momomoto::Procedure)
|
82
88
|
a.procedure_name("test_parameter_sql")
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: momomoto
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.1.
|
7
|
-
date: 2008-
|
6
|
+
version: 0.1.17
|
7
|
+
date: 2008-03-09 00:00:00 +01:00
|
8
8
|
summary: Momomoto is an object relational mapper for PostgreSQL.
|
9
9
|
require_paths:
|
10
10
|
- lib
|