Skip to content

Commit a43d202

Browse files
authored
code changes for v.2024-10 (#124)
* code changes for v.2024-09 * code changes for v.2024-09 * changing version to 2024-10 * add additional @@error codes supported * code changes * code changes
1 parent 72a8c3e commit a43d202

File tree

9 files changed

+152
-48
lines changed

9 files changed

+152
-48
lines changed

BabelfishCompassUser.Optimistic.cfg

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ default_classification-Ignored=SET LOCK_ESCALATION
217217

218218

219219
[Partitioning]
220-
default_classification=Ignored
220+
221221

222222
[FOR REPLICATION]
223223

BabelfishCompass_UserGuide.docx

637 Bytes
Binary file not shown.

BabelfishCompass_UserGuide.pdf

614 Bytes
Binary file not shown.

BabelfishFeatures.cfg

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
# this must always be the first section:
1616
[Babelfish for T-SQL]
1717
# only Babelfish version numbers listed here can be referenced the rules below:
18-
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, 3.5.0, 4.0.0, 4.1.0, 4.2.0
18+
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, 3.5.0, 4.0.0, 4.1.0, 4.2.0, 4.3.0
1919
# 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
2020
file_format=2 # version number for format of this .cfg file. This is not expected to change much
21-
file_timestamp=Jul-2024 # identifies the version of this file, together with the latest Babelfish version supported
21+
file_timestamp=Oct-2024 # identifies the version of this file, together with the latest Babelfish version supported
2222
# format: dd-MON-yyyy or MON-yyyy
2323

2424
# Basic principle:
@@ -126,7 +126,8 @@ supported-1.2.0=201,206,2733,8144,8145,8146
126126
supported-2.1.0=213
127127
supported-2.2.0=911
128128
supported-3.3.0=15003
129-
supported-3.4.0=330,6615
129+
supported-3.4.0=330,535,6615,9810
130+
supported-4.0.0=13600
130131
report_group=@@ERROR codes
131132

132133
[Regular variable named @@v]
@@ -137,7 +138,7 @@ complexity_score=LOW
137138

138139
[Datatypes]
139140
rule=id
140-
list=HIERARCHYID,GEOGRAPHY,GEOMETRY,TIMESTAMP,ROWVERSION,CURSOR,XML,XML(xmlschema),CHARACTER VARYING,NATIONAL CHARACTER,NATIONAL CHARACTER VARYING,NCHARACTER,NCHARACTER VARYING,XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
141+
list=HIERARCHYID,GEOGRAPHY,GEOMETRY,TIMESTAMP,ROWVERSION,CURSOR,XML,XML(xmlschema),CHARACTER VARYING,NATIONAL CHARACTER,NATIONAL CHARACTER VARYING,NCHARACTER,NCHARACTER VARYING,XML COLUMN_SET FOR ALL_SPARSE_COLUMNS,EXTERNAL NAME
141142
# all other datatypes (not mentioned here) are supported
142143
supported-1.0.0=XML,CURSOR
143144
supported-1.2.0=TIMESTAMP,ROWVERSION
@@ -220,6 +221,7 @@ complexity_score=HIGH
220221
rule=function_call
221222
supported-3.5.0-3.*=STX,STY,LAT,LONG,STASTEXT,STASBINARY,STDISTANCE,STPOINTFROMTEXT,STGEOMFROMTEXT,POINT
222223
supported-4.1.0=STX,STY,LAT,LONG,STASTEXT,STASBINARY,STDISTANCE,STPOINTFROMTEXT,STGEOMFROMTEXT,POINT
224+
supported-4.3.0=STCONTAINS,STEQUALS,STAREA
223225
report_group=Geospatial
224226
complexity_score=HIGH
225227

@@ -261,8 +263,7 @@ supported-3.1.0=OPENQUERY
261263
supported-3.2.0=CONTEXT_INFO,ROWCOUNT_BIG,DATABASE_PRINCIPAL_ID,TIMEFROMPARTS,DATETIME2FROMPARTS
262264
supported-3.3.0=PARSENAME,EOMONTH,HOST_ID,SMALLDATETIMEFROMPARTS
263265
supported-3.4.0=SWITCHOFFSET,TODATETIMEOFFSET,COL_NAME,COL_LENGTH,DATETRUNC,IDENTITY,TYPE_ID,TYPE_NAME
264-
reviewmanually-3.5.0-3.*=CONTAINS
265-
reviewmanually-4.0.0=CONTAINS
266+
reviewmanually-3.5.0=CONTAINS
266267
default_classification-ReviewSemantics=NEWSEQUENTIALID
267268
report_group-Filestream=FILETABLEROOTPATH,GETFILENAMESPACEPATH,GETPATHLOCATOR,PATHNAME
268269
report_group-Fulltext Search=CONTAINS,CONTAINSTABLE,FREETEXT,FREETEXTTABLE,SEMANTICKEYPHRASETABLE,SEMANTICSIMILARITYDETAILSTABLE,SEMANTICSIMILARITYTABLE,FULLTEXTCATALOGPROPERTY,FULLTEXTSERVICEPROPERTY
@@ -320,6 +321,7 @@ report_group=Built-in functions
320321

321322
[STRING_AGG() WITHIN GROUP]
322323
rule=function_call
324+
supported-4.3.0=*
323325
report_group=Built-in functions
324326

325327
[FORMAT() culture]
@@ -449,8 +451,8 @@ complexity_score=HIGH
449451

450452
[Index options]
451453
rule=index_option
452-
list=FILLFACTOR,ALLOW_PAGE_LOCKS,ALLOW_ROW_LOCKS,PAD_INDEX,STATISTICS_NORECOMPUTE,OPTIMIZE_FOR_SEQUENTIAL_KEY,SORT_IN_TEMPDB,DROP_EXISTING,ONLINE,COMPRESSION_DELAY,MAXDOP,DATA_COMPRESSION,BUCKET_COUNT,SORTED_DATA,RESUMABLE,MAX_DURATION,XML_COMPRESSION
453-
default_classification=Ignored
454+
list=FILLFACTOR,ALLOW_PAGE_LOCKS,ALLOW_ROW_LOCKS,PAD_INDEX,STATISTICS_NORECOMPUTE,OPTIMIZE_FOR_SEQUENTIAL_KEY,SORT_IN_TEMPDB,DROP_EXISTING,ONLINE,COMPRESSION_DELAY,MAXDOP,DATA_COMPRESSION,BUCKET_COUNT,SORTED_DATA,RESUMABLE,MAX_DURATION,XML_COMPRESSION,ALLOW_DUP_ROW,IGNORE_DUP_ROW
455+
default_classification-Ignored=FILLFACTOR,ALLOW_PAGE_LOCKS,ALLOW_ROW_LOCKS,PAD_INDEX,STATISTICS_NORECOMPUTE,OPTIMIZE_FOR_SEQUENTIAL_KEY,SORT_IN_TEMPDB,DROP_EXISTING,ONLINE,COMPRESSION_DELAY,MAXDOP,DATA_COMPRESSION,BUCKET_COUNT,SORTED_DATA,RESUMABLE,MAX_DURATION,XML_COMPRESSION
454456
report_group=DDL
455457

456458
[Index attribute]
@@ -473,7 +475,8 @@ default_classification=ReviewSemantics
473475

474476
[Partitioning]
475477
rule=create_table,alter_table,create_index,alter_index,truncate_table
476-
list=CREATE TABLE,ALTER TABLE SWITCH,ALTER TABLE REBUILD,ALTER TABLE SPLIT,ALTER TABLE MERGE,ALTER INDEX REBUILD,CREATE INDEX,TRUNCATE TABLE,$PARTITION,CREATE PARTITION SCHEME,ALTER PARTITION SCHEME,CREATE PARTITION FUNCTION,ALTER PARTITION FUNCTION,DROP PARTITION SCHEME,DROP PARTITION SCHEME
478+
list=CREATE TABLE,ALTER TABLE SWITCH,ALTER TABLE REBUILD,ALTER TABLE SPLIT,ALTER TABLE MERGE,ALTER INDEX REBUILD,CREATE INDEX,TRUNCATE TABLE,$PARTITION,CREATE PARTITION SCHEME,ALTER PARTITION SCHEME,CREATE PARTITION FUNCTION RANGE LEFT,CREATE PARTITION FUNCTION RANGE RIGHT,ALTER PARTITION FUNCTION,DROP PARTITION FUNCTION,DROP PARTITION SCHEME,SQL_VARIANT
479+
supported-4.3.0=CREATE PARTITION FUNCTION RANGE RIGHT,CREATE PARTITION SCHEME,DROP PARTITION FUNCTION,DROP PARTITION SCHEME,$PARTITION,CREATE TABLE,CREATE INDEX
477480
report_group=DDL
478481
complexity_score=HIGH
479482

@@ -632,8 +635,7 @@ complexity_score=HIGH
632635
rule=create_or_alter_dml_trigger
633636
list=TABLE,VIEW
634637
supported-1.2.0=TABLE
635-
supported-3.5.0-3.*=VIEW
636-
supported-4.0.0=VIEW
638+
supported-3.5.0=VIEW
637639
report_group=Triggers
638640
complexity_score=HIGH
639641

@@ -676,6 +678,7 @@ rule=create_or_alter_procedure
676678
list=EXTERNAL,ATOMIC NATIVELY COMPILED,ENCRYPTION,RECOMPILE,SCHEMABINDING,WITHOUT SCHEMABINDING,EXECUTE AS OWNER,EXECUTE AS CALLER,EXECUTE AS SELF,EXECUTE AS USER
677679
supported-1.0.0=WITHOUT SCHEMABINDING
678680
supported-2.4.0=EXECUTE AS CALLER
681+
supported-4.3.0=RECOMPILE
679682
default_classification-ReviewSemantics=EXECUTE AS OWNER,EXECUTE AS CALLER
680683
default_classification-ReviewPerformance=RECOMPILE
681684
report_group=Procedures
@@ -685,7 +688,8 @@ complexity_score-LOW=RECOMPILE
685688
[Execute procedure options]
686689
rule=execute_body
687690
list=RECOMPILE,RESULT SETS,RESULT SETS NONE,RESULT SETS UNDEFINED
688-
supported-1.0.0=RESULT SETS,RESULT SETS NONE,RESULT SETS UNDEFINED
691+
ignored-1.0.0=RESULT SETS,RESULT SETS NONE,RESULT SETS UNDEFINED
692+
supported-4.3.0=RECOMPILE
689693
default_classification-ReviewPerformance=RECOMPILE
690694
complexity_score-LOW=RECOMPILE
691695
report_group=Procedures
@@ -772,9 +776,11 @@ report_group=Procedures
772776

773777
[CREATE DATABASE options]
774778
rule=create_database
775-
list=COLLATE,CATALOG_COLLATION,CATALOG_COLLATION DATABASE_DEFAULT,ALLOW_SNAPSHOT_ISOLATION,ANSI_NULLS,ANSI_NULL_DEFAULT,ANSI_PADDING,ANSI_WARNINGS,ARITHABORT,AUTO_CLOSE,AUTO_SHRINK,AUTO_UPDATE_STATISTICS,AUTO_UPDATE_STATISTICS_ASYNC,DB_CHAINING,COMPATIBILITY_LEVEL,CONCAT_NULL_YIELDS_NULL,CONTAINMENT=PARTIAL,CONTAINMENT=NONE,CURSOR_CLOSE_ON_COMMIT,CURSOR_DEFAULT,DATE_CORRELATION_OPTIMIZATION,DELAYED_DURABILITY,DISABLE_BROKER,FILESTREAM,HONOR_BROKER_PRIORITY,MULTI_USER,NUMERIC_ROUNDABORT,PAGE_VERIFY,PARAMETERIZATION,QUERY_STORE,QUOTED_IDENTIFIER,READ_COMMITTED_SNAPSHOT,RECOVERY,RECURSIVE_TRIGGERS,TARGET_RECOVERY_TIME,TRUSTWORTHY
779+
list=COLLATE,COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS,COLLATE ANY,CATALOG_COLLATION,CATALOG_COLLATION DATABASE_DEFAULT,ALLOW_SNAPSHOT_ISOLATION,ANSI_NULLS,ANSI_NULL_DEFAULT,ANSI_PADDING,ANSI_WARNINGS,ARITHABORT,AUTO_CLOSE,AUTO_SHRINK,AUTO_UPDATE_STATISTICS,AUTO_UPDATE_STATISTICS_ASYNC,DB_CHAINING,COMPATIBILITY_LEVEL,CONCAT_NULL_YIELDS_NULL,CONTAINMENT=PARTIAL,CONTAINMENT=NONE,CURSOR_CLOSE_ON_COMMIT,CURSOR_DEFAULT,DATE_CORRELATION_OPTIMIZATION,DELAYED_DURABILITY,DISABLE_BROKER,FILESTREAM,HONOR_BROKER_PRIORITY,MULTI_USER,NUMERIC_ROUNDABORT,PAGE_VERIFY,PARAMETERIZATION,QUERY_STORE,QUOTED_IDENTIFIER,READ_COMMITTED_SNAPSHOT,RECOVERY,RECURSIVE_TRIGGERS,TARGET_RECOVERY_TIME,TRUSTWORTHY
776780
supported-1.0.0=CONTAINMENT=NONE
777-
ignored-2.4.0=COLLATE,CATALOG_COLLATION DATABASE_DEFAULT
781+
ignored-2.4.0=CATALOG_COLLATION DATABASE_DEFAULT
782+
ignored-2.4.0=COLLATE
783+
supported-3.1.0=COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS
778784
report_group=Databases
779785

780786
[ALTER DATABASE]
@@ -1045,6 +1051,8 @@ supported-3.3.0=extended_properties
10451051
supported-3.4.0=database_permissions,server_role_members
10461052
supported-3.5.0-3.*=availability_groups,availability_replicas
10471053
supported-4.1.0=availability_groups,availability_replicas
1054+
supported-4.2.0=login_token,user_token
1055+
supported-4.3.0=sequences,partition_functions,partition_schemes,partition_parameters,partition_range_values,destination_data_spaces
10481056
10491057
[INFORMATION_SCHEMA]
10501058
rule=full_object_name
@@ -1567,8 +1575,7 @@ list=SEQUENCE,SYNONYM,QUEUE,ASSEMBLY,AGGREGATE,APPLICATION ROLE,ASYMMETRIC KEY,C
15671575
supported-1.0.0=SEQUENCE,LOGIN
15681576
supported-1.2.0=USER
15691577
supported-2.1.0=ROLE
1570-
supported-3.5.0-3.*=FULLTEXT INDEX
1571-
supported-4.0.0=FULLTEXT INDEX
1578+
supported-3.5.0=FULLTEXT INDEX
15721579
report_group-DDL=SEQUENCE,SYNONYM,DEFAULT,RULE
15731580
report_group-Users=LOGIN,SERVER ROLE,ROLE
15741581
report_group-Fulltext Search=FULLTEXT CATALOG,FULLTEXT INDEX,FULLTEXT STOPLIST
@@ -1634,14 +1641,13 @@ default_classification=ReviewManually
16341641
[FULLTEXT INDEX]
16351642
rule=ddl_statement
16361643
list=CREATE,DROP,ALTER
1637-
supported-3.5.0-3.*=CREATE,DROP
1638-
supported-4.0.0=CREATE,DROP
1644+
supported-3.5.0=CREATE,DROP
16391645
16401646
[FULLTEXT CONTAINS]
16411647
rule=function_call
16421648
list=FORMSOF,ISABOUT,NEAR,INFLECTIONAL,THESAURUS
16431649
complexity_score=HIGH
16441650
16451651
#-----------------------------------------------------------------------------------
1646-
#file checksum=1dc5386f
1652+
#file checksum=641eb587
16471653
#--- end ---------------------------------------------------------------------------

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# 2024-10
2+
- Added support for Babelfish v.4.3.0.
3+
- Various small fixes.
14

25
# 2024-07
36
- Added support for Babelfish v.4.2.0.

src/main/java/compass/Compass.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1863,8 +1863,13 @@ private static boolean optionsValid() throws Exception {
18631863
return false;
18641864
}
18651865
if (u.rewrite) {
1866-
u.appOutput("Cannot specify -rewrite when not performing analysis"+noInputFilesMsg);
1867-
return false;
1866+
if (optimisticFlag) {
1867+
// -rewrite is implied by -optimistic , which can also be used with non-analysis cases so no need to warn
1868+
}
1869+
else {
1870+
// -rewrite only applies to analysis, but it's harmless when specified otherwise
1871+
u.appOutput("Ignoring -rewrite when not performing analysis"+noInputFilesMsg);
1872+
}
18681873
}
18691874
}
18701875

