1
Fork 0

minor enhancements for sqlserver dialect

This commit is contained in:
Bartosz Wójcik 2021-12-01 21:33:02 +01:00
parent 05481371dd
commit efd4dea6ff
6 changed files with 36 additions and 3 deletions

View file

@ -88,6 +88,8 @@ Data types to represent different dialect options
> ,diPostgresSymbols :: Bool > ,diPostgresSymbols :: Bool
> -- | allow sql server style symbols > -- | allow sql server style symbols
> ,diSqlServerSymbols :: Bool > ,diSqlServerSymbols :: Bool
> -- | allow sql server style forCONVERT function in format @CONVERT(data_type(length), expression, style)@
> ,diConvertFunction :: Bool
> } > }
> deriving (Eq,Show,Read,Data,Typeable) > deriving (Eq,Show,Read,Data,Typeable)
@ -109,6 +111,7 @@ Data types to represent different dialect options
> ,diEString = False > ,diEString = False
> ,diPostgresSymbols = False > ,diPostgresSymbols = False
> ,diSqlServerSymbols = False > ,diSqlServerSymbols = False
> ,diConvertFunction = False
> } > }
> -- | mysql dialect > -- | mysql dialect
@ -133,7 +136,9 @@ Data types to represent different dialect options
> sqlserver = ansi2011 {diSquareBracketQuotedIden = True > sqlserver = ansi2011 {diSquareBracketQuotedIden = True
> ,diAtIdentifier = True > ,diAtIdentifier = True
> ,diHashIdentifier = True > ,diHashIdentifier = True
> ,diSqlServerSymbols = True } > ,diOdbc = True
> ,diSqlServerSymbols = True
> ,diConvertFunction = True}
> addLimit :: Dialect -> Dialect > addLimit :: Dialect -> Dialect
> addLimit d = d {diKeywords = "limit": diKeywords d > addLimit d = d {diKeywords = "limit": diKeywords d

View file

@ -597,6 +597,16 @@ cast: cast(expr as type)
> parens (Cast <$> scalarExpr > parens (Cast <$> scalarExpr
> <*> (keyword_ "as" *> typeName)) > <*> (keyword_ "as" *> typeName))
=== convert
convertSqlServer: SqlServer dialect CONVERT(data_type(length), expression, style)
> convertSqlServer :: Parser ScalarExpr
> convertSqlServer = guardDialect diConvertFunction
> *> keyword_ "convert" *>
> parens (Convert <$> typeName <*> (comma *> scalarExpr)
> <*> optionMaybe (comma *> unsignedInteger))
=== exists, unique === exists, unique
subquery expression: subquery expression:
@ -1175,6 +1185,7 @@ documenting/fixing.
> ,parensExpr > ,parensExpr
> ,caseExpr > ,caseExpr
> ,cast > ,cast
> ,convertSqlServer
> ,arrayCtor > ,arrayCtor
> ,multisetCtor > ,multisetCtor
> ,nextValueFor > ,nextValueFor
@ -2027,7 +2038,7 @@ It is only allowed when all the strings are quoted with ' atm.
> L.Identifier q p | map toLower p `notElem` blackList -> Just (q,p) > L.Identifier q p | map toLower p `notElem` blackList -> Just (q,p)
> _ -> Nothing) > _ -> Nothing)
> unquotedIdentifierTok :: [String] -> Maybe String -> Parser String > unquotedIdentifierTok :: [String] -> Maybe String -> Parser String
> unquotedIdentifierTok blackList kw = mytoken (\tok -> > unquotedIdentifierTok blackList kw = mytoken (\tok ->
> case (kw,tok) of > case (kw,tok) of
> (Nothing, L.Identifier Nothing p) | map toLower p `notElem` blackList -> Just p > (Nothing, L.Identifier Nothing p) | map toLower p `notElem` blackList -> Just p

View file

@ -167,6 +167,9 @@
> -- | cast(a as typename) > -- | cast(a as typename)
> | Cast ScalarExpr TypeName > | Cast ScalarExpr TypeName
> -- | convert expression to given datatype @CONVERT(data_type(length), expression, style)@
> | Convert TypeName ScalarExpr (Maybe Integer)
> -- | case expression. both flavours supported > -- | case expression. both flavours supported
> | Case > | Case
> {caseTest :: Maybe ScalarExpr -- ^ test value > {caseTest :: Maybe ScalarExpr -- ^ test value

View file

@ -1,3 +1,5 @@
0.6.1 added odbc handling to sqlsqerver dialect
added sqlserver dialect case for convert function
0.6.0 0.6.0
tested with ghc 8.8.1 also tested with ghc 8.8.1 also
change the dialect handling - now a dialect is a bunch of flags change the dialect handling - now a dialect is a bunch of flags

View file

@ -1,7 +1,7 @@
cabal-version: 2.2 cabal-version: 2.2
name: simple-sql-parser name: simple-sql-parser
version: 0.6.0 version: 0.6.1
synopsis: A parser for SQL. synopsis: A parser for SQL.
description: description:

12
stack.yaml.lock Normal file
View file

@ -0,0 +1,12 @@
# This file was autogenerated by Stack.
# You should not edit this file by hand.
# For more information, please see the documentation at:
# https://docs.haskellstack.org/en/stable/lock_files
packages: []
snapshots:
- completed:
size: 500539
url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/13/27.yaml
sha256: 690db832392afe55733b4c7023fd29b1b1c660ee42f1fb505b86b07394ca994e
original: lts-13.27