← Back to Overview

src/backend/executor/execMain.c

Coverage: 0/4 lines (0.0%)
Total Lines
4
modified
Covered
0
0.0%
Uncovered
4
100.0%
키보드 네비게이션
ExecCheckPermissions() lines 582-639
Modified Lines Coverage: 0/0 lines (0.0%)
LineHitsSourceCommit
582 - ExecCheckPermissions(List *rangeTable, List *rteperminfos, -
583 - bool ereport_on_violation) -
584 - { -
585 - ListCell *l; -
586 - bool result = true; -
587 - -
588 - #ifdef USE_ASSERT_CHECKING -
589 - Bitmapset *indexset = NULL; -
590 - -
591 - /* Check that rteperminfos is consistent with rangeTable */ -
592 - foreach(l, rangeTable) -
593 - { -
594 - RangeTblEntry *rte = lfirst_node(RangeTblEntry, l); -
595 - -
596 - if (rte->perminfoindex != 0) -
597 - { -
598 - /* Sanity checks */ -
599 - -
600 - /* -
601 - * Only relation RTEs and subquery RTEs that were once relation -
602 - * RTEs (views, property graphs) have their perminfoindex set. 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
603 - */ -
604 - Assert(rte->rtekind == RTE_RELATION || -
605 - (rte->rtekind == RTE_SUBQUERY && -
606 - (rte->relkind == RELKIND_VIEW || rte->relkind == RELKIND_PROPGRAPH))); 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
607 - -
608 - (void) getRTEPermissionInfo(rteperminfos, rte); -
609 - /* Many-to-one mapping not allowed */ -
610 - Assert(!bms_is_member(rte->perminfoindex, indexset)); -
611 - indexset = bms_add_member(indexset, rte->perminfoindex); -
612 - } -
613 - } -
614 - -
615 - /* All rteperminfos are referenced */ -
616 - Assert(bms_num_members(indexset) == list_length(rteperminfos)); -
617 - #endif -
618 - -
619 - foreach(l, rteperminfos) -
620 - { -
621 - RTEPermissionInfo *perminfo = lfirst_node(RTEPermissionInfo, l); -
622 - -
623 - Assert(OidIsValid(perminfo->relid)); -
624 - result = ExecCheckOneRelPerms(perminfo); -
625 - if (!result) -
626 - { -
627 - if (ereport_on_violation) -
628 - aclcheck_error(ACLCHECK_NO_PRIV, -
629 - get_relkind_objtype(get_rel_relkind(perminfo->relid)), -
630 - get_rel_name(perminfo->relid)); -
631 - return false; -
632 - } -
633 - } -
634 - -
635 - if (ExecutorCheckPerms_hook) -
636 - result = (*ExecutorCheckPerms_hook) (rangeTable, rteperminfos, -
637 - ereport_on_violation); -
638 - return result; -
639 - } -
CheckValidResultRel() lines 1050-1175
Modified Lines Coverage: 0/2 lines (0.0%)
LineHitsSourceCommit
1050 - CheckValidResultRel(ResultRelInfo *resultRelInfo, CmdType operation, -
1051 - OnConflictAction onConflictAction, List *mergeActions) -
1052 - { -
1053 - Relation resultRel = resultRelInfo->ri_RelationDesc; -
1054 - FdwRoutine *fdwroutine; -
1055 - -
1056 - /* Expect a fully-formed ResultRelInfo from InitResultRelInfo(). */ -
1057 - Assert(resultRelInfo->ri_needLockTagTuple == -
1058 - IsInplaceUpdateRelation(resultRel)); -
1059 - -
1060 - switch (resultRel->rd_rel->relkind) -
1061 - { -
1062 - case RELKIND_RELATION: -
1063 - case RELKIND_PARTITIONED_TABLE: -
1064 - -
1065 - /* -
1066 - * For MERGE, check that the target relation supports each action. -
1067 - * For other operations, just check the operation itself. -
1068 - */ -
1069 - if (operation == CMD_MERGE) -
1070 - foreach_node(MergeAction, action, mergeActions) -
1071 - CheckCmdReplicaIdentity(resultRel, action->commandType); -
1072 - else -
1073 - CheckCmdReplicaIdentity(resultRel, operation); -
1074 - -
1075 - /* -
1076 - * For INSERT ON CONFLICT DO UPDATE, additionally check that the -
1077 - * target relation supports UPDATE. -
1078 - */ -
1079 - if (onConflictAction == ONCONFLICT_UPDATE) -
1080 - CheckCmdReplicaIdentity(resultRel, CMD_UPDATE); -
1081 - break; -
1082 - case RELKIND_SEQUENCE: -
1083 - ereport(ERROR, -
1084 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1085 - errmsg("cannot change sequence \"%s\"", -
1086 - RelationGetRelationName(resultRel)))); -
1087 - break; -
1088 - case RELKIND_TOASTVALUE: -
1089 - ereport(ERROR, -
1090 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1091 - errmsg("cannot change TOAST relation \"%s\"", -
1092 - RelationGetRelationName(resultRel)))); -
1093 - break; -
1094 - case RELKIND_VIEW: -
1095 - -
1096 - /* -
1097 - * Okay only if there's a suitable INSTEAD OF trigger. Otherwise, -
1098 - * complain, but omit errdetail because we haven't got the -
1099 - * information handy (and given that it really shouldn't happen, -
1100 - * it's not worth great exertion to get). -
1101 - */ -
1102 - if (!view_has_instead_trigger(resultRel, operation, mergeActions)) -
1103 - error_view_not_updatable(resultRel, operation, mergeActions, -
1104 - NULL); -
1105 - break; -
1106 - case RELKIND_MATVIEW: -
1107 - if (!MatViewIncrementalMaintenanceIsEnabled()) -
1108 - ereport(ERROR, -
1109 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1110 - errmsg("cannot change materialized view \"%s\"", -
1111 - RelationGetRelationName(resultRel)))); -
1112 - break; -
1113 - case RELKIND_FOREIGN_TABLE: -
1114 - /* Okay only if the FDW supports it */ -
1115 - fdwroutine = resultRelInfo->ri_FdwRoutine; -
1116 - switch (operation) -
1117 - { -
1118 - case CMD_INSERT: -
1119 - if (fdwroutine->ExecForeignInsert == NULL) -
1120 - ereport(ERROR, -
1121 - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), -
1122 - errmsg("cannot insert into foreign table \"%s\"", -
1123 - RelationGetRelationName(resultRel)))); -
1124 - if (fdwroutine->IsForeignRelUpdatable != NULL && -
1125 - (fdwroutine->IsForeignRelUpdatable(resultRel) & (1 << CMD_INSERT)) == 0) -
1126 - ereport(ERROR, -
1127 - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), -
1128 - errmsg("foreign table \"%s\" does not allow inserts", -
1129 - RelationGetRelationName(resultRel)))); -
1130 - break; -
1131 - case CMD_UPDATE: -
1132 - if (fdwroutine->ExecForeignUpdate == NULL) -
1133 - ereport(ERROR, -
1134 - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), -
1135 - errmsg("cannot update foreign table \"%s\"", -
1136 - RelationGetRelationName(resultRel)))); -
1137 - if (fdwroutine->IsForeignRelUpdatable != NULL && -
1138 - (fdwroutine->IsForeignRelUpdatable(resultRel) & (1 << CMD_UPDATE)) == 0) -
1139 - ereport(ERROR, -
1140 - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), -
1141 - errmsg("foreign table \"%s\" does not allow updates", -
1142 - RelationGetRelationName(resultRel)))); -
1143 - break; -
1144 - case CMD_DELETE: -
1145 - if (fdwroutine->ExecForeignDelete == NULL) -
1146 - ereport(ERROR, -
1147 - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), -
1148 - errmsg("cannot delete from foreign table \"%s\"", -
1149 - RelationGetRelationName(resultRel)))); -
1150 - if (fdwroutine->IsForeignRelUpdatable != NULL && -
1151 - (fdwroutine->IsForeignRelUpdatable(resultRel) & (1 << CMD_DELETE)) == 0) -
1152 - ereport(ERROR, -
1153 - (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), -
1154 - errmsg("foreign table \"%s\" does not allow deletes", -
1155 - RelationGetRelationName(resultRel)))); -
1156 - break; -
1157 - default: -
1158 - elog(ERROR, "unrecognized CmdType: %d", (int) operation); -
1159 - break; -
1160 - } -
1161 - break; -
1162 0 case RELKIND_PROPGRAPH: 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1163 0 ereport(ERROR, 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1164 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1165 - errmsg("cannot change property graph \"%s\"", 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1166 - RelationGetRelationName(resultRel)))); 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1167 - break; 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1168 - default: -
1169 - ereport(ERROR, -
1170 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1171 - errmsg("cannot change relation \"%s\"", -
1172 - RelationGetRelationName(resultRel)))); -
1173 - break; -
1174 - } -
1175 - } -
CheckValidRowMarkRel() lines 1184-1246
Modified Lines Coverage: 0/2 lines (0.0%)
LineHitsSourceCommit
1184 - CheckValidRowMarkRel(Relation rel, RowMarkType markType) -
1185 - { -
1186 - FdwRoutine *fdwroutine; -
1187 - -
1188 - switch (rel->rd_rel->relkind) -
1189 - { -
1190 - case RELKIND_RELATION: -
1191 - case RELKIND_PARTITIONED_TABLE: -
1192 - /* OK */ -
1193 - break; -
1194 - case RELKIND_SEQUENCE: -
1195 - /* Must disallow this because we don't vacuum sequences */ -
1196 - ereport(ERROR, -
1197 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1198 - errmsg("cannot lock rows in sequence \"%s\"", -
1199 - RelationGetRelationName(rel)))); -
1200 - break; -
1201 - case RELKIND_TOASTVALUE: -
1202 - /* We could allow this, but there seems no good reason to */ -
1203 - ereport(ERROR, -
1204 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1205 - errmsg("cannot lock rows in TOAST relation \"%s\"", -
1206 - RelationGetRelationName(rel)))); -
1207 - break; -
1208 - case RELKIND_VIEW: -
1209 - /* Should not get here; planner should have expanded the view */ -
1210 - ereport(ERROR, -
1211 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1212 - errmsg("cannot lock rows in view \"%s\"", -
1213 - RelationGetRelationName(rel)))); -
1214 - break; -
1215 - case RELKIND_MATVIEW: -
1216 - /* Allow referencing a matview, but not actual locking clauses */ -
1217 - if (markType != ROW_MARK_REFERENCE) -
1218 - ereport(ERROR, -
1219 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1220 - errmsg("cannot lock rows in materialized view \"%s\"", -
1221 - RelationGetRelationName(rel)))); -
1222 - break; -
1223 - case RELKIND_FOREIGN_TABLE: -
1224 - /* Okay only if the FDW supports it */ -
1225 - fdwroutine = GetFdwRoutineForRelation(rel, false); -
1226 - if (fdwroutine->RefetchForeignRow == NULL) -
1227 - ereport(ERROR, -
1228 - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), -
1229 - errmsg("cannot lock rows in foreign table \"%s\"", -
1230 - RelationGetRelationName(rel)))); -
1231 - break; -
1232 0 case RELKIND_PROPGRAPH: 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1233 - /* Should not get here; rewriter should have expanded the graph */ 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1234 0 ereport(ERROR, 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1235 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1236 - errmsg_internal("cannot lock rows in property graph \"%s\"", 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1237 - RelationGetRelationName(rel)))); 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1238 - break; 86c14eaWIP: SQL Property Graph Queries (SQL/PGQ)
1239 - default: -
1240 - ereport(ERROR, -
1241 - (errcode(ERRCODE_WRONG_OBJECT_TYPE), -
1242 - errmsg("cannot lock rows in relation \"%s\"", -
1243 - RelationGetRelationName(rel)))); -
1244 - break; -
1245 - } -
1246 - } -