sqltopurs-node

1.0.0 • Public • Published

Puregres

Converts sql into purescript code. Similar to https://github.com/rightfold/sqltopurs or https://github.com/FrigoEU/sqltopurs but written in node. Create a .env file in the root and add you db username eg. DB_USER=my_user_name

Run the tests and look in the test/Queries directory to see how it works: npm t

Example

This sql file called Query/Select/SelectWithSubQuery.sql

SELECT order_id,
       user_id
FROM orders
WHERE user_id =
    (SELECT user_id
     FROM users
     WHERE email = $1)

Will be converted to a purescript file like this:

module Query.Select.SelectWithSubQuery (selectWithSubQuery, SelectWithSubQueryRow) where

import Prelude
import DB (query)
import Control.Monad.Aff (Aff)
import Data.Foreign (Foreign, readNull)
import Data.Foreign.Class (decode)
import Data.Foreign.Index ((!))
import Database.Postgres.SqlValue (toSql)
import Data.Maybe (Maybe)
import Database.Postgres (DB)
import Data.Traversable (traverse)
import Puregres.UnsafeRemoveFromFail (unsafeRemoveFromFail)

type SelectWithSubQueryRow =
  { order_id :: Int
  , user_id :: Maybe (Int)
  }

selectWithSubQuery :: forall eff.
  String
  -> Aff (db :: DB | eff) (Array SelectWithSubQueryRow)
selectWithSubQuery email =
  query query_ [toSql email]
  # map (map toRow)
  where
    toRow :: Foreign -> SelectWithSubQueryRow
    toRow f =
      { order_id: unsafeRemoveFromFail $ f ! "order_id" >>= decode
      , user_id: unsafeRemoveFromFail $ f ! "user_id" >>= readNull >>= traverse decode
      }

query_ :: String
query_ = """
SELECT order_id,
       user_id
FROM orders
WHERE user_id =
    (SELECT user_id
     FROM users
     WHERE email = $1)

"""

Readme

Keywords

none

Package Sidebar

Install

npm i sqltopurs-node

Weekly Downloads

1

Version

1.0.0

License

ISC

Unpacked Size

137 kB

Total Files

29

Last publish

Collaborators

  • roryc89