I'm listening! Will have a look! ;-)

RP

On Sunday, August 24, 2014 4:05:04 PM UTC+1, Jeffrey Becker wrote:
>
> I've gone back, re-forked from nhibernate/nhibernate-core repo and cleaned 
> up my commits significantly.  There are currently 3 branches in my repo at 
> https://github.com/jeffreyabecker/nhibernate-core/.  
> The main branch is migrations.  This is the branch that will eventually 
> end up in the pull request.
>
> The ddl-generation branch is the work on abstracting ddl-generation out 
> into a unified framework.  Instead of the various mapping classes 
> implementing IRelationalModel, DDL generation is abstracted out into a set 
> of models and operations.  A model class is a DTO which summarizes all the 
> information an operation might need to know in order to generate the DDL. 
>  This framework is in-turn used by the existing schema creation utils and 
> the fluent DSL to produce uniform output. Each operation is responsible for 
> generating the appropriate set of DDL statements for the given dialect. 
>  This will make it possible for migration writers to implement operations 
> not supplied by NHibernate in a cross-platform manner.
>
> The migration-dsl branch is concerned with the fluent dsl for building 
> migrations
>
> On Friday, August 22, 2014 3:40:33 PM UTC-4, Jeffrey Becker wrote:
>>
>> The primary goal is to make a framework which supports coded migrations 
>> between versions of a Mapping, independent of the underlying database & 
>> schema.  The framework should have the following major features: 
>>
>>    - Unified DDL generation across NHibernate / DDL from schema export 
>>    should match the DDL from Migrations for trivial cases
>>    - Be flexible enough that consumers can encapsulate dialect specific 
>>    operations in a testable fashion
>>    - A Domain specific language / fluent API for coded migrations 
>>    - A Code generator which creates Migration classes based on such an 
>>    api
>>    - A migration execution framework which compares Mappings in the DB 
>>    to Current and selects a set of migrations to execute at run-time.
>>    
>> Some background:  In the past I've worked on a product where we used 
>> NHibernate while supporting several different databases in the product. 
>>  The data migrations were one of the hairiest parts of the application. 
>> SchemaUpdate was virtually useless because some changes required dropping 
>> and rebuilding tables which it messed up badly.  Versioning was 
>> inconsistent at best; Mostly the current version was kept in a table except 
>> for version 3.12 where it was in an extended property on SqlServer, in a 
>> table comment on Oracle, and in the table for the rest. The migrations 
>> themselves quickly became a rats-nest of bad, conditional DDL building.  
>>
>> On Friday, August 22, 2014 1:54:47 PM UTC-4, Ricardo Peres wrote:
>>>
>>> And do you have something that describes your "vision", what 
>>> functionality you'd like to have, so that we can discuss them?
>>>
>>> RP
>>>
>>> On Friday, August 22, 2014 6:34:12 PM UTC+1, Jeffrey Becker wrote:
>>>>
>>>> I've just been slammed recently. 
>>>>
>>>> The repo is up on my github at 
>>>> https://github.com/jeffreyabecker/nhibernate-core. The commits are a 
>>>> bit of a stream-of-consciousness mess at the moment. 
>>>>
>>>> The core ddl generation rewrite into the DdlOperation framework is in 
>>>> there.  Currently I've been playing around with encapsulating that stuff 
>>>> into a Migration class but I'm not sure I'm happy about how that's going.  
>>>>
>>>> On Friday, August 22, 2014 9:55:02 AM UTC-4, Ricardo Peres wrote:
>>>>>
>>>>> Hi, Jeffrey!
>>>>>
>>>>> Need help with this? Do you have a public repository?
>>>>>
>>>>> RP
>>>>>
>>>>> On Sunday, August 3, 2014 5:00:28 PM UTC+1, Jeffrey Becker wrote:
>>>>>>
>>>>>> I'm almost done my infrastructure work & unit tests on the DDL 
>>>>>> generation portion of NHibernate needed to support my proposed 
>>>>>> migrations 
>>>>>> feature.  As of now I've got an interface:
>>>>>>
>>>>>> public interface IDdlOperation
>>>>>> {
>>>>>>     IEnumerable<string> GetStatements(NHibernate.Dialect.Dialect 
>>>>>> dialect);
>>>>>> }
>>>>>>
>>>>>> I've re-implemented the ddl generation in the Mapping namespace as a 
>>>>>> series of implementations of this interface.  Each of these classes 
>>>>>> accepts 
>>>>>> a model which contains the relevant information for building the sql 
>>>>>> statements.  As much as possible database object names are passed to 
>>>>>> these 
>>>>>> classes pre-qualified and pre-quoted.  The relevant mapping classes have 
>>>>>> been changed from implementing IRelationalModel to having methods that 
>>>>>> produce one or more relevant IDdlOperation instances.  The Configuration 
>>>>>> class was updated to use these methods.
>>>>>>
>>>>>>
>>>>>> While I finish out the unit tests and get it all staged into a 
>>>>>> coherent set of commits for a pull request I'd like some feedback on the 
>>>>>> following topics:
>>>>>>
>>>>>> Currently the Configuration/Mapping classes quote and qualify objects 
>>>>>> using the dialect methods which results in dialect specific quoting.  I 
>>>>>> this does not present a problem in the existing system because analysis 
>>>>>> always happens at the same time as execution and the target dialect is 
>>>>>> known.  In a world with coded migrations a migration could be generated 
>>>>>> against a one dialect and executed against another with incompatible 
>>>>>> quoting.  Should these methods be changed to quote and qualify using 
>>>>>> back-tick quoting and the operations be changed to mangle those quotes 
>>>>>> into 
>>>>>> dialect specific quoting?
>>>>>>
>>>>>> Where is the dividing line between NHibernate and non-core Migrations 
>>>>>> features if any? I see this framework eventually containing components 
>>>>>> such 
>>>>>> as versioning strategies, a fluent migration building DSL, a migration 
>>>>>> execution framework, and a component which generates/executes coded 
>>>>>> migrations within the package manager console.  At a minimum that 3rd 
>>>>>> piece 
>>>>>> needs to be a separate assembly because of its dependency on visual 
>>>>>> studio. 
>>>>>>  How to people feel about the rest?  Should I aim to include some / all 
>>>>>> of 
>>>>>> that within Nhibernate or split it out into a separate assembly?
>>>>>>
>>>>>> How do people feel about a fluent DSL for building the coded 
>>>>>> migrations?  How do we make this into something which is both expressive 
>>>>>> enough for people to write a migration themselves and flexible enough 
>>>>>> that 
>>>>>> they don't have to resort to issuing raw sql for everything?
>>>>>>
>>>>>>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"nhibernate-development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to nhibernate-development+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to