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

Commitfb8697b

Browse files
committed
Avoid unnecessary use of pg_strcasecmp for already-downcased identifiers.
We have a lot of code in which option names, which from the user'sviewpoint are logically keywords, are passed through the grammar as plainidentifiers, and then matched to string literals during command execution.This approach avoids making words into lexer keywords unnecessarily. Someplaces matched these strings using plain strcmp, some using pg_strcasecmp.But the latter should be unnecessary since identifiers would have beendowncased on their way through the parser. Aside from any efficiencyconcerns (probably not a big factor), the lack of consistency in this areacreates a hazard of subtle bugs due to different places coming to differentconclusions about whether two option names are the same or different.Hence, standardize on using strcmp() to match any option names that areexpected to have been fed through the parser.This does create a user-visible behavioral change, which is that whileformerly all of these would work:alter table foo set (fillfactor = 50);alter table foo set (FillFactor = 50);alter table foo set ("fillfactor" = 50);alter table foo set ("FillFactor" = 50);now the last case will fail because that double-quoted identifier isdifferent from the others. However, none of our documentation says thatyou can use a quoted identifier in such contexts at all, and we shoulddiscourage doing so since it would break if we ever decide to parse suchconstructs as true lexer keywords rather than poor man's substitutes.So this shouldn't create a significant compatibility issue for users.Daniel Gustafsson, reviewed by Michael Paquier, small changes by meDiscussion:https://postgr.es/m/29405B24-564E-476B-98C0-677A29805B84@yesql.se
1 parent9fd8b7d commitfb8697b

37 files changed

+318
-143
lines changed

‎contrib/dict_int/dict_int.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,11 @@ dintdict_init(PG_FUNCTION_ARGS)
4242
{
4343
DefElem*defel= (DefElem*)lfirst(l);
4444

45-
if (pg_strcasecmp(defel->defname,"MAXLEN")==0)
45+
if (strcmp(defel->defname,"maxlen")==0)
4646
{
4747
d->maxlen=atoi(defGetString(defel));
4848
}
49-
elseif (pg_strcasecmp(defel->defname,"REJECTLONG")==0)
49+
elseif (strcmp(defel->defname,"rejectlong")==0)
5050
{
5151
d->rejectlong=defGetBoolean(defel);
5252
}

‎contrib/dict_xsyn/dict_xsyn.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -157,23 +157,23 @@ dxsyn_init(PG_FUNCTION_ARGS)
157157
{
158158
DefElem*defel= (DefElem*)lfirst(l);
159159

160-
if (pg_strcasecmp(defel->defname,"MATCHORIG")==0)
160+
if (strcmp(defel->defname,"matchorig")==0)
161161
{
162162
d->matchorig=defGetBoolean(defel);
163163
}
164-
elseif (pg_strcasecmp(defel->defname,"KEEPORIG")==0)
164+
elseif (strcmp(defel->defname,"keeporig")==0)
165165
{
166166
d->keeporig=defGetBoolean(defel);
167167
}
168-
elseif (pg_strcasecmp(defel->defname,"MATCHSYNONYMS")==0)
168+
elseif (strcmp(defel->defname,"matchsynonyms")==0)
169169
{
170170
d->matchsynonyms=defGetBoolean(defel);
171171
}
172-
elseif (pg_strcasecmp(defel->defname,"KEEPSYNONYMS")==0)
172+
elseif (strcmp(defel->defname,"keepsynonyms")==0)
173173
{
174174
d->keepsynonyms=defGetBoolean(defel);
175175
}
176-
elseif (pg_strcasecmp(defel->defname,"RULES")==0)
176+
elseif (strcmp(defel->defname,"rules")==0)
177177
{
178178
/* we can't read the rules before parsing all options! */
179179
filename=defGetString(defel);

‎contrib/unaccent/unaccent.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ unaccent_init(PG_FUNCTION_ARGS)
276276
{
277277
DefElem*defel= (DefElem*)lfirst(l);
278278

279-
if (pg_strcasecmp("Rules",defel->defname)==0)
279+
if (strcmp(defel->defname,"rules")==0)
280280
{
281281
if (fileloaded)
282282
ereport(ERROR,

‎doc/src/sgml/textsearch.sgml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1271,6 +1271,7 @@ ts_headline(<optional> <replaceable class="parameter">config</replaceable> <type
12711271
</listitem>
12721272
</itemizedlist>
12731273

1274+
These option names are recognized case-insensitively.
12741275
Any unspecified options receive these defaults:
12751276

12761277
<programlisting>

‎src/backend/access/common/reloptions.c

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -796,12 +796,12 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace,
796796
}
797797
elseif (def->defnamespace==NULL)
798798
continue;
799-
elseif (pg_strcasecmp(def->defnamespace,namspace)!=0)
799+
elseif (strcmp(def->defnamespace,namspace)!=0)
800800
continue;
801801

802802
kw_len=strlen(def->defname);
803803
if (text_len>kw_len&&text_str[kw_len]=='='&&
804-
pg_strncasecmp(text_str,def->defname,kw_len)==0)
804+
strncmp(text_str,def->defname,kw_len)==0)
805805
break;
806806
}
807807
if (!cell)
@@ -849,8 +849,7 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace,
849849
{
850850
for (i=0;validnsps[i];i++)
851851
{
852-
if (pg_strcasecmp(def->defnamespace,
853-
validnsps[i])==0)
852+
if (strcmp(def->defnamespace,validnsps[i])==0)
854853
{
855854
valid= true;
856855
break;
@@ -865,7 +864,7 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace,
865864
def->defnamespace)));
866865
}
867866

868-
if (ignoreOids&&pg_strcasecmp(def->defname,"oids")==0)
867+
if (ignoreOids&&strcmp(def->defname,"oids")==0)
869868
continue;
870869

871870
/* ignore if not in the same namespace */
@@ -876,7 +875,7 @@ transformRelOptions(Datum oldOptions, List *defList, const char *namspace,
876875
}
877876
elseif (def->defnamespace==NULL)
878877
continue;
879-
elseif (pg_strcasecmp(def->defnamespace,namspace)!=0)
878+
elseif (strcmp(def->defnamespace,namspace)!=0)
880879
continue;
881880

882881
/*
@@ -1082,8 +1081,7 @@ parseRelOptions(Datum options, bool validate, relopt_kind kind,
10821081
intkw_len=reloptions[j].gen->namelen;
10831082

10841083
if (text_len>kw_len&&text_str[kw_len]=='='&&
1085-
pg_strncasecmp(text_str,reloptions[j].gen->name,
1086-
kw_len)==0)
1084+
strncmp(text_str,reloptions[j].gen->name,kw_len)==0)
10871085
{
10881086
parse_one_reloption(&reloptions[j],text_str,text_len,
10891087
validate);
@@ -1262,7 +1260,7 @@ fillRelOptions(void *rdopts, Size basesize,
12621260

12631261
for (j=0;j<numelems;j++)
12641262
{
1265-
if (pg_strcasecmp(options[i].gen->name,elems[j].optname)==0)
1263+
if (strcmp(options[i].gen->name,elems[j].optname)==0)
12661264
{
12671265
relopt_string*optstring;
12681266
char*itempos= ((char*)rdopts)+elems[j].offset;
@@ -1556,9 +1554,9 @@ AlterTableGetRelOptionsLockLevel(List *defList)
15561554

15571555
for (i=0;relOpts[i];i++)
15581556
{
1559-
if (pg_strncasecmp(relOpts[i]->name,
1560-
def->defname,
1561-
relOpts[i]->namelen+1)==0)
1557+
if (strncmp(relOpts[i]->name,
1558+
def->defname,
1559+
relOpts[i]->namelen+1)==0)
15621560
{
15631561
if (lockmode<relOpts[i]->lockmode)
15641562
lockmode=relOpts[i]->lockmode;

‎src/backend/commands/aggregatecmds.c

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -127,37 +127,37 @@ DefineAggregate(ParseState *pstate, List *name, List *args, bool oldstyle, List
127127
* sfunc1, stype1, and initcond1 are accepted as obsolete spellings
128128
* for sfunc, stype, initcond.
129129
*/
130-
if (pg_strcasecmp(defel->defname,"sfunc")==0)
130+
if (strcmp(defel->defname,"sfunc")==0)
131131
transfuncName=defGetQualifiedName(defel);
132-
elseif (pg_strcasecmp(defel->defname,"sfunc1")==0)
132+
elseif (strcmp(defel->defname,"sfunc1")==0)
133133
transfuncName=defGetQualifiedName(defel);
134-
elseif (pg_strcasecmp(defel->defname,"finalfunc")==0)
134+
elseif (strcmp(defel->defname,"finalfunc")==0)
135135
finalfuncName=defGetQualifiedName(defel);
136-
elseif (pg_strcasecmp(defel->defname,"combinefunc")==0)
136+
elseif (strcmp(defel->defname,"combinefunc")==0)
137137
combinefuncName=defGetQualifiedName(defel);
138-
elseif (pg_strcasecmp(defel->defname,"serialfunc")==0)
138+
elseif (strcmp(defel->defname,"serialfunc")==0)
139139
serialfuncName=defGetQualifiedName(defel);
140-
elseif (pg_strcasecmp(defel->defname,"deserialfunc")==0)
140+
elseif (strcmp(defel->defname,"deserialfunc")==0)
141141
deserialfuncName=defGetQualifiedName(defel);
142-
elseif (pg_strcasecmp(defel->defname,"msfunc")==0)
142+
elseif (strcmp(defel->defname,"msfunc")==0)
143143
mtransfuncName=defGetQualifiedName(defel);
144-
elseif (pg_strcasecmp(defel->defname,"minvfunc")==0)
144+
elseif (strcmp(defel->defname,"minvfunc")==0)
145145
minvtransfuncName=defGetQualifiedName(defel);
146-
elseif (pg_strcasecmp(defel->defname,"mfinalfunc")==0)
146+
elseif (strcmp(defel->defname,"mfinalfunc")==0)
147147
mfinalfuncName=defGetQualifiedName(defel);
148-
elseif (pg_strcasecmp(defel->defname,"finalfunc_extra")==0)
148+
elseif (strcmp(defel->defname,"finalfunc_extra")==0)
149149
finalfuncExtraArgs=defGetBoolean(defel);
150-
elseif (pg_strcasecmp(defel->defname,"mfinalfunc_extra")==0)
150+
elseif (strcmp(defel->defname,"mfinalfunc_extra")==0)
151151
mfinalfuncExtraArgs=defGetBoolean(defel);
152-
elseif (pg_strcasecmp(defel->defname,"finalfunc_modify")==0)
152+
elseif (strcmp(defel->defname,"finalfunc_modify")==0)
153153
finalfuncModify=extractModify(defel);
154-
elseif (pg_strcasecmp(defel->defname,"mfinalfunc_modify")==0)
154+
elseif (strcmp(defel->defname,"mfinalfunc_modify")==0)
155155
mfinalfuncModify=extractModify(defel);
156-
elseif (pg_strcasecmp(defel->defname,"sortop")==0)
156+
elseif (strcmp(defel->defname,"sortop")==0)
157157
sortoperatorName=defGetQualifiedName(defel);
158-
elseif (pg_strcasecmp(defel->defname,"basetype")==0)
158+
elseif (strcmp(defel->defname,"basetype")==0)
159159
baseType=defGetTypeName(defel);
160-
elseif (pg_strcasecmp(defel->defname,"hypothetical")==0)
160+
elseif (strcmp(defel->defname,"hypothetical")==0)
161161
{
162162
if (defGetBoolean(defel))
163163
{
@@ -168,23 +168,23 @@ DefineAggregate(ParseState *pstate, List *name, List *args, bool oldstyle, List
168168
aggKind=AGGKIND_HYPOTHETICAL;
169169
}
170170
}
171-
elseif (pg_strcasecmp(defel->defname,"stype")==0)
171+
elseif (strcmp(defel->defname,"stype")==0)
172172
transType=defGetTypeName(defel);
173-
elseif (pg_strcasecmp(defel->defname,"stype1")==0)
173+
elseif (strcmp(defel->defname,"stype1")==0)
174174
transType=defGetTypeName(defel);
175-
elseif (pg_strcasecmp(defel->defname,"sspace")==0)
175+
elseif (strcmp(defel->defname,"sspace")==0)
176176
transSpace=defGetInt32(defel);
177-
elseif (pg_strcasecmp(defel->defname,"mstype")==0)
177+
elseif (strcmp(defel->defname,"mstype")==0)
178178
mtransType=defGetTypeName(defel);
179-
elseif (pg_strcasecmp(defel->defname,"msspace")==0)
179+
elseif (strcmp(defel->defname,"msspace")==0)
180180
mtransSpace=defGetInt32(defel);
181-
elseif (pg_strcasecmp(defel->defname,"initcond")==0)
181+
elseif (strcmp(defel->defname,"initcond")==0)
182182
initval=defGetString(defel);
183-
elseif (pg_strcasecmp(defel->defname,"initcond1")==0)
183+
elseif (strcmp(defel->defname,"initcond1")==0)
184184
initval=defGetString(defel);
185-
elseif (pg_strcasecmp(defel->defname,"minitcond")==0)
185+
elseif (strcmp(defel->defname,"minitcond")==0)
186186
minitval=defGetString(defel);
187-
elseif (pg_strcasecmp(defel->defname,"parallel")==0)
187+
elseif (strcmp(defel->defname,"parallel")==0)
188188
parallel=defGetString(defel);
189189
else
190190
ereport(WARNING,
@@ -420,11 +420,11 @@ DefineAggregate(ParseState *pstate, List *name, List *args, bool oldstyle, List
420420

421421
if (parallel)
422422
{
423-
if (pg_strcasecmp(parallel,"safe")==0)
423+
if (strcmp(parallel,"safe")==0)
424424
proparallel=PROPARALLEL_SAFE;
425-
elseif (pg_strcasecmp(parallel,"restricted")==0)
425+
elseif (strcmp(parallel,"restricted")==0)
426426
proparallel=PROPARALLEL_RESTRICTED;
427-
elseif (pg_strcasecmp(parallel,"unsafe")==0)
427+
elseif (strcmp(parallel,"unsafe")==0)
428428
proparallel=PROPARALLEL_UNSAFE;
429429
else
430430
ereport(ERROR,

‎src/backend/commands/collationcmds.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,17 @@ DefineCollation(ParseState *pstate, List *names, List *parameters, bool if_not_e
8282
DefElem*defel=lfirst_node(DefElem,pl);
8383
DefElem**defelp;
8484

85-
if (pg_strcasecmp(defel->defname,"from")==0)
85+
if (strcmp(defel->defname,"from")==0)
8686
defelp=&fromEl;
87-
elseif (pg_strcasecmp(defel->defname,"locale")==0)
87+
elseif (strcmp(defel->defname,"locale")==0)
8888
defelp=&localeEl;
89-
elseif (pg_strcasecmp(defel->defname,"lc_collate")==0)
89+
elseif (strcmp(defel->defname,"lc_collate")==0)
9090
defelp=&lccollateEl;
91-
elseif (pg_strcasecmp(defel->defname,"lc_ctype")==0)
91+
elseif (strcmp(defel->defname,"lc_ctype")==0)
9292
defelp=&lcctypeEl;
93-
elseif (pg_strcasecmp(defel->defname,"provider")==0)
93+
elseif (strcmp(defel->defname,"provider")==0)
9494
defelp=&providerEl;
95-
elseif (pg_strcasecmp(defel->defname,"version")==0)
95+
elseif (strcmp(defel->defname,"version")==0)
9696
defelp=&versionEl;
9797
else
9898
{

‎src/backend/commands/operatorcmds.c

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -105,44 +105,44 @@ DefineOperator(List *names, List *parameters)
105105
{
106106
DefElem*defel= (DefElem*)lfirst(pl);
107107

108-
if (pg_strcasecmp(defel->defname,"leftarg")==0)
108+
if (strcmp(defel->defname,"leftarg")==0)
109109
{
110110
typeName1=defGetTypeName(defel);
111111
if (typeName1->setof)
112112
ereport(ERROR,
113113
(errcode(ERRCODE_INVALID_FUNCTION_DEFINITION),
114114
errmsg("SETOF type not allowed for operator argument")));
115115
}
116-
elseif (pg_strcasecmp(defel->defname,"rightarg")==0)
116+
elseif (strcmp(defel->defname,"rightarg")==0)
117117
{
118118
typeName2=defGetTypeName(defel);
119119
if (typeName2->setof)
120120
ereport(ERROR,
121121
(errcode(ERRCODE_INVALID_FUNCTION_DEFINITION),
122122
errmsg("SETOF type not allowed for operator argument")));
123123
}
124-
elseif (pg_strcasecmp(defel->defname,"procedure")==0)
124+
elseif (strcmp(defel->defname,"procedure")==0)
125125
functionName=defGetQualifiedName(defel);
126-
elseif (pg_strcasecmp(defel->defname,"commutator")==0)
126+
elseif (strcmp(defel->defname,"commutator")==0)
127127
commutatorName=defGetQualifiedName(defel);
128-
elseif (pg_strcasecmp(defel->defname,"negator")==0)
128+
elseif (strcmp(defel->defname,"negator")==0)
129129
negatorName=defGetQualifiedName(defel);
130-
elseif (pg_strcasecmp(defel->defname,"restrict")==0)
130+
elseif (strcmp(defel->defname,"restrict")==0)
131131
restrictionName=defGetQualifiedName(defel);
132-
elseif (pg_strcasecmp(defel->defname,"join")==0)
132+
elseif (strcmp(defel->defname,"join")==0)
133133
joinName=defGetQualifiedName(defel);
134-
elseif (pg_strcasecmp(defel->defname,"hashes")==0)
134+
elseif (strcmp(defel->defname,"hashes")==0)
135135
canHash=defGetBoolean(defel);
136-
elseif (pg_strcasecmp(defel->defname,"merges")==0)
136+
elseif (strcmp(defel->defname,"merges")==0)
137137
canMerge=defGetBoolean(defel);
138138
/* These obsolete options are taken as meaning canMerge */
139-
elseif (pg_strcasecmp(defel->defname,"sort1")==0)
139+
elseif (strcmp(defel->defname,"sort1")==0)
140140
canMerge= true;
141-
elseif (pg_strcasecmp(defel->defname,"sort2")==0)
141+
elseif (strcmp(defel->defname,"sort2")==0)
142142
canMerge= true;
143-
elseif (pg_strcasecmp(defel->defname,"ltcmp")==0)
143+
elseif (strcmp(defel->defname,"ltcmp")==0)
144144
canMerge= true;
145-
elseif (pg_strcasecmp(defel->defname,"gtcmp")==0)
145+
elseif (strcmp(defel->defname,"gtcmp")==0)
146146
canMerge= true;
147147
else
148148
{
@@ -420,12 +420,12 @@ AlterOperator(AlterOperatorStmt *stmt)
420420
else
421421
param=defGetQualifiedName(defel);
422422

423-
if (pg_strcasecmp(defel->defname,"restrict")==0)
423+
if (strcmp(defel->defname,"restrict")==0)
424424
{
425425
restrictionName=param;
426426
updateRestriction= true;
427427
}
428-
elseif (pg_strcasecmp(defel->defname,"join")==0)
428+
elseif (strcmp(defel->defname,"join")==0)
429429
{
430430
joinName=param;
431431
updateJoin= true;
@@ -435,13 +435,13 @@ AlterOperator(AlterOperatorStmt *stmt)
435435
* The rest of the options that CREATE accepts cannot be changed.
436436
* Check for them so that we can give a meaningful error message.
437437
*/
438-
elseif (pg_strcasecmp(defel->defname,"leftarg")==0||
439-
pg_strcasecmp(defel->defname,"rightarg")==0||
440-
pg_strcasecmp(defel->defname,"procedure")==0||
441-
pg_strcasecmp(defel->defname,"commutator")==0||
442-
pg_strcasecmp(defel->defname,"negator")==0||
443-
pg_strcasecmp(defel->defname,"hashes")==0||
444-
pg_strcasecmp(defel->defname,"merges")==0)
438+
elseif (strcmp(defel->defname,"leftarg")==0||
439+
strcmp(defel->defname,"rightarg")==0||
440+
strcmp(defel->defname,"procedure")==0||
441+
strcmp(defel->defname,"commutator")==0||
442+
strcmp(defel->defname,"negator")==0||
443+
strcmp(defel->defname,"hashes")==0||
444+
strcmp(defel->defname,"merges")==0)
445445
{
446446
ereport(ERROR,
447447
(errcode(ERRCODE_SYNTAX_ERROR),

‎src/backend/commands/tablecmds.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10536,7 +10536,7 @@ ATExecSetRelOptions(Relation rel, List *defList, AlterTableType operation,
1053610536
{
1053710537
DefElem*defel= (DefElem*)lfirst(cell);
1053810538

10539-
if (pg_strcasecmp(defel->defname,"check_option")==0)
10539+
if (strcmp(defel->defname,"check_option")==0)
1054010540
check_option= true;
1054110541
}
1054210542

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp