From 09a5275496099ccd559f1645ecb7682f2c7816c1 Mon Sep 17 00:00:00 2001 From: Matthew Lilius Date: Tue, 19 May 2020 20:56:22 -0400 Subject: [PATCH] Added support for simple casts --- src/sqlParser.jison | 5 +++++ src/stringify.js | 8 ++++++++ test/main.test.js | 15 +++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/src/sqlParser.jison b/src/sqlParser.jison index 7cff3e8..7387ee2 100644 --- a/src/sqlParser.jison +++ b/src/sqlParser.jison @@ -50,6 +50,7 @@ IN return 'IN' SOUNDS return 'SOUNDS' LIKE return 'LIKE' ESCAPE return 'ESCAPE' +CAST return 'CAST' REGEXP return 'REGEXP' IS return 'IS' UNKNOWN return 'UNKNOWN' @@ -343,6 +344,9 @@ case_when_else case_when : CASE case_expr_opt when_then_list case_when_else END { $$ = { type: 'CaseWhen', caseExprOpt: $2, whenThenList: $3, else: $4 } } ; +cast + : CAST '(' expr AS IDENTIFIER ')' { $$ = { type: 'Cast', expr: $3, castTo: $5 } } + ; simple_expr_prefix : '+' simple_expr %prec UPLUS { $$ = { type: 'Prefix', prefix: $1, value: $2 } } | '-' simple_expr %prec UMINUS { $$ = { type: 'Prefix', prefix: $1, value: $2 } } @@ -361,6 +365,7 @@ simple_expr | EXISTS '(' selectClause ')' { $$ = { type: 'SubQuery', value: $3, hasExists: true } } | '{' identifier expr '}' { $$ = { type: 'IdentifierExpr', identifier: $2, value: $3 } } | case_when { $$ = $1 } + | cast { $$ = $1 } ; bit_expr : simple_expr { $$ = $1 } diff --git a/src/stringify.js b/src/stringify.js index 57ea74e..a5385ef 100644 --- a/src/stringify.js +++ b/src/stringify.js @@ -225,6 +225,14 @@ Sql.prototype.travelCaseWhen = function(ast) { } this.appendKeyword('end'); }; +Sql.prototype.travelCast = function(ast) { + this.appendKeyword('cast'); + this.append('(', true, true); + this.travel(ast.expr); + this.appendKeyword('as'); + this.append(ast.castTo); + this.append(')', true); +}; Sql.prototype.travelPrefix = function(ast) { this.appendKeyword(ast.prefix); this.travel(ast.value); diff --git a/test/main.test.js b/test/main.test.js index 834d3f1..2151b7c 100644 --- a/test/main.test.js +++ b/test/main.test.js @@ -411,4 +411,19 @@ describe('select grammar support', function() { it('bugfix table alias2', function() { testParser('select a.* from a t1 join b t2 on t1.a = t2.a') }) + + it('CAST support issue #9', function() { + testParser(`select + concat(dsw_cluster_name,',',logic_pod_name) as event_obj, + concat(dsw_cluster_name,',',logic_pod_name, ' PFC STORM. 详情: ', + '流量突跃 ', cast(FLOW_RX_BPS_RATE100 as int), '%(RX)', + '; ', cast(FLOW_TX_BPS_RATE100 as int), '%(TX)', + '; PFC 突增 ', cast(PFC_RX_PPS_RATE*100 as int), '%(RECV)') as brief + from SOURCE_BASIC_EVENT_POD_FLOW_AND_PFC_TREND + where win_end >= '2020-05-19 21:14:12' + and win_end < '2020-05-20 21:14:12' + and PFC_RX_PPS_RATE >= 100 + and (FLOW_RX_BPS_RATE <= -0.2 and FLOW_TX_BPS_RATE <= -0.2) + `) + }) }); pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy