hw-json 1.1.0.0 → 1.1.0.1
raw patch · 5 files changed
+100/−3 lines, 5 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- app/App/Commands.hs +2/−0
- app/App/Commands/Count.hs +85/−0
- app/App/Commands/Types.hs +10/−1
- hw-json.cabal +3/−1
- src/HaskellWorks/Data/Json/Backend/Standard/Fast.hs +0/−1
app/App/Commands.hs view
@@ -1,5 +1,6 @@ module App.Commands where +import App.Commands.Count import App.Commands.CreateIndex import App.Commands.Demo import Data.Semigroup ((<>))@@ -12,4 +13,5 @@ commandsGeneral = subparser $ mempty <> commandGroup "Commands:" <> cmdCreateIndex+ <> cmdCount <> cmdDemo
+ app/App/Commands/Count.hs view
@@ -0,0 +1,85 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE TypeApplications #-}++module App.Commands.Count+ ( cmdCount+ ) where++import Control.Lens+import Control.Monad+import Data.Generics.Product.Any+import Data.Semigroup ((<>))+import Data.Word+import HaskellWorks.Data.FromForeignRegion+import HaskellWorks.Data.Json.Backend.Standard.Cursor.Generic+import HaskellWorks.Data.Json.LightJson+import HaskellWorks.Data.Json.Query+import HaskellWorks.Data.MQuery+import HaskellWorks.Data.MQuery.Micro+import HaskellWorks.Data.RankSelect.CsPoppy+import HaskellWorks.Data.TreeCursor+import Options.Applicative hiding (columns)++import qualified App.Commands.Types as Z+import qualified Data.ByteString as BS+import qualified Data.ByteString.Internal as BSI+import qualified Data.DList as DL+import qualified Data.Vector.Storable as DVS+import qualified HaskellWorks.Data.BalancedParens.RangeMin as RM+import qualified System.IO.MMap as IO++siblings :: GenericCursor BSI.ByteString CsPoppy (RM.RangeMin CsPoppy) -> [GenericCursor BSI.ByteString CsPoppy (RM.RangeMin CsPoppy)]+siblings c = c:cs+ where cs = case nextSibling c of+ Just d -> siblings d+ Nothing -> []++runCount :: Z.CountOptions -> IO ()+runCount opts = do+ let inputFile = opts ^. the @"inputFile"+ let ibIndex = opts ^. the @"ibIndex"+ let bpIndex = opts ^. the @"bpIndex"+ let expression = opts ^. the @"expression"+ jsonFr <- IO.mmapFileForeignPtr inputFile IO.ReadOnly Nothing+ jsonIbFr <- IO.mmapFileForeignPtr ibIndex IO.ReadOnly Nothing+ jsonBpFr <- IO.mmapFileForeignPtr bpIndex IO.ReadOnly Nothing+ let jsonBs = fromForeignRegion jsonFr :: BS.ByteString+ let jsonIb = fromForeignRegion jsonIbFr :: DVS.Vector Word64+ let jsonBp = fromForeignRegion jsonBpFr :: DVS.Vector Word64++ let cursor = GenericCursor jsonBs (makeCsPoppy jsonIb) (RM.mkRangeMin (makeCsPoppy jsonBp)) 1++ let q = MQuery (DL.fromList $ fmap lightJsonAt (siblings cursor))++ putPretty $ q >>= (entry >=> named expression) & count++ return ()++optsCount :: Parser Z.CountOptions+optsCount = Z.CountOptions+ <$> strOption+ ( long "input"+ <> short 'i'+ <> help "Input JSON file"+ <> metavar "FILE"+ )+ <*> strOption+ ( long "ib-index"+ <> help "IB index"+ <> metavar "FILE"+ )+ <*> strOption+ ( long "bp-index"+ <> help "BP index"+ <> metavar "FILE"+ )+ <*> option auto+ ( long "expression"+ <> help "JSON expression"+ <> metavar "EXPRESSION"+ )++cmdCount :: Mod CommandFields (IO ())+cmdCount = command "count" $ flip info idm $ runCount <$> optsCount
app/App/Commands/Types.hs view
@@ -2,10 +2,12 @@ {-# LANGUAGE DuplicateRecordFields #-} module App.Commands.Types- ( CreateIndexOptions(..)+ ( CountOptions(..)+ , CreateIndexOptions(..) , DemoOptions(..) ) where +import Data.Text (Text) import GHC.Generics data CreateIndexOptions = CreateIndexOptions@@ -19,4 +21,11 @@ data DemoOptions = DemoOptions { filePath :: FilePath , method :: FilePath+ } deriving (Eq, Show, Generic)++data CountOptions = CountOptions+ { inputFile :: FilePath+ , ibIndex :: FilePath+ , bpIndex :: FilePath+ , expression :: Text } deriving (Eq, Show, Generic)
hw-json.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.2 name: hw-json-version: 1.1.0.0+version: 1.1.0.1 synopsis: Memory efficient JSON parser description: Memory efficient JSON parser. Please see README.md category: Data@@ -166,6 +166,7 @@ , mmap , optparse-applicative , semigroups+ , text , vector main-is: Main.hs hs-source-dirs: app@@ -174,6 +175,7 @@ other-modules: App.Commands App.Commands.CreateIndex+ App.Commands.Count App.Commands.Demo App.Commands.Types
src/HaskellWorks/Data/Json/Backend/Standard/Fast.hs view
@@ -15,7 +15,6 @@ import qualified Data.ByteString as BS import qualified Data.ByteString.Char8 as BSC import qualified Data.ByteString.Internal as BSI-import qualified HaskellWorks.Data.BalancedParens as BP import qualified HaskellWorks.Data.BalancedParens.RangeMin as RM import qualified HaskellWorks.Data.FromForeignRegion as F import qualified HaskellWorks.Data.Json.Internal.Backend.Standard.IbBp as J