src/main/java/compass/CompassAnalyze.java

Lines changed: 89 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3052,6 +3052,15 @@ else if (chk1.endsWith("FORXMLPATH(''),TYPE)") && !chk2.isEmpty()) {
30523052
if (chk2.contains(".VALUE")) xType = ", with .VALUE()";
30533053
}
30543054
}
3055+
3056+
// do not try to rewrite a case 'SELECT *', instead of 'SELECT column'
3057+
if (selectListElem == 1) {
3058+
String col = ctx.select_statement().query_expression().query_specification().select_list().select_list_elem().get(0).getText();
3059+
if (col.startsWith("*")) {
3060+
isOK = false;
3061+
}
3062+
}
3063+
30553064
//u.appOutput(u.thisProc()+"f ("+(u.lineNrInFile + ctx.start.getLine() - 1)+")=["+getTextSpaced(f)+"] selectListElem=["+selectListElem+"] ");
30563065
if (isOK) {
30573066
String xStatus = u.NotSupported;
@@ -3335,9 +3344,7 @@ private void captureAtAtErrorValue(Integer exprInt, String via, String op, int l
33353344
String usrDefined = "";
33363345
if (exprInt >= 50000) {
33373346
usrDefined = " (user-defined)";
3338-
if (!via.isEmpty()) {
3339-
status = u.Supported;
3340-
}
3347+
status = u.Supported;
33413348
}
33423349
captureItem(AtAtErrorValueRef+ " " +String.format("%6d",exprInt)+usrDefined+via, via, AtAtErrorValueRef, exprInt.toString(), status, lineNr);
33433350
}
@@ -3632,7 +3639,12 @@ else if (hasParent(ctx.parent,"func_body_returns_select")) {
36323639
String UDDdatatype = "";
36333640
String section = UDDatatypes;
36343641
String statusDataType = u.Supported;
3635-
if (ctx.FROM() != null) {
3642+
if (ctx.external_type() != null) {
3643+
// EXTERNAL NAME
3644+
statusDataType = featureSupportedInVersion(Datatypes, "EXTERNAL NAME");
3645+
UDDdatatype = "EXTERNAL NAME";
3646+
}
3647+
else if (ctx.FROM() != null) {
36363648
// scalar UDD
36373649
UDDdatatype = u.normalizeName(ctx.data_type().getText().toUpperCase(), "datatype");
36383650
if (featureExists(Datatypes, getBaseDataType(UDDdatatype))) {
@@ -6900,12 +6912,14 @@ else if (inCommaJoin) {
69006912
break;
69016913
}
69026914
String quote = u.getPatternGroup(a, "(['\"])", 1);
6903-
a = u.stripStringQuotes(a);
6915+
a = u.stripStringQuotes(a);
69046916
a = u.applyPatternAll(a, quote+quote, quote);
69056917
stringArg += a;
6906-
}
6907-
if (u.debugging) u.dbgOutput("capturing dynamic SQL query: EXECUTE(): stringArgFound=["+stringArgFound+"] stringArg=["+stringArg+"] ", u.debugDynamicSQL);
6908-
if (stringArgFound && (!stringArg.trim().isEmpty())) {
6918+
}
6919+
// Don't process exec-imm strings that have '?' placeholders -- test can be improved by first removing any strings, but this is less obvious than it looks
6920+
String hasPlaceholder = u.getPatternGroup(stringArg, "(\\?)", 1);
6921+
if (u.debugging) u.dbgOutput("capturing dynamic SQL query: EXECUTE(): stringArgFound=["+stringArgFound+"] stringArg=["+stringArg+"] hasPlaceholder=["+hasPlaceholder+"] ", u.debugDynamicSQL);
6922+
if (stringArgFound && (!stringArg.trim().isEmpty()) && (hasPlaceholder.isEmpty())) {
69096923
u.dynamicSQLBuffer.add(u.dynamicSQLBatchLine+arg.get(0).start.getLine()+","+u.batchNrInFile+","+u.lineNrInFile+","+(u.currentObjectType + " " + u.currentObjectName).trim()+",EXECUTE()");
69106924
u.dynamicSQLBuffer.add(stringArg);
69116925
u.dynamicSQLBuffer.add("go");
@@ -7909,7 +7923,7 @@ else if (hasParent(ctx.parent,"column_definition")) {
79097923
}
79107924
else if (hasParent(ctx.parent,"create_database")) {
79117925
context = "in CREATE DATABASE";
7912-
contextCS = "DATABASE";
7926+
contextCS = "DATABASE";
79137927
}
79147928
else if (hasParent(ctx.parent,"alter_database")) {
79157929
context = "in ALTER DATABASE";
@@ -7927,7 +7941,48 @@ else if (hasParent(ctx.parent,"alter_database")) {
79277941
}
79287942
}
79297943
}
7930-
captureItem(CSmsg+collationName+", "+context, columnName, Collations, "", status, ctx.COLLATE().getSymbol().getLine());
7944+
7945+
String msg = CSmsg+collationName+", "+context;
7946+
7947+
if (hasParent(ctx.parent,"create_database")) {
7948+
// Sort out the status of COLLATE - this is a bit messy due to how support in Babelfish developed over time
7949+
//u.appOutput(u.thisProc()+"collationName=["+collationName+"]");
7950+
7951+
String statusCrdb = featureSupportedInVersion(CreateDatabaseOptions, "COLLATE");
7952+
String statusCrdbV24 = "";
7953+
if (statusCrdb.equals(u.NotSupported)) {
7954+
msg = "CREATE DATABASE...COLLATE";
7955+
status = statusCrdb;
7956+
}
7957+
else {
7958+
status = statusCrdbV24 = statusCrdb; // CREATE DATABASE...COLLATE is IGNORED
7959+
7960+
statusCrdb= featureSupportedInVersion(CreateDatabaseOptions, "COLLATE ANY");
7961+
if (statusCrdb.equals(u.Supported)) {
7962+
msg = CSmsg+collationName+", "+context;
7963+
status = statusCrdb;
7964+
}
7965+
else {
7966+
statusCrdb = featureSupportedInVersion(CreateDatabaseOptions, "COLLATE " + collationName);
7967+
String statusv31 = featureSupportedInVersion(CreateDatabaseOptions,"COLLATE SQL_LATIN1_GENERAL_CP1_CI_AS");
7968+
if (statusCrdb.equals(u.Supported)) {
7969+
msg = CSmsg+collationName+", "+context;
7970+
status = statusCrdb;
7971+
}
7972+
else {
7973+
if (statusv31.equals(u.Supported)) {
7974+
status = u.NotSupported;
7975+
}
7976+
else {
7977+
status = statusCrdbV24;
7978+
}
7979+
}
7980+
}
7981+
7982+
}
7983+
}
7984+
7985+
captureItem(msg, columnName, Collations, "", status, ctx.COLLATE().getSymbol().getLine());
79317986
visitChildren(ctx);
79327987
if (u.debugging) dbgTraceVisitExit(CompassUtilities.thisProc());
79337988
return null;
@@ -7956,6 +8011,7 @@ else if (hasParent(ctx.parent,"alter_database")) {
79568011
}
79578012
}
79588013
}
8014+
79598015
if (status.equals(u.uninitialized) && !captured) {
79608016
status = featureSupportedInVersion(CreateDatabaseOptions,optionChk);
79618017
}
@@ -9261,15 +9317,34 @@ public Integer rewriteMerge(TSQLParser.Merge_statementContext ctx) {
92619317
}
92629318

92639319
private void capturePartitioning(String stmt, String tableName, int lineNr) {
9320+
capturePartitioning(stmt, stmt, tableName, lineNr, "");
9321+
}
9322+
private void capturePartitioning(String stmt, String stmtFmt, String tableName, int lineNr) {
9323+
capturePartitioning(stmt, stmtFmt, tableName, lineNr, "");
9324+
}
9325+
9326+
private void capturePartitioning(String stmt, String stmtFmt, String tableName, int lineNr, String dataType) {
92649327
String status = featureSupportedInVersion(Partitioning,stmt);
9265-
String fmt = "Partitioning, "+stmt;
9266-
if (stmt.startsWith("CREATE PARTITION") || stmt.startsWith("ALTER PARTITION") || stmt.startsWith("DROP PARTITION")) fmt = stmt;
9328+
String fmt = "Partitioning, "+stmtFmt;
9329+
if (stmt.startsWith("CREATE PARTITION") || stmt.startsWith("ALTER PARTITION") || stmt.startsWith("DROP PARTITION")) fmt = stmtFmt;
92679330
else if (stmt.equals("$PARTITION")) fmt = "$PARTITION.function()";
92689331
else if (stmt.endsWith("SPLIT")) fmt = "ALTER TABLE..SPLIT partition";
92699332
else if (stmt.endsWith("MERGE")) fmt = "ALTER TABLE..MERGE partition";
92709333
else if (stmt.endsWith("SWITCH")) fmt = "ALTER TABLE..SWITCH partition";
92719334
else if (stmt.endsWith("TABLE REBUILD")) fmt = "ALTER TABLE..REBUILD partition";
92729335
else if (stmt.endsWith("INDEX REBUILD")) fmt = "ALTER INDEX..REBUILD partition";
9336+
9337+
if (status.equals(u.Supported)) {
9338+
if (stmt.startsWith("CREATE PARTITION FUNCTION")) {
9339+
if (dataType.equalsIgnoreCase("SQL_VARIANT")) {
9340+
String statusSV = featureSupportedInVersion(Partitioning,"SQL_VARIANT");
9341+
if (! statusSV.equals(u.Supported)) {
9342+
status = statusSV;
9343+
fmt = "CREATE PARTITION FUNCTION, on SQL_VARIANT datatype";
9344+
}
9345+
}
9346+
}
9347+
}
92739348
captureItem(fmt, tableName, Partitioning, stmt, status, lineNr);
92749349
}
92759350

@@ -9299,9 +9374,9 @@ private void capturePartitioning(String stmt, String tableName, int lineNr) {
92999374
if (ctx.expression_list() != null) { // should never be null, but seen it been empty in customer scripts
93009375
nrPfValues = argListCount(ctx.expression_list());
93019376
}
9302-
String pfValues = ", for " + nrPfValues + " " + dt + " values";
9377+
String pfValues = ", for " + nrPfValues + " " + dt + " values";
93039378

9304-
capturePartitioning("CREATE PARTITION FUNCTION, RANGE "+rl+pfValues, u.normalizeName(ctx.partition_function_name.getText()), ctx.start.getLine());
9379+
capturePartitioning("CREATE PARTITION FUNCTION RANGE "+rl, "CREATE PARTITION FUNCTION, RANGE "+rl+pfValues, u.normalizeName(ctx.partition_function_name.getText()), ctx.start.getLine(), dt);
93059380
visitChildren(ctx); return null;
93069381
}
93079382

0 commit comments

Comments
 (0)