Summary: This document provides basic information about the extension that provides source code analysis support for SQL files.
The SQL Analyzer provides support for database technologies using the ANSI SQL-92 / 99 language. This extension uses the Universal Analyzer framework and is intended to analyse DDL, DML and SQL exports for a large variety of SQL variants:
- This extension provides source code analysis support for DDL and DML*.sql files using an over language of the various sql variants.
- This extension also accepts src and uaxDirectory files. Check here for more details about sqltablesize files.
In what situation should you install this extension?
- If you need to analyze PostgreSQL, MySQL, MariaDB, SQLite, Db2, Sybase, Microsoft SQL Server, Teradata or Informix
- If you need to analyze Oracle for the first time
- If your application contains schemas from database vendors not supported "out of the box" by CAST AIP but, which are compliant with ANSI SQL-92 / 99
- When you do not have access to the online database to perform an extraction for use with CAST AIP and have instead been provided with DDL scripts
Transitioning from from the CAST AIP Db2 Analyzer to the SQL Analyzer extension
If you have been actively analyzing Db2 (z/OS or LUW) with the Db2 Analyzer (provided out-of-the-box in CAST AIP) you can transition to using the SQL Analyzer extension to analyze your Db2 source code. The process of transitioning is described in SQL Analyzer - To do transition from the CAST AIP Db2 Analyzer to the SQL Analyzer extension.
When transitioning from the Db2 Analyzer to the SQL Analyzer, links between Tables and Indexes, Foreign Keys, Primary Keys and Unique Keys will appear to be reversed when comparing the analysis results of the Db2 Analyzer and the SQL Analyzer. This is because the representation of links in the SQL Analyzer uses a different method (which is identical for all supported RDBMS) to the Db2 Analyzer.
Vendor compatibility matrix - official support
|IBM Db2 - LUW|
Up to version 11.x
|IBM Db2 - zOS||Up to version 12|
|IBM Informix||Up to version 14.x|
|MariaDB||Up to version 10.x|
|Microsoft SQL Server||Up to version 2019|
|MySQL||Up to version 8.x|
|Oracle Server||Up to version 12c||(See note below)|
|PostgreSQL||Up to version 12|
|SAP ASE (formerly known as Sybase ASE)||Up to version 16|
|SQLite||Up to version 3.x|
|Teradata||Up to version 16|
Note about support for analysis of Oracle Server in the SQL Analyzer extension
- If you have already analyzed Oracle Forms and Reports code that is linked to PL/SQL code analyzed with the SQL analyzer embedded in CAST AIP, CAST recommends that you continue using the SQL analyzer embedded in CAST AIP.
- If you have already analyzed PL/SQL code with the SQL analyzer embedded in CAST AIP, CAST recommends that you continue using the SQL analyzer embedded in CAST AIP. This is because moving to the SQL Analyzer and analyzing the same code will generate differences in results across object types, object links and structural rules. If you do decide to move to the SQL Analyzer extension, see SQL Analyzer - Mapping between SQL analyzers for more information about what you can expect,
There is no support for automated transition from the SQL analyzer embedded in CAST AIP to the SQL Analyzer extension.
Function Point, Quality and Sizing support
- Function Points (transactions): a green tick indicates that OMG Function Point counting and Transaction Risk Index are supported
- Quality and Sizing: a green tick indicates that CAST can measure size and that a minimum set of Quality Rules exist
Quality and Sizing
|CAST AIP release||Supported|
Supported DBMS servers used for CAST AIP schemas
This extension is compatible with the following DBMS servers used to host CAST AIP schemas:
|CAST AIP release||CSS||Oracle||Microsoft|
|All supported releases|
|An installation of any compatible release of CAST AIP (see table above)|
Download and installation instructions
- The latest release status of this extension can be seen when downloading it from the CAST Extend server.
- Please see Known Limitations and Issues for information about an error that may occur when installing the extension if you have also already installed a very old and unsupported Universal Analyzer langage pack that conflicts with the SQL Analyzer.
Upgrade from the SQL Script extension
If you have previously used the SQL Script extension (com.castsoftware.sqlscript) on existing schemas, you should proceed as following:
- In CAST Server Manager use the Manage Extensions option on the CAST AIP schemas in which the SQL Script extension is installed
- Select Analyzer for SQL files and choose deactivate to remove the existing extension. No further actions are required.
Packaging, delivering and analyzing your source code
What results can you expect?
Once the analysis/snapshot generation has completed, you can view the results in the normal manner (for example via CAST Enlighten) - click to enlarge:
You can also use the CAST Management Studio option View Analysis Unit Content to see the objects that have been created following the analysis:
The following objects are displayed in CAST Enlighten:
DML Script File
For more details on objects refer: SQL Analyzer - How object identity is determined
Table deletion and renaming
DROP TABLE syntax is supported for table objects within the same file. When creating a table through CREATE TABLE tableName (colName int, ...) followed by a DROP TABLE tableName, the table will not be recorded and thus will not be displayed in CAST Enlighten. Similarly, if a table is renamed with a RENAME TABLE statement (or ALTER TABLE RENAME TO as in SQLite and PostgreSQL), this change will be reflected in CAST Enlighten. Presently we consider case-insensitive names, i.e., objects named tableName, TABLEname are considered to be the same object.
Database objects for Db2 analyses
Please read this note if you move from sqlanalyzer <= 2.6.9-funcrel to sqlanalyzer >= 3.0.0-alpha2 and if the AIP core is from 8.3.16 to 8.3.28 and analyzed sources are Db2:
The following CREATE TABLE ... IN ... statements will generate a new object: a database for Db2 analyses:
Object Full Name will change from <SCHEMA NAME>.<OBJECT NAME> to <DATABASE NAME>.<SCHEMA NAME>.<OBJECT NAME:
|prior to 3.0.0-alpha2||3.0.0-alpha2|
Links are created for transaction and function point needs:
You can expect the following links on the DDL side within the same sql file:
- useSelect, useInsert, useUpdate, useDelete Links from Procedure / Function / Macro / Event to Table / View
- callLink from Procedure / Function / Event to Procedure / Function
- callLink from Macro to Function
- callLink from Procedure / Function to Cobol Program
- callLink from Procedure / Function to C/C++ Function
- callLink from Procedure / Function to Java Method
- useSelect from View to Table / View used in the query of the view
- callLink from View to Function
- relyonLink from Index to the Table
- relyonLink from Index to the Column implied in the index
- relyonLink from Synonym to Table / View / Function / Procedure / Package aliased by Synonym
- referLink from Table / Table Column to a Table / Table Column referenced in a Foreign Key
- referDelete, referUpdate from Table to a Table referenced in a Foreign Key. Examples:
- referDelete with a Referential Action property Restrict for Delete:
- referDelete with a Referential Action property Cascade for Delete :
- referDelete with a Referential Action property Cascade for Delete , referUpdate with a Referential Action property No Action for Update
- referDelete with a Referential Action property No Action for Delete , referUpdate with a Referential Action property No Action for Update
- referDelete with a Referential Action property Cascade for Delete
- callLink to the correct Trigger where the tables is accessed in insert/update/delete
- example a Trigger declared as BEFORE INSERT on a table, any insert to that table will call the trigger...
- example: a table, with an after update trigger, updated in a Client code :
- inheritLink from sub Type to super Type:
- example : CREATE OR REPLACE type gayerrortype under gayxmlmsg ....
- useLink for PL/SQL tables, example : CREATE OR REPLACE TYPE "CNCUBLIST_2" is table of "HIS_TEST_A" ;
You can expect the following links on the DML side :
- useSelect, useInsert, useUpdate, useDelete Links from SQL Script to Table / View
- call Links from SQL Script to Procedure / Function / Macro
You can find a full list of rules delivered with this extension here:
Client Side Support : COBOL, PB, VB, .NET, JAVA, C/C++, PYTHON
|Never use SQL queries with a cartesian product (SQL) (1101000)|
|Never use SQL queries with a cartesian product on XXL Tables (SQL) (1101002)|
|Avoid non-indexed SQL queries (1101004)|
|Avoid non-indexed XXL SQL queries (1101006)|
|Avoid non-SARGable queries (1101008)|
|Avoid NATURAL JOIN queries (1101010)|
|Specify column names instead of column numbers in ORDER BY clauses (1101012)|
|Avoid queries using old style join convention instead of ANSI-Standard joins (SQL) (1101014)|
|Always define column names when inserting values (1101026)|
|Use MINUS or EXCEPT operator instead of NOT EXISTS and NOT IN subqueries (1101028)|
Avoid exists and not exists independent clauses (SQL) (1101032)
DISTINCT should not be used in SQL SELECT statements (1101034)
Use ANSI standard operators in SQL WHERE clauses (EMBEDDED SQL) (1101036)
Replace OR conditions testing equality on the same identifier in SQL WHERE clauses by an IN test condition (1101038)
|Do not mix ANSI and non-ANSI JOIN syntax in the same query (1101058)|
|LIKE operator should not start with a wildcard character (1101060)|
|Avoid improperly written triangular joins with XXL tables (1101066)|
|Avoid explicit comparison with NULL (1101070)|
|Tables should be aliased (1101072)|
|Tables aliases should not end with a numeric suffix (1101074)|
|Column references should be qualified (1101076)|
Special note about XXL/XXS support
See SQL Analyzer - working with XXL or XXS tables for more information.
Special notes about Quality Rules on client side
Some Quality Rules are calculated on SQL queries on the client-side with some limitations:
- Quality Rules will be enabled on client-side code only if the server-side code has been analyzed with SQL Analyzer extension.
- For Java client-side code, SQL statements used in parameters of methods including a SQL parametrization rule are analyzed.
- But 'queries' visible in the DLM (that need reviewing) are not analyzed:
Explicit queries used in an ORM context are analyzed (or not) based on if they are visible in Enlighten
COBOL EXEC SQL queries are analyzed
SQL queries founded in Python code
- SQL queries founded in .properties (Java Property Mapping objects) are analyzed
Special note about redundant Quality Rules
Errors and warning
Please see SQL Analyzer - errors and warnings for the full list of analysis errors and warnings.
Known limitations and issues
If you encounter the following error in CAST Server Manager while installing the SQL Analyzer extension, please perform the workaround described here and then attempt the installation again. This error may occur if you have installed a very old and unsupported custom Universal Analyzer language pack that used the same metamodel type names as used in the official SQL Analyzer extension.
- All name resolution is considered as case insensitive: this may produce erroneous links on a case insensitive platform 'playing with case': two different tables with the same case insensitive name will be both called
- Procedure resolution handles overriding when the number of parameters are matched or number and optionals are matched. Otherwise, when calling an overridden procedure, all overrides will be called. Below are some examples here is a single call Link, between the second func1 and func2:
- Dynamic SQL statements are resolved when:
- the SQL statement is readable, even for sliced statements.
TABLE1, TABLE2, TABLE3 and TABLE4 are visibles and useSelect link were be added
- test_table is visible and useDelete link is added:
- test_table is visible and useDelete link is added:
- table name is valued via a variable which could be resolved.
- emp table is visible and useSelect link will be added
- emp table is visible and useSelect link will be added
OPEN-FOR-USING : emp table and test procedure are linked by a use SELECT link
ALTER TABLE ... ADD ... syntax is supported. All other syntaxes, such as ALTER TABLE ... DELETE .. or ALTER TABLE ... DROP ... or ALTER TABLE ... MODIFY ... etc. are not supported.
- Moving a table from one database/scheme to another is not supported through RENAME TABLE schema1.tableName1 TO schema2.tableName2.
- Sequences are not taken in to account and that is not a limitation but a choice because they have no effect on transactions nor Quality Rules
- Oracle synonyms on packages are not taken in to account.
- For the QR 1101012 Specify column names instead of column numbers in ORDER BY clauses, the case when a function that returns a number or a numeric variable is used in order by is not reported to violate the rule.
CAST Health Dashboard (ex. Application Analytics Dashboard)
Starting with release 2.1 of the SQL Analyzer extension, the name used to represent the technology has changed from SQL Analyzer to SQL: if you have already transfered snapshots that contain SQL Analyzer analysis results in to a Measurement Service schema, you'll see SQL Analyzer in the list of technologies instead of SQL.
If you would like to change the technology name for existing snapshots, you can change it using the following SQL query run against the Measurement Service schema: