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:
committed by
Steve Chavez
parent
96d2b69af4
commit
1ace298a1a
+13
-6
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user