How to get a new RDBMS supported in IntelliJ-based IDE
People often ask us to add support for their favorite database system to our IDEs. Some feature requests from our tracker include Vertica, Snowflake, Informix, Apache Hive, and Teradata, among others.
While we don’t provide an API to build this kind of plugins, we are open to building the support ourselves, with help from vendors of these systems.
To do this, we need the following:
SQL syntax Grammar
Provided in a BNF-notation file. Grammar-kit, ANTLR, or Bison would be even better.
Documentation for built-in functions
Provided in HTML format, with a separate HTML for each built-in function.
dbms-help.zip!/functions/convert.html which is shown for
<html> <head><title>convert</title></head><body> CONVERT() provides a way to convert data between different character sets. The syntax is: <pre><code> CONVERT(expr USING transcoding_name) </code></pre> </body></html>
Database catalog description
A number of objects with their properties. Example in BNF-like notation:
Root ::= Schema * Schema ::= Table * | View * | .. Table ::= TableColumn * | Index * | Key * | ForeignKey * | Check * | Trigger * | .. TableColumn ::= Name | DataType | Default | NotNull | AutoInc | .. View ::= SourceText | ViewColumn * | .. ViewColumn ::= Name | DataType | ..
Catalog introspection queries
— Queries for each schema child object that retrieve the main properties, e.g. "RetrieveViewsQuery", "RetrieveTablesQuery", etc.
— Queries for retrieval of child objects and finer details, e.g. "RetrieveColumnsQuery", "RetrieveSources", etc.
The names of the returned data columns should match the property names in the data model.
These queries are used to retrieve the structure of a database in two scenarios: full and incremental introspection.
— Full introspection mode: For better user experience, DataGrip retrieves schemas first, then tables and views, and then the finer details. So the full introspection is performed in several steps and the UI is updated on each step. That's why the queries need to be optimized for multi-pass execution.
— Incremental introspection mode: If there is a way to track the last-update-time or transaction id for a schema, or any other object, please tell us about it. The incremental introspection logic is used to immediately update the schema on the fly. For example, when you create a table in the query console, it should appear in the database tree without refreshing the whole schema.
Some databases provide different catalogs depending on user permissions, and their performance can vary. Please advise which ones should be used to ensure best performance.
A direct link to the official JDBC driver for downloading from the IDE. We can also host the driver on our side, but we’ll need your permission to do that.
Test instance and data
— A docker image (preferable) and/or a cloud instance.
— A complex schema DDL dump with a large number of cross-references.
— SQL/DDL/DML samples we'll use to test our parser. If there are some samples/snippets you use internally for testing, we would appreciate it if you could share them with us.
From the licensing point of view, we will need your permission to use the data you send us.
We were able to add support for Exasol database exactly because we had received all the needed information. This functionality was made available in DataGrip 2017.3.