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

Commit91a1d98

Browse files
committed
pathman: bugfix
1 parente2c16b2 commit91a1d98

File tree

1 file changed

+57
-46
lines changed

1 file changed

+57
-46
lines changed

‎contrib/pathman/init.c

Lines changed: 57 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,13 @@ init(void)
2121
LWLockRelease(load_config_lock);
2222
}
2323

24+
staticbool
25+
check_extension()
26+
{
27+
SPI_exec("SELECT * FROM pg_extension WHERE extname = 'pathman'",0);
28+
returnSPI_processed>0;
29+
}
30+
2431
void
2532
load_part_relations_hashtable()
2633
{
@@ -32,61 +39,65 @@ load_part_relations_hashtable()
3239
List*part_oids=NIL;
3340
ListCell*lc;
3441

35-
/* if hashtable is empty */
36-
// if (hash_get_num_entries(relations) == 0)
37-
// {
38-
SPI_connect();
39-
ret=SPI_exec("SELECT pg_class.relfilenode, pg_attribute.attnum, pg_pathman_rels.parttype, pg_attribute.atttypid "
40-
"FROM pg_pathman_rels "
41-
"JOIN pg_class ON pg_class.relname = pg_pathman_rels.relname "
42-
"JOIN pg_attribute ON pg_attribute.attname = pg_pathman_rels.attname "
43-
"AND attrelid = pg_class.relfilenode",0);
44-
proc=SPI_processed;
45-
46-
if (ret>0&&SPI_tuptable!=NULL)
47-
{
48-
TupleDesctupdesc=SPI_tuptable->tupdesc;
49-
SPITupleTable*tuptable=SPI_tuptable;
50-
51-
for (i=0;i<proc;i++)
52-
{
53-
HeapTupletuple=tuptable->vals[i];
42+
SPI_connect();
5443

55-
intoid=DatumGetObjectId(SPI_getbinval(tuple,tupdesc,1,&isnull));
56-
prinfo= (PartRelationInfo*)
57-
hash_search(relations, (constvoid*)&oid,HASH_ENTER,NULL);
58-
prinfo->oid=oid;
59-
prinfo->attnum=DatumGetInt32(SPI_getbinval(tuple,tupdesc,2,&isnull));
60-
prinfo->parttype=DatumGetInt32(SPI_getbinval(tuple,tupdesc,3,&isnull));
61-
prinfo->atttype=DatumGetObjectId(SPI_getbinval(tuple,tupdesc,4,&isnull));
44+
/* if extension wasn't created then just quit */
45+
if (!check_extension())
46+
{
47+
SPI_finish();
48+
return;
49+
}
6250

63-
part_oids=lappend_int(part_oids,oid);
51+
ret=SPI_exec("SELECT pg_class.relfilenode, pg_attribute.attnum, pg_pathman_rels.parttype, pg_attribute.atttypid "
52+
"FROM pg_pathman_rels "
53+
"JOIN pg_class ON pg_class.relname = pg_pathman_rels.relname "
54+
"JOIN pg_attribute ON pg_attribute.attname = pg_pathman_rels.attname "
55+
"AND attrelid = pg_class.relfilenode",0);
56+
proc=SPI_processed;
6457

65-
/* children will be filled in later */
66-
// prinfo->children = NIL;
67-
}
68-
}
58+
if (ret>0&&SPI_tuptable!=NULL)
59+
{
60+
TupleDesctupdesc=SPI_tuptable->tupdesc;
61+
SPITupleTable*tuptable=SPI_tuptable;
6962

70-
/* load children information */
71-
foreach(lc,part_oids)
63+
for (i=0;i<proc;i++)
7264
{
73-
Oidoid=(int)lfirst_int(lc);
65+
HeapTupletuple=tuptable->vals[i];
7466

67+
intoid=DatumGetObjectId(SPI_getbinval(tuple,tupdesc,1,&isnull));
7568
prinfo= (PartRelationInfo*)
76-
hash_search(relations, (constvoid*)&oid,HASH_FIND,NULL);
69+
hash_search(relations, (constvoid*)&oid,HASH_ENTER,NULL);
70+
prinfo->oid=oid;
71+
prinfo->attnum=DatumGetInt32(SPI_getbinval(tuple,tupdesc,2,&isnull));
72+
prinfo->parttype=DatumGetInt32(SPI_getbinval(tuple,tupdesc,3,&isnull));
73+
prinfo->atttype=DatumGetObjectId(SPI_getbinval(tuple,tupdesc,4,&isnull));
7774

78-
switch(prinfo->parttype)
79-
{
80-
casePT_RANGE:
81-
load_range_restrictions(oid);
82-
break;
83-
casePT_HASH:
84-
load_hash_restrictions(oid);
85-
break;
86-
}
75+
part_oids=lappend_int(part_oids,oid);
76+
77+
/* children will be filled in later */
78+
// prinfo->children = NIL;
8779
}
88-
SPI_finish();
89-
// }
80+
}
81+
82+
/* load children information */
83+
foreach(lc,part_oids)
84+
{
85+
Oidoid= (int)lfirst_int(lc);
86+
87+
prinfo= (PartRelationInfo*)
88+
hash_search(relations, (constvoid*)&oid,HASH_FIND,NULL);
89+
90+
switch(prinfo->parttype)
91+
{
92+
casePT_RANGE:
93+
load_range_restrictions(oid);
94+
break;
95+
casePT_HASH:
96+
load_hash_restrictions(oid);
97+
break;
98+
}
99+
}
100+
SPI_finish();
90101
}
91102

92103
void

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp