packages feed

sqlc-hs-0.2.0.0: templates/query.hs.jinja

{- This file was auto-generated from {{sourceFile}} by sqlc-hs. -}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
module {{moduleName}} where

{% if generatePostgresql %}
import {{ internalModuleName }} (Query(..), Enum, Params, Result)
import qualified Database.PostgreSQL.Simple
import qualified Database.PostgreSQL.Simple.FromRow
import qualified Database.PostgreSQL.Simple.ToField
import qualified Database.PostgreSQL.Simple.ToRow
{% endif %}
{% if generateSqlite %}
import {{ internalModuleName }} (Query(..), Enum, Params, Result)
import qualified Database.SQLite.Simple.FromRow
import qualified Database.SQLite.Simple.ToField
import qualified Database.SQLite.Simple.ToRow
{% endif %}
{% if generateMysql %}
import {{ internalModuleName }} (Query(..), Enum, Params, Result)
import qualified Database.MySQL.Simple.Param
import qualified Database.MySQL.Simple.QueryParams
import qualified Database.MySQL.Simple.QueryResults
import qualified Database.MySQL.Simple.Result
{% endif %}

{% for import in moduleImports  %}
import qualified {{ import.value }}
{% endfor %}

{{ haskellQueryName }} :: Query {{ escapedQueryName }} {{ escapedCommand }}
{{ haskellQueryName }} = Query {{ escapedSql }}

data instance Params {{ escapedQueryName }} = {{ haskellParamsName }}
  {
  {% for param in parameterColumns %}
    {{ param.value.name }} :: {{ param.value.type }}{% if !param.last %},{% endif %}
  {% endfor %}
  }

data instance Result {{ escapedQueryName }} = {{ haskellResultName }}
  {
  {% for column in resultColumns  %}
    {{ column.value.name }} :: !({{ column.value.type }}){% if !column.last %},{% endif %}
  {% endfor %}
  }

{% if generatePostgresql %}
instance Database.PostgreSQL.Simple.ToRow.ToRow (Params {{ escapedQueryName }}) where
  toRow {{ haskellParamsName }}{% if parameterColumns | empty %}{}{% else %}{..}{% endif%} =
    [ {% for param in queryColumns %}
      {% if param.value.slice %}
      {% if param.value.notNull %}
      Database.PostgreSQL.Simple.ToField.toField (Database.PostgreSQL.Simple.In (Data.Foldable.toList {{ param.value.name }})){% if !param.last %}, {% endif %}
      {% else %}
      Database.PostgreSQL.Simple.ToField.toField (fmap (Database.PostgreSQL.Simple.In . Data.Foldable.toList) {{ param.value.name }}){% if !param.last %}, {% endif %}
      {% endif %}
      {% else %}
      Database.PostgreSQL.Simple.ToField.toField {{ param.value.name }}{% if !param.last %}, {% endif %}
      {% endif %}
      {% endfor %}
    ]

instance Database.PostgreSQL.Simple.FromRow.FromRow (Result {{ escapedQueryName }}) where
  fromRow =
    pure {{ haskellResultName }}
    {% for column in resultColumns %}
      <*> Database.PostgreSQL.Simple.FromRow.field
    {% endfor %}
{% endif %}

{% if generateSqlite %}
instance Database.SQLite.Simple.ToRow.ToRow (Params {{ escapedQueryName }}) where
  toRow {{ haskellParamsName }}{% if parameterColumns | empty %}{}{% else %}{..}{% endif%} =
    [ {% for param in queryColumns %}
      Database.SQLite.Simple.ToField.toField {{ param.value.name }}{% if !param.last %}, {% endif %}
      {% endfor %}
    ]

instance Database.SQLite.Simple.FromRow.FromRow (Result {{ escapedQueryName }}) where
  fromRow =
    pure {{ haskellResultName }}
    {% for column in resultColumns %}
      <*> Database.SQLite.Simple.FromRow.field
    {% endfor %}
{% endif %}

{% if generateMysql %}
instance Database.MySQL.Simple.QueryParams.QueryParams (Params {{ escapedQueryName }}) where
  renderParams {{ haskellParamsName }}{% if parameterColumns | empty %}{}{% else %}{..}{% endif%} =
    [ {% for param in queryColumns %}
      Database.MySQL.Simple.Param.render {{ param.value.name }}{% if !param.last %}, {% endif %}
      {% endfor %}
    ]

instance Database.MySQL.Simple.QueryResults.QueryResults (Result {{ escapedQueryName }}) where
  convertResults [{% for column in resultColumns %}a_{{ column.index }}{% if !column.last %}, {% endif %}{% endfor%}] [{% for column in resultColumns %}b_{{ column.index }}{% if !column.last %}, {% endif %}{% endfor%}] = {{ haskellResultName }}{% if resultColumns | empty %}{}{% else %}{..}{% endif%}
    {% if resultColumns %}
    where
      {% for column in resultColumns %}
      !{{ column.value.name }} = Database.MySQL.Simple.Result.convert a_{{ column.index }} b_{{ column.index }}
      {% endfor %}
    {% endif %}
  convertResults a b =
    Database.MySQL.Simple.QueryResults.convertError a b {{ resultColumns | length }}
{% endif %}