Skip to content

Commit

Permalink
Support for Babelfish v4.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
robverschoor committed Feb 16, 2024
1 parent f574254 commit a451c9f
Show file tree
Hide file tree
Showing 11 changed files with 290 additions and 164 deletions.
11 changes: 11 additions & 0 deletions BabelfishCompassUser.Optimistic.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -833,4 +833,15 @@ default_classification=Ignored
[User-defined datatype for IDENTITY]


[DROP SIGNATURE]


[ADD SENSITIVITY CLASSIFICATION]


[DROP SENSITIVITY CLASSIFICATION]

[FULLTEXT INDEX]


[FULLTEXT CONTAINS]
Binary file modified BabelfishCompass_UserGuide.docx
Binary file not shown.
Binary file modified BabelfishCompass_UserGuide.pdf
Binary file not shown.
42 changes: 36 additions & 6 deletions BabelfishFeatures.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@
# this must always be the first section:
[Babelfish for T-SQL]
# only Babelfish version numbers listed here can be referenced the rules below:
valid_versions=1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0, 1.5.0, 1.6.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 2.5.0, 3.1.0, 3.2.0, 3.3.0, 3.4.0
valid_versions=1.0.0, 1.1.0, 1.2.0, 1.3.0, 1.4.0, 1.5.0, 1.6.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 2.5.0, 3.1.0, 3.2.0, 3.3.0, 3.4.0, 4.0.0
# x.y.1/2/3 etc are bugfix releases for x.y.0 (no new T-SQL features supported), and are typically based on a newer PG release
file_format=2 # version number for format of this .cfg file. This is not expected to change much
file_timestamp=Dec-2023 # identifies the version of this file, together with the latest Babelfish version supported
file_timestamp=Feb-2024 # identifies the version of this file, together with the latest Babelfish version supported
# format: dd-MON-yyyy or MON-yyyy

# Basic principle:
Expand Down Expand Up @@ -235,7 +235,7 @@ supported-3.2.0=STDEV,STDEVP,VAR,VARP

[Built-in functions]
rule=function_call
list=ABS,ACOS,APPLOCK_MODE,APPLOCK_TEST,APP_NAME,ASCII,ASIN,ASSEMBLYPROPERTY,ASYMKEYPROPERTY,ASYMKEY_ID,ATAN,ATN2,BINARY_CHECKSUM,CAST,CEILING,CERTENCODED,CERTPRIVATEKEY,CERTPROPERTY,CERT_ID,CHAR,CHARINDEX,CHECKSUM,CHOOSE,COALESCE,COLLATIONPROPERTY,COLUMNPROPERTY,COLUMNS_UPDATED,COL_LENGTH,COL_NAME,COMPRESS,CONCAT,CONCAT_WS,CONNECTIONPROPERTY,CONTAINS,CONTAINSTABLE,CONTEXT_INFO,CONVERT,COS,COT,CRYPT_GEN_RANDOM,CURRENT_REQUEST_ID,CURRENT_TIMESTAMP,CURRENT_TIMEZONE,CURRENT_TIMEZONE_ID,CURRENT_TRANSACTION_ID,CURRENT_USER,CURSOR_STATUS,DATABASEPROPERTY,DATABASEPROPERTYEX,DATABASE_PRINCIPAL_ID,DATALENGTH,DATEADD,DATEDIFF,DATEDIFF_BIG,DATEFROMPARTS,DATENAME,DATEPART,DATETIME2FROMPARTS,DATETIMEFROMPARTS,DATETIMEOFFSETFROMPARTS,DAY,DB_ID,DB_NAME,DECOMPRESS,DEGREES,DIFFERENCE,EOMONTH,ERROR_LINE,ERROR_MESSAGE,ERROR_NUMBER,ERROR_PROCEDURE,ERROR_SEVERITY,ERROR_STATE,EVENTDATA,EXP,FILEGROUPPROPERTY,FILEGROUP_ID,FILEGROUP_NAME,FILEPROPERTY,FILEPROPERTYEX,FILE_ID,FILE_IDEX,FILE_NAME,FLOOR,FN_GET_SQL,FORMAT,FORMATMESSAGE,GETANSINULL,GETDATE,GETUTCDATE,GET_FILESTREAM_TRANSACTION_CONTEXT,HASHBYTES,HAS_DBACCESS,HAS_PERMS_BY_NAME,HOST_ID,HOST_NAME,IDENTITY,IDENT_CURRENT,IDENT_INCR,IDENT_SEED,IIF,INDEXKEY_PROPERTY,INDEXPROPERTY,INDEX_COL,ISDATE,ISJSON,ISNULL,ISNUMERIC,IS_MEMBER,IS_OBJECTSIGNED,IS_ROLEMEMBER,IS_SRVROLEMEMBER,JSON,JSON_MODIFY,JSON_QUERY,JSON_VALUE,KEY_GUID,KEY_ID,KEY_NAME,LEFT,LEN,LOG,LOG10,LOGINPROPERTY,LOWER,LTRIM,MIN_ACTIVE_ROWVERSION,MONTH,NCHAR,NEWID,NEWSEQUENTIALID,NULLIF,OBJECTPROPERTY,OBJECTPROPERTYEX,OBJECT_DEFINITION,OBJECT_ID,OBJECT_NAME,OBJECT_SCHEMA_NAME,OPENDATASOURCE,OPENJSON,OPENQUERY,OPENROWSET,OPENXML,ORIGINAL_DB_NAME,ORIGINAL_LOGIN,PARSE,PARSENAME,PARTITION,PATINDEX,PERMISSIONS,PI,POWER,PUBLISHINGSERVERNAME,QUOTENAME,RADIANS,RAND,REPLACE,REPLICATE,REVERSE,RIGHT,ROUND,ROWCOUNT_BIG,RTRIM,SCHEMA_ID,SCHEMA_NAME,SCOPE_IDENTITY,SERVERPROPERTY,SESSIONPROPERTY,SESSION_CONTEXT,SESSION_USER,SIGN,SIGNBYASYMKEY,SIGNBYCERT,SIN,SMALLDATETIMEFROMPARTS,SOUNDEX,SPACE,SQL_VARIANT_PROPERTY,SQRT,SQUARE,STATS_DATE,STR,STRING_AGG,STRING_ESCAPE,STRING_SPLIT,STUFF,SUBSTRING,SUSER_ID,SUSER_NAME,SUSER_SID,SUSER_SNAME,SID_BINARY,SWITCHOFFSET,SYMKEYPROPERTY,SYSDATETIME,SYSDATETIMEOFFSET,SYSTEM_USER,SYSUTCDATETIME,TAN,TERTIARY_WEIGHTS,TEXTPTR,TEXTVALID,TIMEFROMPARTS,TODATETIMEOFFSET,TRANSLATE,TRIGGER_NESTLEVEL,TRIM,TRY_CAST,TRY_CONVERT,TRY_PARSE,TYPEPROPERTY,TYPE_ID,TYPE_NAME,UNICODE,UPDATE,UPPER,USER,USER_ID,USER_NAME,VERIFYSIGNEDBYASYMKEY,VERIFYSIGNEDBYCERT,XACT_STATE,YEAR,CHANGETABLE,CHANGE_TRACKING_MIN_VALID_VERSION,CHANGE_TRACKING_CURRENT_VERSION,CHANGE_TRACKING_IS_COLUMN_IN_MASK,CHANGE_TRACKING_CONTEXT,DEFAULT_DOMAIN,FILETABLEROOTPATH,GETFILENAMESPACEPATH,GETPATHLOCATOR,PATHNAME,CONTAINSTABLE,FREETEXT,FREETEXTTABLE,SEMANTICKEYPHRASETABLE,SEMANTICSIMILARITYDETAILSTABLE,SEMANTICSIMILARITYTABLE,FULLTEXTCATALOGPROPERTY,FULLTEXTSERVICEPROPERTY,ENCRYPTBYASYMKEY,ENCRYPTBYCERT,ENCRYPTBYKEY,ENCRYPTBYPASSPHRASE,PWDCOMPARE,PWDENCRYPT,DECRYPTBYASYMKEY,DECRYPTBYCERT,DECRYPTBYKEY,DECRYPTBYKEYAUTOASYMKEY,DECRYPTBYKEYAUTOCERT,DECRYPTBYPASSPHRASE,DECRYPTBYKEYAUTOCERT,PREDICT,DATE_BUCKET,DATETRUNC,LEAST,GREATEST,GENERATE_SERIES,JSON_OBJECT,JSON_ARRAY,JSON_PATH_EXISTS,LEFT_SHIFT,RIGHT_SHIFT,BIT_COUNT,GET_BIT,SET_BIT
list=ABS,ACOS,APPLOCK_MODE,APPLOCK_TEST,APP_NAME,ASCII,ASIN,ASSEMBLYPROPERTY,ASYMKEYPROPERTY,ASYMKEY_ID,ATAN,ATN2,BINARY_CHECKSUM,CAST,CEILING,CERTENCODED,CERTPRIVATEKEY,CERTPROPERTY,CERT_ID,CHAR,CHARINDEX,CHECKSUM,CHOOSE,COALESCE,COLLATIONPROPERTY,COLUMNPROPERTY,COLUMNS_UPDATED,COL_LENGTH,COL_NAME,COMPRESS,CONCAT,CONCAT_WS,CONNECTIONPROPERTY,CONTAINS,CONTAINSTABLE,CONTEXT_INFO,CONVERT,COS,COT,CRYPT_GEN_RANDOM,CURRENT_REQUEST_ID,CURRENT_TIMESTAMP,CURRENT_TIMEZONE,CURRENT_TIMEZONE_ID,CURRENT_TRANSACTION_ID,CURRENT_USER,CURSOR_STATUS,DATABASEPROPERTY,DATABASEPROPERTYEX,DATABASE_PRINCIPAL_ID,DATALENGTH,DATEADD,DATEDIFF,DATEDIFF_BIG,DATEFROMPARTS,DATENAME,DATEPART,DATETIME2FROMPARTS,DATETIMEFROMPARTS,DATETIMEOFFSETFROMPARTS,DAY,DB_ID,DB_NAME,DECOMPRESS,DEGREES,DIFFERENCE,EOMONTH,ERROR_LINE,ERROR_MESSAGE,ERROR_NUMBER,ERROR_PROCEDURE,ERROR_SEVERITY,ERROR_STATE,EVENTDATA,EXP,FILEGROUPPROPERTY,FILEGROUP_ID,FILEGROUP_NAME,FILEPROPERTY,FILEPROPERTYEX,FILE_ID,FILE_IDEX,FILE_NAME,FLOOR,FN_GET_SQL,FORMAT,FORMATMESSAGE,GETANSINULL,GETDATE,GETUTCDATE,GET_FILESTREAM_TRANSACTION_CONTEXT,HASHBYTES,HAS_DBACCESS,HAS_PERMS_BY_NAME,HOST_ID,HOST_NAME,IDENTITY,IDENT_CURRENT,IDENT_INCR,IDENT_SEED,IIF,INDEXKEY_PROPERTY,INDEXPROPERTY,INDEX_COL,ISDATE,ISJSON,ISNULL,ISNUMERIC,IS_MEMBER,IS_OBJECTSIGNED,IS_ROLEMEMBER,IS_SRVROLEMEMBER,JSON,JSON_MODIFY,JSON_QUERY,JSON_VALUE,KEY_GUID,KEY_ID,KEY_NAME,LEFT,LEN,LOG,LOG10,LOGINPROPERTY,LOWER,LTRIM,MIN_ACTIVE_ROWVERSION,MONTH,NCHAR,NEWID,NEWSEQUENTIALID,NULLIF,OBJECTPROPERTY,OBJECTPROPERTYEX,OBJECT_DEFINITION,OBJECT_ID,OBJECT_NAME,OBJECT_SCHEMA_NAME,OPENDATASOURCE,OPENJSON,OPENQUERY,OPENROWSET,OPENXML,ORIGINAL_DB_NAME,ORIGINAL_LOGIN,PARSE,PARSENAME,PARTITION,PATINDEX,PERMISSIONS,PI,POWER,PUBLISHINGSERVERNAME,QUOTENAME,RADIANS,RAND,REPLACE,REPLICATE,REVERSE,RIGHT,ROUND,ROWCOUNT_BIG,RTRIM,SCHEMA_ID,SCHEMA_NAME,SCOPE_IDENTITY,SERVERPROPERTY,SESSIONPROPERTY,SESSION_CONTEXT,SESSION_USER,SIGN,SIGNBYASYMKEY,SIGNBYCERT,SIN,SMALLDATETIMEFROMPARTS,SOUNDEX,SPACE,SQL_VARIANT_PROPERTY,SQRT,SQUARE,STATS_DATE,STR,STRING_AGG,STRING_ESCAPE,STRING_SPLIT,STUFF,SUBSTRING,SUSER_ID,SUSER_NAME,SUSER_SID,SUSER_SNAME,SID_BINARY,SWITCHOFFSET,SYMKEYPROPERTY,SYSDATETIME,SYSDATETIMEOFFSET,SYSTEM_USER,SYSUTCDATETIME,TAN,TERTIARY_WEIGHTS,TEXTPTR,TEXTVALID,TIMEFROMPARTS,TODATETIMEOFFSET,TRANSLATE,TRIGGER_NESTLEVEL,TRIM,TRY_CAST,TRY_CONVERT,TRY_PARSE,TYPEPROPERTY,TYPE_ID,TYPE_NAME,UNICODE,UPDATE,UPPER,USER,USER_ID,USER_NAME,VERIFYSIGNEDBYASYMKEY,VERIFYSIGNEDBYCERT,XACT_STATE,YEAR,CHANGETABLE,CHANGE_TRACKING_MIN_VALID_VERSION,CHANGE_TRACKING_CURRENT_VERSION,CHANGE_TRACKING_IS_COLUMN_IN_MASK,CHANGE_TRACKING_CONTEXT,DEFAULT_DOMAIN,FILETABLEROOTPATH,GETFILENAMESPACEPATH,GETPATHLOCATOR,PATHNAME,FREETEXT,FREETEXTTABLE,SEMANTICKEYPHRASETABLE,SEMANTICSIMILARITYDETAILSTABLE,SEMANTICSIMILARITYTABLE,FULLTEXTCATALOGPROPERTY,FULLTEXTSERVICEPROPERTY,ENCRYPTBYASYMKEY,ENCRYPTBYCERT,ENCRYPTBYKEY,ENCRYPTBYPASSPHRASE,PWDCOMPARE,PWDENCRYPT,DECRYPTBYASYMKEY,DECRYPTBYCERT,DECRYPTBYKEY,DECRYPTBYKEYAUTOASYMKEY,DECRYPTBYKEYAUTOCERT,DECRYPTBYPASSPHRASE,DECRYPTBYKEYAUTOCERT,PREDICT,DATE_BUCKET,DATETRUNC,LEAST,GREATEST,GENERATE_SERIES,JSON_OBJECT,JSON_ARRAY,JSON_PATH_EXISTS,LEFT_SHIFT,RIGHT_SHIFT,BIT_COUNT,GET_BIT,SET_BIT
supported-1.0.0=ABS,ACOS,ASCII,ASIN,ATAN,APPLOCK_MODE,APPLOCK_TEST,CAST,CEILING,CHAR,CHARINDEX,CHECKSUM,COALESCE,CONCAT,CONVERT,COS,COT,CURRENT_TIMESTAMP,CURRENT_USER,USER,DATALENGTH,DATEADD,DATEDIFF,DATENAME,DATEPART,DAY,DB_ID,DB_NAME,SUSER_ID,SUSER_NAME,USER_ID,USER_NAME,DEFAULT_DOMAIN,DEGREES,EXP,ERROR_LINE,ERROR_MESSAGE,ERROR_NUMBER,ERROR_PROCEDURE,ERROR_SEVERITY,ERROR_STATE,FLOOR,GETDATE,GETUTCDATE,IIF,ISDATE,ISNULL,ISNUMERIC,LEFT,LEN,LOG,LOG10,LOWER,LTRIM,MONTH,NCHAR,NEWID,NULLIF,OBJECT_ID,OBJECT_NAME,PATINDEX,PI,POWER,RADIANS,RAND,REPLACE,REPLICATE,REVERSE,RIGHT,ROUND,RTRIM,SCOPE_IDENTITY,IDENT_CURRENT,IDENT_INCR,IDENT_SEED,SCHEMA_ID,SCHEMA_NAME,SERVERPROPERTY,SIGN,SIN,SPACE,SQRT,STRING_AGG,STRING_SPLIT,STUFF,SUBSTRING,SYSDATETIME,SYSDATETIMEOFFSET,SYSUTCDATETIME,TAN,TRIM,TRY_CAST,TRY_PARSE,UPPER,YEAR,QUOTENAME,XACT_STATE,STRING_ESCAPE,DATABASEPROPERTYEX,CONNECTIONPROPERTY,SQL_VARIANT_PROPERTY,SESSIONPROPERTY,COLLATIONPROPERTY,UNICODE
supported-1.1.0=CONCAT_WS,DATEFROMPARTS,DATETIMEFROMPARTS,ORIGINAL_LOGIN,SESSION_USER,SQUARE,CHOOSE,TRIGGER_NESTLEVEL,CURSOR_STATUS
supported-1.2.0=COLUMNS_UPDATED,UPDATE,FULLTEXTSERVICEPROPERTY,ISJSON,JSON_QUERY,JSON_VALUE,HAS_DBACCESS,SUSER_SID,SUSER_SNAME,IS_SRVROLEMEMBER
Expand All @@ -247,6 +247,7 @@ supported-3.1.0=OPENQUERY
supported-3.2.0=CONTEXT_INFO,ROWCOUNT_BIG,DATABASE_PRINCIPAL_ID,TIMEFROMPARTS,DATETIME2FROMPARTS
supported-3.3.0=PARSENAME,EOMONTH,HOST_ID,SMALLDATETIMEFROMPARTS
supported-3.4.0=SWITCHOFFSET,TODATETIMEOFFSET,COL_NAME,COL_LENGTH,DATETRUNC,IDENTITY,TYPE_ID,TYPE_NAME
reviewmanually-4.0.0=CONTAINS
default_classification-ReviewSemantics=NEWSEQUENTIALID
report_group-Filestream=FILETABLEROOTPATH,GETFILENAMESPACEPATH,GETPATHLOCATOR,PATHNAME
report_group-Fulltext Search=CONTAINS,CONTAINSTABLE,FREETEXT,FREETEXTTABLE,SEMANTICKEYPHRASETABLE,SEMANTICSIMILARITYDETAILSTABLE,SEMANTICSIMILARITYTABLE,FULLTEXTCATALOGPROPERTY,FULLTEXTSERVICEPROPERTY
Expand Down Expand Up @@ -508,14 +509,15 @@ complexity_score=LOW

[DROP IF EXISTS]
rule=drop_table,drop_view,drop_procedure,drop_function,drop_database,drop_user,drop_schema,drop_db_role
list=TABLE,VIEW,PROCEDURE,FUNCTION,DATABASE,USER,SCHEMA,INDEX,ROLE
supported-1.0.0=TABLE,VIEW,PROCEDURE,FUNCTION,DATABASE,INDEX
list=TABLE,VIEW,PROCEDURE,FUNCTION,DATABASE,USER,SCHEMA,INDEX,ROLE,TRIGGER
supported-1.0.0=TABLE,VIEW,PROCEDURE,FUNCTION,DATABASE,INDEX,TRIGGER
supported-1.2.0=SCHEMA,DATABASE,USER
supported-2.1.0=ROLE
report_group=DDL
complexity_score=LOW

[DROP INDEX]
# Cross-db and remote references for DROP INDEX are covered by [Cross-database reference] and [Remote object reference]
rule=drop_index
list=INDEX ON TABLE,INDEX ON SCHEMA.TABLE,TABLE.INDEX,SCHEMA.TABLE.INDEX
supported-1.0.0=INDEX ON TABLE
Expand Down Expand Up @@ -612,6 +614,7 @@ complexity_score=HIGH
rule=create_or_alter_dml_trigger
list=TABLE,VIEW
supported-1.2.0=TABLE
supported-4.0.0=VIEW
report_group=Triggers
complexity_score=HIGH

