Adapter beta released (Updated 19-jan-2004)

Posts   
 
    
Otis avatar
Otis
LLBLGen Pro Team
Posts: 39786
Joined: 17-Aug-2003
# Posted on: 24-Dec-2003 17:02:30   

Ok, 3+ weeks past the deadline, but it's here, finally.

Go to http://www.llblgen.com/pages/secure/templates.aspx and download the full archive to test it out. Please read the readme that's included.

Post any suggestions, bugs, flaws, crappy coding in this forum. The adapter template set is especially focussed on creating custom inheritance. If you can't do that because there are design flaws in the code, please post a suggestion so the template set can be extended/changed.

beta started on: 24-dec-2003 Beta ends approx: 15-jan-2004.

There is also a new forum created for this beta. If you don't see it, close your browser and reconnect to the forum. If you still do not see it, let me know simple_smile

Frans Bouma | Lead developer LLBLGen Pro
Otis avatar
Otis
LLBLGen Pro Team
Posts: 39786
Joined: 17-Aug-2003
# Posted on: 02-Jan-2004 18:08:45   

An updated archive is posted to http://www.llblgen.com/pages/secure/templates.aspx

Major addition: Full, recursive export of entity/entity collection data to Xml, complete with type and other information. See WriteXml() references in the manual and the example application for details how to use it. The format is ready to be used in ReadXml() which will be implemented shortly. SelfServicing will receive this code once Adapter is released.

Major changes: * ToXml() is removed from Adapter code, the code was buggy and relied on XmlSerializer from Microsoft, which is so dogslow and buggy, it's hardly usable. I've written own code which serializes entities and entity collection classes to Xml, using solely reflection. * Catalog name support for SqlServer in Adapter. SelfServicing templates will use and work with this addition, these templates will be changed later. This support is required for changes to the tool later (multi-catalog/schema sets, project imports / merges etc.).

Minor additions to the TDL (some new SingleTokenStatements added to meet the new functionality).

The example application shows now also how to extend the entities easily. It extends OrderEntity and adds a property which calculates the total of teh OrderDetail rows inside the order. Because this is a different type it also extends Customer to hold this new entity type inside its Orders collection. When a collection of those customers is bound to a grid, you'll see the new property also in the grid when you navigate to the Orders of a customer.

Some bugfixes. See the changelogs for that.

The LLBLGen Pro gui also had an addition: if the preferred generator configuration (or the one used last time) is not found, it now displays a warning, instead of selecting the first without a warning. This prevents you from hitting simply <enter> and later discover you used 'general' in your two-class scenario, because the generator configuration was updated and the version was changed. simple_smile

The beta period is extended to January 15th.

LLBLGEN PRO/TEMPLATES CHANGELOG

FINAL, 01-jan-2004

FIXED: * [Adapter template set] daaAdapter.template's SaveEntity method swallowed all exceptions instead of throwing them further. 'throw;' added.


FINAL, 01-jan-2004

ADDED: * [TDL/Parser/interpreter] Added <[SourceCatalogName]> for future usage of catalog name emitting in SqlServer templates. Is already used in Adapter.


FINAL, 29-dec-2003

CHANGED: * [Adapter generator config] App.config file is now part of the db specific project.

ADDED:

* [GUI] If the preferred generator config file is not found (because the version clashes for example), a warning is now shown. This prevents users from simply hitting 'Enter' and later finding out that they have chosen 'General configuration' while they wanted 'Two class scenario', for example.

ORM SUPPORT CLASSES/DQE's CHANGELOG

1.0.2003.2, 02-jan-2004

ADDED: * [ORM Support classes] Full XML output support for Adapter, which will be ported back to SelfServicing, recursive exportation of Entity data and EntityCollection data. The XML is ready to use for a ReadXml() routine which will be implemented shortly. Xml export routines (WriteXml() + overloads) are new methods, replacing the incomplete ToXml() methods. SelfServicing objects keep ToXml() for backwards compatibility and will get WriteXml() and ReadXml() when they're fully done for Adapter. * [ORM Support classes] CatalogName is added to FieldPersistenceInfo. SelfServicings EntityField has a new constructor which is currently not used but will be used in the near future. Adapter supports fully the CatalogName. * [All] Support for simple field name creation added to db specific creator. These fieldnames do not contain any schema, catalog or table/view names.

CHANGED: * [All] Support for catalog names is now added. SqlServer DQE anticipates on this. * [ORM Support classes] IEntity2.Name is changed into IEntity2.LLBLGenProEntityName to prevent clashes with property names constructed from fields. * [ORM Support classes] Because the new ToXml() implemenation will be ported back to SelfServicing code, it will break the xml formats. To prevent this ToXml() is in adapter code now called WriteXml(), following IXmlSerializable naming scheme.

REMOVED: * [ORM Support classes] IEntityCore.GetUniqueIdentifier() was redundant to IEntityCore.ObjectID (get).


1.0.2003.2, 31-dec-2003

FIXED: * [ORM Support classes] ToXml() in EntityField2 had a wrong cast specified (EntityField, which should have been EntityField2).

CHANGED: * [ORM Support classes] EntityCollectionBase2.ToXml() returned null, but is now returning the result of ToXml("EntityCollection"); * [ORM Support classes] ToXml() in EntityField2 is recoded, it now constructs the Xml itself instead of relying on the very slow XmlSerializer.


1.0.2003.2, 29-dec-2003

FIXED: * [ALL] All versions are now 1.0.2003.2.


1.0.2003.2, 28-dec-2003

FIXED:

* [All] LIKE predicates require a parameter that is not of a fixed char type. A new method has been added to the DbSpecificCreator interface which is used by the FieldLikePredicate class to create the parameter. With this, LIKE predicates will also work on NChar and char fields plus it will always use a variable char type for the pattern.

Frans Bouma | Lead developer LLBLGen Pro
Otis avatar
Otis
LLBLGen Pro Team
Posts: 39786
Joined: 17-Aug-2003
# Posted on: 06-Jan-2004 17:42:53   

The feature complete Adapter archive is now available. Check out the changelog below for what has been added/changed/fixed in the past days.

Documentation and examples are now in development, VB.NET templates will be released as beta hopefully within a week, but perhaps a little later.

What is an important point of testing is: does the new library work with existing self servicing code? It has to be 100% compatible, although there has been done some refactoring behind the scenes so it might break here and there. I haven't found any issues, but because the system is so complex not every situation can be tested here.

ORM SUPPORT CLASSES/DQE's CHANGELOG 06-jan-2004

1.0.2003.2, 05-jan-2004

ADDED: * (ORM Support classes) ReadXml() functionality to EntityCollectionBase2 and EntityBase2. You can now reinstantiate a complete entity and its contained entities (a complete hierarchy) from Xml (node or string), in the format written by WriteXml(). This functionality will be ported back to SelfServicing later on.

FIXED: * (ORM Support classes) Small glitches in the WriteXml() routines.


1.0.2003.2, 05-jan-2004

FIXED: * (ORM Support classes) Fixed makefiles. * (ORM Support classes) When fetching m:n related entities into a collection inside an entity, you'd run into an InvalidOperationException, because the collection was read-only.

CHANGED: * (ORM Support classes) Refactored XmlNode code in WriteXml() routines.


1.0.2003.2, 04-jan-2004

FIXED: * [ORM Support classes] TransactionBase.Add() checked with the _participants collection if a passed in object was in the current transaction. This failed due to the Equals() method which is used by ArrayList.Contains(). It also would have succeeded if an object was in ANOTHER transaction already, which is not correct. Now the routine will check if the object is in a transaction and if that's not the case, the object will be added to the transaction.

TEMPLATES / TDL Parser/Interpreter Changelog 06-jan-2004

FINAL, 06-jan-2004

CHANGED: * [Adapter templates] entityAdapter.template was slightly changed to make an entity be aware of teh fact that it is being deserialized so it should not act upon entity reference changes.


FINAL, 05-jan-2004

FIXED: * [Adapter templates] daaAdapter.template's FetchEntityCollection opted for duplicate instances in the collection. This is wrong, each entity should be in the collection just once. * [Adapter templates] entityAdapter.template had bad code for 1:1 relationships which resulted in noncompilable code.

ADDED: * [Adapter templates] myOrder.Customer = myCustomer didn't result in myCustomer.Orders.Add(myOrder), which should have been the case. This code is addded.

CHANGED: * [INTERPRETER/PARSER/TDL Syntaxis] RelatedMappedFieldNameRelation now also works for all types of relationships * [Adapter templates] property set clauses for entity properties in entityAdapter.template are now aware of a deserialization sequence and will not propagatechanges further if the object is being deserialized (from XML or using a .NET formatter)

Frans Bouma | Lead developer LLBLGen Pro
Otis avatar
Otis
LLBLGen Pro Team
Posts: 39786
Joined: 17-Aug-2003
# Posted on: 08-Jan-2004 14:51:00   

A new archive is uploaded today which contains the following important fixes:

(the included changelogs in the archive state some invalid info, EntityRelation.Equals isn't implemented, it's commented out in the sourcecode, and it will be removed from the final build, because it's not used, I saw the incorrect texts when I pasted them here simple_smile ).

RUNTIME LIBRARY CHANGELOG:

1.0.2003.2, 08-jan-2004

CHANGED: * (ORM Support classes) SyncFKFields is moved from the Adapter's entity template into EntityBase2.

FIXED: * (ORM Support classes) SyncFKFields always synced the fields, even if the field to be set was a PK field and the entity containing the field wasn't new (which isn't allowed). Now, the field is not synced in that situation.


1.0.2003.2, 07-jan-2004

ADDED: * (ORM Support classes) Added an enumeration for SqlServer / Adapter which is used by the DataAccessAdapter class to handle catalog names. A developer can now work around the default (which is using the catalog names specified in the generated persistence info code) and set the catalog name on a per-action basis, or clear the name and use the catalog name specified in the connectionstring.


GENERAL CHANGELOG (templates, parser etc.)

FINAL, 08-jan-2004

FIXED: * [Adapter templates] entityAdapter.template is changed to support the new syncing code between related entities. The old version failed when two entities had 2 or more relations * [TDL Interpreter] The compare routine for relations wasn't correct, it didn't compare relations in full, which would lead to the acceptance of a relation which was not equal to the relation compared with.


FINAL, 07-jan-2004

CHANGED: * [SQLSERVER ADAPTER templates] Catalog name usage was a bit cumbersome to work with in some situations. It's now more flexible: you can overrule the catalog name to use in all persistence activity with settings on the dataaccessadapter object. (sqlserver only).

FIXED:

* [Adapter templates] Fetch entity using filter was a bit inefficient, it retrieved the persistence information for the entity two times.

Frans Bouma | Lead developer LLBLGen Pro
Otis avatar
Otis
LLBLGen Pro Team
Posts: 39786
Joined: 17-Aug-2003
# Posted on: 19-Jan-2004 17:04:02   

New archive released.

What's new: - VB.NET templates (Oracle/SqlServer) - Feature complete - Multi-class/single table inheritance support through code - ConcurrencyPredicateFactory interface added to support predicate production for saves in a recursive Save operation.

Fixed: - DirectoryCreator task performer fixed, deleting directories recursively crashed sometimes - bugs all over the place simple_smile

FULL CHANGELOG, LLBLGEN PRO/TEMPLATES

FINAL, 18-jan-2004

FIXED: * (DirectoryCreator task performer): when clearIfExistent was set to true, the routine sometimes died with a nullreference exception. This has been fixed.

CHANGED: * (Adapter, daaAdapter.template files) : Now, in the SaveEntity(), SaveEntityCollection(), DeleteEntityCollection() and DeleteEntity(), the new IEntity2.GetConcurrencyPredicate() method is used to retrieve a restrictionpredicate to enforce custom concurrency control. * (Adapter templates) : Support for multiclass-single table inheritance through code is added. The entity factory interface is extended to support entity creation based on fetched entityfields.


FINAL, 11-jan-2004

FIXED: * [Adapter templates, C#, Oracle] If a retrieval stored procedure had no output parameters but had input parameters, it would generated non-compilable code due to a dangling comma. * [All templates] If a return parameter of a stored procedure call returned NULL, the code would throw a Specified cast not valid exception. It now tests for NULL and if the returned value is NULL, no value is set.

RUNTIME LIBRARIES CHANGELOG

1.0.2003.2, 18-jan-2004

FIXED: * (ORM Support classes) EntityBase2.IsDeserializing wasn't marked Browsable=false which caused it to show up in grids.

ADDED: * (ORM Support classes) IConcurrencyPredicateFactory interface and support in IEntity2. This interface is offering the developer a way to produce own predicates during Save/Delete actions. Adapter specific. * (ORM Support classes) IDataAccessAdapter.IsTransactionInProgress {get;} is added to the interface and is made public (was protected)

CHANGED: * (ORM Support classes) SaveEntity() calls implemented in DataAccessAdapterBase are now using the GetConcurrencyPredicate() method to pass on a save restriction predicate. * (ORM Support classes) IEntityFactory2 interface is changed to make multi-class/single table inheritance possible through code. * (ORM Support classes) DataAccessAdapterBase now fully supports the new IEntityFactory2 interface.


1.0.2003.2, 14-jan-2004

CHANGED: * (ORM Support classes) IEntityField.IsChanged was still readonly, it has now a Set definition as well.

ADDED: * (ORM Support classes) IDataAccessAdapter has now a CommandTimeOut (seconds) property which will get/set the internal timeout of the command(s) created to this value.

Frans Bouma | Lead developer LLBLGen Pro