You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2024/01/03 06:51:12 UTC
(shardingsphere) branch master updated: Support parsing SQL Server with object id function (#29633)
This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 96e50a9e052 Support parsing SQL Server with object id function (#29633)
96e50a9e052 is described below
commit 96e50a9e05283ee4529d81fddac3fbca97bf0320
Author: LotusMoon <ch...@aliyun.com>
AuthorDate: Wed Jan 3 14:51:05 2024 +0800
Support parsing SQL Server with object id function (#29633)
* Support parsing SQL Server with object id function
* import Comparator
* Adjust projections g4
* Remove unnecessary import
---
.../src/main/antlr4/imports/sqlserver/BaseRule.g4 | 2 +-
.../main/antlr4/imports/sqlserver/DMLStatement.g4 | 8 +-
.../statement/SQLServerStatementVisitor.java | 10 +-
.../parser/src/main/resources/case/dml/insert.xml | 21 +++
.../src/main/resources/case/dml/select-join.xml | 197 +++++++++++++++++++++
.../parser/src/main/resources/case/dml/select.xml | 119 +++++++++++++
.../main/resources/sql/supported/dml/insert.xml | 1 +
.../resources/sql/supported/dml/select-join.xml | 2 +
.../main/resources/sql/supported/dml/select.xml | 2 +
9 files changed, 352 insertions(+), 10 deletions(-)
diff --git a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4 b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
index 607a2812bc7..b9cc46d59e3 100644
--- a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
+++ b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/BaseRule.g4
@@ -120,7 +120,7 @@ unreservedWord
| DATA_RETENTION | TEMPORAL_HISTORY_RETENTION | EDITION | MIXED_PAGE_ALLOCATION | DISABLED | ALLOWED | HADR | MULTI_USER | RESTRICTED_USER | SINGLE_USER | OFFLINE | EMERGENCY | SUSPEND | DATE_CORRELATION_OPTIMIZATION
| ELASTIC_POOL | SERVICE_OBJECTIVE | DATABASE_NAME | ALLOW_CONNECTIONS | GEO | NAMED | DATEFIRST | BACKUP_STORAGE_REDUNDANCY | FORCE_FAILOVER_ALLOW_DATA_LOSS | SECONDARY | FAILOVER | DEFAULT_FULLTEXT_LANGUAGE
| DEFAULT_LANGUAGE | INLINE | NESTED_TRIGGERS | TRANSFORM_NOISE_WORDS | TWO_DIGIT_YEAR_CUTOFF | PERSISTENT_LOG_BUFFER | DIRECTORY_NAME | DATEFORMAT | DELAYED_DURABILITY | TRANSFER | SCHEMA | PASSWORD | AUTHORIZATION
- | MEMBER | SEARCH | TEXT | SECOND
+ | MEMBER | SEARCH | TEXT | SECOND | PRECISION | VIEWS
;
databaseName
diff --git a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4 b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
index 8c56339adfa..1f9fa961ff7 100644
--- a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
+++ b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/DMLStatement.g4
@@ -89,12 +89,14 @@ duplicateSpecification
;
projections
- : (unqualifiedShorthand | projection | top (unqualifiedShorthand | projection)?) (COMMA_ (unqualifiedShorthand | projection))*
+ : (projection | top projection?) (COMMA_ projection)*
;
projection
- : (alias EQ_)? (columnName | expr) | qualifiedShorthand
- | (columnName | expr) (AS? alias)? | qualifiedShorthand
+ : qualifiedShorthand
+ | unqualifiedShorthand
+ | (alias EQ_)? (columnName | expr)
+ | (columnName | expr) (AS? alias)?
;
top
diff --git a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
index 112ec390d6f..1d4579d08ef 100644
--- a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
+++ b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/visitor/statement/SQLServerStatementVisitor.java
@@ -102,7 +102,6 @@ import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.Tab
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TableReferenceContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TableReferencesContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.TopContext;
-import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.UnqualifiedShorthandContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.UnreservedWordContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.UpdateContext;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser.ViewNameContext;
@@ -851,13 +850,10 @@ public abstract class SQLServerStatementVisitor extends SQLServerStatementBaseVi
@Override
public ASTNode visitProjections(final ProjectionsContext ctx) {
- Collection<ProjectionSegment> projections = new LinkedList<>();
+ List<ProjectionSegment> projections = new LinkedList<>();
if (null != ctx.top()) {
projections.add((ProjectionSegment) visit(ctx.top()));
}
- for (UnqualifiedShorthandContext each : ctx.unqualifiedShorthand()) {
- projections.add(new ShorthandProjectionSegment(each.getStart().getStartIndex(), each.getStop().getStopIndex()));
- }
for (ProjectionContext each : ctx.projection()) {
projections.add((ProjectionSegment) visit(each));
}
@@ -1128,7 +1124,6 @@ public abstract class SQLServerStatementVisitor extends SQLServerStatementBaseVi
@Override
public ASTNode visitProjection(final ProjectionContext ctx) {
- // FIXME :The stop index of project is the stop index of projection, instead of alias.
if (null != ctx.qualifiedShorthand()) {
QualifiedShorthandContext shorthand = ctx.qualifiedShorthand();
ShorthandProjectionSegment result = new ShorthandProjectionSegment(shorthand.getStart().getStartIndex(), shorthand.getStop().getStopIndex());
@@ -1136,6 +1131,9 @@ public abstract class SQLServerStatementVisitor extends SQLServerStatementBaseVi
result.setOwner(new OwnerSegment(shorthand.identifier().getStart().getStartIndex(), shorthand.identifier().getStop().getStopIndex(), identifier));
return result;
}
+ if (null != ctx.unqualifiedShorthand()) {
+ return new ShorthandProjectionSegment(ctx.unqualifiedShorthand().getStart().getStartIndex(), ctx.unqualifiedShorthand().getStop().getStopIndex());
+ }
AliasSegment alias = null == ctx.alias() ? null : (AliasSegment) visit(ctx.alias());
if (null != ctx.columnName()) {
ColumnSegment column = (ColumnSegment) visit(ctx.columnName());
diff --git a/test/it/parser/src/main/resources/case/dml/insert.xml b/test/it/parser/src/main/resources/case/dml/insert.xml
index 0baf66a99b8..cf0a00f588b 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -3005,4 +3005,25 @@
</value>
</values>
</insert>
+
+ <insert sql-case-id="insert_with_db_schema_name">
+ <table name="Affiliation" start-index="12" stop-index="43">
+ <owner name="dbo" start-index="29" stop-index="31">
+ <owner name="ContosoWarehouse" start-index="12" stop-index="27"/>
+ </owner>
+ </table>
+ <columns start-index="44" stop-index="44"/>
+ <select>
+ <projections start-index="52" stop-index="52">
+ <shorthand-projection start-index="52" stop-index="52"/>
+ </projections>
+ <from>
+ <simple-table name="Affiliation" start-index="59" stop-index="86">
+ <owner name="dbo" start-index="72" stop-index="74">
+ <owner name="My_Lakehouse" start-index="59" stop-index="70"/>
+ </owner>
+ </simple-table>
+ </from>
+ </select>
+ </insert>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/dml/select-join.xml b/test/it/parser/src/main/resources/case/dml/select-join.xml
index 1947515a469..5c3bf47e084 100644
--- a/test/it/parser/src/main/resources/case/dml/select-join.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-join.xml
@@ -705,4 +705,201 @@
</join-table>
</from>
</select>
+
+ <select sql-case-id="select_natural_join_with_object_id_function">
+ <projections start-index="7" stop-index="169">
+ <column-projection name="name" start-index="7" stop-index="27" alias="column_name">
+ <owner name="c" start-index="7" stop-index="7"/>
+ </column-projection>
+ <column-projection name="column_id" start-index="29" stop-index="39">
+ <owner name="c" start-index="29" stop-index="29"/>
+ </column-projection>
+ <expression-projection text="SCHEMA_NAME(t.schema_id)" alias="type_schema" start-index="41" stop-index="79">
+ <expr>
+ <function function-name="SCHEMA_NAME" start-index="41" stop-index="64" text="SCHEMA_NAME(t.schema_id)">
+ <parameter>
+ <column name="schema_id" start-index="53" stop-index="63">
+ <owner name="t" start-index="53" stop-index="53"/>
+ </column>
+ </parameter>
+ </function>
+ </expr>
+ </expression-projection>
+ <column-projection name="name" alias="type_name" start-index="81" stop-index="99">
+ <owner name="t" start-index="81" stop-index="81"/>
+ </column-projection>
+ <column-projection name="is_user_defined" start-index="101" stop-index="117">
+ <owner name="t" start-index="101" stop-index="101"/>
+ </column-projection>
+ <column-projection name="is_assembly_type" start-index="119" stop-index="136">
+ <owner name="t" start-index="119" stop-index="119"/>
+ </column-projection>
+ <column-projection name="max_length" start-index="138" stop-index="149">
+ <owner name="c" start-index="138" stop-index="138"/>
+ </column-projection>
+ <column-projection name="precision" start-index="151" stop-index="161">
+ <owner name="c" start-index="151" stop-index="151"/>
+ </column-projection>
+ <column-projection name="scale" start-index="163" stop-index="169">
+ <owner name="c" start-index="163" stop-index="163"/>
+ </column-projection>
+ </projections>
+ <from>
+ <join-table join-type="INNER">
+ <left>
+ <simple-table name="columns" start-index="176" stop-index="191" alias="c">
+ <owner name="sys" start-index="176" stop-index="178"/>
+ </simple-table>
+ </left>
+ <right>
+ <simple-table name="types" start-index="198" stop-index="211" alias="t">
+ <owner name="sys" start-index="198" stop-index="200"/>
+ </simple-table>
+ </right>
+ <on-condition>
+ <binary-operation-expression start-index="216" stop-index="244">
+ <left>
+ <column name="user_type_id" start-index="216" stop-index="229">
+ <owner name="c" start-index="216" stop-index="216"/>
+ </column>
+ </left>
+ <right>
+ <column name="user_type_id" start-index="231" stop-index="244">
+ <owner name="t" start-index="231" stop-index="231"/>
+ </column>
+ </right>
+ <operator>=</operator>
+ </binary-operation-expression>
+ </on-condition>
+ </join-table>
+ </from>
+ <where start-index="246" stop-index="302">
+ <expr>
+ <binary-operation-expression start-index="252" stop-index="302">
+ <left>
+ <column name="object_id" start-index="252" stop-index="262">
+ <owner name="c" start-index="252" stop-index="252"/>
+ </column>
+ </left>
+ <right>
+ <function function-name="OBJECT_ID" start-index="266" stop-index="302" text="OBJECT_ID('<schema_name.table_name>')">
+ <parameter>
+ <literal-expression value="<schema_name.table_name>" start-index="276" stop-index="301"/>
+ </parameter>
+ </function>
+ </right>
+ <operator>=</operator>
+ </binary-operation-expression>
+ </expr>
+ </where>
+ <order-by>
+ <column-item name="column_id" start-index="313" stop-index="323">
+ <owner name="c" start-index="313" stop-index="313"/>
+ </column-item>
+ </order-by>
+ </select>
+
+ <select sql-case-id="select_inner_join_with_object_id_function">
+ <projections start-index="7" stop-index="206">
+ <expression-projection start-index="7" stop-index="43" alias="schema_name" text="SCHEMA_NAME(schema_id)">
+ <expr>
+ <function function-name="SCHEMA_NAME" text="SCHEMA_NAME(schema_id)" start-index="7" stop-index="28">
+ <parameter>
+ <column name="schema_id" start-index="19" stop-index="27"/>
+ </parameter>
+ </function>
+ </expr>
+ </expression-projection>
+ <column-projection name="name" start-index="45" stop-index="65" alias="object_name">
+ <owner name="o" start-index="45" stop-index="45"/>
+ </column-projection>
+ <column-projection name="type_desc" start-index="67" stop-index="77">
+ <owner name="o" start-index="67" stop-index="67"/>
+ </column-projection>
+ <column-projection name="parameter_id" start-index="79" stop-index="92">
+ <owner name="p" start-index="79" stop-index="79"/>
+ </column-projection>
+ <column-projection name="name" start-index="94" stop-index="117" alias="parameter_name">
+ <owner name="p" start-index="94" stop-index="94"/>
+ </column-projection>
+ <expression-projection text="TYPE_NAME(p.user_type_id)" start-index="119" stop-index="161" alias="parameter_type">
+ <expr>
+ <function function-name="TYPE_NAME" text="TYPE_NAME(p.user_type_id)" start-index="119" stop-index="143">
+ <parameter>
+ <column name="user_type_id" start-index="129" stop-index="142">
+ <owner name="p" start-index="129" stop-index="129"/>
+ </column>
+ </parameter>
+ </function>
+ </expr>
+ </expression-projection>
+ <column-projection name="max_length" start-index="163" stop-index="174">
+ <owner name="p" start-index="163" stop-index="163"/>
+ </column-projection>
+ <column-projection name="precision" start-index="176" stop-index="186">
+ <owner name="p" start-index="176" stop-index="176"/>
+ </column-projection>
+ <column-projection name="scale" start-index="188" stop-index="194">
+ <owner name="p" start-index="188" stop-index="188"/>
+ </column-projection>
+ <column-projection name="is_output" start-index="196" stop-index="206">
+ <owner name="p" start-index="196" stop-index="196"/>
+ </column-projection>
+ </projections>
+ <from>
+ <join-table join-type="INNER">
+ <left>
+ <simple-table name="objects" start-index="213" stop-index="228" alias="o">
+ <owner name="sys" start-index="213" stop-index="215"/>
+ </simple-table>
+ </left>
+ <right>
+ <simple-table name="parameters" start-index="241" stop-index="259" alias="p">
+ <owner name="sys" start-index="241" stop-index="243"/>
+ </simple-table>
+ </right>
+ <on-condition>
+ <binary-operation-expression start-index="264" stop-index="288">
+ <left>
+ <column name="object_id" start-index="264" stop-index="274">
+ <owner name="o" start-index="264" stop-index="264"/>
+ </column>
+ </left>
+ <right>
+ <column name="object_id" start-index="278" stop-index="288">
+ <owner name="p" start-index="278" stop-index="278"/>
+ </column>
+ </right>
+ <operator>=</operator>
+ </binary-operation-expression>
+ </on-condition>
+ </join-table>
+ </from>
+ <where start-index="290" stop-index="347">
+ <expr>
+ <binary-operation-expression start-index="296" stop-index="347">
+ <left>
+ <column name="object_id" start-index="296" stop-index="306">
+ <owner name="o" start-index="296" stop-index="296"/>
+ </column>
+ </left>
+ <right>
+ <function function-name="OBJECT_ID" text="OBJECT_ID('<schema_name.object_name>')" start-index="310" stop-index="347">
+ <parameter>
+ <literal-expression value="<schema_name.object_name>" start-index="320" stop-index="346"/>
+ </parameter>
+ </function>
+ </right>
+ <operator>=</operator>
+ </binary-operation-expression>
+ </expr>
+ </where>
+ <order-by>
+ <column-item name="schema_name" start-index="358" stop-index="368"/>
+ <column-item name="object_name" start-index="371" stop-index="381"/>
+ <column-item name="parameter_id" start-index="384" stop-index="397">
+ <owner name="p" start-index="384" stop-index="384"/>
+ </column-item>
+ </order-by>
+ </select>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/case/dml/select.xml b/test/it/parser/src/main/resources/case/dml/select.xml
index 7b7c20ee552..f133b8efec0 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -7858,4 +7858,123 @@
</column-projection>
</projections>
</select>
+
+ <select sql-case-id="select_with_object_id_function">
+ <projections start-index="7" stop-index="134">
+ <expression-projection text="OBJECT_NAME(object_id)" start-index="7" stop-index="55" alias="referencing_object_name">
+ <expr>
+ <function function-name="OBJECT_NAME" text="OBJECT_NAME(object_id)" start-index="7" stop-index="28">
+ <parameter>
+ <column name="object_id" start-index="19" stop-index="27"/>
+ </parameter>
+ </function>
+ </expr>
+ </expression-projection>
+ <expression-projection start-index="57" stop-index="132" text="COALESCE(COL_NAME(object_id, column_id), '(n/a)')" alias="referencing_column_name">
+ <expr>
+ <function function-name="COALESCE" text="COALESCE(COL_NAME(object_id, column_id), '(n/a)')" start-index="57" stop-index="105">
+ <parameter>
+ <function function-name="COL_NAME" text="COL_NAME(object_id, column_id)" start-index="66" stop-index="95">
+ <parameter>
+ <column name="object_id" start-index="75" stop-index="83"/>
+ </parameter>
+ <parameter>
+ <column name="column_id" start-index="86" stop-index="94"/>
+ </parameter>
+ </function>
+ </parameter>
+ <parameter>
+ <literal-expression value="(n/a)" start-index="98" stop-index="104"/>
+ </parameter>
+ </function>
+ </expr>
+ </expression-projection>
+ <shorthand-projection start-index="134" stop-index="134"/>
+ </projections>
+ <from start-index="145" stop-index="160">
+ <simple-table name="sql_dependencies" start-index="141" stop-index="160">
+ <owner name="sys" start-index="141" stop-index="143"/>
+ </simple-table>
+ </from>
+ <where start-index="162" stop-index="226">
+ <expr>
+ <binary-operation-expression start-index="168" stop-index="226">
+ <left>
+ <column name="referenced_major_id" start-index="168" stop-index="186"/>
+ </left>
+ <right>
+ <function function-name="OBJECT_ID" text="OBJECT_ID('<schema_name.table_name>')" start-index="190" stop-index="226">
+ <parameter>
+ <literal-expression value="<schema_name.table_name>" start-index="200" stop-index="225"/>
+ </parameter>
+ </function>
+ </right>
+ <operator>=</operator>
+ </binary-operation-expression>
+ </expr>
+ </where>
+ <order-by>
+ <expression-item expression="OBJECT_NAME(object_id)" start-index="237" stop-index="258">
+ <expr>
+ <function function-name="OBJECT_NAME" text="OBJECT_NAME(object_id)" start-index="237" stop-index="258">
+ <parameter>
+ <column name="object_id" start-index="249" stop-index="257"/>
+ </parameter>
+ </function>
+ </expr>
+ </expression-item>
+ <expression-item expression="COL_NAME(object_id, column_id)" start-index="261" stop-index="290">
+ <expr>
+ <function function-name="COL_NAME" text="COL_NAME(object_id, column_id)" start-index="261" stop-index="290">
+ <parameter>
+ <column name="object_id" start-index="270" stop-index="278"/>
+ </parameter>
+ <parameter>
+ <column name="column_id" start-index="281" stop-index="289"/>
+ </parameter>
+ </function>
+ </expr>
+ </expression-item>
+ </order-by>
+ </select>
+
+ <select sql-case-id="select_from_sys_views">
+ <from start-index="201" stop-index="210">
+ <simple-table name="views" start-index="202" stop-index="210">
+ <owner name="sys" start-index="202" stop-index="204"/>
+ </simple-table>
+ </from>
+ <projections start-index="7" stop-index="195">
+ <column-projection name="name" start-index="7" stop-index="23" alias="view_name"/>
+ <expression-projection text="SCHEMA_NAME(schema_id)" start-index="25" stop-index="61" alias="schema_name">
+ <function function-name="SCHEMA_NAME" text="SCHEMA_NAME(schema_id)" start-index="25" stop-index="46">
+ <parameter>
+ <column name="schema_id" start-index="37" stop-index="45"/>
+ </parameter>
+ </function>
+ </expression-projection>
+ <expression-projection text="OBJECTPROPERTYEX(object_id,'IsIndexed')" start-index="63" stop-index="114" alias="IsIndexed">
+ <function function-name="OBJECTPROPERTYEX" text="OBJECTPROPERTYEX(object_id,'IsIndexed')" start-index="63" stop-index="101">
+ <parameter>
+ <column name="object_id" start-index="80" stop-index="88"/>
+ </parameter>
+ <parameter>
+ <literal-expression value="IsIndexed" start-index="90" stop-index="100"/>
+ </parameter>
+ </function>
+ </expression-projection>
+ <expression-projection text="OBJECTPROPERTYEX(object_id,'IsIndexable')" start-index="116" stop-index="171" alias="IsIndexable">
+ <function function-name="OBJECTPROPERTYEX" text="OBJECTPROPERTYEX(object_id,'IsIndexable')" start-index="116" stop-index="156">
+ <parameter>
+ <column name="object_id" start-index="133" stop-index="141"/>
+ </parameter>
+ <parameter>
+ <literal-expression value="IsIndexable" start-index="143" stop-index="155"/>
+ </parameter>
+ </function>
+ </expression-projection>
+ <column-projection name="create_date" start-index="173" stop-index="183"/>
+ <column-projection name="modify_date" start-index="185" stop-index="195"/>
+ </projections>
+ </select>
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
index 7bca7b58766..3e01695c742 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/insert.xml
@@ -108,4 +108,5 @@
<sql-case id="insert_with_nchar_3" value="INSERT INTO dbo.T1 VALUES (3, N'Randolph')" db-types="SQLServer"/>
<sql-case id="insert_with_batch_nchar" value="INSERT INTO TestSchema.Employees (Name, Location) VALUES (N'Jared', N'Australia'), (N'Nikita', N'India'), (N'Tom', N'Germany')" db-types="SQLServer"/>
<sql-case id="insert_with_data_base_name" value="INSERT INTO AdventureWorks2022.dbo.VariableTest(Col1) VALUES('$(tablename)')" db-types="SQLServer"/>
+ <sql-case id="insert_with_db_schema_name" value="INSERT INTO ContosoWarehouse.dbo.Affiliation SELECT * FROM My_Lakehouse.dbo.Affiliation" db-types="SQLServer"/>
</sql-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml b/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
index f29cb6b6cb0..a5b9ce05371 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
@@ -34,4 +34,6 @@
<sql-case id="select_join_with_quote" value="SELECT "u".*, "o".* FROM t_user "u" INNER JOIN t_order "o" ON "u".user_id = "o".user_id WHERE "u".user_id = ?" db-types="Oracle" />
<sql-case id="select_outer_left_join_without_alias" value="SELECT * from t1 LEFT JOIN t2 ON t1.id = t2.id" db-types="Oracle"/>
<sql-case id="select_outer_full_join_without_alias" value="SELECT * FROM t1 FULL JOIN t2 ON t1.id = t2.id" db-types="Oracle"/>
+ <sql-case id="select_natural_join_with_object_id_function" value="SELECT c.name AS column_name,c.column_id,SCHEMA_NAME(t.schema_id) AS type_schema,t.name AS type_name,t.is_user_defined,t.is_assembly_type,c.max_length,c.precision,c.scale FROM sys.columns AS c JOIN sys.types AS t ON c.user_type_id=t.user_type_id WHERE c.object_id = OBJECT_ID('<schema_name.table_name>') ORDER BY c.column_id" db-types="SQLServer"/>
+ <sql-case id="select_inner_join_with_object_id_function" value="SELECT SCHEMA_NAME(schema_id) AS schema_name,o.name AS object_name,o.type_desc,p.parameter_id,p.name AS parameter_name,TYPE_NAME(p.user_type_id) AS parameter_type,p.max_length,p.precision,p.scale,p.is_output FROM sys.objects AS o INNER JOIN sys.parameters AS p ON o.object_id = p.object_id WHERE o.object_id = OBJECT_ID('<schema_name.object_name>') ORDER BY schema_name, object_name, p.parameter_id" db-types="SQLServer"/>
</sql-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/select.xml b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
index ea53597659d..50185cd9fc3 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
@@ -239,4 +239,6 @@
<sql-case id="select_with_top_restrict2" value="SELECT TOP 10 columnName FROM TableName;" db-types="SQLServer"/>
<sql-case id="select_with_top_restrict3" value="SELECT TOP 10 alias1.columnName from TableName alias1" db-types="SQLServer"/>
<sql-case id="select_with_top_with_ties" value="SELECT TOP 10 WITH TIES alias1.columnName from TableName alias1" db-types="SQLServer"/>
+ <sql-case id="select_with_object_id_function" value="SELECT OBJECT_NAME(object_id) AS referencing_object_name,COALESCE(COL_NAME(object_id, column_id), '(n/a)') AS referencing_column_name,* FROM sys.sql_dependencies WHERE referenced_major_id = OBJECT_ID('<schema_name.table_name>') ORDER BY OBJECT_NAME(object_id), COL_NAME(object_id, column_id)" db-types="SQLServer"/>
+ <sql-case id="select_from_sys_views" value="SELECT name AS view_name,SCHEMA_NAME(schema_id) AS schema_name,OBJECTPROPERTYEX(object_id,'IsIndexed') AS IsIndexed,OBJECTPROPERTYEX(object_id,'IsIndexable') AS IsIndexable,create_date,modify_date FROM sys.views" db-types="SQLServer"/>
</sql-cases>