Finally, the adapters offered little opportunity for abstraction, as they returned rows as array or hash like objects, making it difficult to assign behavior to records.