momomoto 0.1.19 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/momomoto/database.rb +12 -6
- data/lib/momomoto/information_schema.rb +20 -0
- data/lib/momomoto/information_schema/columns.rb +1 -0
- data/lib/momomoto/table.rb +106 -2
- data/test/test.sql +1 -1
- data/test/test_database.rb +15 -0
- data/test/test_table.rb +80 -0
- metadata +95 -89
- data/lib/momomoto/information_schema/key_column_usage.rb +0 -14
- data/lib/momomoto/information_schema/routines.rb +0 -16
- data/lib/momomoto/information_schema/table_constraints.rb +0 -14
data/lib/momomoto/database.rb
CHANGED
@@ -2,12 +2,7 @@
|
|
2
2
|
require 'postgres'
|
3
3
|
require 'singleton'
|
4
4
|
|
5
|
-
require 'momomoto/information_schema
|
6
|
-
require 'momomoto/information_schema/table_constraints'
|
7
|
-
require 'momomoto/information_schema/key_column_usage'
|
8
|
-
require 'momomoto/information_schema/routines'
|
9
|
-
require 'momomoto/information_schema/fetch_procedure_columns'
|
10
|
-
require 'momomoto/information_schema/fetch_procedure_parameters'
|
5
|
+
require 'momomoto/information_schema'
|
11
6
|
|
12
7
|
## Momomoto is a database abstraction layer
|
13
8
|
module Momomoto
|
@@ -109,6 +104,17 @@ module Momomoto
|
|
109
104
|
pkeys
|
110
105
|
end
|
111
106
|
|
107
|
+
|
108
|
+
# get table type from database
|
109
|
+
# should work with any SQL2003 compliant DBMS
|
110
|
+
def get_table_type( table_name, schema_name )
|
111
|
+
begin
|
112
|
+
Information_schema::Tables.select_single({:table_name=>table_name,:table_schema=>schema_name}).table_type
|
113
|
+
rescue => e
|
114
|
+
raise CriticalError, "Table #{table_name} does not exist. #{e.to_s}"
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
112
118
|
# fetch column definitions from database
|
113
119
|
# should work with any SQL2003 compliant DBMS
|
114
120
|
def fetch_table_columns( table_name, schema_name = nil ) # :nodoc:
|
@@ -0,0 +1,20 @@
|
|
1
|
+
|
2
|
+
module Momomoto::Information_schema
|
3
|
+
|
4
|
+
def self.const_missing( table )
|
5
|
+
raise CriticalError, "Invalid name." unless table.to_s.downcase.match(/^[a-z0-9_]+$/)
|
6
|
+
begin
|
7
|
+
require "momomoto/information_schema/#{table.to_s.downcase}"
|
8
|
+
::Momomoto::Information_schema::const_get( table )
|
9
|
+
rescue LoadError
|
10
|
+
klass = Class.new( ::Momomoto::Table )
|
11
|
+
klass.schema_name = "information_schema"
|
12
|
+
klass.table_type = "VIEW"
|
13
|
+
klass.primary_keys( [] )
|
14
|
+
|
15
|
+
::Momomoto::Information_schema.const_set(table, klass)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
@@ -12,6 +12,7 @@ module Momomoto
|
|
12
12
|
class Columns < Momomoto::Table
|
13
13
|
primary_keys( [] )
|
14
14
|
schema_name( "information_schema" )
|
15
|
+
table_type( "VIEW" )
|
15
16
|
columns( { :table_catalog => Momomoto::Datatype::Text.new,
|
16
17
|
:table_schema => Momomoto::Datatype::Text.new,
|
17
18
|
:table_name => Momomoto::Datatype::Text.new,
|
data/lib/momomoto/table.rb
CHANGED
@@ -17,6 +17,9 @@ module Momomoto
|
|
17
17
|
# array containing the primary key fields of the table
|
18
18
|
momomoto_attribute :primary_keys
|
19
19
|
|
20
|
+
# the table type of this table
|
21
|
+
momomoto_attribute :table_type
|
22
|
+
|
20
23
|
class << self
|
21
24
|
|
22
25
|
# get the full name of table including, if set, schema
|
@@ -24,6 +27,16 @@ module Momomoto
|
|
24
27
|
"#{ schema_name ? schema_name + '.' : ''}#{table_name}"
|
25
28
|
end
|
26
29
|
|
30
|
+
# is this a base table
|
31
|
+
def base_table?
|
32
|
+
table_type == "BASE TABLE"
|
33
|
+
end
|
34
|
+
|
35
|
+
# is this a view
|
36
|
+
def view?
|
37
|
+
table_type == "VIEW"
|
38
|
+
end
|
39
|
+
|
27
40
|
# Searches for records and returns an Array containing the records.
|
28
41
|
# There are a bunch of different use cases as this method is the primary way
|
29
42
|
# to access all rows in the database.
|
@@ -281,6 +294,15 @@ module Momomoto
|
|
281
294
|
classname.split('::').last.downcase.gsub(/[^a-z_0-9]/, '')
|
282
295
|
end
|
283
296
|
|
297
|
+
# get namespace of current class
|
298
|
+
def namespace
|
299
|
+
if self.name.split('::').length > 1
|
300
|
+
const_get( self.name.split('::')[0..-2].join('::') )
|
301
|
+
else
|
302
|
+
Object
|
303
|
+
end
|
304
|
+
end
|
305
|
+
|
284
306
|
# initializes a table class
|
285
307
|
def initialize
|
286
308
|
return if initialized
|
@@ -289,8 +311,7 @@ module Momomoto
|
|
289
311
|
@table_name ||= construct_table_name( self.name )
|
290
312
|
|
291
313
|
@columns ||= database.fetch_table_columns( table_name(), schema_name() )
|
292
|
-
|
293
|
-
|
314
|
+
@table_type ||= database.get_table_type( table_name, schema_name )
|
294
315
|
@primary_keys ||= database.fetch_primary_keys( table_name(), schema_name() )
|
295
316
|
@column_order = @columns.keys
|
296
317
|
@default_order ||= nil
|
@@ -299,6 +320,89 @@ module Momomoto
|
|
299
320
|
initialize_row( const_get( :Row ), self )
|
300
321
|
@row_cache = {}
|
301
322
|
|
323
|
+
# define helper methods for foreign key relations
|
324
|
+
if base_table?
|
325
|
+
|
326
|
+
# find all columns that reference other tables and add helper methods for those keys
|
327
|
+
Information_schema::Table_constraints.select({:table_name=>table_name,:table_schema=>schema_name,:constraint_type=>'FOREIGN KEY'}).each do | fk |
|
328
|
+
referenced_columns = Information_schema::Constraint_column_usage.select({:constraint_name=>fk.constraint_name,:constraint_schema=>fk.constraint_schema})
|
329
|
+
raise CriticalError, "Foreign key constraint without referenced columns" if referenced_columns.length == 0
|
330
|
+
ref_table = referenced_columns[0].table_name
|
331
|
+
# check if there is already a method by that name defined on Row
|
332
|
+
if !const_get( :Row ).instance_methods.member?( ref_table )
|
333
|
+
begin
|
334
|
+
klass = namespace.const_get( ref_table.capitalize )
|
335
|
+
rescue
|
336
|
+
# if there is no such class yet we create one in the appropriate namespace
|
337
|
+
klass = Class.new( Momomoto::Table )
|
338
|
+
klass.table_name = ref_table
|
339
|
+
klass.schema_name = referenced_columns[0].table_schema
|
340
|
+
namespace.const_set( ref_table.capitalize, klass )
|
341
|
+
end
|
342
|
+
ref_columns = referenced_columns.map(&:column_name).map(&:to_sym)
|
343
|
+
fk_helper_single( ref_table, klass, ref_columns )
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
# find other tables that reference this table and add helper methods
|
348
|
+
if primary_keys.length == 1
|
349
|
+
Information_schema::Constraint_column_usage.select({:table_name=>table_name,:table_schema=>schema_name,:column_name=>primary_keys[0]}).each do | fk |
|
350
|
+
constraint = Information_schema::Table_constraints.select({:constraint_name=>fk.constraint_name,:constraint_schema=>fk.constraint_schema,:constraint_type=>'FOREIGN KEY'})[0]
|
351
|
+
# check if there is already a method by that name defined on Row
|
352
|
+
if constraint && !const_get( :Row ).instance_methods.member?( constraint.table_name )
|
353
|
+
|
354
|
+
begin
|
355
|
+
klass = namespace.const_get( constraint.table_name.capitalize )
|
356
|
+
rescue
|
357
|
+
# if there is no such class yet we create one in the appropriate namespace
|
358
|
+
klass = Class.new( Momomoto::Table )
|
359
|
+
klass.table_name = constraint.table_name
|
360
|
+
klass.schema_name = constraint.table_schema
|
361
|
+
namespace.const_set( constraint.table_name.capitalize, klass )
|
362
|
+
end
|
363
|
+
fk_helper_multiple( constraint.table_name, klass, primary_keys )
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
|
368
|
+
end
|
369
|
+
|
370
|
+
end
|
371
|
+
|
372
|
+
# Define a helper method +method_name+ for +table_class+
|
373
|
+
def fk_helper_single( method_name, table_class, ref_columns )
|
374
|
+
var_name = "@#{method_name}".to_sym
|
375
|
+
const_set(:Methods, Module.new) if not const_defined?(:Methods)
|
376
|
+
const_get(:Methods).send(:define_method, method_name) do
|
377
|
+
return instance_variable_get( var_name ) if instance_variable_defined?( var_name )
|
378
|
+
conditions = {}
|
379
|
+
ref_columns.each do | col | conditions[col] = get_column( col ) end
|
380
|
+
begin
|
381
|
+
value = table_class.select_single( conditions )
|
382
|
+
rescue Momomoto::Nothing_found
|
383
|
+
value = nil
|
384
|
+
end
|
385
|
+
instance_variable_set( var_name, value )
|
386
|
+
end
|
387
|
+
end
|
388
|
+
|
389
|
+
# Define a helper method +method_name+ for +table_class+
|
390
|
+
def fk_helper_multiple( method_name, table_class, ref_columns )
|
391
|
+
var_name = "@#{method_name}".to_sym
|
392
|
+
const_set(:Methods, Module.new) if not const_defined?(:Methods)
|
393
|
+
const_get(:Methods).send(:define_method, method_name) do | *args |
|
394
|
+
conditions = args[0] ||= {}
|
395
|
+
options = args[1] ||= {}
|
396
|
+
hash = args.hash
|
397
|
+
if instance_variable_defined?( var_name )
|
398
|
+
return instance_variable_get( var_name )[hash] if instance_variable_get( var_name )[hash]
|
399
|
+
else
|
400
|
+
instance_variable_set( var_name, Hash.new )
|
401
|
+
end
|
402
|
+
ref_columns.each do | col | conditions[col] = get_column( col ) end
|
403
|
+
value = table_class.select( conditions, options )
|
404
|
+
instance_variable_get( var_name )[hash] = value
|
405
|
+
end
|
302
406
|
end
|
303
407
|
|
304
408
|
# Builds the row class for this table when executing #select.
|
data/test/test.sql
CHANGED
@@ -67,4 +67,4 @@ CREATE TABLE test_timestamp_without_time_zone( id SERIAL, data TIMESTAMP WITHOUT
|
|
67
67
|
CREATE TABLE test_int_array( id SERIAL, data int[], PRIMARY KEY(id) );
|
68
68
|
CREATE TABLE test_text_array( id SERIAL, data text[], PRIMARY KEY(id) );
|
69
69
|
|
70
|
-
|
70
|
+
CREATE VIEW view_person AS SELECT * FROM person;
|
data/test/test_database.rb
CHANGED
@@ -54,6 +54,21 @@ class TestDatabase < Test::Unit::TestCase
|
|
54
54
|
assert_equal( 1, pk.length )
|
55
55
|
end
|
56
56
|
|
57
|
+
def test_get_table_type
|
58
|
+
db = Momomoto::Database.instance
|
59
|
+
type = db.get_table_type( 'person', 'public' )
|
60
|
+
assert_equal( type, 'BASE TABLE' )
|
61
|
+
type = db.get_table_type( 'view_person', 'public' )
|
62
|
+
assert_equal( type, 'VIEW' )
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_non_existant_table
|
66
|
+
db = Momomoto::Database.instance
|
67
|
+
assert_raise( Momomoto::CriticalError ) do
|
68
|
+
db.get_table_type( 'nonexistant_table', 'public' )
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
57
72
|
def test_rollback
|
58
73
|
db = Momomoto::Database.instance
|
59
74
|
db.begin
|
data/test/test_table.rb
CHANGED
@@ -313,5 +313,85 @@ class TestTable < Test::Unit::TestCase
|
|
313
313
|
assert_equal( true, r.dirty? )
|
314
314
|
end
|
315
315
|
|
316
|
+
def test_table_type_getter_and_setter
|
317
|
+
c1 = Class.new( Momomoto::Table )
|
318
|
+
c1.table_name('person')
|
319
|
+
c1.table_type = 'BASE TABLE'
|
320
|
+
assert_equal( 'BASE TABLE', c1.table_type )
|
321
|
+
c1.table_type = 'VIEW'
|
322
|
+
assert_equal( 'VIEW', c1.table_type )
|
323
|
+
end
|
324
|
+
|
325
|
+
def test_table_type
|
326
|
+
a = Class.new( Momomoto::Table )
|
327
|
+
a.table_name('person')
|
328
|
+
assert_equal( "BASE TABLE", a.table_type )
|
329
|
+
assert_equal( true, a.base_table? )
|
330
|
+
assert_equal( false, a.view? )
|
331
|
+
|
332
|
+
b = Class.new( Momomoto::Table )
|
333
|
+
b.table_name('view_person')
|
334
|
+
assert_equal( "VIEW", b.table_type )
|
335
|
+
assert_equal( false, b.base_table? )
|
336
|
+
assert_equal( true, b.view? )
|
337
|
+
end
|
338
|
+
|
339
|
+
def test_non_existant_table
|
340
|
+
a = Class.new( Momomoto::Table )
|
341
|
+
a.table_name('nonexistant_table')
|
342
|
+
assert_raise( Momomoto::CriticalError ) do
|
343
|
+
a.new
|
344
|
+
end
|
345
|
+
end
|
346
|
+
|
347
|
+
def test_foreign_keys
|
348
|
+
c1 = Class.new( Momomoto::Table )
|
349
|
+
c1.table_name('event')
|
350
|
+
c1.columns
|
351
|
+
assert_equal( true, c1::Methods.instance_methods.include?("event_person"))
|
352
|
+
c2 = Class.new( Momomoto::Table )
|
353
|
+
c2.table_name('person')
|
354
|
+
c2.columns
|
355
|
+
assert_equal( true, c2::Methods.instance_methods.include?("event_person"))
|
356
|
+
c3 = Class.new( Momomoto::Table )
|
357
|
+
c3.table_name('event_person')
|
358
|
+
c3.columns
|
359
|
+
assert_equal( true, c3::Methods.instance_methods.include?("event"))
|
360
|
+
assert_equal( true, c3::Methods.instance_methods.include?("person"))
|
361
|
+
event = c1.new
|
362
|
+
event.title = 'foreign key test'
|
363
|
+
event.write
|
364
|
+
person = c2.new
|
365
|
+
person.first_name = 'frank'
|
366
|
+
person.write
|
367
|
+
event_person = c3.new
|
368
|
+
event_person.event_id = event.event_id
|
369
|
+
event_person.person_id = person.person_id
|
370
|
+
event_person.description = 'foreign key test'
|
371
|
+
event_person.write
|
372
|
+
|
373
|
+
assert_equal( event.event_id, event_person.event.event_id )
|
374
|
+
assert_equal( person.person_id, event_person.person.person_id )
|
375
|
+
assert_equal( 1, event.event_person.length )
|
376
|
+
assert_equal( event.event_id, event.event_person[0].event_id )
|
377
|
+
assert_equal( person.person_id, event.event_person[0].person_id )
|
378
|
+
assert_equal( 1, person.event_person.length )
|
379
|
+
assert_equal( event.event_id, person.event_person[0].event_id )
|
380
|
+
assert_equal( person.person_id, person.event_person[0].person_id )
|
381
|
+
|
382
|
+
# test caching
|
383
|
+
id = event.event_person.object_id
|
384
|
+
assert_equal( id, event.event_person.object_id )
|
385
|
+
id = event.event_person(:person_id=>7).object_id
|
386
|
+
assert_equal( id, event.event_person(:person_id=>7).object_id )
|
387
|
+
id = event_person.event.object_id
|
388
|
+
assert_equal( id, event_person.event.object_id )
|
389
|
+
|
390
|
+
|
391
|
+
event_person.delete
|
392
|
+
event.delete
|
393
|
+
person.delete
|
394
|
+
end
|
395
|
+
|
316
396
|
end
|
317
397
|
|
metadata
CHANGED
@@ -1,124 +1,130 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: momomoto
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2009-03-02 00:00:00 +01:00
|
8
|
-
summary: Momomoto is an object relational mapper for PostgreSQL.
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: sven@c3d2.de
|
12
|
-
homepage: http://pentabarf.org/Momomoto
|
13
|
-
rubyforge_project:
|
14
|
-
description: Momomoto is an object relational mapper for PostgreSQL.
|
15
|
-
autorequire: momomoto
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 1.8.2
|
24
|
-
version:
|
4
|
+
version: 0.2.0
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Sven Klemm
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-03-13 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: postgres
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.7.9.2008.01.09
|
24
|
+
version:
|
25
|
+
description: Momomoto is an object relational mapper for PostgreSQL.
|
26
|
+
email: sven@c3d2.de
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files: []
|
32
|
+
|
31
33
|
files:
|
32
|
-
- lib/timeinterval.rb
|
33
34
|
- lib/momomoto.rb
|
34
|
-
- lib/momomoto/database.rb
|
35
35
|
- lib/momomoto/momomoto.rb
|
36
|
-
- lib/momomoto/
|
37
|
-
- lib/momomoto/
|
38
|
-
- lib/momomoto/
|
39
|
-
- lib/momomoto/datatype.rb
|
40
|
-
- lib/momomoto/
|
41
|
-
- lib/momomoto/
|
42
|
-
- lib/momomoto/information_schema/table_constraints.rb
|
43
|
-
- lib/momomoto/information_schema/columns.rb
|
44
|
-
- lib/momomoto/information_schema/fetch_procedure_parameters.rb
|
45
|
-
- lib/momomoto/information_schema/fetch_procedure_columns.rb
|
46
|
-
- lib/momomoto/information_schema/routines.rb
|
47
|
-
- lib/momomoto/information_schema/key_column_usage.rb
|
48
|
-
- lib/momomoto/datatype/boolean.rb
|
49
|
-
- lib/momomoto/datatype/date.rb
|
36
|
+
- lib/momomoto/datatype/character.rb
|
37
|
+
- lib/momomoto/datatype/bytea.rb
|
38
|
+
- lib/momomoto/datatype/array/text.rb
|
39
|
+
- lib/momomoto/datatype/array/base.rb
|
40
|
+
- lib/momomoto/datatype/array/integer.rb
|
41
|
+
- lib/momomoto/datatype/interval.rb
|
50
42
|
- lib/momomoto/datatype/array.rb
|
51
|
-
- lib/momomoto/datatype/smallint.rb
|
52
43
|
- lib/momomoto/datatype/real.rb
|
53
44
|
- lib/momomoto/datatype/text.rb
|
54
|
-
- lib/momomoto/datatype/
|
55
|
-
- lib/momomoto/datatype/character.rb
|
56
|
-
- lib/momomoto/datatype/integer.rb
|
57
|
-
- lib/momomoto/datatype/time_without_time_zone.rb
|
58
|
-
- lib/momomoto/datatype/character_varying.rb
|
45
|
+
- lib/momomoto/datatype/time_with_time_zone.rb
|
59
46
|
- lib/momomoto/datatype/inet.rb
|
47
|
+
- lib/momomoto/datatype/character_varying.rb
|
48
|
+
- lib/momomoto/datatype/time_without_time_zone.rb
|
60
49
|
- lib/momomoto/datatype/numeric.rb
|
61
|
-
- lib/momomoto/datatype/
|
50
|
+
- lib/momomoto/datatype/smallint.rb
|
62
51
|
- lib/momomoto/datatype/timestamp_without_time_zone.rb
|
63
|
-
- lib/momomoto/datatype/timestamp_with_time_zone.rb
|
64
|
-
- lib/momomoto/datatype/time_with_time_zone.rb
|
65
52
|
- lib/momomoto/datatype/base.rb
|
53
|
+
- lib/momomoto/datatype/timestamp_with_time_zone.rb
|
54
|
+
- lib/momomoto/datatype/date.rb
|
55
|
+
- lib/momomoto/datatype/integer.rb
|
56
|
+
- lib/momomoto/datatype/boolean.rb
|
66
57
|
- lib/momomoto/datatype/bigint.rb
|
67
|
-
- lib/momomoto/
|
68
|
-
- lib/momomoto/
|
69
|
-
- lib/momomoto/
|
58
|
+
- lib/momomoto/information_schema.rb
|
59
|
+
- lib/momomoto/information_schema/fetch_procedure_columns.rb
|
60
|
+
- lib/momomoto/information_schema/fetch_procedure_parameters.rb
|
61
|
+
- lib/momomoto/information_schema/columns.rb
|
62
|
+
- lib/momomoto/database.rb
|
63
|
+
- lib/momomoto/datatype.rb
|
64
|
+
- lib/momomoto/row.rb
|
65
|
+
- lib/momomoto/table.rb
|
66
|
+
- lib/momomoto/base.rb
|
67
|
+
- lib/momomoto/order.rb
|
68
|
+
- lib/momomoto/procedure.rb
|
69
|
+
- lib/timeinterval.rb
|
70
70
|
- sql/procedures.sql
|
71
|
-
- sql/types.sql
|
72
71
|
- sql/install.sql
|
73
|
-
-
|
74
|
-
- test/test_array.rb
|
75
|
-
- test/test_boolean.rb
|
72
|
+
- sql/types.sql
|
76
73
|
- test/test_real.rb
|
77
|
-
- test/
|
78
|
-
- test/test_interval.rb
|
79
|
-
- test/test_text.rb
|
80
|
-
- test/test_table.rb
|
81
|
-
- test/test_numeric.rb
|
74
|
+
- test/test_time_with_time_zone.rb
|
82
75
|
- test/test_inet.rb
|
83
|
-
- test/
|
84
|
-
- test/test_character_varying.rb
|
85
|
-
- test/test_character.rb
|
76
|
+
- test/test_table.rb
|
86
77
|
- test/test_integer.rb
|
78
|
+
- test/test_information_schema.rb
|
79
|
+
- test/test_timeinterval.rb
|
80
|
+
- test/test_text.rb
|
87
81
|
- test/test_datatype.rb
|
82
|
+
- test/test_character.rb
|
83
|
+
- test/test_boolean.rb
|
88
84
|
- test/test_row.rb
|
85
|
+
- test/test_date.rb
|
86
|
+
- test/test_array.rb
|
87
|
+
- test/test_bigint.rb
|
88
|
+
- test/test_base.rb
|
89
89
|
- test/test_timestamp_without_time_zone.rb
|
90
|
-
- test/
|
91
|
-
- test/test_timeinterval.rb
|
90
|
+
- test/test_interval.rb
|
92
91
|
- test/test_database.rb
|
92
|
+
- test/test_smallint.rb
|
93
|
+
- test/test_procedure.rb
|
93
94
|
- test/test_bytea.rb
|
94
|
-
- test/
|
95
|
-
- test/test_base.rb
|
96
|
-
- test/test_bigint.rb
|
95
|
+
- test/test_character_varying.rb
|
97
96
|
- test/test_timestamp_with_time_zone.rb
|
98
|
-
- test/
|
97
|
+
- test/test_time_without_time_zone.rb
|
98
|
+
- test/test_numeric.rb
|
99
99
|
- test/test_functions.sql
|
100
100
|
- test/test.sql
|
101
|
-
- LICENSE
|
102
101
|
- Rakefile
|
103
|
-
|
104
|
-
|
102
|
+
- LICENSE
|
103
|
+
has_rdoc: true
|
104
|
+
homepage: http://pentabarf.org/Momomoto
|
105
|
+
post_install_message:
|
105
106
|
rdoc_options: []
|
106
107
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ">="
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: 1.8.6
|
115
|
+
version:
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ">="
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: "0"
|
121
|
+
version:
|
113
122
|
requirements:
|
114
123
|
- PostgreSQL 8.1.x or greater
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
- !ruby/object:Gem::Version
|
123
|
-
version: 0.7.9.2008.01.09
|
124
|
-
version:
|
124
|
+
rubyforge_project: momomoto
|
125
|
+
rubygems_version: 1.2.0
|
126
|
+
signing_key:
|
127
|
+
specification_version: 2
|
128
|
+
summary: Momomoto is an object relational mapper for PostgreSQL.
|
129
|
+
test_files: []
|
130
|
+
|
@@ -1,14 +0,0 @@
|
|
1
|
-
|
2
|
-
module Momomoto
|
3
|
-
module Information_schema
|
4
|
-
|
5
|
-
# internal use only
|
6
|
-
#
|
7
|
-
# Represents the corresponding view from Information Schema and is
|
8
|
-
# used for getting the column names of primary keys of a table.
|
9
|
-
class Key_column_usage < Momomoto::Table
|
10
|
-
schema_name( "information_schema" )
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
@@ -1,16 +0,0 @@
|
|
1
|
-
|
2
|
-
module Momomoto
|
3
|
-
|
4
|
-
module Information_schema
|
5
|
-
|
6
|
-
# internal use only
|
7
|
-
#
|
8
|
-
# Represents the corresponding view from Information Schema and is
|
9
|
-
# used for getting all defined functions within a database.
|
10
|
-
class Routines < Momomoto::Table
|
11
|
-
schema_name( "information_schema" )
|
12
|
-
end
|
13
|
-
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
|
2
|
-
module Momomoto
|
3
|
-
module Information_schema
|
4
|
-
|
5
|
-
# internal use only
|
6
|
-
#
|
7
|
-
# Represents the corresponding view from Information Schema and is
|
8
|
-
# used when fetching primary keys.
|
9
|
-
class Table_constraints < Momomoto::Table
|
10
|
-
primary_keys( [] )
|
11
|
-
schema_name( "information_schema" )
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|