momomoto 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -108,7 +108,7 @@ module Momomoto
108
108
  conditions = { :table_name => table_name }
109
109
  conditions[:table_schema] = schema_name if schema_name
110
110
  cols = Momomoto::Information_schema::Columns.select( conditions )
111
- raise CriticalError, "Table without columns" if cols.length < 1
111
+ raise CriticalError, "Table without columns (#{table_name})" if cols.length < 1
112
112
  cols.each do | col |
113
113
  columns[col.column_name.to_sym] = Momomoto::Datatype.const_get(col.data_type.gsub(' ','_').capitalize).new( col )
114
114
  end
@@ -123,6 +123,12 @@ module Momomoto
123
123
  params.each do | param |
124
124
  p << { param.parameter_name.to_sym => Momomoto::Datatype.const_get(param.data_type.gsub(' ','_').capitalize).new }
125
125
  end
126
+ # mark parameters of strict procedures as not null
127
+ if Information_schema::Routines.select_single(:routine_name=>procedure_name).is_null_call == 'YES'
128
+ p.each do | param |
129
+ param[param.keys.first].instance_variable_set(:@not_null,true)
130
+ end
131
+ end
126
132
  p
127
133
  end
128
134
 
@@ -137,7 +143,6 @@ module Momomoto
137
143
  c
138
144
  end
139
145
 
140
-
141
146
  # begin a transaction
142
147
  def begin
143
148
  execute( "BEGIN;" )
@@ -2,17 +2,7 @@
2
2
  module Momomoto
3
3
  module Information_schema
4
4
  class Key_column_usage < Momomoto::Table
5
- primary_keys( [] )
6
5
  schema_name( "information_schema" )
7
- columns( { :constraint_catalog => Momomoto::Datatype::Character_varying.new,
8
- :constraint_schema => Momomoto::Datatype::Character_varying.new,
9
- :constraint_name => Momomoto::Datatype::Character_varying.new,
10
- :table_catalog => Momomoto::Datatype::Character_varying.new,
11
- :table_schema => Momomoto::Datatype::Character_varying.new,
12
- :table_name => Momomoto::Datatype::Character_varying.new,
13
- :column_name => Momomoto::Datatype::Character_varying.new,
14
- :ordinal_position => Momomoto::Datatype::Integer.new
15
- } )
16
6
  end
17
7
  end
18
8
  end
@@ -4,7 +4,7 @@ module Momomoto
4
4
  module Information_schema
5
5
 
6
6
  class Routines < Momomoto::Table
7
-
7
+ schema_name( "information_schema" )
8
8
  end
9
9
 
10
10
  end
@@ -4,16 +4,6 @@ module Momomoto
4
4
  class Table_constraints < Momomoto::Table
5
5
  primary_keys( [] )
6
6
  schema_name( "information_schema" )
7
- columns( { :constraint_catalog => Momomoto::Datatype::Text.new,
8
- :constraint_schema => Momomoto::Datatype::Text.new,
9
- :constraint_name => Momomoto::Datatype::Text.new,
10
- :table_catalog => Momomoto::Datatype::Text.new,
11
- :table_schema => Momomoto::Datatype::Text.new,
12
- :table_name => Momomoto::Datatype::Text.new,
13
- :constraint_type => Momomoto::Datatype::Text.new,
14
- :is_deferrable => Momomoto::Datatype::Text.new,
15
- :initially_deferred => Momomoto::Datatype::Text.new
16
- } )
17
7
  end
18
8
  end
19
9
  end
@@ -77,6 +77,7 @@ module Momomoto
77
77
  parameters.each do | parameter |
78
78
  field_name, datatype = parameter.to_a.first
79
79
  raise Error, "parameter #{field_name} not specified" if not params.member?( field_name )
80
+ raise Error, "Not null fields(#{field_name}) need to be set" if !params[field_name] && datatype.not_null?
80
81
  args << datatype.escape( params[field_name] )
81
82
  end
82
83
  args.join(',')
@@ -3,6 +3,10 @@ CREATE OR REPLACE FUNCTION test_parameter_sql( param1 INTEGER ) RETURNS INTEGER
3
3
  SELECT $1;
4
4
  $$ LANGUAGE sql;
5
5
 
6
+ CREATE OR REPLACE FUNCTION test_parameter_sql_strict( param1 INTEGER ) RETURNS INTEGER AS $$
7
+ SELECT $1;
8
+ $$ LANGUAGE sql STRICT;
9
+
6
10
  CREATE OR REPLACE FUNCTION test_parameter_plpgsql( param1 INTEGER, param2 TEXT ) RETURNS INTEGER AS $$
7
11
  DECLARE
8
12
  BEGIN
@@ -10,6 +14,13 @@ CREATE OR REPLACE FUNCTION test_parameter_plpgsql( param1 INTEGER, param2 TEXT )
10
14
  END;
11
15
  $$ LANGUAGE plpgsql;
12
16
 
17
+ CREATE OR REPLACE FUNCTION test_parameter_plpgsql_strict( param1 INTEGER, param2 TEXT ) RETURNS INTEGER AS $$
18
+ DECLARE
19
+ BEGIN
20
+ RETURN param1;
21
+ END;
22
+ $$ LANGUAGE plpgsql STRICT;
23
+
13
24
  CREATE OR REPLACE FUNCTION test_set_returning( person_id INTEGER ) RETURNS SETOF person AS $$
14
25
  DECLARE
15
26
  result RECORD;
@@ -71,5 +71,22 @@ class TestProcedure < Test::Unit::TestCase
71
71
  Test_set_returning.call({:person_id => 5},{:person_id => 5},{:order=>:person_id,:limit=>10} )
72
72
  end
73
73
 
74
+ def test_call_strict
75
+ a = Class.new(Momomoto::Procedure)
76
+ a.procedure_name("test_parameter_sql")
77
+ assert_equal( false, a.parameters[0][:param1].not_null? )
78
+ assert_raise( Momomoto::Error ) { a.call }
79
+ assert_nothing_raised { a.call({:param1=>nil})}
80
+ assert_nothing_raised { a.call({:param1=>1})}
81
+
82
+ b = Class.new(Momomoto::Procedure)
83
+ b.procedure_name("test_parameter_sql_strict")
84
+ assert_equal( true, b.parameters[0][:param1].not_null? )
85
+ assert_raise( Momomoto::Error ) { b.call }
86
+ assert_raise( Momomoto::Error ) { b.call({:param1=>nil})}
87
+ assert_nothing_raised { b.call({:param1=>1})}
88
+
89
+ end
90
+
74
91
  end
75
92
 
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.6
7
- date: 2007-09-24 00:00:00 +02:00
6
+ version: 0.1.7
7
+ date: 2007-10-07 00:00:00 +02:00
8
8
  summary: Momomoto is an object relational mapper for PostgreSQL.
9
9
  require_paths:
10
10
  - lib