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 <[email protected]>
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>