BlackbirdSQL / Firebird-DDEX-SqlEditor

Firebird DDEX 2.0 with SqlEditor NETProvider
Other
6 stars 1 forks source link

BlackbirdSQL DDEX 2.0 with SqlEditor Provider for Firebird

The Ultimate Firebird DDEX 2.0 Provider and SqlEditor with the "look and feel" of Microsoft's SqlServer DDEX and SqlEditor extensions.

Download BlackbirdSql DDEX with SqlEditor Extension (Release v14.5.1.3) (Change Log)

Screenshots

ReadMe
Click on image to view fullscreen

Features

AutoIncrement Identity Fields

There is a simple parser coded in C++/Cli which parses the Trigger source for linkage to the auto-increment sequence generator. The original parser code was ported from the pgsql LISP con-cell parser but then scrapped in favor of the greenlion/PHP-SQL-Parser PHP parser, which meant adapting the BlackbirdSql Cell class library so that it could imitate PHP style arrays/variables. This library is fully functional but the port of the parser itself was not completed because the partial port satisfied the needs for parsing the Trigger DDL.
The parser itself is reasonably fast (+- 0.1 milliseconds per trigger), but SQL SELECT commands on a large number of rows, in this case for triggers and generators, may take some time, so building of the Trigger/Generator linkage tables for a connection is initiated asynchronously as soon as the connection is established.

Disclaimer/Warning regarding exposing members with hidden access modifiers. The private edit field of the VS User Options PropertyGrid GridView is accessed to overcome a long-time irritant and implement radio buttons and check boxes into the grid by utilizing type converters and attributes. There are several other locations where hidden members are also exposed.
All access of this nature takes place in the BlackbirdSql.Sys.Reflect class. As a rule no other code within the extension may expose hidden members. The code performing this access is 100% stable, using standard calls included in Visual Studio's Reflection. If you object to this practice, do not install this extension.

The first tenet of this package is small footprint, low overhead, and to be as unobtrusive as possible. It is installed as a standard VSIX extension. If you uninstall it is is gone. It does not leave it's fingerprints in either your computer system or your Visual Studio installation.

Deconstructing connection naming, equivalency and SE integration

For a clearer understanding of BlackbirdSql's RunningConnectionTable management of connections, insight into it's basic rules of operation can be found here...

Known issues and limitations

Documentation

FirebirdSQL Packages

BlackbirdSql utilizes the FirebirdSQL/NETProvider FirebirdSql.Data.FirebirdClient package for client access to Firebird. The package source is included in the BlackbirdSql source for debug and tracing purposes, however BlackbirdSql is not associated with FirebirdSql in any form and the Firebird source will be removed once testing is complete. Links to the FirebirdSql nuget packages are provided below.

NuGet Version Downloads
FirebirdSql.Data.FireClient FirebirdSql.Data.FireClient FirebirdSql.Data.FireClient
EntityFramework.Firebird EntityFramework.Firebird EntityFramework.Firebird
FirebirdSql.EntityFrameworkCore.Firebird FirebirdSql.EntityFrameworkCore.Firebird FirebirdSql.EntityFrameworkCore.Firebird


Resources

Builds

If you're planning on testing this solution (Blackbird.sln) preferably DO NOT use test projects within Blackbird.sln.
Rather fire up the experimental instance of Visual Studio with Blackbird.sln remaining open and test within the experimental instance. If you have successfully built Blackbird.sln you won't need to install the vsix. VS will automatically detect it in the experimental instance.
To fire up an experimental instance of Visual Studio outside of the IDE, create a shortcut of Visual Studio with the experimental suffix. eg. "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\IDE\devenv.exe" /RootSuffix Exp

Extended Description

BlackbirdSql.VisualStudio.Ddex is DDEX 2.0 compliant and is click and go using VSIX and autoload, and requires no additional setup either in the app.config, csproj or machine.config.

There is an option available in the context menu of any sited node of Server Explorer to perform a validation of a solution's projects' app.config and edmx models. Legacy edmx models won't work with DDEX 2.0 so an update is required. An edmx model can also be manually updated by clicking on an open model and setting `Use Legacy Provider' to false in the properties window.
The goal is that you don't have to do any configuring of the .csproj, app.config, machine.config or any legacy edmx models, and eliminate using the GAC.
Each individual task in the validation process is spawned asynchronously so the overhead is miniscual.

In performance tests on a 64-bit Windows 10 I7-4500U (1.80GHz) machine with 16GB RAM and a 1TB SSD, a solution with 40MB of source code, and that included 6 projects with 3 EDMX models and 3 XSD models, validated in under 300ms on a low-priority background task.

The validation process will not validate any open app.config or edmx models. You will need to close them first and then rerun the validation process.

The intention is to maintain a small footprint. With the exception of the IDE Options menu, we are not going to begin altering VS menus and taking over your Visual Studio IDE workspace. It is a data source UI provider for Firebird and the benchmark is the SqlServer provider, so whatever UI functionality is available for SqlServer is on the todo list for Firebird provided it does not directly interfere with the developer's active UI.

If you're planning on using EF Core and/or .NET, VS does not have wizard support for edmx which makes no sense to me. This roadblock is easily overcome by creating a separate project using .NET Framework for your data models and then linking your .NET / EF Core projects to those edmx models.

If there's any magic you feel should be included here, you're welcome to pop me a mail at greg@blackbirdsql.com.
On the priority list are DDL commands... Create, Alter etc.