Connecting through Custom SQL Query

What is a Custom Query Table ?

You can also connect to data source of certain data connections through custom SQL query. This feature allows you to define the data source with the manually written queries instead of manual drag and drop of tables. This is possible not only for database-type Connections, but also for other types.

Language

When connecting directly to a database, the language of the Custom Query must be that of the database. When connecting to bufferized data, the Custom Query must be typed in the language of the buffer database. see Buffer

Important

When changing the underlying buffer database technology (for example when switching from SQL to SQLite), the Custom Query Table will probably need to be updated accordingly, since there are some differences in SQL language used.

Creating a Custom Query Table

Open the Data Source where you need to add a Custom Query. From the Connection schema, click on “Add Custom Query”.

Write the query in the correct SQL language (see above). For bufferized Connections, you can use the table names as listed in the schema.

Click OK to create the Custom Query Table. Fix any SQL error if necessary.

Now the Custom Query Table is created in the Data Source currently opened. It can be used like a normal table from the same Connection and for example can be used in a Join.

Updating a Custom Query Table

Click on the cog icon to view and update the Custom Query.

Important

Be careful that any change in the schema (column names and types) could impact the items that use this Custom Query Table, such as Widgets or Expressions. Changing the schema of the query could require to re-do some or all of the related data binding.

Click OK to update the Custom Query Table. Fix any SQL error if necessary.

Using Parameters

see Parameters

Parameters can be used to parametrize a Custom Query : the Custom Query changes dynamically.

Syntax

${parametername} will be replaced in-place by the values of “parametername”.

Example :

SELECT *
FROM MyTable
WHERE MyColumn = ${parametername}

will get replaced at runtime by :

SELECT *
FROM MyTable
WHERE MyColumn = parametervalue

Parameters that return multiple values will return them separated by commas, so that you can write :

SELECT *
FROM MyTable
WHERE MyColumn IN( ${multiparameter} )

and it will get replaced at runtime by :

SELECT *
FROM MyTable
WHERE MyColumn IN( Value1,Value2,Value3 )

Note

In the Designer, the Custom Query will be executed with the default parameter values. This may cause unwanted syntax errors if the default value is empty for example. Setting a default value to the parameter fixes the issue.