The typedquery package

[Tags:bsd3, library]

Base package for parsing queries


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.0.3
Dependencies aeson, base (>=4.5 && <5), bytestring, haskell-src-exts, haskell-src-meta, parsec, rawstring-qm, template-haskell, text, transformers [details]
License BSD3
Copyright ©2014-2015 Marcin Tolysz
Author Marcin Tolysz
Maintainer tolysz@gmail.com
Stability Unknown
Category Database
Home page https://github.com/tolysz/typedquery
Uploaded Tue Dec 1 19:06:32 UTC 2015 by tolysz
Distributions NixOS:0.1.0.3
Downloads 525 total (4 in the last 30 days)
Votes
0 []
Status Docs not available [build log]
Last success reported on 2016-11-29 [all 3 reports]

Modules

  • Database
    • TypedQuery
      • Database.TypedQuery.SQL
      • Database.TypedQuery.SQLParser
      • Database.TypedQuery.Types

Flags

NameDescriptionDefaultType
debug-typed-queriesEnable debug supportDisabledAutomatic

Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info

Downloads

Maintainer's Corner

For package maintainers and hackage trustees

Readme for typedquery

Readme for typedquery-0.1.0.3

Coverage Status Build Status Latest Version

typedquery

Parser for SQL augmented with types

Till it finalised I would recomend installing it: with cabal -f debug-typed-queries just to see what is gonig on. As the SQL parser is not complete, and will need a major lift to make it readable and sane... however it works fine for all queries I need.

This package provides base parsing facilities for possibly all -simple database packages converting them into -simpel-typed

example: https://github.com/tolysz/sqlite-simple-typed/blob/master/example/src/Main.hs

The basic idea is to start using SQL again, but use comemnts (--) to hide haskell annotation.

This started as QuasiQuotes excercise with the TH inpired printf.

  • genJsonQuery produces [Value]
  • genTypedQuery produces [(T1,...,Tn)] tuples, [T] or () all depending on the SQL query

If you do not provide value (or a mean to get on inside query you need to give it outside.

They do the same:

$(genJsonQuery "SET SESSION group_concat_max_len = ? ") conn (10000 :: Int)
$(genJsonQuery "SET SESSION group_concat_max_len = ? -- Int ") conn 10000
$(genJsonQuery "SET SESSION group_concat_max_len = ? -- Int  -- < 1000 ") conn
$(genJsonQuery "SET SESSION group_concat_max_len = ? -- < (1000 :: Int) ") conn

There is a basic syntax, and the base idea is to have a nice easy for eye syntax. It fires the correct execute or query with or without _ depending on the actual SQL syntax

The parser is not complete, I will try to add as many issues there are and try to fix it.

Adnotations start with -- as otherwise HeidiSQL was complaining, then > < ~ or just text.

| syntax | equivalent | ------------------------- | ------------------------------ | bal -- Type | (\v -> v :: Bla) | | bla -- > f | (\v -> f bla ) | | bla -- Type -- > f | (\v -> (f bla):: Type ) | | ? -- Type -- < var | ?? | | ? -- < var | ?? | | ? -- < var | ?? | | ? -- ~ verbatim | ?? |

Eg.

$(genJsonQuery [qq| insert into some_table
  ( timeAsSQLfunction           -- ~ now ()
  , someInputfromAesonViaLens   -- Int  -- < v ^? (key "coolValue" . _Integral) ^. non 3 
  , someUserName                -- Text -- < someNameFromContext
  ) |]) conn

Translates to

execute conn [qq| insert into some_table
      ( timeAsSQLfunction, someInputfromAesonViaLens, someUserName )
      values ( now (), ?, ?) |] 
        [( (v ^? (key "coolValue" . _Integral) ^. non 3 ) :: Int, someNameFromContext Text)]