Ok now we have enough material to implements the solution. 1) new interface IDriveConnectionCommandProvider (CreateConnection, CreateCommand) 2) 2 impls of IDriveConnectionCommandProvider; one with creation through Bytecode the other through DbProviderFactory 3)The ReflectionBasedDriver needs 4 parameters; the newone is the InvariantName. if (connectionType == null || commandType == null) { then first try to retrieve info from DbProviderFactories: where available then create appropriate IDriveConnectionCommandProvider else throws } else { create appropriate IDriveConnectionCommandProvider (creation through Bytecode) }
4) The method CreateConnection() and CreateCommand() will delegate the responsibility to IDriveConnectionCommandProvider On Sat, Aug 14, 2010 at 5:59 AM, Jason Dentler <jasondent...@gmail.com>wrote: > Ingres is "Ingres.Client" > > http://code.ingres.com/ingres/main/src/common/dotnet2_win/ingres/factory.cs > > > <http://code.ingres.com/ingres/main/src/common/dotnet2_win/ingres/factory.cs> > > On Sat, Aug 14, 2010 at 3:51 AM, Jason Dentler <jasondent...@gmail.com>wrote: > >> Yep. The readme for the SQLite provider confirms it. >> http://sqlite.phxsoftware.com/readme.htm >> >> <configuration> >> <system.data> >> <DbProviderFactories> >> <remove invariant="System.Data.SQLite"/> >> <add name="SQLite Data Provider" invariant="System.Data.SQLite" >> description=".Net Framework Data Provider for SQLite" >> type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /> >> </DbProviderFactories> >> </system.data> >> </configuration> >> >> >> >> On Sat, Aug 14, 2010 at 3:41 AM, Jason Dentler <jasondent...@gmail.com>wrote: >> >>> According to this thread, SQLite is "System.Data.SQLite" >>> >>> http://sqlite.phxsoftware.com/forums/t/1886.aspx >>> >>> I haven't tested it myself. FYI - It's installed, but didn't create an >>> entry in machine.config. >>> >>> >>> On Sat, Aug 14, 2010 at 2:28 AM, Frans Bouma <fr...@sd.nl> wrote: >>> >>>> > Just posted here: >>>> http://stackoverflow.com/questions/3481050/invariant- >>>> > names-for-different-ado-net-providers >>>> > < >>>> http://stackoverflow.com/questions/3481050/invariant-names-for-different- >>>> > ado-net-providers> We'll probably have most of them by tomorrow. >>>> > >>>> > Informix is "IBM.Data.Informix", PostgreSQL is "Npgsql" >>>> >>>> >>>> * Adaptive Server Anywhere: "iAnywhere.Data.SQLAnywhere" >>>> * DB2: "IBM.Data.DB2" >>>> * Firebird: "FirebirdSql.Data.FirebirdClient" >>>> * Ingres: (don't know) >>>> * MySQL: "MySql.Data.MySqlClient" >>>> * Oracle: ODP.NET: "Oracle.DataAccess.Client" >>>> * Oracle: MS Oracle: "System.Data.OracleClient" >>>> * SQLite: (don't know) >>>> * SQL CE: v3.0: "System.Data.SqlServerCe". >>>> * SQL CE: v3.5: "System.Data.SqlServerCe.3.5". >>>> * Sybase ASE: "Sybase.Data.AseClient" >>>> >>>> FB >>>> >>>> >>>> >>>> > >>>> > Diego >>>> > >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at 18:44, Fabio Maulo <fabioma...@gmail.com> >>>> wrote: >>>> > >>>> > >>>> > Congratulation to both... you are closer... >>>> > Now I would see the list of InvariantName... a little list >>>> nothing >>>> > more >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at 6:33 PM, Diego Mijelshon >>>> > <di...@mijelshon.com.ar> wrote: >>>> > >>>> > >>>> > My idea was actually to have an overload with the >>>> providerName >>>> > IN ADDITION TO driver/connType/cmdType. That way, if the assembly is >>>> found, >>>> > we use it. Otherwise, we fall back to the providerName. >>>> > The advantage is that users relying on the current >>>> resolution >>>> > logic won't notice any changes. >>>> > >>>> > Diego >>>> > >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at 18:22, Pablo Ruiz >>>> > <pablo.r...@gmail.com> wrote: >>>> > >>>> > >>>> > Forgetting about 'ConfigurableDriver'.. I think >>>> we >>>> can >>>> > simple modify 'ReflectionBasedDriver' to add two constructors >>>> overloads, >>>> one >>>> > which allows passing a providerName and another one which allows >>>> passing a >>>> > providerName and the same three arguments it allows now (assembly, >>>> > connection class and command class). >>>> > >>>> > This way, it will be a matter of each Driver >>>> using >>>> one >>>> > of the three ctors to specify which methods are supported by this >>>> driver. >>>> > >>>> > However, I see at least, one property to make >>>> drivers >>>> > supporting both methods, favor DbProviderFactory instead of Reflection >>>> (of >>>> > course for compatibility reasons, the default method would be >>>> Reflection). >>>> > This way users can switch over to DbProviderFactory just by setting >>>> some >>>> > property like 'adonet_dbprovider=true'.. >>>> > >>>> > Comments? >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at 9:40 PM, Fabio Maulo >>>> > <fabioma...@gmail.com> wrote: >>>> > >>>> > >>>> > I would see the list of InvariantName. >>>> > Have you the list of InvariantName used >>>> by >>>> your >>>> > preferred RDBMS ? >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at 4:28 PM, Diego >>>> Mijelshon >>>> > <di...@mijelshon.com.ar> wrote: >>>> > >>>> > >>>> > We can crowdsource that... >>>> > >>>> > Let's see which drivers are >>>> currently >>>> > reflection-based: >>>> > Adaptive Server Anywhere >>>> > DB2 >>>> > Firebird (two versions of this?) >>>> > Informix >>>> > Ingres >>>> > MySQL >>>> > PostgreSQL >>>> > Oracle >>>> > SQLite >>>> > SQL CE >>>> > Sybase >>>> > >>>> > >>>> > In any case, we can have and >>>> overload in >>>> > ReflectionBasedDriver that takes a providerName. If that overload is >>>> not >>>> > used, nothing changes. That will allow us to port the drivers one by >>>> one >>>> > without breaking existing stuff. >>>> > >>>> > Diego >>>> > >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at 16:05, >>>> Fabio >>>> > Maulo <fabioma...@gmail.com> wrote: >>>> > >>>> > >>>> > You can check the >>>> existence >>>> of a >>>> > DLL even without use reflexion. >>>> > Then we can use the >>>> InvariantName. >>>> > Can you provide >>>> InvariantName for >>>> > all RDBMS supported by NH ? >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at >>>> 3:53 >>>> PM, >>>> > Diego Mijelshon <di...@mijelshon.com.ar> wrote: >>>> > >>>> > >>>> > You can't have >>>> your >>>> cake and >>>> > eat it too. >>>> > We can either >>>> make >>>> the >>>> > existing drivers inherit from DbProviderDriver where it makes sense >>>> (must- >>>> > install providers, mostly), or have a new set of drivers. >>>> > ...or we can use >>>> a >>>> fallback >>>> > logic that tries reflection first and, if unsuccessful, goes to DPF. >>>> > >>>> > Diego >>>> > >>>> > >>>> > >>>> > On Fri, Aug 13, >>>> 2010 >>>> at >>>> > 15:27, Fabio Maulo <fabioma...@gmail.com> wrote: >>>> > >>>> > >>>> > That >>>> solution is the >>>> > solution of Microsoft and give you the ability to work with multiple >>>> > versions of the same assembly installed in the GAC. >>>> > The >>>> usage of >>>> > DbProvider is not a problem but shouldn't be so complicated as >>>> proposed. >>>> It >>>> > should be completely transparent; the NH users should have 0 changes >>>> to >>>> work >>>> > with or without DbProvider. >>>> > >>>> > >>>> > On Fri, >>>> Aug >>>> 13, 2010 >>>> > at 3:22 PM, Diego Mijelshon <di...@mijelshon.com.ar> wrote: >>>> > >>>> > >>>> > >>>> I >>>> see... I >>>> > didn't know that. >>>> > >>>> However, >>>> > there's a problem with that solution: I lose version independency. >>>> > >>>> That >>>> problem >>>> > is fixed by the DbProviderDriver without introducing any problems that >>>> I >>>> can >>>> > think of. >>>> > >>>> > >>>> Diego >>>> > >>>> > >>>> > >>>> > >>>> On >>>> Fri, Aug >>>> > 13, 2010 at 14:23, Fabio Maulo <fabioma...@gmail.com> wrote: >>>> > >>>> > >>>> > >>>> You >>>> > don't have to. >>>> > >>>> In our >>>> > tests you can see how redirect a partial assembly-name. >>>> > >>>> > >>>> > >>>> On Fri, >>>> > Aug 13, 2010 at 12:15 PM, Diego Mijelshon <di...@mijelshon.com.ar> >>>> wrote: >>>> > >>>> > >>>> > >>>> > This is a great patch, we currently have to copy >>>> > IBM.Data.Informix.dll everywhere. >>>> > >>>> > >>>> > >>>> > I can create the DPF-based Informix driver if this gets >>>> included. >>>> > >>>> > >>>> > Diego >>>> > >>>> > >>>> > >>>> > >>>> > On Fri, Aug 13, 2010 at 11:41, Pablo Ruiz <pablo.r...@gmail.com >>>> > >>>> > wrote: >>>> > >>>> > >>>> > >>>> > Hi, >>>> > >>>> > >>>> > By reading the details at http://216.121.112.228/browse/NH-1378 >>>> looks >>>> > like this was an old request (1.2.1 days) which has been considered >>>> already. >>>> > How ever (surelly due to time constraints ;)) this is still an open >>>> issue, >>>> > which may be considered now for NH3. >>>> > >>>> > >>>> > I have a couple of classes implementing a base driver using >>>> > DbProviderFactory, and I have attached them to the jira issue, so >>>> anyone >>>> can >>>> > review them... This one are copied from my own project, but they are >>>> simple >>>> > enought to get an starting point from which a discussion can be >>>> started. >>>> > >>>> > >>>> > The point behind this issue (for me) it's mainly mono >>>> compatibility, >>>> > as mono does not implement 'BindingRedirect' support, and as such, the >>>> only >>>> > way of making NH work it's by placing the ado.net provider's assembly >>>> at >>>> bin >>>> > folder, which in some deployments it's far from perfect. >>>> > >>>> > >>>> > As such, if having alternate driver implementations using >>>> Reflection >>>> > (current one) and DbProviderFactory (the alternate one) looks great >>>> for >>>> > Fabio & co, I can provide fully-functional patches against trunk, just >>>> letme >>>> > know about it.. ;) >>>> > >>>> > >>>> > Saludos. >>>> > >>>> > Att. Pablo >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> -- >>>> > >>>> Fabio >>>> > Maulo >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > -- >>>> > Fabio >>>> Maulo >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > -- >>>> > Fabio Maulo >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > -- >>>> > Fabio Maulo >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > -- >>>> > Fabio Maulo >>>> > >>>> > >>>> > >>>> >>>> >>>> >>> >> > -- Fabio Maulo