diff --git a/src/Network/Minio/Data.hs b/src/Network/Minio/Data.hs
index b4d12b2..1584e3d 100644
--- a/src/Network/Minio/Data.hs
+++ b/src/Network/Minio/Data.hs
@@ -155,11 +155,13 @@ fromAWSConfigFile = do
bool (throwE "FileNotFound") (return ()) fileExists
ini <- ExceptT $ Ini.readIniFile awsCredsFile
akey <-
- ExceptT $ return $
- Ini.lookupValue "default" "aws_access_key_id" ini
+ ExceptT $
+ return $
+ Ini.lookupValue "default" "aws_access_key_id" ini
skey <-
- ExceptT $ return $
- Ini.lookupValue "default" "aws_secret_access_key" ini
+ ExceptT $
+ return $
+ Ini.lookupValue "default" "aws_secret_access_key" ini
return $ Credentials akey skey
return $ hush credsE
@@ -856,6 +858,9 @@ instance Monoid CSVProp where
mappend (CSVProp a) (CSVProp b) = CSVProp (b <> a)
#endif
+csvPropsList :: CSVProp -> [(Text, Text)]
+csvPropsList (CSVProp h) = sort $ H.toList h
+
defaultCSVProp :: CSVProp
defaultCSVProp = mempty
@@ -929,10 +934,11 @@ type CSVOutputProp = CSVProp
-- | quoteFields is an output serialization parameter
quoteFields :: QuoteFields -> CSVProp
-quoteFields q = CSVProp $ H.singleton "QuoteFields" $
- case q of
- QuoteFieldsAsNeeded -> "ASNEEDED"
- QuoteFieldsAlways -> "ALWAYS"
+quoteFields q = CSVProp $
+ H.singleton "QuoteFields" $
+ case q of
+ QuoteFieldsAsNeeded -> "ASNEEDED"
+ QuoteFieldsAlways -> "ALWAYS"
-- | Represent the QuoteField setting.
data QuoteFields = QuoteFieldsAsNeeded | QuoteFieldsAlways
diff --git a/src/Network/Minio/XmlGenerator.hs b/src/Network/Minio/XmlGenerator.hs
index 8c30426..3efe1b7 100644
--- a/src/Network/Minio/XmlGenerator.hs
+++ b/src/Network/Minio/XmlGenerator.hs
@@ -23,7 +23,6 @@ module Network.Minio.XmlGenerator
where
import qualified Data.ByteString.Lazy as LBS
-import qualified Data.HashMap.Strict as H
import qualified Data.Text as T
import Lib.Prelude
import Network.Minio.Data
@@ -77,8 +76,9 @@ data XNode
toXML :: Text -> XNode -> ByteString
toXML ns node =
- LBS.toStrict $ renderLBS def $
- Document (Prologue [] Nothing []) (xmlNode node) []
+ LBS.toStrict $
+ renderLBS def $
+ Document (Prologue [] Nothing []) (xmlNode node) []
where
xmlNode :: XNode -> Element
xmlNode (XNode name nodes) =
@@ -143,14 +143,14 @@ mkSelectRequest r = LBS.toStrict $ renderLBS def sr
[NodeContent $ show $ srExpressionType r]
),
NodeElement
- ( Element "InputSerialization" mempty
- $ inputSerializationNodes
- $ srInputSerialization r
+ ( Element "InputSerialization" mempty $
+ inputSerializationNodes $
+ srInputSerialization r
),
NodeElement
- ( Element "OutputSerialization" mempty
- $ outputSerializationNodes
- $ srOutputSerialization r
+ ( Element "OutputSerialization" mempty $
+ outputSerializationNodes $
+ srOutputSerialization r
)
]
++ maybe [] reqProgElem (srRequestProgressEnabled r)
@@ -186,11 +186,11 @@ mkSelectRequest r = LBS.toStrict $ renderLBS def sr
]
comprTypeNode Nothing = []
kvElement (k, v) = Element (Name k Nothing Nothing) mempty [NodeContent v]
- formatNode (InputFormatCSV (CSVProp h)) =
+ formatNode (InputFormatCSV c) =
Element
"CSV"
mempty
- (map NodeElement $ map kvElement $ H.toList h)
+ (map NodeElement $ map kvElement $ csvPropsList c)
formatNode (InputFormatJSON p) =
Element
"JSON"
@@ -208,17 +208,17 @@ mkSelectRequest r = LBS.toStrict $ renderLBS def sr
formatNode InputFormatParquet = Element "Parquet" mempty []
outputSerializationNodes (OutputSerializationJSON j) =
[ NodeElement
- ( Element "JSON" mempty
- $ rdElem
- $ jsonopRecordDelimiter j
+ ( Element "JSON" mempty $
+ rdElem $
+ jsonopRecordDelimiter j
)
]
- outputSerializationNodes (OutputSerializationCSV (CSVProp h)) =
+ outputSerializationNodes (OutputSerializationCSV c) =
[ NodeElement $
Element
"CSV"
mempty
- (map NodeElement $ map kvElement $ H.toList h)
+ (map NodeElement $ map kvElement $ csvPropsList c)
]
rdElem Nothing = []
rdElem (Just t) =
diff --git a/test/Network/Minio/XmlGenerator/Test.hs b/test/Network/Minio/XmlGenerator/Test.hs
index d34bcf2..c32852e 100644
--- a/test/Network/Minio/XmlGenerator/Test.hs
+++ b/test/Network/Minio/XmlGenerator/Test.hs
@@ -90,11 +90,12 @@ testMkPutNotificationRequest =
"1"
"arn:aws:sqs:us-west-2:444455556666:s3notificationqueue"
[ObjectCreatedPut]
- ( Filter $ FilterKey $
- FilterRules
- [ FilterRule "prefix" "images/",
- FilterRule "suffix" ".jpg"
- ]
+ ( Filter $
+ FilterKey $
+ FilterRules
+ [ FilterRule "prefix" "images/",
+ FilterRule "suffix" ".jpg"
+ ]
),
NotificationConfig
""
@@ -142,32 +143,32 @@ testMkSelectRequest = mapM_ assertFn cases
<> quoteEscapeCharacter "\""
)
(Just False),
- [r|Select * from S3ObjectSQLGZIP"
-IGNORE","ASNEEDED
-",FALSE|]
+ [r|Select * from S3ObjectSQLGZIP,IGNORE""
+,""ASNEEDED
+FALSE|]
),
- ( setRequestProgressEnabled False
- $ setInputCompressionType CompressionTypeGzip
- $ selectRequest
- "Select * from S3Object"
- documentJsonInput
- (outputJSONFromRecordDelimiter "\n"),
+ ( setRequestProgressEnabled False $
+ setInputCompressionType CompressionTypeGzip $
+ selectRequest
+ "Select * from S3Object"
+ documentJsonInput
+ (outputJSONFromRecordDelimiter "\n"),
[r|Select * from S3ObjectSQLGZIPDOCUMENT
FALSE|]
),
- ( setRequestProgressEnabled False
- $ setInputCompressionType CompressionTypeNone
- $ selectRequest
- "Select * from S3Object"
- defaultParquetInput
- ( outputCSVFromProps $
- quoteFields QuoteFieldsAsNeeded
- <> recordDelimiter "\n"
- <> fieldDelimiter ","
- <> quoteCharacter "\""
- <> quoteEscapeCharacter "\""
- ),
- [r|Select * from S3ObjectSQLNONE"ASNEEDED
-",FALSE|]
+ ( setRequestProgressEnabled False $
+ setInputCompressionType CompressionTypeNone $
+ selectRequest
+ "Select * from S3Object"
+ defaultParquetInput
+ ( outputCSVFromProps $
+ quoteFields QuoteFieldsAsNeeded
+ <> recordDelimiter "\n"
+ <> fieldDelimiter ","
+ <> quoteCharacter "\""
+ <> quoteEscapeCharacter "\""
+ ),
+ [r|Select * from S3ObjectSQLNONE,""ASNEEDED
+FALSE|]
)
]