fix: unnecessary count() on RPC returning single
This commit is contained in:
committed by
Steve Chavez
parent
00f3cb3746
commit
54786a6c04
+5
-1
@@ -12,10 +12,14 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
- #2771, Add `Server-Timing` header with JWT duration - @taimoorzaeem
|
- #2771, Add `Server-Timing` header with JWT duration - @taimoorzaeem
|
||||||
- #2698, Add config `jwt-cache-max-lifetime` and implement JWT caching - @taimoorzaeem
|
- #2698, Add config `jwt-cache-max-lifetime` and implement JWT caching - @taimoorzaeem
|
||||||
- #2943, Add `handling=strict/lenient` for Prefer header - @taimoorzaeem
|
- #2943, Add `handling=strict/lenient` for Prefer header - @taimoorzaeem
|
||||||
|
- #2983, Add more data to `Server-Timing` header - @develop7
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
- #2824, Fix range request with 0 rows and 0 offset return status 416 - @strengthless
|
- #2824, Fix range request with 0 rows and 0 offset return status 416 - @strengthless
|
||||||
|
- #3015, Fix unnecessary count() on RPC returning single - @steve-chavez
|
||||||
|
|
||||||
## [11.2.1] - 2023-10-03
|
## [11.2.1] - 2023-10-03
|
||||||
- #2983, Add more data to `Server-Timing` header - @develop7
|
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import PostgREST.MediaType (MTPlanFormat (..),
|
|||||||
MediaType (..))
|
MediaType (..))
|
||||||
import PostgREST.Query.SqlFragment
|
import PostgREST.Query.SqlFragment
|
||||||
import PostgREST.SchemaCache.Routine (ResultAggregate (..),
|
import PostgREST.SchemaCache.Routine (ResultAggregate (..),
|
||||||
Routine)
|
Routine, funcReturnsSingle)
|
||||||
|
|
||||||
import Protolude
|
import Protolude
|
||||||
|
|
||||||
@@ -121,7 +121,9 @@ prepareCall rout callProcQuery selectQuery countQuery countTotal mt rAgg =
|
|||||||
countCTEF <>
|
countCTEF <>
|
||||||
"SELECT " <>
|
"SELECT " <>
|
||||||
countResultF <> " AS total_result_set, " <>
|
countResultF <> " AS total_result_set, " <>
|
||||||
"pg_catalog.count(_postgrest_t) AS page_total, " <>
|
(if funcReturnsSingle rout
|
||||||
|
then "1"
|
||||||
|
else "pg_catalog.count(_postgrest_t)") <> " AS page_total, " <>
|
||||||
aggF (Just rout) rAgg <> " AS body, " <>
|
aggF (Just rout) rAgg <> " AS body, " <>
|
||||||
responseHeadersF <> " AS response_headers, " <>
|
responseHeadersF <> " AS response_headers, " <>
|
||||||
responseStatusF <> " AS response_status " <>
|
responseStatusF <> " AS response_status " <>
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ module PostgREST.SchemaCache.Routine
|
|||||||
, funcReturnsVoid
|
, funcReturnsVoid
|
||||||
, funcTableName
|
, funcTableName
|
||||||
, funcReturnsCompositeAlias
|
, funcReturnsCompositeAlias
|
||||||
|
, funcReturnsSingle
|
||||||
, ResultAggregate(..)
|
, ResultAggregate(..)
|
||||||
) where
|
) where
|
||||||
|
|
||||||
@@ -99,6 +100,11 @@ data ResultAggregate
|
|||||||
| NoAgg
|
| NoAgg
|
||||||
deriving (Eq, Show)
|
deriving (Eq, Show)
|
||||||
|
|
||||||
|
funcReturnsSingle :: Routine -> Bool
|
||||||
|
funcReturnsSingle proc = case proc of
|
||||||
|
Function{pdReturnType = Single _} -> True
|
||||||
|
_ -> False
|
||||||
|
|
||||||
funcReturnsScalar :: Routine -> Bool
|
funcReturnsScalar :: Routine -> Bool
|
||||||
funcReturnsScalar proc = case proc of
|
funcReturnsScalar proc = case proc of
|
||||||
Function{pdReturnType = Single (Scalar{})} -> True
|
Function{pdReturnType = Single (Scalar{})} -> True
|
||||||
|
|||||||
@@ -383,7 +383,7 @@ spec actualPgVersion = do
|
|||||||
r <- request methodGet "/rpc/add_them?a=3&b=4"
|
r <- request methodGet "/rpc/add_them?a=3&b=4"
|
||||||
[planHdr] ""
|
[planHdr] ""
|
||||||
|
|
||||||
liftIO $ planCost r `shouldSatisfy` (< 1.18)
|
liftIO $ planCost r `shouldSatisfy` (< 0.11)
|
||||||
|
|
||||||
context "function inlining" $ do
|
context "function inlining" $ do
|
||||||
it "should inline a zero argument function(the function won't appear in the plan tree)" $ do
|
it "should inline a zero argument function(the function won't appear in the plan tree)" $ do
|
||||||
|
|||||||
Reference in New Issue
Block a user