module IHP.IDE.Data.View.ShowQuery where
import qualified Database.PostgreSQL.Simple as PG
import IHP.ViewPrelude
import IHP.IDE.ToolServer.Types
import IHP.IDE.Data.View.Layout
data ShowQueryView = ShowQueryView
{ queryResult :: Maybe (Either PG.SqlError SqlConsoleResult)
, queryText :: Text
}
instance View ShowQueryView where
html ShowQueryView { .. } = [hsx|
|]
where
renderRows = case queryResult of
Just ((Right (SelectQueryResult []))) -> [hsx|
The query returned an empty result set.
|]
Just (Right (SelectQueryResult rows)) -> [hsx|
{tableHead rows}
{tableBody rows}
|]
Just (Right (InsertOrUpdateResult count)) -> [hsx|
{count} {if count == 1 then "row" :: Text else "rows"} affected.
|]
Just (Left sqlError) -> [hsx|
SQL Error - {sqlError.sqlExecStatus}
{showIfNotEmpty "Message" (sqlError.sqlErrorMsg)}
{showIfNotEmpty "Details" (sqlError.sqlErrorDetail)}
{showIfNotEmpty "Hint" (sqlError.sqlErrorHint)}
{showIfNotEmpty "State" (sqlError.sqlState)}
|]
Nothing -> mempty
tableHead rows = [hsx|{forEach (columnNames rows) renderColumnHead}
|]
renderColumnHead name = [hsx|{name} | |]
tableBody rows = [hsx|{forEach rows renderRow}|]
renderRow fields = [hsx|{forEach fields renderField}
|]
renderField DynamicField { .. } = [hsx|{sqlValueToText fieldValue} | |]
columnNames rows = maybe [] (map (.fieldName)) (head rows)
showIfNotEmpty :: Text -> ByteString -> Html
showIfNotEmpty title = \case
"" -> mempty
text -> [hsx|{title}: {text}
|]