Expand Down Expand Up @@ -1526,6 +1529,7 @@ list=SEQUENCE,SYNONYM,QUEUE,ASSEMBLY,AGGREGATE,APPLICATION ROLE,ASYMMETRIC KEY,C
supported-1.0.0=SEQUENCE,LOGIN
supported-1.2.0=USER
supported-2.1.0=ROLE
supported-4.0.0=FULLTEXT INDEX
report_group-DDL=SEQUENCE,SYNONYM,DEFAULT,RULE
report_group-Users=LOGIN,SERVER ROLE,ROLE
report_group-Fulltext Search=FULLTEXT CATALOG,FULLTEXT INDEX,FULLTEXT STOPLIST
Expand All @@ -1538,6 +1542,22 @@ complexity_score-MEDIUM=RULE,DEFAULT,SYNONYM
[ADD SIGNATURE]
rule=add_signature_statement
complexity_score=HIGH
report_group=Encryption/Security
[DROP SIGNATURE]
rule=drop_signature_statement
complexity_score=HIGH
report_group=Encryption/Security
[ADD SENSITIVITY CLASSIFICATION]
rule=add_sensitivity_classification
complexity_score=HIGH
report_group=Encryption/Security
[DROP SENSITIVITY CLASSIFICATION]
rule=drop_sensitivity_classification
complexity_score=HIGH
report_group=Encryption/Security
[Temporal table]
rule=system_versioning_options
Expand Down Expand Up @@ -1570,6 +1590,16 @@ default_classification=ReviewManually
rule=sqlcmd_variable
default_classification=ReviewManually
[FULLTEXT INDEX]
rule=ddl_statement
list=CREATE,DROP,ALTER
supported-4.0.0=CREATE,DROP
[FULLTEXT CONTAINS]
rule=function_call
list=FORMSOF,ISABOUT,NEAR,INFLECTIONAL,THESAURUS
complexity_score=HIGH
#-----------------------------------------------------------------------------------
#file checksum=1a97666b
#file checksum=6b153fb4
#--- end ---------------------------------------------------------------------------
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@

