Re: [ANNOUNCE] SQLite Persisted Objects for Cocoa
Re: [ANNOUNCE] SQLite Persisted Objects for Cocoa
- Subject: Re: [ANNOUNCE] SQLite Persisted Objects for Cocoa
- From: Phillip Jacobs <email@hidden>
- Date: Tue, 26 Aug 2008 15:28:14 -0500
Hi Jeff,
This is really interesting stuff.
Question: You mention "references to other persisted objects as
quasi-foreign-key relationships". How do you join these objects? Also,
once a link is achieved how would you query taking advantage of this?
I only ask because I don't see any documentation or reference to this.
Maybe you could write an example of this functionality if it exists?
Thanks in advance!
-Phillip Jacobs
On Aug 26, 2008, at 1:22 PM, Jeff LaMarche wrote:
Greetings all.
I recently created a project at Google Code that I wanted to bring
to your attention.
http://code.google.com/p/sqlitepersistentobjects/
The goal of this project is to create Objective-C data model objects
that automagically know how to persist themselves to a SQLite
database based on their Objective-C 2.0 properties without any need
to write SQL or use the SQLite3 API directly. The version of the
source code that is currently available on Google Code is a solid,
functional beta. The only major feature not currently implemented is
the ability to rollback an object to its saved state, and I'm
currently working on that. If you use it, you should expect to
encounter some bugs (it's an early beta, after all), but it should
work for most purposes.
If you've ever used Ruby's ActiveRecord implementation, this is
fairly similar, except that instead of being driven by the database
tables, it's driven by the Object's properties. This allows you to
build a persistable data model without having to create a mapping as
Core Data requires. You just create your classes and all the mapping
to and from the database is done behind the scenes thanks to the
superclass.
This supports storing most common object types and scalars in data
fields. It also supports collection classes (NSSet, NSArray,
NSDictionary) using cross-reference tables, and stores references to
other persisted objects as quasi-foreign-key relationships (I
couldn't use the FK constraints in the database because they are
table-specific, don't lend themselves to polymorphism, and aren't
enforced by SQLite3 anyway). It also supports adding indexes to the
underlying tables by overriding a class method.
In order to create persistable objects, you simply add the files
from this project to your Xcode project, link to sqlite3.dylib, then
create subclasses of SQLitePersistentObject, like so:
#import <foundation/foundation.h>
#import "SQLitePersistentObject.h"
@interface PersistablePerson : SQLitePersistentObject {
NSString *lastName;
NSString *firstName;
}
@property (nonatomic, retain) NSString * lastName;
@property (nonatomic, retain) NSString * firstName;
@end
Once you've done that, you can just create your objects as usual:
PersistablePerson *person = [[PersistablePerson alloc] init];
person.firstName = @"Joe";
person.lastName = @"Smith";
Then you can save those objects to the database (the data base and
table will be created automatically) like so:
[person save];
Loading it back in is almost as easy. All persistable object classes
gets dynamic class methods added to them to allow you to search for
instances. So, for example, you could retrieve all the
PersistablePerson objects that had a last name of "Smith" like so:
NSArray *people = [PersistablePerson findByLastName:@"Smith"]
Or, we could specify the exact criteria like this:
PeristablePerson *joeSmith = [PersistablePerson
findFirstByCriteria:@"WHERE last_name = 'Smith' AND first_name =
'Joe'];
This is licensed under a very liberal license - you can use it in
any software, free or commercial, without limitation. You do NOT
have to give credit and you do NOT have to publish your changes to
the source code (although I'll certainly welcome any bug fixes or
enhancements you wish to give back). The only restriction I've
placed on this project is that if you choose to distribute the
source code you must leave the copyright and license information in
the file, though you are welcome to add additional comments if you
wish.
I welcome all comments and/or feedback.
Thanks,
Jeff
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden