DISCONTINUED as of 2014-08-25

FlexiRecord is a ruby library for object oriented access to databases (object-relational mapping / ORM). Each table is represented by a class, each row of that table is represented by an object of that class. This library is especially aimed to properly support database transactions. By now only PostgreSQL (version 8.2 or higher) is supported as a backend. The library can be used as a replacement for ActiveRecord in Ruby on Rails, when support for transactions covering multiple tables is needed (e.g. in business applications).




  • Changes in version 1.0.7 (productive)
    • A bug, which caused dropped table columns to be treated like existing table columns, was fixed.
  • Changes in version 1.0.6 (beta)
    • When a database error occurs, the corresponding connection is marked as "spoiled" and will not be reused by the current or other threads. This is neccessary to get rid of broken connections, as the ruby "postgres" library doesn't pass PostgreSQL error codes, making it impossible to cleanly detect bad connections.
    • PGErrors raised during opening of a connection are now catched and transformed to FlexiRecord::DatabaseError exceptions.
  • Changes in version 1.0.5 (beta)
    • A serious bug was fixed, which caused negative numerics with a fractional part to be read incorrectly from the database.
  • Changes in version 1.0.4
    • A bug in the preloader has been fixed, which caused trouble when a record array contained duplicate objects (with the same primary key).
  • Changes in version 1.0.3 (beta)
    • Bug in PostgreSQL 8.1 compatiblity patch, which occured when being used with triggers, was fixed.
    • Added support for floats in addition to rationals/numerics.
  • Changes in version 1.0.2 (beta)
    • Fixed a bug, which caused a runtime error, when reading negative numeric data from the database.
  • Changes in version 1.0.1 (beta)
    • Fixed a bug leading to wrong microseconds in timestamps read from the database.
  • Changes in version 1.0.0 (beta)
    • PostgreSQL's types date, timestamp and timestamptz now get converted to a ruby Time object, when being read from the database. Ruby Time objects get converted to the following string representation, when being written to the database: YYYY-MM-DD HH:MM:SS.uuuuuu+/-hh, where hh is the offset in hours from UTC. This string can be (implicitly or explicitly) type casted by PostgreSQL to a Date/Time type.
    • Added two documentation comments.
  • Changes in version 0.0.6 (alpha)
    • SELECT DISTINCT has been replaced by SELECT (ALL).
  • Changes in version 0.0.5 (alpha)
    • Added FlexiRecord::BaseRecord#transaction method.
    • Fixed a bug in the FlexiRecord::ListRecord module.
    • src_to_dst_attr and dst_to_src_attr arguments of FlexiRecord::Reference.new are now allowed to be nil.