# 2024-02
- Updated support for Babelfish v.4.0.0.

# 2023-12-a
- Added DEFAULT parameters as supported in 3.4.0 (previously omitted).

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/compass/Compass.java
Original file line number Diff line number Diff line change
Expand Up @@ -284,6 +284,7 @@ public Compass(String[] args) {
u.appOutput(" -nodedup : with -importfmt, do not de-duplicate captured queries");
u.appOutput(" -noreportcomplexity : do not include complexity scores in report");
u.appOutput(" -csvformat <fmt> : format for generated .csv file");
u.appOutput(" -csvitemidfile <filename> : filename for item IDs when .csv format=flat (default=BabelfishCompassItemID.csv)");
// always set to true now:
//u.appOutput(" -syntax_issues : also report selected Babelfish syntax errors (experimental)");
u.appOutput(" -sqlendpoint <host-or-IP>[,port] : SQL Server host");
Expand Down Expand Up @@ -805,11 +806,10 @@ else if (option.equals("hints")) {
u.customItemIDPathNameUser = true;
File f = new File(CustomItemIDPathName);
if (!f.exists()) {
u.appOutput("Specified file '"+CustomItemIDPathName+"' not found.");
u.appOutput("Specified item ID file '"+CustomItemIDPathName+"' not found: not generating item IDs in .csv file");
if (u.CustomItemIDFileName.toUpperCase().startsWith(u.getDocDirPathname().toUpperCase())) {
System.out.println("NB: Specify only the file name, not the full pathname!");
}
u.appOutput("Continuing...");
}
i++;
continue;
Expand Down
Loading

0 comments on commit a451c9f

Please sign in to comment.