flexirecord 1.0.2 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -61,7 +61,16 @@
61
61
 
62
62
  - 2007-03-08:
63
63
  - >
64
- Fixed a bug, which caused a runtime error, when reading negative numeric data from the database. (TODO: support floats)
64
+ Fixed a bug, which caused a runtime error, when reading negative numeric data from the database.
65
65
 
66
66
  - Release of version 1.0.2
67
67
 
68
+ - 2007-03-09:
69
+ - >
70
+ Bug in PostgreSQL 8.1 compatiblity patch, which occured when being used with triggers, was fixed.
71
+ - >
72
+ Added support for floats in addition to rationals/numerics.
73
+
74
+
75
+
76
+
@@ -1,6 +1,6 @@
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 @@
1
+ --- flexirecord.rb 2007-03-08 21:01:55.000000000 +0000
2
+ +++ flexirecord-oldpg.rb 2007-03-09 15:25:31.000000000 +0000
3
+ @@ -652,7 +652,7 @@
4
4
  primary_columns = []
5
5
  db_query('SELECT ' <<
6
6
  '"pg_attribute"."attname", ' <<
@@ -9,16 +9,7 @@
9
9
  'FROM "pg_attribute" ' <<
10
10
  'JOIN "pg_class" ON "pg_attribute"."attrelid" = "pg_class"."oid" ' <<
11
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 @@
12
+ @@ -1074,16 +1074,14 @@
22
13
  def save
23
14
  synchronize do
24
15
  used_columns = self.used_columns
@@ -37,7 +28,7 @@
37
28
  *(
38
29
  used_columns.collect { |column| read(column) } +
39
30
  self.class.primary_columns.collect { |column| @old_primary_key[column] }
40
- @@ -1002,18 +1000,12 @@
31
+ @@ -1091,18 +1089,12 @@
41
32
  )
42
33
  else
43
34
  if used_columns.empty?
@@ -59,7 +50,7 @@
59
50
  *(
60
51
  used_columns.collect { |column| read(column) }
61
52
  )
62
- @@ -1021,10 +1013,9 @@
53
+ @@ -1110,10 +1102,9 @@
63
54
  end
64
55
  @saved = true
65
56
  end
@@ -68,7 +59,7 @@
68
59
  - self.set(column, primary_key.read(column))
69
60
  - end
70
61
  + if self.class.primary_columns == ['id'] and self.id.nil?
71
- + primary_key = self.class.db_query1('SELECT lastval() AS "id"')
62
+ + primary_key = self.class.db_query1(%Q{SELECT currval('#{self.class.schema_name ? "#{self.class.schema_name}.#{self.class.table_name}" : self.class.table_name}_id_seq') AS "id"})
72
63
  + self.id = primary_key.id
73
64
  end
74
65
  copy_primary_key
data/lib/flexirecord.rb CHANGED
@@ -1265,20 +1265,33 @@ module FlexiRecord
1265
1265
  # Executes an SQL query and returns an Array of objects of 'record_class' (which should be a sub-class of BaseRecord). The 'command_template' is an SQL statement with '$' placeholders to be replaced by the following 'command_arguments'.
1266
1266
  def record_query(record_class, command_template, *command_arguments)
1267
1267
  command = command_template.to_s.gsub(/\$([^0-9]|$)/) {
1268
+ rest = $1
1268
1269
  if command_arguments.empty?
1269
1270
  raise ArgumentError, "Too few arguments supplied for SQL command."
1270
1271
  end
1271
1272
  command_argument = command_arguments.shift
1272
- if command_argument.kind_of? Rational
1273
- command_argument = command_argument.to_f
1274
- elsif command_argument.kind_of? Time
1275
- time_offset_hours = command_argument.utc_offset / 3600
1276
- unless 3600 * time_offset_hours == command_argument.utc_offset
1277
- raise "Time zone offset is not an integer amount of hours."
1273
+ if command_argument.kind_of? Float
1274
+ if command_argument.finite?
1275
+ PGconn.quote(command_argument)
1276
+ elsif command_argument.nan?
1277
+ "'NaN'"
1278
+ elsif command_argument < 0
1279
+ "'-Infinity'"
1280
+ else
1281
+ "'Infinity'"
1278
1282
  end
1279
- command_argument = "%s.%06i%+03i" % [command_argument.strftime("%Y-%m-%d %H:%M:%S"), command_argument.usec, time_offset_hours]
1280
- end
1281
- PGconn.quote(command_argument) << $1
1283
+ else
1284
+ if command_argument.kind_of? Rational
1285
+ command_argument = command_argument.to_f
1286
+ elsif command_argument.kind_of? Time
1287
+ time_offset_hours = command_argument.utc_offset / 3600
1288
+ unless 3600 * time_offset_hours == command_argument.utc_offset
1289
+ raise "Time zone offset is not an integer amount of hours."
1290
+ end
1291
+ command_argument = "%s.%06i%+03i" % [command_argument.strftime("%Y-%m-%d %H:%M:%S"), command_argument.usec, time_offset_hours]
1292
+ end
1293
+ PGconn.quote(command_argument)
1294
+ end << rest
1282
1295
  # argument = command_arguments.shift
1283
1296
  # if argument.kind_of? FlexiRecord::SqlSnippet
1284
1297
  # argument.to_s + $1
@@ -1319,6 +1332,16 @@ module FlexiRecord
1319
1332
  else
1320
1333
  $1.to_i
1321
1334
  end
1335
+ elsif ["float4", "float8"].include? data_type
1336
+ if value_string =~ /^NaN$/i
1337
+ 0.0 / 0.0
1338
+ elsif value_string =~ /^Infinity$/i
1339
+ 1.0 / 0.0
1340
+ elsif value_string =~ /^-Infinity$/i
1341
+ -1.0 / 0.0
1342
+ else
1343
+ value_string.to_f
1344
+ end
1322
1345
  elsif data_type == "date"
1323
1346
  unless value_string =~ /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/
1324
1347
  raise "Unexpected format for date from database."
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: 1.0.2
7
- date: 2007-03-08 00:00:00 +00:00
6
+ version: 1.0.3
7
+ date: 2007-03-10 00:00:00 +00:00
8
8
  summary: Object-Oriented Database Access Library (ORM layer)
9
9
  require_paths:
10
10
  - lib/