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