Here's BaseTen 1.5 (6.3MB .dmg), released on November 28th, 2008.

Also see the tutorial, the reference manual and the instructions on building BaseTen from the source repository.

Release Notes for 1.5

  • Rewrote most of the PostgreSQL interface.
  • Added support for various predicate and expression types.
  • Unsupported predicates and expressions are now evaluated on the client side.
  • Connection loss is handled at least on system sleep.
  • Text strings are now stored as decomposed in the database.
  • Fixed bugs related to NSKVO compliance of to-one relationships; KVO notifications should now be posted as expected.
  • BaseTen Assistant now has a new GUI.
  • BaseTen can now connect to databases that haven't been BaseTen enabled.
  • Fixed various bugs.

These issues from 1.0 remain:

  • Practically all public classes are non-thread-safe, so thread safety must be enforced externally if required. Furthermore, all queries should be performed from the main thread. Exceptions to this are BXDatabaseObject and BXDatabaseObjectID, the thread-safe methods of which have been documented.
  • Any serialization method has not been implemented for BXDatabaseObject.

Release Notes for 1.0

  • Leopard compatibility for non-gc applications.
  • The disk image now contains a plug-in for Interface Builder 3.0; the old palette is available as a separate download.
  • Database objects' related object collections may now be key-value observed.
  • Reworked relationship internals for improved reliability.
  • Added various Core Data -like methods to classes.
  • Key-value validation for NOT NULL constraints.
  • Validation for deletion of relationships.
  • Reduced thread creation on connect and fixed other bugs.

Release Notes for RC1

  • BaseTen RC1 was released on May 9th, 2007.
  • Added May 10th: Fixed a bug where both awakeFromInsert and awakeFromFetch were called for an inserted object.
  • BXDatabaseObjects now retain the neighboring objects accessed through relationships. This enables bindings to key paths across relationships, ie. "object.relatedobject.relatedobject.attribute".
  • As the memory management change above can cause cyclical references, we have added the method -[BXDatabaseContext refreshObject:mergeChanges:]. It, like its NSManagedObjectContext counterpart, can be used to re-fault BXDatabaseObjects and hence to release their referenced objects.
  • Simplified the naming of autodiscovered relationships. All relationships can now be accessed with the target table or view name as the key, ie. -[BXDatabaseObject theothertable]. This also works for many-to-many relationships; in those cases, you use the name of the actual target table, not the relationship glue table. The direction-specific names still work and are used by the BaseTen Assistant when importing Core Data models; BaseTen documentation will, however, emphasise the approach based on table names.
  • Other minor improvements and bug fixes.

Release Notes for DP4

  • BaseTen DP4 was released on April 10th, 2007.
  • BaseTen now includes a Bonjour browser and Keychain-enabled username/password entry dialogs. Specifying hostnames and username/password pairs in database URLs is therefore optional.
  • BaseTen honors the default system security policy when deciding whether an SSL certificate is to be trusted. If a certificate is not trusted by default, a dialog is shown. There is also a policy delegate API.
  • See BaseTenStickies for the above dialogs in action.
  • The database context can be set to connect to the database automatically, or only when manually prompted. This setting is also available in the Interface Builder palette.
  • A fetch predicate can now refer to entities across relationships. The syntax is not yet optimal, see ticket #65 for details.
  • The -awakeFromInsert, -isInserted and -isDeleted methods are now available and semantically equivalent to the same NSManagedObject methods
  • Bug fixes related to NSUndoManager support, to using multiple contexts in a single application, and other issues (Thanks to Ashley Clark.)

Release Notes for DP3.1

  • BaseTen DP3.1 was released on February 27th, 2007.
  • The BaseTen Assistant now imports validation predicates (maximum/minimum values, string lengths and regexp validation patterns)
  • There are likely to be bugs and compatibility issues with the Core Data ICU-based regexp validation patterns and the POSIX ones understood by PostgreSQL -- caveat emptor.
  • You can now perform custom SQL queries with two new convenience methods in the database context. The executeQuery:error: method returns the query result as an NSArray of NSDictionaries. The executeCommand:error: returns the number of affected rows:
    - (NSArray *)executeQuery:(NSString *)queryString error:(NSError **)error;
    - (unsigned long long)executeCommand:(NSString *)commandString error:(NSError **)error;
    
  • The database context now implements a Core Data -like setRetainsRegisteredObjects: method.
  • The full accuracy of timestamp columns (timestamp(6), microsecond precision) is now supported. Previously, sub-millisecond digits were discarded in conversions.
  • A number of bugs in DP3 have been fixed for DP3.1. We thank you for all the bug reports and patches.
  • Stay tuned for BaseTen for Workgroups DP3.11.

Release Notes for DP3

  • BaseTen DP3 was released on February 13th, 2007.
  • The keys used for accessing objects behind relationships have been changed. See the Relationships page for more information about the new naming.
  • The NSUndoManager grouping is now used to decide whether SAVEPOINTs are created between SQL statements in non-autocommit mode. This can speed up the processing of a group of related operations.
  • SSL connections are now supported; they can now be required or preferred. The system (Keychain) trust settings will be used by default; there is also a policy delegate API for further control.
  • The database connection can be initiated asynchronously to facilitate the display of certificate trust choice sheets to the end user.
  • The PostgreSQL client library has been updated to version 8.2.3
  • A number of bugs in DP2 have been fixed for DP3. We thank you for all the bug reports and patches.

Release Notes for DP2

  • BaseTen DP2 was released on January 12th, 2007.
  • We've been hard at work on bringing you this developer preview of BaseTen, but it's nowhere near finished. Lots of things work, lots of things don't. The primary function of this DP2 release is to allow you to evaluate the potential of BaseTen in its finished form.
  • A number of bugs in DP1 have been fixed for DP2. We thank you for all the bug reports and patches.
  • The BaseTen Assistant now supports setting the primary key columns of a view for the purposes of generating the database object ids -- this no longer needs to be done using -[BXEntityDescription setPrimaryKey:].
  • BaseTen DP2 can also automatically determine the physical tables a view is based on, so providing this information with -[BXEntityDescription viewIsBasedOnTablesInItsSchema:] or -[BXEntityDescription viewIsBasedOnEntities:] is no longer mandatory. Both of those calls can still be made in cases where, for example, the view depends on tables via an indirection such as a PL/pgSQL procedure.
  • If you want to have a relationship point from a view to another view instead of the physical table the foreign key constraint refers to, you still have to use -[BXEntityDescription setTargetView:forRelationshipNamed:]. We hope to have a nicer way of accomplishing this in a future release.

Release Notes for DP1

  • BaseTen DP1 was released on December 1st, 2006.
  • We've been hard at work on bringing you this developer preview of BaseTen, but it's nowhere near finished. Lots of things work, lots of things don't. The primary function of this DP1 release is to allow you to evaluate the potential of BaseTen in its finished form.
  • The Assistant does not import validation predicates (maximum/minimum values and string lengths, regexp validation patterns) in DP1
  • The debug output is often way too verbose, even in a Release build.
  • Practically all public classes are non-thread-safe, so thread safety must be enforced externally if required. Furthermore, all queries should be performed from the main thread. Exceptions to this are BXDatabaseObject and BXDatabaseObjectID, the thread-safe methods of which have been documented.
  • NSCoding has not been implemented for BXDatabaseObject.
  • Timestamp parsing causes accuracy to be lost if the timestamp precision is greater than 3. The workaround is to cast timestamps to timestamp (3) using views or otherwise.
  • Automatically updating collections currently don’t post KVO notifications. Instead, one should subscribe to NSNotifications kBXInsertNotification, kBXUpdateNotification and kBXDeleteNotification with the entity description as the notification object.

An archive of previous versions is also available.