flexirecord 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,75 @@
1
+ --- flexirecord.rb 2007-02-07 18:54:13.000000000 +0000
2
+ +++ flexirecord-oldpg.rb 2007-02-08 12:05:49.000000000 +0000
3
+ @@ -568,7 +568,7 @@
4
+ primary_columns = []
5
+ db_query('SELECT ' <<
6
+ '"pg_attribute"."attname", ' <<
7
+ - '"pg_constraint"."conkey" @> ARRAY["pg_attribute"."attnum"] AS "primary" ' <<
8
+ + '("pg_constraint"."conkey"[1] = "pg_attribute"."attnum" OR "pg_constraint"."conkey"[2] = "pg_attribute"."attnum" OR "pg_constraint"."conkey"[3] = "pg_attribute"."attnum" OR "pg_constraint"."conkey"[4] = "pg_attribute"."attnum" OR "pg_constraint"."conkey"[5] = "pg_attribute"."attnum" OR "pg_constraint"."conkey"[6] = "pg_attribute"."attnum" OR "pg_constraint"."conkey"[7] = "pg_attribute"."attnum" OR "pg_constraint"."conkey"[8] = "pg_attribute"."attnum") AS "primary" ' <<
9
+ 'FROM "pg_attribute" ' <<
10
+ 'JOIN "pg_class" ON "pg_attribute"."attrelid" = "pg_class"."oid" ' <<
11
+ 'JOIN "pg_namespace" ON "pg_class"."relnamespace" = "pg_namespace"."oid" ' <<
12
+ @@ -752,7 +752,7 @@
13
+ )
14
+ end
15
+
16
+ - # Adds a ManyToOneReference to the class (by simply creating it). The first argument is the destination class, followed by arguments being passed to Reference.new.
17
+ + # Adds a ManyToManyReference to the class (by simply creating it). The first argument is the destination class, followed by arguments being passed to Reference.new.
18
+ def add_many_to_one_reference(destination_class, *arguments)
19
+ return FlexiRecord::ManyToOneReference.new(
20
+ self, destination_class, *arguments
21
+ @@ -985,16 +985,14 @@
22
+ def save
23
+ synchronize do
24
+ used_columns = self.used_columns
25
+ - primary_key = nil
26
+ if @saved
27
+ if self.class.primary_columns.empty?
28
+ raise "Can not re-save a record of a table without a primary key."
29
+ end
30
+ - primary_key = self.class.db_query1(
31
+ + self.class.db_execute(
32
+ 'UPDATE ' << self.class.table <<
33
+ ' SET ' << (used_columns.collect { |column| '"' << column << '" = $' }.join(', ')) <<
34
+ - ' WHERE ' << (self.class.primary_columns.collect { |column| '"' << column << '" = $' }.join(' AND ')) <<
35
+ - ' RETURNING ' << (self.class.primary_columns.collect { |column| '"' << column << '"' }.join(', ')),
36
+ + ' WHERE ' << (self.class.primary_columns.collect { |column| '"' << column << '" = $' }.join(' AND ')),
37
+ *(
38
+ used_columns.collect { |column| read(column) } +
39
+ self.class.primary_columns.collect { |column| @old_primary_key[column] }
40
+ @@ -1002,18 +1000,12 @@
41
+ )
42
+ else
43
+ if used_columns.empty?
44
+ - primary_key = self.class.db_query1('INSERT INTO ' << self.class.table << ' DEFAULT VALUES' <<
45
+ - (self.class.primary_columns.empty? ? '' : (
46
+ - ' RETURNING ' << (self.class.primary_columns.collect { |column| '"' << column << '"' }.join(', '))
47
+ - )))
48
+ + self.class.db_execute('INSERT INTO ' << self.class.table << ' DEFAULT VALUES')
49
+ else
50
+ - primary_key = self.class.db_query1(
51
+ + self.class.db_execute(
52
+ 'INSERT INTO ' << self.class.table <<
53
+ ' (' << (used_columns.collect { |column| '"' << column << '"' }.join(', ')) << ')' <<
54
+ - ' VALUES (' << (used_columns.collect { |column| '$' }.join(', ')) << ')' <<
55
+ - (self.class.primary_columns.empty? ? '' : (
56
+ - ' RETURNING ' << (self.class.primary_columns.collect { |column| '"' << column << '"' }.join(', '))
57
+ - )),
58
+ + ' VALUES (' << (used_columns.collect { |column| '$' }.join(', ')) << ')',
59
+ *(
60
+ used_columns.collect { |column| read(column) }
61
+ )
62
+ @@ -1021,10 +1013,9 @@
63
+ end
64
+ @saved = true
65
+ end
66
+ - unless primary_key.nil?
67
+ - self.class.primary_columns.each do |column|
68
+ - self.set(column, primary_key.read(column))
69
+ - end
70
+ + if self.class.primary_columns == ['id'] and self.id.nil?
71
+ + primary_key = self.class.db_query1('SELECT lastval() AS "id"')
72
+ + self.id = primary_key.id
73
+ end
74
+ copy_primary_key
75
+ return self
@@ -117,7 +117,8 @@ module FlexiRecordDemo
117
117
  MediumEntry.new(:medium => medium_b, :position => :last, :movie => koyaanisqatsi).save
118
118
  MediumEntry.new(:medium => medium_b, :position => :last, :movie => american_beauty).save
119
119
  end
120
- Rating.new(:person => anja, :movie => naruto, :rating => Rational(7, 10)).save
120
+ Rating.new(:person => anja, :movie => american_beauty, :rating => Rational(7, 10)).save
121
+ Rating.new(:person => anja, :movie => koyaanisqatsi, :rating => Rational(9,10)).save
121
122
  Rating.new(:person => phillip, :movie => koyaanisqatsi, :rating => Rational(6,10)).save
122
123
  Rating.new(:person => phillip, :movie => koyaanisqatsi, :rating => Rational(8,10)).save
123
124
  Rating.new(:person => wilson, :movie => naruto, :comment => 'Rasengan!').save
@@ -138,6 +139,14 @@ module FlexiRecordDemo
138
139
  puts " - Rating: #{rating.rating ? rating.rating.to_s : 'none'}"
139
140
  puts " - Comment: #{rating.comment || 'none'}"
140
141
  end
142
+ anjas = Person.select('WHERE "name" = $', 'Anja')
143
+ if anjas.length == 1
144
+ anja = anjas.first
145
+ anjas_favourite = anja.rated_movies('WHERE "rel"."rating" NOTNULL ORDER BY "rel"."rating" DESC LIMIT 1').first
146
+ puts "The movie, which Anja likes most is: #{anjas_favourite ? anjas_favourite.name : 'N/A'}."
147
+ else
148
+ puts "There is more than one person named Anja."
149
+ end
141
150
  nil
142
151
  end
143
152
  module_function :demo
data/lib/flexirecord.rb CHANGED
@@ -752,7 +752,7 @@ module FlexiRecord
752
752
  )
753
753
  end
754
754
 
755
- # Adds a ManyToManyReference to the class (by simply creating it). The first argument is the destination class, followed by arguments being passed to Reference.new.
755
+ # Adds a ManyToOneReference to the class (by simply creating it). The first argument is the destination class, followed by arguments being passed to Reference.new.
756
756
  def add_many_to_one_reference(destination_class, *arguments)
757
757
  return FlexiRecord::ManyToOneReference.new(
758
758
  self, destination_class, *arguments
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: flexirecord
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.2
7
- date: 2007-02-07 00:00:00 +00:00
6
+ version: 0.0.3
7
+ date: 2007-02-08 00:00:00 +00:00
8
8
  summary: Object-Oriented Database Access Library
9
9
  require_paths:
10
10
  - lib/
@@ -34,6 +34,7 @@ files:
34
34
  - lib/flexirecord.rb
35
35
  - lib/flexirecord-demo.rb
36
36
  - ./flexirecord-demo.sql
37
+ - flexirecord-oldpg.rb.patch
37
38
  test_files: []
38
39
 
39
40
  rdoc_options: