Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9e3d4c4

Browse files
committed
Another directory cleaned up
1 parent8544daf commit9e3d4c4

File tree

7 files changed

+383
-167
lines changed

7 files changed

+383
-167
lines changed

‎src/backend/catalog/heap.c

Lines changed: 274 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.5 1996/11/0606:47:03 scrappy Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/catalog/heap.c,v 1.6 1996/11/0607:31:19 scrappy Exp $
1111
*
1212
* INTERFACE ROUTINES
1313
*heap_creatr()- Create an uncataloged heap relation
@@ -26,6 +26,14 @@
2626
*/
2727
#include<postgres.h>
2828

29+
#include<catalog/pg_ipl.h>
30+
#include<catalog/pg_inherits.h>
31+
#include<catalog/pg_proc.h>
32+
#include<miscadmin.h>
33+
#include<catalog/indexing.h>
34+
#include<catalog/catalog.h>
35+
#include<utils/builtins.h>
36+
#include<access/heapam.h>
2937
#include<utils/mcxt.h>
3038
#include<parser/catalog_utils.h>
3139
#include<catalog/index.h>
@@ -39,37 +47,11 @@
3947
#include<rewrite/rewriteRemove.h>
4048
#include<storage/lmgr.h>
4149
#include<storage/smgr.h>
42-
#include<access/relscan.h>
43-
#include<utils/tqual.h>
44-
45-
/*
46-
#include <catalog/heap.h>
47-
#include <catalog/pg_proc.h>
48-
#include <parser/catalog_utils.h>
49-
#include <access/heapam.h>
50-
#include <access/genam.h>
51-
#include <access/istrat.h>
52-
#include <storage/bufmgr.h>
53-
#include <lib/hasht.h>
54-
#include <miscadmin.h>
55-
#include <fmgr.h>
56-
#include <utils/builtins.h>
57-
#include <utils/mcxt.h>
58-
#include <utils/relcache.h>
59-
#include <catalog/catname.h>
60-
#include <catalog/pg_index.h>
61-
#include <catalog/pg_inherits.h>
62-
#include <catalog/pg_ipl.h>
63-
#include <catalog/index.h>
64-
#include <catalog/indexing.h>
65-
#include <catalog/catalog.h>
66-
#include <storage/lmgr.h>
67-
#include <rewrite/rewriteRemove.h>
68-
#include <storage/smgr.h>
69-
*/
70-
71-
staticvoidAddNewAttributeTuples(Oidnew_rel_oid,TupleDesctupdesc);
72-
staticvoidCheckAttributeNames(TupleDesctupdesc);
50+
#ifndefHAVE_MEMMOVE
51+
# include<regex/utils.h>
52+
#else
53+
# include<string.h>
54+
#endif
7355

