Database Addin
The addin database consists of the following Addins:
MonoDevelop.Database.ConnectionManager. This addin is responsible for connectivity, database explorer (Connection Manager Pad) and all nodes in a database (tables, procedures, functions, etc.).
MonoDevelop.Database.Components. Common dialogs and widgets for the database addin.
MonoDevelop.Database.Designer. Common Providers Operations Dialogs/Widgets: (Create Table, procedure, and others).
MonoDevelop.Database.Query. Display Binding, Result view, Sql Query Text Editor.
MonoDevelop.Database.Sql. This addin is the responsible for: Common schema, Query Services, Sql Factories, Connection Context Services, Abstract Connection Pool.
Provider specific Addins: MonoDevelop.Database.Sql.* (MySql - Npgsql - Sqlite - Sql Server . Firebird - Oracle - Sybase - ODBC)
Providers
The available providers are:
- MySql: MySql provider use a bundled Mysql.Data assembly [1]
- Npgsql.
- Sqlite.
- Sql Server.
- Firebird: need a mantainer.
- Oracle: need a mantainer.
- Sybase: need a mantainer.
- Odbc: need a mantainer.
Features
Connect to a database
Create a database
Drop Database
Query Database
Create / Alter / Drop Table
Create/ Alter / Drop Procedures
Query to Target
Working with results
Other features
Developers
Implementing a Provider
In order to implement a new provider you have to implement the following classes
AbstractConnectionProvider: [2] This class is the responsible of connection creation and check if a connection already exists.
IDbFactory: [3] This is the main provider class, it expose all the objects needed for manage a Provider: Dialect, Gui Provider, Connection Provider, the connection pool creation and schema provider creation.
IGuiProvider: [4] Expose all the GUI operations. Example: If a new addin provides Create Database operation, the method IGuiProvider.ShowCreateDatabaseDialog (IDbFactory) is called. In this method it should be implemented the basic operations of creating a new Database, the Gui Dialog/Window.
AbstractPooledDbConnection: [5] This represent a Pooled db connection (becareful, this doesn’t represent the pooling system, it only represent a connection. The pooling system should implement IConnectionPool or use DefaultConnectionPool class). All the database operations will be here: Execute a DataReader, Execute a DataTable, and others.
AbstractEditSchemaProvider: [6] It expose the database operations as Creates, Drops, Alters and others database operations. This class, with IGuiProvider implements all the databases operations, the second implements the Gui part, and this implements the operations.
Optional Implementations
IDbLinq: [7]This represent the Linq generation interface, the connection between the provider and a generator (i.e.: sqlmetal).
AbstractSqlDialect: [8] Expose dialect or provider specific techniques of generating Sql language. Currently isn’t really in use.
Addin Manifest
<Addin id="Database.Sql.ProviderName" namespace="MonoDevelop" name="Provider for MonoDevelop addin Sql" author="Your Name" copyright="MIT X11" url="http://www.monodevelop.com" description="Database Provider Module" category="Database" version="2.2">
<Runtime>
<!-- Your dll -->
<Import assembly="MonoDevelop.Database.Sql.Provider.dll"/>
</Runtime>
<Localizer type="Gettext" catalog="monodevelop-database"/>
<!-- Your Dependencies-->
<Dependencies>
<Addin id="Core" version="2.2"/>
<Addin id="Core.Gui" version="2.2"/>
<Addin id="Ide" version="2.2"/>
<Addin id="Database.Sql" version="2.2"/>
<Addin id="Database.Components" version="2.2"/>
<Addin id="Database.Designer" version="2.2"/>
</Dependencies>
<!-- The implemented Factory-->
<Extension path = "/MonoDevelop/Database/Sql">
<DatabaseFactory id = "Provider" class = "MonoDevelop.Database.Sql.Provider.ProviderDbFactory" />
</Extension>
<!-- Syntax mode file (if it has)-->
<Extension path = "/MonoDevelop/SourceEditor2/SyntaxModes">
<Templates resource="ProviderSyntaxMode.xml" />
</Extension>
</Addin>
References
[1] http://dev.mysql.com/usingmysql/dotnet/
[2] https://github.com/mono/monodevelop/blob/master/extras/MonoDevelop.Database/MonoDevelop.Database.Sql/Providers/AbstractConnectionProvider.cs
[3] https://github.com/mono/monodevelop/blob/master/extras/MonoDevelop.Database/MonoDevelop.Database.Sql/IDbFactory.cs
[4] https://github.com/mono/monodevelop/blob/master/extras/MonoDevelop.Database/MonoDevelop.Database.Sql/Providers/IGuiProvider.cs
[5] https://github.com/mono/monodevelop/blob/master/extras/MonoDevelop.Database/MonoDevelop.Database.Sql/ConnectionPool/AbstractPooledDbConnection.cs
[6] https://github.com/mono/monodevelop/blob/master/extras/MonoDevelop.Database/MonoDevelop.Database.Sql/Providers/AbstractSchemaProvider.cs
[7] https://github.com/mono/monodevelop/blob/master/extras/MonoDevelop.Database/MonoDevelop.Database.Sql/IDbLinq.cs
[8] https://github.com/mono/monodevelop/blob/master/extras/MonoDevelop.Database/MonoDevelop.Database.Sql/Dialect/ISqlDialect.cs