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 37f21852901 Support parsing SQL Server SELECT COUNT(*) sql  (#29433)
37f21852901 is described below

commit 37f218529013e1bf1dd856e8f065083695385c7b
Author: LotusMoon <[email protected]>
AuthorDate: Tue Dec 19 18:00:14 2023 +0800

    Support parsing SQL Server SELECT COUNT(*) sql  (#29433)
    
    * Support parsing SQL Server SELECT COUNT(*) sql
    
    * refactor to pass the spotless check
    
    * Refactor the code according to CR rules
---
 .../src/main/antlr4/imports/sqlserver/BaseRule.g4  |   2 +-
 .../main/antlr4/imports/sqlserver/DMLStatement.g4  |   6 +-
 .../src/main/antlr4/imports/sqlserver/Literals.g4  |   2 +-
 .../antlr4/imports/sqlserver/SQLServerKeyword.g4   |   4 +
 .../statement/SQLServerStatementVisitor.java       |  25 ++++-
 .../segment/dml/item/ColumnProjectionSegment.java  |   4 +-
 .../dml/item/ExpressionProjectionSegment.java      |   7 +-
 .../parser/src/main/resources/case/dml/insert.xml  |  40 +++++++
 .../parser/src/main/resources/case/dml/select.xml  | 125 +++++++++++++++++++++
 .../main/resources/sql/supported/dml/insert.xml    |   1 +
 .../main/resources/sql/supported/dml/select.xml    |   3 +
 11 files changed, 208 insertions(+), 11 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 27e745e4eec..607a2812bc7 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
+    | MEMBER | SEARCH | TEXT | SECOND
     ;
 
 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 05e32f0c2c9..ee6088cdba5 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
@@ -93,7 +93,8 @@ projections
     ;
 
 projection
-    : (top | columnName | expr) (AS? alias)? | qualifiedShorthand
+    : (alias EQ_)? (top | columnName | expr) | qualifiedShorthand
+    | (top | columnName | expr) (AS? alias)? | qualifiedShorthand
     ;
 
 top
@@ -125,12 +126,13 @@ tableReference
     ;
 
 tableFactor
-    : tableName (AS? alias)? | subquery AS? alias columnNames? | LP_ 
tableReferences RP_
+    : tableName (AS? alias)? | subquery AS? alias columnNames? | expr (AS? 
alias) ? | LP_ tableReferences RP_
     ;
 
 joinedTable
     : NATURAL? ((INNER | CROSS)? JOIN) tableFactor joinSpecification?
     | NATURAL? (LEFT | RIGHT | FULL) OUTER? JOIN tableFactor joinSpecification?
+    | (CROSS | OUTER) APPLY tableFactor joinSpecification?
     ;
 
 joinSpecification
diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4
index 3f259ff7491..a732140da20 100644
--- a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4
+++ b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/Literals.g4
@@ -24,7 +24,7 @@ IDENTIFIER_
     ;
 
 DELIMITED_IDENTIFIER_
-    : (LBT_ | DQ_) [a-zA-Z0-9@$#_,.\\/\u0080-\uFFFF ]+ (DQ_ | RBT_)
+    : (LBT_ | DQ_) [a-zA-Z0-9@$#_,.\-\\/\u0080-\uFFFF ]+ (DQ_ | RBT_)
     ;
 
 STRING_
diff --git 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
index b942380b097..9aabc67b9b7 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
+++ 
b/parser/sql/dialect/sqlserver/src/main/antlr4/imports/sqlserver/SQLServerKeyword.g4
@@ -1910,3 +1910,7 @@ WITHOUT_ARRAY_WRAPPER
 XMLNAMESPACES
     : X M L N A M E S P A C E S
     ;
+
+APPLY
+    : A P P L Y
+    ;
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 0e50e554efe..efe46ed1b7f 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
@@ -112,6 +112,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.enums.AggregationType;
 import org.apache.shardingsphere.sql.parser.sql.common.enums.JoinType;
 import org.apache.shardingsphere.sql.parser.sql.common.enums.OrderDirection;
 import 
org.apache.shardingsphere.sql.parser.sql.common.enums.ParameterMarkerType;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.SQLSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.constraint.ConstraintSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexNameSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.ddl.index.IndexSegment;
@@ -172,6 +173,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.Sub
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableNameSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.TableSegment;
 import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtils;
+import 
org.apache.shardingsphere.sql.parser.sql.common.segment.generic.table.FunctionTableSegment;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.collection.CollectionValue;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import 
org.apache.shardingsphere.sql.parser.sql.common.value.keyword.KeywordValue;
@@ -1204,8 +1206,8 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
         }
         if (projection instanceof BinaryOperationExpression) {
             BinaryOperationExpression binaryExpression = 
(BinaryOperationExpression) projection;
-            int startIndex = binaryExpression.getStartIndex();
-            int stopIndex = null == alias ? binaryExpression.getStopIndex() : 
alias.getStopIndex();
+            int startIndex = getStartIndexWithAlias(binaryExpression, alias);
+            int stopIndex = getStopIndexWithAlias(binaryExpression, alias);
             ExpressionProjectionSegment result = new 
ExpressionProjectionSegment(startIndex, stopIndex, binaryExpression.getText(), 
binaryExpression);
             result.setAlias(alias);
             return result;
@@ -1216,12 +1218,19 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
             return projection;
         }
         LiteralExpressionSegment column = (LiteralExpressionSegment) 
projection;
-        ExpressionProjectionSegment result = null == alias ? new 
ExpressionProjectionSegment(column.getStartIndex(), column.getStopIndex(), 
String.valueOf(column.getLiterals()), column)
-                : new ExpressionProjectionSegment(column.getStartIndex(), 
ctx.alias().stop.getStopIndex(), String.valueOf(column.getLiterals()), column);
+        ExpressionProjectionSegment result = new 
ExpressionProjectionSegment(getStartIndexWithAlias(column, alias), 
getStopIndexWithAlias(column, alias), String.valueOf(column.getLiterals()), 
column);
         result.setAlias(alias);
         return result;
     }
     
+    private int getStartIndexWithAlias(final SQLSegment sqlSegment, final 
AliasSegment alias) {
+        return null != alias && alias.getStartIndex() < 
sqlSegment.getStartIndex() ? alias.getStartIndex() : sqlSegment.getStartIndex();
+    }
+    
+    private int getStopIndexWithAlias(final SQLSegment sqlSegment, final 
AliasSegment alias) {
+        return null != alias && alias.getStopIndex() > 
sqlSegment.getStopIndex() ? alias.getStopIndex() : sqlSegment.getStopIndex();
+    }
+    
     @Override
     public ASTNode visitFromClause(final FromClauseContext ctx) {
         return visit(ctx.tableReferences());
@@ -1259,6 +1268,14 @@ public abstract class SQLServerStatementVisitor extends 
SQLServerStatementBaseVi
             }
             return result;
         }
+        if (null != ctx.expr()) {
+            ExpressionSegment exprSegment = (ExpressionSegment) 
visit(ctx.expr());
+            FunctionTableSegment result = new 
FunctionTableSegment(exprSegment.getStartIndex(), exprSegment.getStopIndex(), 
exprSegment);
+            if (null != ctx.alias()) {
+                result.setAlias((AliasSegment) visit(ctx.alias()));
+            }
+            return result;
+        }
         return visit(ctx.tableReferences());
     }
     
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
index e9fb6ef11ae..3a72c3660e0 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ColumnProjectionSegment.java
@@ -60,12 +60,12 @@ public final class ColumnProjectionSegment implements 
ProjectionSegment, AliasAv
     
     @Override
     public int getStartIndex() {
-        return column.getStartIndex();
+        return null != alias && alias.getStartIndex() < column.getStartIndex() 
? alias.getStartIndex() : column.getStartIndex();
     }
     
     @Override
     public int getStopIndex() {
-        return null == alias ? column.getStopIndex() : alias.getStopIndex();
+        return null != alias && alias.getStopIndex() > column.getStopIndex() ? 
alias.getStopIndex() : column.getStopIndex();
     }
     
     /**
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
index 2373529a8e3..9b171ecff9f 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/dml/item/ExpressionProjectionSegment.java
@@ -83,8 +83,13 @@ public final class ExpressionProjectionSegment implements 
ProjectionSegment, Com
         return alias;
     }
     
+    @Override
+    public int getStartIndex() {
+        return null != alias && alias.getStartIndex() < startIndex ? 
alias.getStartIndex() : startIndex;
+    }
+    
     @Override
     public int getStopIndex() {
-        return null == alias ? stopIndex : alias.getStopIndex();
+        return null != alias && alias.getStopIndex() > stopIndex ? 
alias.getStopIndex() : stopIndex;
     }
 }
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 c8a4565dc46..0baf66a99b8 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -2900,6 +2900,7 @@
             </from>
         </select>
     </insert>
+
     <insert sql-case-id="insert_with_nchar_1">
         <table name="T1" start-index="12" stop-index="17">
             <owner name="dbo" start-index="12" stop-index="14" />
@@ -2916,6 +2917,7 @@
             </value>
         </values>
     </insert>
+
     <insert sql-case-id="insert_with_nchar_2">
         <table name="T1" start-index="12" stop-index="17">
             <owner name="dbo" start-index="12" stop-index="14" />
@@ -2932,6 +2934,7 @@
             </value>
         </values>
     </insert>
+
     <insert sql-case-id="insert_with_nchar_3">
         <table name="T1" start-index="12" stop-index="17">
             <owner name="dbo" start-index="12" stop-index="14" />
@@ -2948,6 +2951,7 @@
             </value>
         </values>
     </insert>
+
     <insert sql-case-id="insert_with_data_base_name">
         <table name="VariableTest" start-index="12" stop-index="46">
             <owner name="dbo" start-index="31" stop-index="33">
@@ -2965,4 +2969,40 @@
             </value>
         </values>
     </insert>
+
+    <insert sql-case-id="insert_with_batch_nchar">
+        <table name="Employees" start-index="12" stop-index="31">
+            <owner name="TestSchema" start-index="12" stop-index="21"/>
+        </table>
+        <columns start-index="33" stop-index="48">
+            <column name="Name" start-index="34" stop-index="37"/>
+            <column name="Location" start-index="40" stop-index="47"/>
+        </columns>
+        <values>
+            <value>
+                <assignment-value>
+                    <literal-expression value="Jared" start-index="58" 
stop-index="65"/>
+                </assignment-value>
+                <assignment-value>
+                    <literal-expression value="Australia" start-index="69" 
stop-index="80"/>
+                </assignment-value>
+            </value>
+            <value>
+                <assignment-value>
+                    <literal-expression value="Nikita" start-index="85" 
stop-index="93"/>
+                </assignment-value>
+                <assignment-value>
+                    <literal-expression value="India" start-index="96" 
stop-index="103"/>
+                </assignment-value>
+            </value>
+            <value>
+                <assignment-value>
+                    <literal-expression value="Tom" start-index="108" 
stop-index="113"/>
+                </assignment-value>
+                <assignment-value>
+                    <literal-expression value="Germany" start-index="116" 
stop-index="125"/>
+                </assignment-value>
+            </value>
+        </values>
+    </insert>
 </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 859271a97e1..8ecae2c21f6 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -7681,4 +7681,129 @@
             </expression-projection>
         </projections>
     </select>
+
+    <select sql-case-id="select_with_count_temp_table">
+        <from>
+            <simple-table name="#Test" start-index="41" stop-index="45" />
+        </from>
+        <projections start-index="7" stop-index="34">
+            <aggregation-projection type="COUNT" expression="COUNT(*)" 
start-index="7" stop-index="14" alias="Number of rows"/>
+        </projections>
+    </select>
+
+    <select sql-case-id="select_with_bracket_alias">
+        <from>
+            <join-table join-type="INNER">
+                <left>
+                    <simple-table name="dm_xe_objects" alias="obj1" 
start-index="139" stop-index="163">
+                        <owner name="sys" start-index="139" stop-index="141"/>
+                    </simple-table>
+                </left>
+                <right>
+                    <simple-table name="dm_xe_object_columns" alias="col2"  
start-index="176" stop-index="207">
+                        <owner name="sys" start-index="176" stop-index="178"/>
+                    </simple-table>
+                </right>
+                <on-condition>
+                    <binary-operation-expression start-index="212" 
stop-index="239">
+                        <left>
+                            <column name="object_name" start-index="212" 
stop-index="227">
+                                <owner name="col2" start-index="212" 
stop-index="215"/>
+                            </column>
+                        </left>
+                        <operator>=</operator>
+                        <right>
+                            <column name="name" start-index="231" 
stop-index="239">
+                                <owner name="obj1" start-index="231" 
stop-index="234"/>
+                            </column>
+                        </right>
+                    </binary-operation-expression>
+                </on-condition>
+            </join-table>
+        </from>
+        <projections start-index="7" stop-index="132">
+            <column-projection name="name" alias="XEvent-name" start-index="7" 
stop-index="32">
+                <owner name="obj1" start-index="7" stop-index="10"/>
+            </column-projection>
+            <column-projection name="name" alias="XEvent-column" 
start-index="35" stop-index="62">
+                <owner name="col2" start-index="35" stop-index="38"/>
+            </column-projection>
+            <column-projection name="description" alias="Descr-name" 
start-index="65" stop-index="96">
+                <owner name="obj1" start-index="65" stop-index="68"/>
+            </column-projection>
+            <column-projection name="description" alias="Descr-column" 
start-index="99" stop-index="132">
+                <owner name="col2" start-index="99" stop-index="102"/>
+            </column-projection>
+        </projections>
+        <order-by>
+            <column-item name="name" start-index="250" stop-index="258">
+                <owner name="obj1" start-index="250" stop-index="253"/>
+            </column-item>
+            <column-item name="name" start-index="261" stop-index="269">
+                <owner name="col2" start-index="261" stop-index="264"/>
+            </column-item>
+        </order-by>
+    </select>
+
+    <select sql-case-id="select_with_cross_apply">
+        <from>
+            <join-table join-type="CROSS">
+                <left>
+                    <simple-table name="dm_exec_requests" alias="r" 
start-index="122" stop-index="143">
+                        <owner name="sys" start-index="122" stop-index="124"/>
+                    </simple-table>
+                </left>
+                <right>
+                    <function-table table-alias="a">
+                        <table-function function-name="sys.dm_exec_sql_text" 
text="sys.dm_exec_sql_text(r.sql_handle)"/>
+                    </function-table>
+                </right>
+            </join-table>
+        </from>
+        <projections start-index="7" stop-index="115">
+            <column-projection name="text" alias="query" start-index="7" 
stop-index="20">
+                <owner name="a" start-index="15" stop-index="15"/>
+            </column-projection>
+            <column-projection name="start_time" start-index="23" 
stop-index="32"/>
+            <column-projection name="percent_complete" start-index="35" 
stop-index="50"/>
+            <expression-projection 
text="dateadd(second,estimated_completion_time/1000, getdate())" alias="eta" 
start-index="53" stop-index="115">
+                <expr>
+                    <function function-name="dateadd" 
text="dateadd(second,estimated_completion_time/1000, getdate())" 
start-index="59" stop-index="115">
+                        <parameter>
+                            <column name="second" start-index="67" 
stop-index="72"/>
+                        </parameter>
+                        <parameter>
+                            <binary-operation-expression start-index="74" 
stop-index="103" text="estimated_completion_time/1000">
+                                <left>
+                                    <column name="estimated_completion_time" 
start-index="74" stop-index="98"/>
+                                </left>
+                                <operator>/</operator>
+                                <right>
+                                    <literal-expression value="1000" 
start-index="100" stop-index="103"/>
+                                </right>
+                            </binary-operation-expression>
+                        </parameter>
+                        <parameter>
+                            <function function-name="getdate" text="getdate()" 
start-index="106" stop-index="114"/>
+                        </parameter>
+                    </function>
+                </expr>
+            </expression-projection>
+        </projections>
+        <where start-index="194" stop-index="229">
+            <expr>
+                <binary-operation-expression text="r.command = 'RESTORE 
DATABASE'" start-index="200" stop-index="229">
+                    <left>
+                        <column name="command" start-index="200" 
stop-index="208">
+                            <owner name="r" start-index="200" 
stop-index="200"/>
+                        </column>
+                    </left>
+                    <operator>=</operator>
+                    <right>
+                        <literal-expression value="RESTORE DATABASE" 
start-index="212" stop-index="229"/>
+                    </right>
+                </binary-operation-expression>
+            </expr>
+        </where>
+    </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 290b3cc1226..7bca7b58766 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
@@ -106,5 +106,6 @@
     <sql-case id="insert_with_nchar_1" value="INSERT INTO dbo.T1 VALUES (1, 
N'Natalia')" db-types="SQLServer"/>
     <sql-case id="insert_with_nchar_2" value="INSERT INTO dbo.T1 VALUES (2, 
N'Mark')" db-types="SQLServer"/>
     <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-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 885b7d41f48..57c41287696 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
@@ -232,4 +232,7 @@
     <sql-case id="select_with_user_updatable_columns" value="SELECT 
column_name, updatable FROM user_updatable_columns WHERE table_name = 
'LOCATIONS_VIEW' ORDER BY column_name, updatable" db-types="Oracle" />
     <sql-case id="select_with_script_variables" value="SELECT x.$(ColumnName) 
FROM Person.Person x WHERE x.BusinessEntityID > 5" db-types="SQLServer" />
     <sql-case id="select_not_expression" value="select !0,NOT 0=1,!(0=0),1 AND 
1,1 &amp;&amp; 0,0 OR 1,1 || NULL, 1=1 or 1=1 and 1=0" db-types="MySQL" />
+    <sql-case id="select_with_count_temp_table" value="SELECT COUNT(*) AS 
[Number of rows] FROM #Test" db-types="SQLServer"/>
+    <sql-case id="select_with_bracket_alias" value="SELECT obj1.name AS 
[XEvent-name], col2.name AS [XEvent-column], obj1.description AS [Descr-name], 
col2.description AS [Descr-column] FROM sys.dm_xe_objects AS obj1 INNER JOIN 
sys.dm_xe_object_columns AS col2 ON col2.object_name = obj1.name ORDER BY 
obj1.name, col2.name" db-types="SQLServer"/>
+    <sql-case id="select_with_cross_apply" value="SELECT query = a.text, 
start_time, percent_complete, eta = 
dateadd(second,estimated_completion_time/1000, getdate()) FROM 
sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a WHERE 
r.command = 'RESTORE DATABASE'" db-types="SQLServer"/>
 </sql-cases>

Reply via email to