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
Language/SQL/SimpleSQL

View file

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

View file

@ -597,6 +597,16 @@ cast: cast(expr as type)
> parens (Cast <$> scalarExpr
> <*> (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
subquery expression:
@ -1175,6 +1185,7 @@ documenting/fixing.
> ,parensExpr
> ,caseExpr
> ,cast
> ,convertSqlServer
> ,arrayCtor
> ,multisetCtor
> ,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)
> _ -> Nothing)
> unquotedIdentifierTok :: [String] -> Maybe String -> Parser String
> unquotedIdentifierTok :: [String] -> Maybe String -> Parser String
> unquotedIdentifierTok blackList kw = mytoken (\tok ->
> case (kw,tok) of
> (Nothing, L.Identifier Nothing p) | map toLower p `notElem` blackList -> Just p

View file

@ -167,6 +167,9 @@
> -- | cast(a as 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
> {caseTest :: Maybe ScalarExpr -- ^ test value