# Object Database Access v 1.0 released

**URL:** <https://www.ruby-forum.com/t/object-database-access-v-1-0-released/50713>\
**Category:** Ruby\
**Created:** [December 20, 2005, 11:29am UTC](https://www.ruby-forum.com/t/object-database-access-v-1-0-released/50713 "2005-12-20T11:29:51Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![spreadsheet](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5fc32e/32.png) [@spreadsheet](https://www.ruby-forum.com/u/spreadsheet)\
**Post date:** [December 20, 2005, 11:29am UTC](https://www.ruby-forum.com/t/object-database-access-v-1-0-released/50713/1 "2005-12-20T11:29:51Z")

</div>

Hi all!

Here comes yet another way to map Ruby-Objects to a Relational Database:

ODBA is an unintrusive Object Cache system. It adresses the crosscutting  
concern of object storage by disconnecting and serializing objects into  
storage. All disconnected connections are replaced by instances of  
ODBA::Stub, thus enabling transparent object-loading.

ODBA supports:

- transparent loading of connected objects
- index-vectors
- transactions
- transparently fetches Hash-Elements without loading the entire Hash

An Example:  
include ‘odba’

#connect default storage manager to a relational database  
ODBA.storage.dbi = ODBA::ConnectionPool.new(‘DBI::pg::database’, ‘user’,  
‘pw’)

class Counter  
include ODBA::Persistable  
def initialize  
@pos = 0  
end  
def up  
@pos += 1  
self.odba\_store  
@pos  
end  
def down  
@pos -= 1  
self.odba\_store  
@pos  
end  
end

Thanks in advance for any feedback that comes my way!

Cheers  
Hannes

–  
Mit freundlichen Grüssen / best regards

Hannes W.  
Konzeption & Entwicklung

pub 1024D/60312B5F 2003-10-09 Hannes W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Key fingerprint = 82D1 90C7 3F3D 93DC F715 4F8B 987A 628E 6031  
2B5F

+41 43 540 05 49

[www.ywesee.com](http://www.ywesee.com) \> intellectual capital connected \> [www.oddb.org](http://www.oddb.org)

---

<div class="post-metadata">

**Author:** ![spreadsheet](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5fc32e/32.png) [@spreadsheet](https://www.ruby-forum.com/u/spreadsheet)\
**Post date:** [December 20, 2005, 11:50am UTC](https://www.ruby-forum.com/t/object-database-access-v-1-0-released/50713/2 "2005-12-20T11:50:59Z")

</div>

Oops. Where can you get it?

raa:  
[http://raa.ruby-lang.org/project/odba/](http://raa.ruby-lang.org/project/odba/)  
documentation:  
[http://odba.ywesee.com/](http://odba.ywesee.com/)  
download:  
[http://odba.ywesee.com/](http://odba.ywesee.com/)  
scm:  
[http://scm.ywesee.com/?p=odba](http://scm.ywesee.com/?p=odba)

Hannes

–  
Mit freundlichen Grüssen / best regards

Hannes W.  
Konzeption & Entwicklung

pub 1024D/60312B5F 2003-10-09 Hannes W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Key fingerprint = 82D1 90C7 3F3D 93DC F715 4F8B 987A 628E 6031  
2B5F

+41 43 540 05 49

[www.ywesee.com](http://www.ywesee.com) \> intellectual capital connected \> [www.oddb.org](http://www.oddb.org)

---

<div class="post-metadata">

**Author:** ![spreadsheet](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5fc32e/32.png) [@spreadsheet](https://www.ruby-forum.com/u/spreadsheet)\
**Post date:** [December 20, 2005, 3:21pm UTC](https://www.ruby-forum.com/t/object-database-access-v-1-0-released/50713/3 "2005-12-20T15:21:26Z")

</div>

Interesting.

How would you do a search?  
For example, how would you find all Counters with a pos \> 10 but not 13?  
Is the search done centrally, or must you download all Counters before  
you can do the search?

---

<div class="post-metadata">

**Author:** ![spreadsheet](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5fc32e/32.png) [@spreadsheet](https://www.ruby-forum.com/u/spreadsheet)\
**Post date:** [December 20, 2005, 4:00pm UTC](https://www.ruby-forum.com/t/object-database-access-v-1-0-released/50713/4 "2005-12-20T16:00:37Z")

</div>

Lou

On Tue, Dec 20, 2005 at 11:19:44PM +0900, Lou V. wrote:

> How would you do a search?

I’ll have to eat my own example here: we’ve only ever been interested in  
string search - i.e. find all users whose last name begins with ‘Van’:

require ‘odba’  
require ‘odba/index\_definition’

class User  
attr\_accessor :first\_name, :last\_name  
include ODBA::Persistable  
def initialize(first\_name, last\_name)  
@first\_name = first\_name  
@last\_name = last\_name  
end  
end

index\_def = ODBA::IndexDefinition.new  
index\_def.index\_name = ‘users\_by\_last\_name’  
index\_def.origin\_klass = ‘User’  
index\_def.target\_klass = ‘User’  
index\_def.resolve\_search\_term = ‘last\_name.downcase’

ODBA.storage.dbi = DBI.connect(‘DBI:pg:test’, ‘test’, ‘’)  
ODBA.cache.create\_index(index\_def, Object)

composer = User.new(‘Ludwig’, ‘Van Beethoven’)  
composer.odba\_store  
painter = User.new(‘Vincent’, ‘Van Gogh’)  
painter.odba\_store  
scientist = User.new(‘Albert’, ‘Einstein’)  
scientist.odba\_store

ODBA.cache.retrieve\_from\_index(‘users\_by\_last\_name’, ‘van’)  
 → [composer, painter]

> For example, how would you find all Counters with a pos \> 10 but not 13?  
> Is the search done centrally, or must you download all Counters before  
> you can do the search?  
> The numerical Counter#pos case could be done, but is not implemented…

Hannes

–  
Mit freundlichen Grüssen / best regards

Hannes W.  
Konzeption & Entwicklung

pub 1024D/60312B5F 2003-10-09 Hannes W. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
Key fingerprint = 82D1 90C7 3F3D 93DC F715 4F8B 987A 628E 6031  
2B5F

+41 43 540 05 49

[www.ywesee.com](http://www.ywesee.com) \> intellectual capital connected \> [www.oddb.org](http://www.oddb.org)

---

<div class="post-metadata">

**Author:** ![spreadsheet](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/5fc32e/32.png) [@spreadsheet](https://www.ruby-forum.com/u/spreadsheet)\
**Post date:** [December 20, 2005, 5:00pm UTC](https://www.ruby-forum.com/t/object-database-access-v-1-0-released/50713/5 "2005-12-20T17:00:49Z")

</div>

Thanks.
