packages feed

sqlc-hs-0.2.0.0: test/golden/out/Pulse/Database/GetOpcuaAttributeAggregates.hs

{- This file was auto-generated from queries.sql by sqlc-hs. -}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE TypeFamilies #-}
module Pulse.Database.GetOpcuaAttributeAggregates where

import Pulse.Database.Internal (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

import qualified Data.Int
import qualified Data.Vector
import qualified Pulse.Database.DBTypes
import qualified Data.Time.LocalTime
import qualified GHC.Base
import qualified Data.Scientific
import qualified GHC.Types
import qualified Data.Foldable

query_getOpcuaAttributeAggregates :: Query "getOpcuaAttributeAggregates" ":many"
query_getOpcuaAttributeAggregates = Query "SELECT\n  inputs.monitor_id,\n\n  aggregates.count,\n\n  aggregates.min_value_integral,\n  aggregates.max_value_integral,\n  aggregates.avg_value_integral,\n  aggregates.sum_value_integral,\n\n  aggregates.min_value_float,\n  aggregates.max_value_float,\n  aggregates.avg_value_float,\n  aggregates.sum_value_float\nFROM\n  -- SQLC doesn't have a good way to pass many structured things\n  -- so instead we pass a bunch of arrays which are hopefully all\n  -- have the same length.\n  ( SELECT\n      unnest(?::INT[]) as monitor_id,\n      unnest(?::INT[]) as endpoint_monitor_id,\n      unnest(?::OPCUA_NODE_ID[]) as node_id,\n      unnest(?::OPCUA_ATTRIBUTE_ID[]) as attribute_id,\n      unnest(?::INTERVAL[]) as duration_start,\n      unnest(?::INTERVAL[]) as duration_end\n  ) AS inputs,\nLATERAL\n  ( SELECT\n      COUNT(*) as count,\n      -- This looks strange but is necessary to make SQLC do the right\n      -- thing, that is mark the aggregates as nullable.\n      COALESCE(NULL, MIN(value_integral)) AS min_value_integral,\n      COALESCE(NULL, MAX(value_integral)) AS max_value_integral,\n      COALESCE(NULL, AVG(value_integral)) AS avg_value_integral,\n      COALESCE(NULL, SUM(value_integral)) AS sum_value_integral,\n\n      COALESCE(NULL, MIN(value_float)) AS min_value_float,\n      COALESCE(NULL, MAX(value_float)) AS max_value_float,\n      COALESCE(NULL, AVG(value_float)) AS avg_value_float,\n      COALESCE(NULL, SUM(value_float)) AS sum_value_float\n    FROM\n      opcua_attribute_values\n    WHERE\n      opcua_attribute_values.endpoint_monitor_id = inputs.endpoint_monitor_id\n      AND opcua_attribute_values.opcua_node_id = inputs.node_id\n      AND opcua_attribute_values.attribute_id = inputs.attribute_id\n      AND created_at >= NOW() - inputs.duration_start\n      AND created_at < NOW () - inputs.duration_end\n    LIMIT 1\n  ) AS aggregates"

data instance Params "getOpcuaAttributeAggregates" = Params_getOpcuaAttributeAggregates
  {
    monitor_ids :: Data.Vector.Vector Data.Int.Int32,
    endpoint_monitor_ids :: Data.Vector.Vector Data.Int.Int32,
    node_ids :: Data.Vector.Vector Pulse.Database.DBTypes.OpcuaNodeId,
    attribute_ids :: Data.Vector.Vector Pulse.Database.DBTypes.OpcuaAttributeId,
    duration_starts :: Data.Vector.Vector Data.Time.LocalTime.CalendarDiffTime,
    duration_ends :: Data.Vector.Vector Data.Time.LocalTime.CalendarDiffTime
  }

data instance Result "getOpcuaAttributeAggregates" = Result_getOpcuaAttributeAggregates
  {
    monitor_id :: !(Data.Int.Int32),
    count :: !(Data.Int.Int64),
    min_value_integral :: !(GHC.Base.Maybe Data.Int.Int64),
    max_value_integral :: !(GHC.Base.Maybe Data.Int.Int64),
    avg_value_integral :: !(GHC.Base.Maybe Data.Scientific.Scientific),
    sum_value_integral :: !(GHC.Base.Maybe Data.Scientific.Scientific),
    min_value_float :: !(GHC.Base.Maybe GHC.Types.Double),
    max_value_float :: !(GHC.Base.Maybe GHC.Types.Double),
    avg_value_float :: !(GHC.Base.Maybe GHC.Types.Double),
    sum_value_float :: !(GHC.Base.Maybe GHC.Types.Double)
  }

instance Database.PostgreSQL.Simple.ToRow.ToRow (Params "getOpcuaAttributeAggregates") where
  toRow Params_getOpcuaAttributeAggregates{..} =
    [ 
      Database.PostgreSQL.Simple.ToField.toField monitor_ids, 

      Database.PostgreSQL.Simple.ToField.toField endpoint_monitor_ids, 

      Database.PostgreSQL.Simple.ToField.toField node_ids, 

      Database.PostgreSQL.Simple.ToField.toField attribute_ids, 

      Database.PostgreSQL.Simple.ToField.toField duration_starts, 

      Database.PostgreSQL.Simple.ToField.toField duration_ends
    ]

instance Database.PostgreSQL.Simple.FromRow.FromRow (Result "getOpcuaAttributeAggregates") where
  fromRow =
    pure Result_getOpcuaAttributeAggregates
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field
      <*> Database.PostgreSQL.Simple.FromRow.field