7456
/* ----------------------------------------------------------------
7557
*XXX UGLY HARD CODED BADNESS FOLLOWS XXX
@@ -1179,4 +1161,263 @@ DeletePgTypeTuple(Relation rdesc)
11791161

11801162
/* ----------------
11811163
*now scan pg_attribute. if any other relations have
1182-
*attributesofthetypeoftherelationwearede
1164+
* attributes of the type of the relation we are deleteing
1165+
* then we have to disallow the deletion. should talk to
1166+
* stonebraker about this. -cim 6/19/90
1167+
* ----------------
1168+
*/
1169+
typoid=tup->t_oid;
1170+
1171+
pg_attribute_desc=heap_openr(AttributeRelationName);
1172+
1173+
ScanKeyEntryInitialize(&attkey,
1174+
0,Anum_pg_attribute_atttypid,F_INT4EQ,
1175+
typoid);
1176+
1177+
pg_attribute_scan=heap_beginscan(pg_attribute_desc,
1178+
0,
1179+
NowTimeQual,
1180+
1,
1181+
&attkey);
1182+
1183+
/* ----------------
1184+
*try and get a pg_attribute tuple. if we succeed it means
1185+
* we cant delete the relation because something depends on
1186+
* the schema.
1187+
* ----------------
1188+
*/
1189+
atttup=heap_getnext(pg_attribute_scan,0, (Buffer*)NULL);
1190+
1191+
if (PointerIsValid(atttup)) {
1192+
Oidrelid= ((AttributeTupleForm)GETSTRUCT(atttup))->attrelid;
1193+
1194+
heap_endscan(pg_type_scan);
1195+
heap_close(pg_type_desc);
1196+
heap_endscan(pg_attribute_scan);
1197+
heap_close(pg_attribute_desc);
1198+
1199+
elog(WARN,"DeletePgTypeTuple: att of type %s exists in relation %d",
1200+
&rdesc->rd_rel->relname,relid);
1201+
}
1202+
heap_endscan(pg_attribute_scan);
1203+
heap_close(pg_attribute_desc);
1204+
1205+
/* ----------------
1206+
* Ok, it's safe so we delete the relation tuple
1207+
* from pg_type and finish up. But first end the scan so that
1208+
* we release the read lock on pg_type. -mer 13 Aug 1991
1209+
* ----------------
1210+
*/
1211+
heap_endscan(pg_type_scan);
1212+
heap_delete(pg_type_desc,&tup->t_ctid);
1213+
1214+
heap_close(pg_type_desc);
1215+
}
1216+
1217+
/* --------------------------------
1218+
*heap_destroy
1219+
*
1220+
* --------------------------------
1221+
*/
1222+
void
1223+
heap_destroy(char*relname)
1224+
{
1225+
Relationrdesc;
1226+
1227+
/* ----------------
1228+
*first open the relation. if the relation does exist,
1229+
* heap_openr() returns NULL.
1230+
* ----------------
1231+
*/
1232+
rdesc=heap_openr(relname);
1233+
if (rdesc==NULL)
1234+
elog(WARN,"Relation %s Does Not Exist!",relname);
1235+
1236+
/* ----------------
1237+
*prevent deletion of system relations
1238+
* ----------------
1239+
*/
1240+
if (IsSystemRelationName(RelationGetRelationName(rdesc)->data))
1241+
elog(WARN,"amdestroy: cannot destroy %s relation",
1242+
&rdesc->rd_rel->relname);
1243+
1244+
/* ----------------
1245+
*remove inheritance information
1246+
* ----------------
1247+
*/
1248+
RelationRemoveInheritance(rdesc);
1249+
1250+
/* ----------------
1251+
*remove indexes if necessary
1252+
* ----------------
1253+
*/
1254+
if (rdesc->rd_rel->relhasindex) {
1255+
RelationRemoveIndexes(rdesc);
1256+
}
1257+
1258+
/* ----------------
1259+
*remove rules if necessary
1260+
* ----------------
1261+
*/
1262+
if (rdesc->rd_rules!=NULL) {
1263+
RelationRemoveRules(rdesc->rd_id);
1264+
}
1265+
1266+
/* ----------------
1267+
*delete attribute tuples
1268+
* ----------------
1269+
*/
1270+
DeletePgAttributeTuples(rdesc);
1271+
1272+
/* ----------------
1273+
*delete type tuple. here we want to see the effects
1274+
* of the deletions we just did, so we use setheapoverride().
1275+
* ----------------
1276+
*/
1277+
setheapoverride(true);
1278+
DeletePgTypeTuple(rdesc);
1279+
setheapoverride(false);
1280+
1281+
/* ----------------
1282+
*delete relation tuple
1283+
* ----------------
1284+
*/
1285+
DeletePgRelationTuple(rdesc);
1286+
1287+
/* ----------------
1288+
*flush the relation from the relcache
1289+
* ----------------
1290+
*/
1291+
RelationIdInvalidateRelationCacheByRelationId(rdesc->rd_id);
1292+
1293+
/* ----------------
1294+
*unlink the relation and finish up.
1295+
* ----------------
1296+
*/
1297+
(void)smgrunlink(rdesc->rd_rel->relsmgr,rdesc);
1298+
if(rdesc->rd_istemp) {
1299+
rdesc->rd_tmpunlinked= TRUE;
1300+
}
1301+
heap_close(rdesc);
1302+
}
1303+
1304+
/*
1305+
* heap_destroyr
1306+
* destroy and close temporary relations
1307+
*
1308+
*/
1309+
1310+
void
1311+
heap_destroyr(Relationrdesc)
1312+
{
1313+
ReleaseTmpRelBuffers(rdesc);
1314+
(void)smgrunlink(rdesc->rd_rel->relsmgr,rdesc);
1315+
if(rdesc->rd_istemp) {
1316+
rdesc->rd_tmpunlinked= TRUE;
1317+
}
1318+
heap_close(rdesc);
1319+
RemoveFromTempRelList(rdesc);
1320+
}
1321+
1322+
1323+
/**************************************************************
1324+
functions to deal with the list of temporary relations
1325+
**************************************************************/
1326+
1327+
/* --------------
1328+
InitTempRellist():
1329+
1330+
initialize temporary relations list
1331+
the tempRelList is a list of temporary relations that
1332+
are created in the course of the transactions
1333+
they need to be destroyed properly at the end of the transactions
1334+
1335+
MODIFIES the global variable tempRels
1336+
1337+
>> NOTE <<
1338+
1339+
malloc is used instead of palloc because we KNOW when we are
1340+
going to free these things. Keeps us away from the memory context
1341+
hairyness
1342+
1343+
*/
1344+
void
1345+
InitTempRelList()
1346+
{
1347+
if (tempRels) {
1348+
free(tempRels->rels);
1349+
free(tempRels);
1350+
};
1351+
1352+
tempRels= (TempRelList*)malloc(sizeof(TempRelList));
1353+
tempRels->size=TEMP_REL_LIST_SIZE;
1354+
tempRels->rels= (Relation*)malloc(sizeof(Relation)*tempRels->size);
1355+
memset(tempRels->rels,0,sizeof(Relation)*tempRels->size);
1356+
tempRels->num=0;
1357+
}
1358+
1359+
/*
1360+
removes a relation from the TempRelList
1361+
1362+
MODIFIES the global variable tempRels
1363+
we don't really remove it, just mark it as NULL
1364+
and DestroyTempRels will look for NULLs
1365+
*/
1366+
void
1367+
RemoveFromTempRelList(Relationr)
1368+
{
1369+
inti;
1370+
1371+
if (!tempRels)
1372+
return;
1373+
1374+
for (i=0;i<tempRels->num;i++) {
1375+
if (tempRels->rels[i]==r) {
1376+
tempRels->rels[i]=NULL;
1377+
break;
1378+
}
1379+
}
1380+
}
1381+
1382+
/*
1383+
add a temporary relation to the TempRelList
1384+
1385+
MODIFIES the global variable tempRels
1386+
*/
1387+
void
1388+
AddToTempRelList(Relationr)
1389+
{
1390+
if (!tempRels)
1391+
return;
1392+
1393+
if (tempRels->num==tempRels->size) {
1394+
tempRels->size+=TEMP_REL_LIST_SIZE;
1395+
tempRels->rels=realloc(tempRels->rels,tempRels->size);
1396+
}
1397+
tempRels->rels[tempRels->num]=r;
1398+
tempRels->num++;
1399+
}
1400+
1401+
/*
1402+
go through the tempRels list and destroy each of the relations
1403+
*/
1404+
void
1405+
DestroyTempRels()
1406+
{
1407+
inti;
1408+
Relationrdesc;
1409+
1410+
if (!tempRels)
1411+
return;
1412+
1413+
for (i=0;i<tempRels->num;i++) {
1414+
rdesc=tempRels->rels[i];
1415+
/* rdesc may be NULL if it has been removed from the list already */
1416+
if (rdesc)
1417+
heap_destroyr(rdesc);
1418+
}
1419+
free(tempRels->rels);
1420+
free(tempRels);
1421+
tempRels=NULL;
1422+
}
1423+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp