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

Commit1bdd7c6

Browse files
committed
Avoid redundant SysCache searches in coerce_type, for another
few percent speedup in INSERT...
1 parentb325dab commit1bdd7c6

File tree

4 files changed

+24
-37
lines changed

4 files changed

+24
-37
lines changed

‎src/backend/parser/parse_coerce.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.16 1999/05/25 16:10:15 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.17 1999/05/29 03:17:19 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -39,6 +39,7 @@ coerce_type(ParseState *pstate, Node *node, Oid inputTypeId, Oid targetTypeId,
3939
int32atttypmod)
4040
{
4141
Node*result=NULL;
42+
TypetargetType;
4243
Oidinfunc;
4344
Datumval;
4445

@@ -79,10 +80,11 @@ coerce_type(ParseState *pstate, Node *node, Oid inputTypeId, Oid targetTypeId,
7980
Const*con= (Const*)node;
8081

8182
val= (Datum)textout((structvarlena*)con->constvalue);
82-
infunc=typeidInfunc(targetTypeId);
83+
targetType=typeidType(targetTypeId);
84+
infunc=typeInfunc(targetType);
8385
con=makeNode(Const);
8486
con->consttype=targetTypeId;
85-
con->constlen=typeLen(typeidType(targetTypeId));
87+
con->constlen=typeLen(targetType);
8688

8789
/*
8890
* Use "-1" for varchar() type. For char(), we need to pad
@@ -92,10 +94,10 @@ coerce_type(ParseState *pstate, Node *node, Oid inputTypeId, Oid targetTypeId,
9294
*/
9395
con->constvalue= (Datum)fmgr(infunc,
9496
val,
95-
typeidTypElem(targetTypeId),
97+
typeTypElem(targetType),
9698
(targetTypeId!=BPCHAROID) ?-1 :atttypmod);
9799
con->constisnull= false;
98-
con->constbyval=typeByVal(typeidType(targetTypeId));
100+
con->constbyval=typeByVal(targetType);
99101
con->constisset= false;
100102
result= (Node*)con;
101103
}

‎src/backend/parser/parse_target.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.40 1999/05/25 16:10:21 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.41 1999/05/29 03:17:20 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -241,7 +241,7 @@ MakeTargetEntryExpr(ParseState *pstate,
241241
Oidtypelem;
242242

243243
if (arrayRef&& !(((A_Indices*)lfirst(arrayRef))->lidx))
244-
typelem=typeidTypElem(attrtype);
244+
typelem=typeTypElem(typeidType(attrtype));
245245
else
246246
typelem=attrtype;
247247

‎src/backend/parser/parse_type.c

Lines changed: 12 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
*
88
*
99
* IDENTIFICATION
10-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.21 1999/05/25 16:10:22 momjian Exp $
10+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_type.c,v 1.22 1999/05/29 03:17:19 tgl Exp $
1111
*
1212
*-------------------------------------------------------------------------
1313
*/
@@ -58,7 +58,7 @@ typeidTypeName(Oid id)
5858
return (typetuple->typname).data;
5959
}
6060

61-
/* return a Type structure, givenan typid */
61+
/* return a Type structure, givena type id */
6262
Type
6363
typeidType(Oidid)
6464
{
@@ -180,7 +180,6 @@ typeidTypeRelid(Oid type_id)
180180
{
181181
HeapTupletypeTuple;
182182
Form_pg_typetype;
183-
Oidinfunc;
184183

185184
typeTuple=SearchSysCacheTuple(TYPOID,
186185
ObjectIdGetDatum(type_id),
@@ -189,8 +188,7 @@ typeidTypeRelid(Oid type_id)
189188
elog(ERROR,"typeidTypeRelid: Invalid type - oid = %u",type_id);
190189

191190
type= (Form_pg_type)GETSTRUCT(typeTuple);
192-
infunc=type->typrelid;
193-
returninfunc;
191+
returntype->typrelid;
194192
}
195193

196194
Oid
@@ -204,18 +202,13 @@ typeTypeRelid(Type typ)
204202
}
205203

206204
Oid
207-
typeidTypElem(Oidtype_id)
205+
typeTypElem(Typetyp)
208206
{
209-
HeapTupletypeTuple;
210-
Form_pg_typetype;
207+
Form_pg_typetyptup;
211208

212-
if (!(typeTuple=SearchSysCacheTuple(TYPOID,
213-
ObjectIdGetDatum(type_id),
214-
0,0,0)))
215-
elog(ERROR,"type id lookup of %u failed",type_id);
216-
type= (Form_pg_type)GETSTRUCT(typeTuple);
209+
typtup= (Form_pg_type)GETSTRUCT(typ);
217210

218-
returntype->typelem;
211+
returntyptup->typelem;
219212
}
220213

221214
/* Given the attribute type of an array return the attribute type of
@@ -247,21 +240,13 @@ GetArrayElementType(Oid typearray)
247240
returntype_struct_array->typelem;
248241
}
249242

250-
/* Given a typeid, returns the in-conversion function of the type */
243+
/* Given a typestructure, return the in-conversion function of the type */
251244
Oid
252-
typeidInfunc(Oidtype_id)
245+
typeInfunc(Typetyp)
253246
{
254-
HeapTupletypeTuple;
255-
Form_pg_typetype;
256-
Oidinfunc;
247+
Form_pg_typetyptup;
257248

258-
typeTuple=SearchSysCacheTuple(TYPOID,
259-
ObjectIdGetDatum(type_id),
260-
0,0,0);
261-
if (!HeapTupleIsValid(typeTuple))
262-
elog(ERROR,"typeidInfunc: Invalid type - oid = %u",type_id);
249+
typtup= (Form_pg_type)GETSTRUCT(typ);
263250

264-
type= (Form_pg_type)GETSTRUCT(typeTuple);
265-
infunc=type->typinput;
266-
returninfunc;
251+
returntyptup->typinput;
267252
}

‎src/include/parser/parse_type.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*
77
* Copyright (c) 1994, Regents of the University of California
88
*
9-
* $Id: parse_type.h,v 1.9 1998/10/08 18:30:39 momjian Exp $
9+
* $Id: parse_type.h,v 1.10 1999/05/29 03:17:19 tgl Exp $
1010
*
1111
*-------------------------------------------------------------------------
1212
*/
@@ -29,8 +29,8 @@ extern char typeTypeFlag(Type t);
2929
externchar*stringTypeString(Typetp,char*string,int32atttypmod);
3030
externOidtypeidTypeRelid(Oidtype_id);
3131
externOidtypeTypeRelid(Typetyp);
32-
externOidtypeidTypElem(Oidtype_id);
32+
externOidtypeTypElem(Typetyp);
3333
externOidGetArrayElementType(Oidtypearray);
34-
externOidtypeidInfunc(Oidtype_id);
34+
externOidtypeInfunc(Typetyp);
3535

3636
#endif/* PARSE_TYPE_H */

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp