refactor: move schemaCacheDescription to SqlFragment

This doesn't belong in the schema cache module, as
it's unused there. It's only used on Query.hs.
This commit is contained in:
steve-chavez
2025-09-04 09:35:33 -05:00
committed by Steve Chavez
parent 96d2b69af4
commit 1ace298a1a
3 changed files with 20 additions and 13 deletions
+13 -6
View File
@@ -36,6 +36,7 @@ import qualified Hasql.Transaction.Sessions as SQL
import qualified PostgREST.Error as Error import qualified PostgREST.Error as Error
import qualified PostgREST.Query.PreQuery as PreQuery import qualified PostgREST.Query.PreQuery as PreQuery
import qualified PostgREST.Query.QueryBuilder as QueryBuilder import qualified PostgREST.Query.QueryBuilder as QueryBuilder
import qualified PostgREST.Query.SqlFragment as SqlFragment
import qualified PostgREST.Query.Statements as Statements import qualified PostgREST.Query.Statements as Statements
import qualified PostgREST.SchemaCache as SchemaCache import qualified PostgREST.SchemaCache as SchemaCache
@@ -205,18 +206,24 @@ actionQuery (MayUseDb plan@InspectPlan{ipSchema=tSchema}) AppConfig{..} _ sCache
case configOpenApiMode of case configOpenApiMode of
OAFollowPriv -> do OAFollowPriv -> do
tableAccess <- SQL.statement [tSchema] (SchemaCache.accessibleTables configDbPreparedStatements) tableAccess <- SQL.statement [tSchema] (SchemaCache.accessibleTables configDbPreparedStatements)
schDesc <- SQL.statement mempty (SQL.dynamicallyParameterized (SqlFragment.schemaDescription tSchema) decodeSchemaDesc configDbPreparedStatements)
MaybeDbResult plan . Just <$> ((,,) MaybeDbResult plan . Just <$> ((,,)
(HM.filterWithKey (\qi _ -> S.member qi tableAccess) $ SchemaCache.dbTables sCache) (HM.filterWithKey (\qi _ -> S.member qi tableAccess) $ SchemaCache.dbTables sCache)
<$> SQL.statement ([tSchema], configDbHoistedTxSettings) (SchemaCache.accessibleFuncs configDbPreparedStatements) <$> SQL.statement ([tSchema], configDbHoistedTxSettings) (SchemaCache.accessibleFuncs configDbPreparedStatements)
<*> SQL.statement tSchema (SchemaCache.schemaDescription configDbPreparedStatements)) <*> pure schDesc)
OAIgnorePriv -> OAIgnorePriv -> do
(MaybeDbResult plan . Just) . (,,) schDesc <- SQL.statement mempty (SQL.dynamicallyParameterized (SqlFragment.schemaDescription tSchema) decodeSchemaDesc configDbPreparedStatements)
(HM.filterWithKey (\(QualifiedIdentifier sch _) _ -> sch == tSchema) $ SchemaCache.dbTables sCache) let tbls = HM.filterWithKey (\(QualifiedIdentifier sch _) _ -> sch == tSchema) (SchemaCache.dbTables sCache)
(HM.filterWithKey (\(QualifiedIdentifier sch _) _ -> sch == tSchema) $ SchemaCache.dbRoutines sCache) routs = HM.filterWithKey (\(QualifiedIdentifier sch _) _ -> sch == tSchema) (SchemaCache.dbRoutines sCache)
<$> SQL.statement tSchema (SchemaCache.schemaDescription configDbPreparedStatements)
pure $ MaybeDbResult plan (Just (tbls, routs, schDesc))
OADisabled -> OADisabled ->
pure $ MaybeDbResult plan Nothing pure $ MaybeDbResult plan Nothing
decodeSchemaDesc :: HD.Result (Maybe Text)
decodeSchemaDesc = join <$> HD.rowMaybe (nullableColumn HD.text)
-- Makes sure the querystring pk matches the payload pk -- Makes sure the querystring pk matches the payload pk
-- e.g. PUT /items?id=eq.1 { "id" : 1, .. } is accepted, -- e.g. PUT /items?id=eq.1 { "id" : 1, .. } is accepted,
-- PUT /items?id=eq.14 { "id" : 2, .. } is rejected. -- PUT /items?id=eq.14 { "id" : 2, .. } is rejected.
+7
View File
@@ -40,6 +40,7 @@ module PostgREST.Query.SqlFragment
, setConfigWithConstantNameJSON , setConfigWithConstantNameJSON
, escapeIdent , escapeIdent
, escapeIdentList , escapeIdentList
, schemaDescription
) where ) where
import qualified Data.Aeson as JSON import qualified Data.Aeson as JSON
@@ -590,3 +591,9 @@ handlerF rout = \case
BuiltinOvAggCsv -> asCsvF BuiltinOvAggCsv -> asCsvF
CustomFunc funcQi target -> customFuncF rout funcQi target CustomFunc funcQi target -> customFuncF rout funcQi target
NoAgg -> "''::text" NoAgg -> "''::text"
schemaDescription :: Text -> SQL.Snippet
schemaDescription schema =
"SELECT pg_catalog.obj_description(" <> encoded <> "::regnamespace, 'pg_namespace')"
where
encoded = SQL.encoderAndParam (HE.nonNullable HE.unknown) $ encodeUtf8 schema
-7
View File
@@ -23,7 +23,6 @@ module PostgREST.SchemaCache
, querySchemaCache , querySchemaCache
, accessibleTables , accessibleTables
, accessibleFuncs , accessibleFuncs
, schemaDescription
, showSummary , showSummary
) where ) where
@@ -475,12 +474,6 @@ funcsSqlQuery = encodeUtf8 [trimming|
AND prokind = 'f' AND prokind = 'f'
AND p.pronamespace = ANY($$1::regnamespace[]) |] AND p.pronamespace = ANY($$1::regnamespace[]) |]
schemaDescription :: Bool -> SQL.Statement Schema (Maybe Text)
schemaDescription =
SQL.Statement sql (param HE.text) (join <$> HD.rowMaybe (nullableColumn HD.text))
where
sql = "SELECT pg_catalog.obj_description($1::regnamespace, 'pg_namespace')"
accessibleTables :: Bool -> SQL.Statement [Schema] AccessSet accessibleTables :: Bool -> SQL.Statement [Schema] AccessSet
accessibleTables = accessibleTables =
SQL.Statement sql params decodeAccessibleIdentifiers SQL.Statement sql params decodeAccessibleIdentifiers