Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxLh8-009fnI-2e for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 09:05:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxLh6-00609y-10 for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Mar 2026 09:05:32 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxLh5-00609p-0r for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 09:05:32 +0000 Received: from mail-pf1-x42a.google.com ([2607:f8b0:4864:20::42a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxLh0-000000009bZ-052F for pgsql-hackers@lists.postgresql.org; Tue, 03 Mar 2026 09:05:30 +0000 Received: by mail-pf1-x42a.google.com with SMTP id d2e1a72fcca58-82747396358so2677237b3a.0 for ; Tue, 03 Mar 2026 01:05:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772528723; x=1773133523; darn=lists.postgresql.org; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:from:to:cc:subject:date:message-id:reply-to; bh=e07Nlc2m2UW6IuokFX/h+NNGN96LM4+QBveMSfoGynU=; b=XHySOg38Jt3EO9qAm4svXyjh6Q6Mnvoqzkn1ZdfMiHBgOekOBAmnBE1kan8dcHNtpw xIxBMVCN20PmrA5lZaaR1za+pfaXXZ82rj3RW6SX70d+D5hXDYlHUymwK13CssiuvlXV dz1cBkWQkQMHVECys5wEcH/HJZmsMvSwxGSquLsrHByKuo0fDBk7g1GWtgv7MPTObET4 /dkCtkiBiEaIF3EQky9yY+/40yUeJO0aXFdZORFEjXwRd8ejJEjicTpjRT6GsoMXKfym diwZkUiFk/NR+2AP4JR/SSdrgAdU+QzGfGg5upxh92U9xS29FwYlnfCa80ZXMPdg9Szz CgjA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772528723; x=1773133523; h=references:to:cc:in-reply-to:date:subject:mime-version:message-id :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=e07Nlc2m2UW6IuokFX/h+NNGN96LM4+QBveMSfoGynU=; b=tQYnzaJWyk726eomGuPC6U2kxWQvsXJkZPRUKyv+0Y/hGyQo2ooDKMlmLQi8OwR54U zYv07fjUGE7F1fonkJz5YlB0UNmeM/aVT8NTxVqFWhd2kBFSDWUOMI/y4m6ZRsqPm8RI OpFiNdwIsK2r0fmy0RFaTU1rlZABeB92+XNYwr02ytYE8tIgoM3IK4f49WgAUtp3ZEJF +Z12NhlyAGpcbKBeR1cjsRS9dKT3Ppqtmueij58asH1ugxgHasg2KNd8k3TWPNxTpBFa 6nL4rPPRDJJvJr5e+3fgjjKVqoSXY8Eny+SRX9Dc5VtQ9SAEIl0XwrE/fy5daaLD9pAH 4hzQ== X-Gm-Message-State: AOJu0Yz/0md5W+tyx31emylPwcsZLHp/QWSrUBq9cneYY1CZOHX36aJ2 fkJMiAeo2h1h4KB855ooLkVvAX4UNoSZi2TjMMev14KpKmdGrR2XCqFASuHbz5Uc X-Gm-Gg: ATEYQzy8jaC1W+qTqvqeVJ6DbBqTqUcyankJhjUaocf68ew5UEUgpiWfvm8p1xznC/g 1sBPqCeT+Rc1vajVpKbCzFlPPlCOnKDxJBhYyDCbd/WI8dGbakt1E7m5Pc49pu6zaNKYA7WR8fn bi9/wwmWa2OMXXO9gCtw+ZBhdZMGDUjnBjj+tPwao1E3vEOVaRZMhXs38gCbZqBOX2+SH/uIg2V mpFTxH9rToYOUkiRKfPmauwhFKIrUsT8S5E2yWXogg6mtaFtbErVCIOHHBdgSh0H1X/KheKL3HL 5ikcjTqW1DUy1ZbyHOIOtUGMSs8z8enJY8ehoH4zET0fuJK0nSkCpsv83g9nw+wnPAoNLh3XdLp F1zr/c2VQcU+995PNCv7KtBCf19xh19NCg/In7G3CagkttScu5wAz4U7Fsdo1jhvkpE3kTcp0Zv sSGQjlMQjKI3FnxoGIO0bDiOn6TuI9Vfw= X-Received: by 2002:a17:90b:5710:b0:356:23be:7ecb with SMTP id 98e67ed59e1d1-35965c34bc7mr11267249a91.12.1772528722945; Tue, 03 Mar 2026 01:05:22 -0800 (PST) Received: from smtpclient.apple ([203.76.245.26]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3599c4e2f85sm1949524a91.17.2026.03.03.01.05.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Mar 2026 01:05:21 -0800 (PST) From: Chao Li Message-Id: Content-Type: multipart/mixed; boundary="Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C" Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3864.400.21\)) Subject: Re: Cleanup shadows variable warnings, round 1 Date: Tue, 3 Mar 2026 17:04:47 +0800 In-Reply-To: Cc: Peter Eisentraut , Peter Smith To: Postgres hackers References: X-Mailer: Apple Mail (2.3864.400.21) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On Dec 4, 2025, at 17:10, Chao Li wrote: >=20 >=20 >=20 >> On Dec 4, 2025, at 09:08, Peter Smith wrote: >>=20 >> FWIW... A few more review comments for v3. >>=20 >> ////////// >> Patch v3-0001. >> ////////// >=20 > This is actually 0002. >=20 >>=20 >> =3D=3D=3D=3D=3D=3D >> src/backend/access/gist/gistbuild.c >>=20 >> 2.1. >> OK, but should you take it 1 step further? >>=20 >> BEFORE >> foreach(lc, splitinfo) >> { >> GISTPageSplitInfo *si =3D lfirst(lc); >> AFTER >> foreach_ptr(GISTPageSplitInfo, si, splitinfo) >> { >>=20 >> =3D=3D=3D=3D=3D=3D >> src/backend/commands/schemacmds.c >>=20 >=20 > Fixed. >=20 >> 2.2. >> OK, but should you take it 1 step further? >>=20 >> BEFORE >> foreach(parsetree_item, parsetree_list) >> { >> Node *substmt =3D (Node *) lfirst(parsetree_item); >> AFTER >> foreach_ptr(Node, substmt, parsetree_list) >> { >>=20 >=20 > Fixed. >=20 >> =3D=3D=3D=3D=3D=3D >> src/backend/commands/statscmds.c >>=20 >> 2.3. >> OK, but I felt 'attnums_bms' might be a better replacement name than = 'attnumsbm' >>=20 >=20 > Fixed. >=20 >> =3D=3D=3D=3D=3D=3D >> src/backend/executor/nodeValuesscan.c >> 2.4. >> OK, but should you take it 1 step further? >>=20 >> BEFORE >> foreach(lc, exprstatelist) >> { >> ExprState *exprstate =3D (ExprState *) lfirst(lc); >> AFTER >> foreach_ptr(ExprState, exprstate, exprstatelist) >> { >>=20 >=20 > Fixed. >=20 >> =3D=3D=3D=3D=3D=3D >> src/backend/statistics/dependencies.c >>=20 >> 2.5. >> The other variable in other parts of this function had names like: >> clause_expr >> bool_expr >> or_expr >> stat_expr >>=20 >> So, perhaps your new names should be changed slightly to look more >> similar to those? >>=20 >=20 > Fixed. >=20 >> =3D=3D=3D=3D=3D=3D >> src/backend/statistics/extended_stats.c >>=20 >> 2.6. >> This seems to be in the wrong patch because here you renamed the = local >> var, not the inner one, as the patch commit message says. >>=20 >=20 > Moved to 0003. >=20 >> =3D=3D=3D=3D=3D=3D >> src/backend/utils/adt/jsonpath_exec.c >>=20 >> 2.7. >> Wondering if 'vals' might be a better name than 'foundJV' (there is >> already another JsonValueList vals elsewhere in this code). >>=20 >=20 > Fixed. >=20 >> =3D=3D=3D=3D=3D=3D >> src/bin/pgbench/pgbench.c >>=20 >> 2.8. >> Wondering if 'nskipped' is a better name than 'skips'. >>=20 >=20 > The around variables all use =E2=80=9Cs=E2=80=9D: > ``` > int64 skips =3D 0; > int64 serialization_failures =3D 0; > int64 deadlock_failures =3D 0; > int64 other_sql_failures =3D 0; > int64 retried =3D 0; > int64 retries =3D 0; > ``` >=20 > That=E2=80=99s why I used the =E2=80=9Cs=E2=80=9D form. >=20 > All fixes are in v5. >=20 > Best regards, > -- > Chao Li (Evan) > HighGo Software Co., Ltd. > https://www.highgo.com/ >=20 >=20 >=20 >=20 > = Gentle ping as I saw a recent commit = cdaa67565867ba443afb66b9e82023d65487dc7c that cleaned up a single = occurrence in pg_trgm. Rebased to v6. Best regards, -- Chao Li (Evan) HighGo Software Co., Ltd. https://www.highgo.com/ --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0001-cleanup-rename-loop-variables-to-avoid-local-shad.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0001-cleanup-rename-loop-variables-to-avoid-local-shad.patch" Content-Transfer-Encoding: quoted-printable =46rom=207f9049b4b1dedf3c9945ce4da42177d62b529275=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2009:22:47=20+0800=0ASubject:=20[PATCH=20= v6=2001/13]=20cleanup:=20rename=20loop=20variables=20to=20avoid=20local=0A= =20shadowing=0AMIME-Version:=201.0=0AContent-Type:=20text/plain;=20= charset=3DUTF-8=0AContent-Transfer-Encoding:=208bit=0A=0AThis=20commit=20= adjusts=20several=20code=20locations=20where=20a=20local=20variable=20= was=0Ashadowed=20by=20another=20in=20the=20same=20scope.=20The=20changes=20= update=20loop-variable=0Anames=20in=20basebackup_incremental.c=20and=20= parse_target.c=20so=20that=20each=0Avariable=20is=20uniquely=20scoped=20= within=20its=20block.=0A=0AAuthor:=20Chao=20Li=20=0A= Reviewed-by:=20Peter=20Smith=20=0AReviewed-by:=20= =C3=81lvaro=20Herrera=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/backup/basebackup_incremental.c=20= |=2010=20++++------=0A=20src/backend/parser/parse_target.c=20=20=20=20=20= =20=20=20=20=20=20|=2010=20++++------=0A=202=20files=20changed,=208=20= insertions(+),=2012=20deletions(-)=0A=0Adiff=20--git=20= a/src/backend/backup/basebackup_incremental.c=20= b/src/backend/backup/basebackup_incremental.c=0Aindex=20= f58ed9b198a..6f3552c6a4a=20100644=0A---=20= a/src/backend/backup/basebackup_incremental.c=0A+++=20= b/src/backend/backup/basebackup_incremental.c=0A@@=20-270,7=20+270,6=20= @@=20PrepareForIncrementalBackup(IncrementalBackupInfo=20*ib,=0A=20=09= ListCell=20=20=20*lc;=0A=20=09TimeLineHistoryEntry=20**tlep;=0A=20=09int=09= =09=09num_wal_ranges;=0A-=09int=09=09=09i;=0A=20=09bool=09=09= found_backup_start_tli=20=3D=20false;=0A=20=09TimeLineID=09= earliest_wal_range_tli=20=3D=200;=0A=20=09XLogRecPtr=09= earliest_wal_range_start_lsn=20=3D=20InvalidXLogRecPtr;=0A@@=20-312,7=20= +311,7=20@@=20PrepareForIncrementalBackup(IncrementalBackupInfo=20*ib,=0A= =20=09=20*/=0A=20=09expectedTLEs=20=3D=20= readTimeLineHistory(backup_state->starttli);=0A=20=09tlep=20=3D=20= palloc0(num_wal_ranges=20*=20sizeof(TimeLineHistoryEntry=20*));=0A-=09= for=20(i=20=3D=200;=20i=20<=20num_wal_ranges;=20++i)=0A+=09for=20(int=20= i=20=3D=200;=20i=20<=20num_wal_ranges;=20++i)=0A=20=09{=0A=20=09=09= backup_wal_range=20*range=20=3D=20list_nth(ib->manifest_wal_ranges,=20= i);=0A=20=09=09bool=09=09saw_earliest_wal_range_tli=20=3D=20false;=0A@@=20= -400,7=20+399,7=20@@=20PrepareForIncrementalBackup(IncrementalBackupInfo=20= *ib,=0A=20=09=20*=20anything=20here.=20However,=20if=20there's=20a=20= problem=20staring=20us=20right=20in=20the=0A=20=09=20*=20face,=20it's=20= best=20to=20report=20it,=20so=20we=20do.=0A=20=09=20*/=0A-=09for=20(i=20= =3D=200;=20i=20<=20num_wal_ranges;=20++i)=0A+=09for=20(int=20i=20=3D=20= 0;=20i=20<=20num_wal_ranges;=20++i)=0A=20=09{=0A=20=09=09= backup_wal_range=20*range=20=3D=20list_nth(ib->manifest_wal_ranges,=20= i);=0A=20=0A@@=20-595,15=20+594,14=20@@=20= PrepareForIncrementalBackup(IncrementalBackupInfo=20*ib,=0A=20=0A=20=09=09= =09while=20(1)=0A=20=09=09=09{=0A-=09=09=09=09unsigned=09nblocks;=0A-=09=09= =09=09unsigned=09i;=0A+=09=09=09=09unsigned=20int=20nblocks;=0A=20=0A=20=09= =09=09=09nblocks=20=3D=20BlockRefTableReaderGetBlocks(reader,=20blocks,=0A= =20=09=09=09=09=09=09=09=09=09=09=09=09=09=20=20=20BLOCKS_PER_READ);=0A=20= =09=09=09=09if=20(nblocks=20=3D=3D=200)=0A=20=09=09=09=09=09break;=0A=20=0A= -=09=09=09=09for=20(i=20=3D=200;=20i=20<=20nblocks;=20++i)=0A+=09=09=09=09= for=20(unsigned=20int=20i=20=3D=200;=20i=20<=20nblocks;=20++i)=0A=20=09=09= =09=09=09BlockRefTableMarkBlockModified(ib->brtab,=20&rlocator,=0A=20=09=09= =09=09=09=09=09=09=09=09=09=09=20=20=20forknum,=20blocks[i]);=0A=20=09=09= =09}=0Adiff=20--git=20a/src/backend/parser/parse_target.c=20= b/src/backend/parser/parse_target.c=0Aindex=20dbf5b2b5c01..3bcfc1f5e3d=20= 100644=0A---=20a/src/backend/parser/parse_target.c=0A+++=20= b/src/backend/parser/parse_target.c=0A@@=20-1611,10=20+1611,9=20@@=20= expandRecordVariable(ParseState=20*pstate,=20Var=20*var,=20int=20= levelsup)=0A=20=09=09=09=09=09=20*=20subselect=20must=20have=20that=20= outer=20level=20as=20parent.=0A=20=09=09=09=09=09=20*/=0A=20=09=09=09=09=09= ParseState=09mypstate=20=3D=20{0};=0A-=09=09=09=09=09Index=09=09= levelsup;=0A=20=0A=20=09=09=09=09=09/*=20this=20loop=20must=20work,=20= since=20GetRTEByRangeTablePosn=20did=20*/=0A-=09=09=09=09=09for=20= (levelsup=20=3D=200;=20levelsup=20<=20netlevelsup;=20levelsup++)=0A+=09=09= =09=09=09for=20(Index=20level=20=3D=200;=20level=20<=20netlevelsup;=20= level++)=0A=20=09=09=09=09=09=09pstate=20=3D=20pstate->parentParseState;=0A= =20=09=09=09=09=09mypstate.parentParseState=20=3D=20pstate;=0A=20=09=09=09= =09=09mypstate.p_rtable=20=3D=20rte->subquery->rtable;=0A@@=20-1669,12=20= +1668,11=20@@=20expandRecordVariable(ParseState=20*pstate,=20Var=20*var,=20= int=20levelsup)=0A=20=09=09=09=09=09=20*=20could=20be=20an=20outer=20CTE=20= (compare=20SUBQUERY=20case=20above).=0A=20=09=09=09=09=09=20*/=0A=20=09=09= =09=09=09ParseState=09mypstate=20=3D=20{0};=0A-=09=09=09=09=09Index=09=09= levelsup;=0A=20=0A=20=09=09=09=09=09/*=20this=20loop=20must=20work,=20= since=20GetCTEForRTE=20did=20*/=0A-=09=09=09=09=09for=20(levelsup=20=3D=20= 0;=0A-=09=09=09=09=09=09=20levelsup=20<=20rte->ctelevelsup=20+=20= netlevelsup;=0A-=09=09=09=09=09=09=20levelsup++)=0A+=09=09=09=09=09for=20= (Index=20level=20=3D=200;=0A+=09=09=09=09=09=09=20level=20<=20= rte->ctelevelsup=20+=20netlevelsup;=0A+=09=09=09=09=09=09=20level++)=0A=20= =09=09=09=09=09=09pstate=20=3D=20pstate->parentParseState;=0A=20=09=09=09= =09=09mypstate.parentParseState=20=3D=20pstate;=0A=20=09=09=09=09=09= mypstate.p_rtable=20=3D=20((Query=20*)=20cte->ctequery)->rtable;=0A--=20=0A= 2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0002-cleanup-rename-inner-variables-to-avoid-shadowing.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0002-cleanup-rename-inner-variables-to-avoid-shadowing.patch" Content-Transfer-Encoding: quoted-printable =46rom=20718bcf8e347f4f0ca282b286c49996ae39a7937e=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2009:32:58=20+0800=0ASubject:=20[PATCH=20= v6=2002/13]=20cleanup:=20rename=20inner=20variables=20to=20avoid=20= shadowing=0A=20by=20outer=20locals=0A=0AThis=20commit=20fixes=20several=20= cases=20where=20a=20variable=20declared=20in=20an=20inner=0Ascope=20was=20= shadowed=20by=20an=20existing=20local=20variable=20in=20the=20outer=20= scope.=20The=0Achanges=20rename=20the=20inner=20variables=20so=20each=20= identifier=20is=20distinct=20within=0Aits=20respective=20block.=0A=0A= Author:=20Chao=20Li=20=0AReviewed-by:=20Peter=20Smith=20= =0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/access/brin/brin.c=20=20=20=20=20=20= =20=20=20=20=20=20=20|=20=208=20++--=0A=20= src/backend/access/gist/gistbuild.c=20=20=20=20=20=20=20=20|=2013=20= +++----=0A=20src/backend/commands/extension.c=20=20=20=20=20=20=20=20=20=20= =20|=20=208=20++--=0A=20src/backend/commands/schemacmds.c=20=20=20=20=20=20= =20=20=20=20|=20=206=20+--=0A=20src/backend/commands/statscmds.c=20=20=20= =20=20=20=20=20=20=20=20|=20=206=20+--=0A=20= src/backend/commands/tablecmds.c=20=20=20=20=20=20=20=20=20=20=20|=2028=20= +++++++-------=0A=20src/backend/commands/trigger.c=20=20=20=20=20=20=20=20= =20=20=20=20=20|=2014=20+++----=0A=20src/backend/commands/wait.c=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20|=2012=20+++---=0A=20= src/backend/executor/nodeAgg.c=20=20=20=20=20=20=20=20=20=20=20=20=20|=20= 16=20++++----=0A=20src/backend/executor/nodeValuesscan.c=20=20=20=20=20=20= |=20=206=20+--=0A=20src/backend/optimizer/plan/createplan.c=20=20=20=20|=20= 44=20+++++++++++-----------=0A=20src/backend/statistics/dependencies.c=20= =20=20=20=20=20|=2026=20++++++-------=0A=20= src/backend/storage/buffer/bufmgr.c=20=20=20=20=20=20=20=20|=20=206=20= +--=0A=20src/backend/utils/adt/jsonpath_exec.c=20=20=20=20=20=20|=2030=20= +++++++--------=0A=20src/backend/utils/adt/pg_upgrade_support.c=20|=20=20= 4=20+-=0A=20src/backend/utils/adt/varlena.c=20=20=20=20=20=20=20=20=20=20= =20=20|=2020=20+++++-----=0A=20src/backend/utils/mmgr/freepage.c=20=20=20= =20=20=20=20=20=20=20|=20=206=20+--=0A=20src/bin/pgbench/pgbench.c=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=20=206=20+--=0A=20= src/bin/psql/describe.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20|=2018=20++++-----=0A=20src/bin/psql/prompt.c=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2012=20+++---=0A=20= src/fe_utils/print.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20=20|=2010=20++---=0A=20src/interfaces/libpq/fe-connect.c=20=20= =20=20=20=20=20=20=20=20|=20=208=20++--=0A=2022=20files=20changed,=20151=20= insertions(+),=20156=20deletions(-)=0A=0Adiff=20--git=20= a/src/backend/access/brin/brin.c=20b/src/backend/access/brin/brin.c=0A= index=209cd563fd0c3..46627638176=20100644=0A---=20= a/src/backend/access/brin/brin.c=0A+++=20= b/src/backend/access/brin/brin.c=0A@@=20-696,15=20+696,15=20@@=20= bringetbitmap(IndexScanDesc=20scan,=20TIDBitmap=20*tbm)=0A=20=09=09=20*/=0A= =20=09=09if=20(consistentFn[keyattno=20-=201].fn_oid=20=3D=3D=20= InvalidOid)=0A=20=09=09{=0A-=09=09=09FmgrInfo=20=20=20*tmp;=0A+=09=09=09= FmgrInfo=20=20=20*tmpfi;=0A=20=0A=20=09=09=09/*=20First=20time=20we=20= see=20this=20attribute,=20so=20no=20key/null=20keys.=20*/=0A=20=09=09=09= Assert(nkeys[keyattno=20-=201]=20=3D=3D=200);=0A=20=09=09=09= Assert(nnullkeys[keyattno=20-=201]=20=3D=3D=200);=0A=20=0A-=09=09=09tmp=20= =3D=20index_getprocinfo(idxRel,=20keyattno,=0A-=09=09=09=09=09=09=09=09=09= BRIN_PROCNUM_CONSISTENT);=0A-=09=09=09= fmgr_info_copy(&consistentFn[keyattno=20-=201],=20tmp,=0A+=09=09=09tmpfi=20= =3D=20index_getprocinfo(idxRel,=20keyattno,=0A+=09=09=09=09=09=09=09=09=09= =20=20BRIN_PROCNUM_CONSISTENT);=0A+=09=09=09= fmgr_info_copy(&consistentFn[keyattno=20-=201],=20tmpfi,=0A=20=09=09=09=09= =09=09=20=20=20CurrentMemoryContext);=0A=20=09=09}=0A=20=0Adiff=20--git=20= a/src/backend/access/gist/gistbuild.c=20= b/src/backend/access/gist/gistbuild.c=0Aindex=207f57c787f4c..4dba76be23d=20= 100644=0A---=20a/src/backend/access/gist/gistbuild.c=0A+++=20= b/src/backend/access/gist/gistbuild.c=0A@@=20-1129,7=20+1129,6=20@@=20= gistbufferinginserttuples(GISTBuildState=20*buildstate,=20Buffer=20= buffer,=20int=20level,=0A=20=09=09int=09=09=09ndownlinks,=0A=20=09=09=09=09= =09i;=0A=20=09=09Buffer=09=09parentBuffer;=0A-=09=09ListCell=20=20=20= *lc;=0A=20=0A=20=09=09/*=20Parent=20may=20have=20changed=20since=20we=20= memorized=20this=20path.=20*/=0A=20=09=09parentBuffer=20=3D=0A@@=20= -1156,10=20+1155,8=20@@=20gistbufferinginserttuples(GISTBuildState=20= *buildstate,=20Buffer=20buffer,=20int=20level,=0A=20=09=09ndownlinks=20=3D= =20list_length(splitinfo);=0A=20=09=09downlinks=20=3D=20= palloc_array(IndexTuple,=20ndownlinks);=0A=20=09=09i=20=3D=200;=0A-=09=09= foreach(lc,=20splitinfo)=0A+=09=09foreach_ptr(GISTPageSplitInfo,=20si,=20= splitinfo)=0A=20=09=09{=0A-=09=09=09GISTPageSplitInfo=20*splitinfo=20=3D=20= lfirst(lc);=0A-=0A=20=09=09=09/*=0A=20=09=09=09=20*=20Remember=20the=20= parent=20of=20each=20new=20child=20page=20in=20our=20parent=20map.=0A=20=09= =09=09=20*=20This=20assumes=20that=20the=20downlinks=20fit=20on=20the=20= parent=20page.=20If=20the=0A@@=20-1169,7=20+1166,7=20@@=20= gistbufferinginserttuples(GISTBuildState=20*buildstate,=20Buffer=20= buffer,=20int=20level,=0A=20=09=09=09=20*/=0A=20=09=09=09if=20(level=20>=20= 0)=0A=20=09=09=09=09gistMemorizeParent(buildstate,=0A-=09=09=09=09=09=09=09= =09=20=20=20BufferGetBlockNumber(splitinfo->buf),=0A+=09=09=09=09=09=09=09= =09=20=20=20BufferGetBlockNumber(si->buf),=0A=20=09=09=09=09=09=09=09=09=20= =20=20BufferGetBlockNumber(parentBuffer));=0A=20=0A=20=09=09=09/*=0A@@=20= -1179,14=20+1176,14=20@@=20gistbufferinginserttuples(GISTBuildState=20= *buildstate,=20Buffer=20buffer,=20int=20level,=0A=20=09=09=09=20*=20= harm).=0A=20=09=09=09=20*/=0A=20=09=09=09if=20(level=20>=201)=0A-=09=09=09= =09gistMemorizeAllDownlinks(buildstate,=20splitinfo->buf);=0A+=09=09=09=09= gistMemorizeAllDownlinks(buildstate,=20si->buf);=0A=20=0A=20=09=09=09/*=0A= =20=09=09=09=20*=20Since=20there's=20no=20concurrent=20access,=20we=20= can=20release=20the=20lower=0A=20=09=09=09=20*=20level=20buffers=20= immediately.=20This=20includes=20the=20original=20page.=0A=20=09=09=09=20= */=0A-=09=09=09UnlockReleaseBuffer(splitinfo->buf);=0A-=09=09=09= downlinks[i++]=20=3D=20splitinfo->downlink;=0A+=09=09=09= UnlockReleaseBuffer(si->buf);=0A+=09=09=09downlinks[i++]=20=3D=20= si->downlink;=0A=20=09=09}=0A=20=0A=20=09=09/*=20Insert=20them=20into=20= parent.=20*/=0Adiff=20--git=20a/src/backend/commands/extension.c=20= b/src/backend/commands/extension.c=0Aindex=20963618a64c4..ae47fd5d480=20= 100644=0A---=20a/src/backend/commands/extension.c=0A+++=20= b/src/backend/commands/extension.c=0A@@=20-1452,8=20+1452,8=20@@=20= execute_extension_script(Oid=20extensionOid,=20ExtensionControlFile=20= *control,=0A=20=09=09=09Datum=09=09old=20=3D=20t_sql;=0A=20=09=09=09char=09= =20=20=20*reqextname=20=3D=20(char=20*)=20lfirst(lc);=0A=20=09=09=09Oid=09= =09=09reqschema=20=3D=20lfirst_oid(lc2);=0A-=09=09=09char=09=20=20=20= *schemaName=20=3D=20get_namespace_name(reqschema);=0A-=09=09=09const=20= char=20*qSchemaName=20=3D=20quote_identifier(schemaName);=0A+=09=09=09= char=09=20=20=20*reqSchemaName=20=3D=20get_namespace_name(reqschema);=0A= +=09=09=09const=20char=20*qReqSchemaName=20=3D=20= quote_identifier(reqSchemaName);=0A=20=09=09=09char=09=20=20=20= *repltoken;=0A=20=0A=20=09=09=09repltoken=20=3D=20= psprintf("@extschema:%s@",=20reqextname);=0A@@=20-1461,8=20+1461,8=20@@=20= execute_extension_script(Oid=20extensionOid,=20ExtensionControlFile=20= *control,=0A=20=09=09=09=09=09=09=09=09=09=09=09C_COLLATION_OID,=0A=20=09= =09=09=09=09=09=09=09=09=09=09t_sql,=0A=20=09=09=09=09=09=09=09=09=09=09=09= CStringGetTextDatum(repltoken),=0A-=09=09=09=09=09=09=09=09=09=09=09= CStringGetTextDatum(qSchemaName));=0A-=09=09=09if=20(t_sql=20!=3D=20old=20= &&=20strpbrk(schemaName,=20quoting_relevant_chars))=0A+=09=09=09=09=09=09= =09=09=09=09=09CStringGetTextDatum(qReqSchemaName));=0A+=09=09=09if=20= (t_sql=20!=3D=20old=20&&=20strpbrk(reqSchemaName,=20= quoting_relevant_chars))=0A=20=09=09=09=09ereport(ERROR,=0A=20=09=09=09=09= =09=09(errcode(ERRCODE_INVALID_TEXT_REPRESENTATION),=0A=20=09=09=09=09=09= =09=20errmsg("invalid=20character=20in=20extension=20\"%s\"=20schema:=20= must=20not=20contain=20any=20of=20\"%s\"",=0Adiff=20--git=20= a/src/backend/commands/schemacmds.c=20= b/src/backend/commands/schemacmds.c=0Aindex=204c51e920626..bcfd6562386=20= 100644=0A---=20a/src/backend/commands/schemacmds.c=0A+++=20= b/src/backend/commands/schemacmds.c=0A@@=20-55,7=20+55,6=20@@=20= CreateSchemaCommand(CreateSchemaStmt=20*stmt,=20const=20char=20= *queryString,=0A=20=09const=20char=20*schemaName=20=3D=20= stmt->schemaname;=0A=20=09Oid=09=09=09namespaceId;=0A=20=09List=09=20=20=20= *parsetree_list;=0A-=09ListCell=20=20=20*parsetree_item;=0A=20=09Oid=09=09= =09owner_uid;=0A=20=09Oid=09=09=09saved_uid;=0A=20=09int=09=09=09= save_sec_context;=0A@@=20-203,16=20+202,15=20@@=20= CreateSchemaCommand(CreateSchemaStmt=20*stmt,=20const=20char=20= *queryString,=0A=20=09=20*=20them=20through=20parse_analyze_*()=20or=20= the=20rewriter;=20we=20can=20just=20hand=20them=0A=20=09=20*=20straight=20= to=20ProcessUtility.=0A=20=09=20*/=0A-=09foreach(parsetree_item,=20= parsetree_list)=0A+=09foreach_ptr(Node,=20substmt,=20parsetree_list)=0A=20= =09{=0A-=09=09Node=09=20=20=20*stmt=20=3D=20(Node=20*)=20= lfirst(parsetree_item);=0A=20=09=09PlannedStmt=20*wrapper;=0A=20=0A=20=09= =09/*=20need=20to=20make=20a=20wrapper=20PlannedStmt=20*/=0A=20=09=09= wrapper=20=3D=20makeNode(PlannedStmt);=0A=20=09=09wrapper->commandType=20= =3D=20CMD_UTILITY;=0A=20=09=09wrapper->canSetTag=20=3D=20false;=0A-=09=09= wrapper->utilityStmt=20=3D=20stmt;=0A+=09=09wrapper->utilityStmt=20=3D=20= substmt;=0A=20=09=09wrapper->stmt_location=20=3D=20stmt_location;=0A=20=09= =09wrapper->stmt_len=20=3D=20stmt_len;=0A=20=09=09wrapper->planOrigin=20= =3D=20PLAN_STMT_INTERNAL;=0Adiff=20--git=20= a/src/backend/commands/statscmds.c=20b/src/backend/commands/statscmds.c=0A= index=20c1da79f36ba..2ea8370e69e=20100644=0A---=20= a/src/backend/commands/statscmds.c=0A+++=20= b/src/backend/commands/statscmds.c=0A@@=20-319,15=20+319,15=20@@=20= CreateStatistics(CreateStatsStmt=20*stmt,=20bool=20check_rights)=0A=20=09= =09=09Node=09=20=20=20*expr=20=3D=20selem->expr;=0A=20=09=09=09Oid=09=09=09= atttype;=0A=20=09=09=09TypeCacheEntry=20*type;=0A-=09=09=09Bitmapset=20=20= *attnums=20=3D=20NULL;=0A+=09=09=09Bitmapset=20=20*attnums_bms=20=3D=20= NULL;=0A=20=09=09=09int=09=09=09k;=0A=20=0A=20=09=09=09Assert(expr=20!=3D=20= NULL);=0A=20=0A-=09=09=09pull_varattnos(expr,=201,=20&attnums);=0A+=09=09= =09pull_varattnos(expr,=201,=20&attnums_bms);=0A=20=0A=20=09=09=09k=20=3D=20= -1;=0A-=09=09=09while=20((k=20=3D=20bms_next_member(attnums,=20k))=20>=3D=20= 0)=0A+=09=09=09while=20((k=20=3D=20bms_next_member(attnums_bms,=20k))=20= >=3D=200)=0A=20=09=09=09{=0A=20=09=09=09=09AttrNumber=09attnum=20=3D=20k=20= +=20FirstLowInvalidHeapAttributeNumber;=0A=20=0Adiff=20--git=20= a/src/backend/commands/tablecmds.c=20b/src/backend/commands/tablecmds.c=0A= index=20b04b0dbd2a0..d2fb3d1a23b=20100644=0A---=20= a/src/backend/commands/tablecmds.c=0A+++=20= b/src/backend/commands/tablecmds.c=0A@@=20-15743,14=20+15743,14=20@@=20= ATPostAlterTypeParse(Oid=20oldId,=20Oid=20oldRelId,=20Oid=20refRelId,=20= char=20*cmd,=0A=20=0A=20=09=09=09foreach(lcmd,=20stmt->cmds)=0A=20=09=09=09= {=0A-=09=09=09=09AlterTableCmd=20*cmd=20=3D=20lfirst_node(AlterTableCmd,=20= lcmd);=0A+=09=09=09=09AlterTableCmd=20*subcmd=20=3D=20= lfirst_node(AlterTableCmd,=20lcmd);=0A=20=0A-=09=09=09=09if=20= (cmd->subtype=20=3D=3D=20AT_AddIndex)=0A+=09=09=09=09if=20= (subcmd->subtype=20=3D=3D=20AT_AddIndex)=0A=20=09=09=09=09{=0A=20=09=09=09= =09=09IndexStmt=20=20*indstmt;=0A=20=09=09=09=09=09Oid=09=09=09indoid;=0A= =20=0A-=09=09=09=09=09indstmt=20=3D=20castNode(IndexStmt,=20cmd->def);=0A= +=09=09=09=09=09indstmt=20=3D=20castNode(IndexStmt,=20subcmd->def);=0A=20= =09=09=09=09=09indoid=20=3D=20get_constraint_index(oldId);=0A=20=0A=20=09= =09=09=09=09if=20(!rewrite)=0A@@=20-15760,9=20+15760,9=20@@=20= ATPostAlterTypeParse(Oid=20oldId,=20Oid=20oldRelId,=20Oid=20refRelId,=20= char=20*cmd,=0A=20=09=09=09=09=09=09=09=09=09=09=09=09=09=20= RelationRelationId,=200);=0A=20=09=09=09=09=09= indstmt->reset_default_tblspc=20=3D=20true;=0A=20=0A-=09=09=09=09=09= cmd->subtype=20=3D=20AT_ReAddIndex;=0A+=09=09=09=09=09subcmd->subtype=20= =3D=20AT_ReAddIndex;=0A=20=09=09=09=09=09tab->subcmds[AT_PASS_OLD_INDEX]=20= =3D=0A-=09=09=09=09=09=09lappend(tab->subcmds[AT_PASS_OLD_INDEX],=20= cmd);=0A+=09=09=09=09=09=09lappend(tab->subcmds[AT_PASS_OLD_INDEX],=20= subcmd);=0A=20=0A=20=09=09=09=09=09/*=20recreate=20any=20comment=20on=20= the=20constraint=20*/=0A=20=09=09=09=09=09RebuildConstraintComment(tab,=0A= @@=20-15772,9=20+15772,9=20@@=20ATPostAlterTypeParse(Oid=20oldId,=20Oid=20= oldRelId,=20Oid=20refRelId,=20char=20*cmd,=0A=20=09=09=09=09=09=09=09=09=09= =09=09=20NIL,=0A=20=09=09=09=09=09=09=09=09=09=09=09=20= indstmt->idxname);=0A=20=09=09=09=09}=0A-=09=09=09=09else=20if=20= (cmd->subtype=20=3D=3D=20AT_AddConstraint)=0A+=09=09=09=09else=20if=20= (subcmd->subtype=20=3D=3D=20AT_AddConstraint)=0A=20=09=09=09=09{=0A-=09=09= =09=09=09Constraint=20*con=20=3D=20castNode(Constraint,=20cmd->def);=0A+=09= =09=09=09=09Constraint=20*con=20=3D=20castNode(Constraint,=20= subcmd->def);=0A=20=0A=20=09=09=09=09=09con->old_pktable_oid=20=3D=20= refRelId;=0A=20=09=09=09=09=09/*=20rewriting=20neither=20side=20of=20a=20= FK=20*/=0A@@=20-15782,9=20+15782,9=20@@=20ATPostAlterTypeParse(Oid=20= oldId,=20Oid=20oldRelId,=20Oid=20refRelId,=20char=20*cmd,=0A=20=09=09=09=09= =09=09!rewrite=20&&=20tab->rewrite=20=3D=3D=200)=0A=20=09=09=09=09=09=09= TryReuseForeignKey(oldId,=20con);=0A=20=09=09=09=09=09= con->reset_default_tblspc=20=3D=20true;=0A-=09=09=09=09=09cmd->subtype=20= =3D=20AT_ReAddConstraint;=0A+=09=09=09=09=09subcmd->subtype=20=3D=20= AT_ReAddConstraint;=0A=20=09=09=09=09=09tab->subcmds[AT_PASS_OLD_CONSTR]=20= =3D=0A-=09=09=09=09=09=09lappend(tab->subcmds[AT_PASS_OLD_CONSTR],=20= cmd);=0A+=09=09=09=09=09=09lappend(tab->subcmds[AT_PASS_OLD_CONSTR],=20= subcmd);=0A=20=0A=20=09=09=09=09=09/*=0A=20=09=09=09=09=09=20*=20= Recreate=20any=20comment=20on=20the=20constraint.=20=20If=20we=20have=0A= @@=20-15804,7=20+15804,7=20@@=20ATPostAlterTypeParse(Oid=20oldId,=20Oid=20= oldRelId,=20Oid=20refRelId,=20char=20*cmd,=0A=20=09=09=09=09}=0A=20=09=09= =09=09else=0A=20=09=09=09=09=09elog(ERROR,=20"unexpected=20statement=20= subtype:=20%d",=0A-=09=09=09=09=09=09=20(int)=20cmd->subtype);=0A+=09=09=09= =09=09=09=20(int)=20subcmd->subtype);=0A=20=09=09=09}=0A=20=09=09}=0A=20=09= =09else=20if=20(IsA(stm,=20AlterDomainStmt))=0A@@=20-15814,12=20= +15814,12=20@@=20ATPostAlterTypeParse(Oid=20oldId,=20Oid=20oldRelId,=20= Oid=20refRelId,=20char=20*cmd,=0A=20=09=09=09if=20(stmt->subtype=20=3D=3D=20= AD_AddConstraint)=0A=20=09=09=09{=0A=20=09=09=09=09Constraint=20*con=20=3D= =20castNode(Constraint,=20stmt->def);=0A-=09=09=09=09AlterTableCmd=20= *cmd=20=3D=20makeNode(AlterTableCmd);=0A+=09=09=09=09AlterTableCmd=20= *subcmd=20=3D=20makeNode(AlterTableCmd);=0A=20=0A-=09=09=09=09= cmd->subtype=20=3D=20AT_ReAddDomainConstraint;=0A-=09=09=09=09cmd->def=20= =3D=20(Node=20*)=20stmt;=0A+=09=09=09=09subcmd->subtype=20=3D=20= AT_ReAddDomainConstraint;=0A+=09=09=09=09subcmd->def=20=3D=20(Node=20*)=20= stmt;=0A=20=09=09=09=09tab->subcmds[AT_PASS_OLD_CONSTR]=20=3D=0A-=09=09=09= =09=09lappend(tab->subcmds[AT_PASS_OLD_CONSTR],=20cmd);=0A+=09=09=09=09=09= lappend(tab->subcmds[AT_PASS_OLD_CONSTR],=20subcmd);=0A=20=0A=20=09=09=09= =09/*=20recreate=20any=20comment=20on=20the=20constraint=20*/=0A=20=09=09= =09=09RebuildConstraintComment(tab,=0Adiff=20--git=20= a/src/backend/commands/trigger.c=20b/src/backend/commands/trigger.c=0A= index=2098d402c0a3b..a51e3ccb331=20100644=0A---=20= a/src/backend/commands/trigger.c=0A+++=20= b/src/backend/commands/trigger.c=0A@@=20-1165,7=20+1165,7=20@@=20= CreateTriggerFiringOn(CreateTrigStmt=20*stmt,=20const=20char=20= *queryString,=0A=20=09=09{=0A=20=09=09=09CreateTrigStmt=20*childStmt;=0A=20= =09=09=09Relation=09childTbl;=0A-=09=09=09Node=09=20=20=20*qual;=0A+=09=09= =09Node=09=20=20=20*partqual;=0A=20=0A=20=09=09=09childTbl=20=3D=20= table_open(partdesc->oids[i],=20ShareRowExclusiveLock);=0A=20=0A@@=20= -1178,18=20+1178,18=20@@=20CreateTriggerFiringOn(CreateTrigStmt=20*stmt,=20= const=20char=20*queryString,=0A=20=09=09=09childStmt->whenClause=20=3D=20= NULL;=0A=20=0A=20=09=09=09/*=20If=20there=20is=20a=20WHEN=20clause,=20= create=20a=20modified=20copy=20of=20it=20*/=0A-=09=09=09qual=20=3D=20= copyObject(whenClause);=0A-=09=09=09qual=20=3D=20(Node=20*)=0A-=09=09=09=09= map_partition_varattnos((List=20*)=20qual,=20PRS2_OLD_VARNO,=0A+=09=09=09= partqual=20=3D=20copyObject(whenClause);=0A+=09=09=09partqual=20=3D=20= (Node=20*)=0A+=09=09=09=09map_partition_varattnos((List=20*)=20partqual,=20= PRS2_OLD_VARNO,=0A=20=09=09=09=09=09=09=09=09=09=09childTbl,=20rel);=0A-=09= =09=09qual=20=3D=20(Node=20*)=0A-=09=09=09=09= map_partition_varattnos((List=20*)=20qual,=20PRS2_NEW_VARNO,=0A+=09=09=09= partqual=20=3D=20(Node=20*)=0A+=09=09=09=09map_partition_varattnos((List=20= *)=20partqual,=20PRS2_NEW_VARNO,=0A=20=09=09=09=09=09=09=09=09=09=09= childTbl,=20rel);=0A=20=0A=20=09=09=09CreateTriggerFiringOn(childStmt,=20= queryString,=0A=20=09=09=09=09=09=09=09=09=20=20partdesc->oids[i],=20= refRelOid,=0A=20=09=09=09=09=09=09=09=09=20=20InvalidOid,=20InvalidOid,=0A= -=09=09=09=09=09=09=09=09=20=20funcoid,=20trigoid,=20qual,=0A+=09=09=09=09= =09=09=09=09=20=20funcoid,=20trigoid,=20partqual,=0A=20=09=09=09=09=09=09= =09=09=20=20isInternal,=20true,=20trigger_fires_when);=0A=20=0A=20=09=09=09= table_close(childTbl,=20NoLock);=0Adiff=20--git=20= a/src/backend/commands/wait.c=20b/src/backend/commands/wait.c=0Aindex=20= 1290df10c6f..c2a0dac4899=20100644=0A---=20a/src/backend/commands/wait.c=0A= +++=20b/src/backend/commands/wait.c=0A@@=20-79,7=20+79,7=20@@=20= ExecWaitStmt(ParseState=20*pstate,=20WaitStmt=20*stmt,=20DestReceiver=20= *dest)=0A=20=09=09{=0A=20=09=09=09char=09=20=20=20*timeout_str;=0A=20=09=09= =09const=20char=20*hintmsg;=0A-=09=09=09double=09=09result;=0A+=09=09=09= double=09=09timeout_val;=0A=20=0A=20=09=09=09if=20(timeout_specified)=0A=20= =09=09=09=09errorConflictingDefElem(defel,=20pstate);=0A@@=20-87,7=20= +87,7=20@@=20ExecWaitStmt(ParseState=20*pstate,=20WaitStmt=20*stmt,=20= DestReceiver=20*dest)=0A=20=0A=20=09=09=09timeout_str=20=3D=20= defGetString(defel);=0A=20=0A-=09=09=09if=20(!parse_real(timeout_str,=20= &result,=20GUC_UNIT_MS,=20&hintmsg))=0A+=09=09=09if=20= (!parse_real(timeout_str,=20&timeout_val,=20GUC_UNIT_MS,=20&hintmsg))=0A=20= =09=09=09{=0A=20=09=09=09=09ereport(ERROR,=0A=20=09=09=09=09=09=09= errcode(ERRCODE_INVALID_PARAMETER_VALUE),=0A@@=20-100,20=20+100,20=20@@=20= ExecWaitStmt(ParseState=20*pstate,=20WaitStmt=20*stmt,=20DestReceiver=20= *dest)=0A=20=09=09=09=20*=20don't=20fail=20on=20just-out-of-range=20= values=20that=20would=20round=20into=0A=20=09=09=09=20*=20range.=0A=20=09= =09=09=20*/=0A-=09=09=09result=20=3D=20rint(result);=0A+=09=09=09= timeout_val=20=3D=20rint(timeout_val);=0A=20=0A=20=09=09=09/*=20Range=20= check=20*/=0A-=09=09=09if=20(unlikely(isnan(result)=20||=20= !FLOAT8_FITS_IN_INT64(result)))=0A+=09=09=09if=20= (unlikely(isnan(timeout_val)=20||=20!FLOAT8_FITS_IN_INT64(timeout_val)))=0A= =20=09=09=09=09ereport(ERROR,=0A=20=09=09=09=09=09=09= errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),=0A=20=09=09=09=09=09=09= errmsg("timeout=20value=20is=20out=20of=20range"));=0A=20=0A-=09=09=09if=20= (result=20<=200)=0A+=09=09=09if=20(timeout_val=20<=200)=0A=20=09=09=09=09= ereport(ERROR,=0A=20=09=09=09=09=09=09= errcode(ERRCODE_INVALID_PARAMETER_VALUE),=0A=20=09=09=09=09=09=09= errmsg("timeout=20cannot=20be=20negative"));=0A=20=0A-=09=09=09timeout=20= =3D=20(int64)=20result;=0A+=09=09=09timeout=20=3D=20(int64)=20= timeout_val;=0A=20=09=09}=0A=20=09=09else=20if=20(strcmp(defel->defname,=20= "no_throw")=20=3D=3D=200)=0A=20=09=09{=0Adiff=20--git=20= a/src/backend/executor/nodeAgg.c=20b/src/backend/executor/nodeAgg.c=0A= index=207d487a165fa..a4f6765142a=20100644=0A---=20= a/src/backend/executor/nodeAgg.c=0A+++=20= b/src/backend/executor/nodeAgg.c=0A@@=20-4065,12=20+4065,12=20@@=20= ExecInitAgg(Agg=20*node,=20EState=20*estate,=20int=20eflags)=0A=20=09=20= */=0A=20=09for=20(phaseidx=20=3D=200;=20phaseidx=20<=20= aggstate->numphases;=20phaseidx++)=0A=20=09{=0A-=09=09AggStatePerPhase=20= phase=20=3D=20&aggstate->phases[phaseidx];=0A+=09=09AggStatePerPhase=20= curphase=20=3D=20&aggstate->phases[phaseidx];=0A=20=09=09bool=09=09= dohash=20=3D=20false;=0A=20=09=09bool=09=09dosort=20=3D=20false;=0A=20=0A= =20=09=09/*=20phase=200=20doesn't=20necessarily=20exist=20*/=0A-=09=09if=20= (!phase->aggnode)=0A+=09=09if=20(!curphase->aggnode)=0A=20=09=09=09= continue;=0A=20=0A=20=09=09if=20(aggstate->aggstrategy=20=3D=3D=20= AGG_MIXED=20&&=20phaseidx=20=3D=3D=201)=0A@@=20-4091,13=20+4091,13=20@@=20= ExecInitAgg(Agg=20*node,=20EState=20*estate,=20int=20eflags)=0A=20=09=09=09= =20*/=0A=20=09=09=09continue;=0A=20=09=09}=0A-=09=09else=20if=20= (phase->aggstrategy=20=3D=3D=20AGG_PLAIN=20||=0A-=09=09=09=09=20= phase->aggstrategy=20=3D=3D=20AGG_SORTED)=0A+=09=09else=20if=20= (curphase->aggstrategy=20=3D=3D=20AGG_PLAIN=20||=0A+=09=09=09=09=20= curphase->aggstrategy=20=3D=3D=20AGG_SORTED)=0A=20=09=09{=0A=20=09=09=09= dohash=20=3D=20false;=0A=20=09=09=09dosort=20=3D=20true;=0A=20=09=09}=0A= -=09=09else=20if=20(phase->aggstrategy=20=3D=3D=20AGG_HASHED)=0A+=09=09= else=20if=20(curphase->aggstrategy=20=3D=3D=20AGG_HASHED)=0A=20=09=09{=0A= =20=09=09=09dohash=20=3D=20true;=0A=20=09=09=09dosort=20=3D=20false;=0A= @@=20-4105,11=20+4105,11=20@@=20ExecInitAgg(Agg=20*node,=20EState=20= *estate,=20int=20eflags)=0A=20=09=09else=0A=20=09=09=09Assert(false);=0A=20= =0A-=09=09phase->evaltrans=20=3D=20ExecBuildAggTrans(aggstate,=20phase,=20= dosort,=20dohash,=0A-=09=09=09=09=09=09=09=09=09=09=09=20false);=0A+=09=09= curphase->evaltrans=20=3D=20ExecBuildAggTrans(aggstate,=20curphase,=20= dosort,=20dohash,=0A+=09=09=09=09=09=09=09=09=09=09=09=09false);=0A=20=0A= =20=09=09/*=20cache=20compiled=20expression=20for=20outer=20slot=20= without=20NULL=20check=20*/=0A-=09=09phase->evaltrans_cache[0][0]=20=3D=20= phase->evaltrans;=0A+=09=09curphase->evaltrans_cache[0][0]=20=3D=20= curphase->evaltrans;=0A=20=09}=0A=20=0A=20=09return=20aggstate;=0Adiff=20= --git=20a/src/backend/executor/nodeValuesscan.c=20= b/src/backend/executor/nodeValuesscan.c=0Aindex=20= e663fb68cfc..8347cae5a6e=20100644=0A---=20= a/src/backend/executor/nodeValuesscan.c=0A+++=20= b/src/backend/executor/nodeValuesscan.c=0A@@=20-90,7=20+90,6=20@@=20= ValuesNext(ValuesScanState=20*node)=0A=20=09=09MemoryContext=20= oldContext;=0A=20=09=09Datum=09=20=20=20*values;=0A=20=09=09bool=09=20=20= =20*isnull;=0A-=09=09ListCell=20=20=20*lc;=0A=20=09=09int=09=09=09= resind;=0A=20=0A=20=09=09/*=0A@@=20-139,13=20+138,12=20@@=20= ValuesNext(ValuesScanState=20*node)=0A=20=09=09isnull=20=3D=20= slot->tts_isnull;=0A=20=0A=20=09=09resind=20=3D=200;=0A-=09=09= foreach(lc,=20exprstatelist)=0A+=09=09foreach_ptr(ExprState,=20= exprstate,=20exprstatelist)=0A=20=09=09{=0A-=09=09=09ExprState=20=20= *estate=20=3D=20(ExprState=20*)=20lfirst(lc);=0A=20=09=09=09= CompactAttribute=20*attr=20=3D=20= TupleDescCompactAttr(slot->tts_tupleDescriptor,=0A=20=09=09=09=09=09=09=09= =09=09=09=09=09=09=09=20=20resind);=0A=20=0A-=09=09=09values[resind]=20=3D= =20ExecEvalExpr(estate,=0A+=09=09=09values[resind]=20=3D=20= ExecEvalExpr(exprstate,=0A=20=09=09=09=09=09=09=09=09=09=09=20=20= econtext,=0A=20=09=09=09=09=09=09=09=09=09=09=20=20&isnull[resind]);=0A=20= =0Adiff=20--git=20a/src/backend/optimizer/plan/createplan.c=20= b/src/backend/optimizer/plan/createplan.c=0Aindex=20= 50b0e10308b..4a567d333b9=20100644=0A---=20= a/src/backend/optimizer/plan/createplan.c=0A+++=20= b/src/backend/optimizer/plan/createplan.c=0A@@=20-1235,16=20+1235,16=20= @@=20create_append_plan(PlannerInfo=20*root,=20AppendPath=20*best_path,=20= int=20flags)=0A=20=09if=20(best_path->subpaths=20=3D=3D=20NIL)=0A=20=09{=0A= =20=09=09/*=20Generate=20a=20Result=20plan=20with=20constant-FALSE=20= gating=20qual=20*/=0A-=09=09Plan=09=20=20=20*plan;=0A+=09=09Plan=09=20=20= =20*resplan;=0A=20=0A-=09=09plan=20=3D=20(Plan=20*)=20= make_one_row_result(tlist,=0A-=09=09=09=09=09=09=09=09=09=09=09(Node=20= *)=20list_make1(makeBoolConst(false,=0A-=09=09=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=09=09=09=20=20false)),=0A-=09=09=09=09=09=09=09=09=09=09=09= best_path->path.parent);=0A+=09=09resplan=20=3D=20(Plan=20*)=20= make_one_row_result(tlist,=0A+=09=09=09=09=09=09=09=09=09=09=09=20=20=20= (Node=20*)=20list_make1(makeBoolConst(false,=0A+=09=09=09=09=09=09=09=09=09= =09=09=09=09=09=09=09=09=09=09=09=20false)),=0A+=09=09=09=09=09=09=09=09=09= =09=09=20=20=20best_path->path.parent);=0A=20=0A-=09=09= copy_generic_path_info(plan,=20(Path=20*)=20best_path);=0A+=09=09= copy_generic_path_info(resplan,=20(Path=20*)=20best_path);=0A=20=0A-=09=09= return=20plan;=0A+=09=09return=20resplan;=0A=20=09}=0A=20=0A=20=09/*=0A= @@=20-2407,7=20+2407,7=20@@=20create_minmaxagg_plan(PlannerInfo=20*root,=20= MinMaxAggPath=20*best_path)=0A=20=09=09MinMaxAggInfo=20*mminfo=20=3D=20= (MinMaxAggInfo=20*)=20lfirst(lc);=0A=20=09=09PlannerInfo=20*subroot=20=3D=20= mminfo->subroot;=0A=20=09=09Query=09=20=20=20*subparse=20=3D=20= subroot->parse;=0A-=09=09Plan=09=20=20=20*plan;=0A+=09=09Plan=09=20=20=20= *initplan;=0A=20=0A=20=09=09/*=0A=20=09=09=20*=20Generate=20the=20plan=20= for=20the=20subquery.=20We=20already=20have=20a=20Path,=20but=20we=0A@@=20= -2415,25=20+2415,25=20@@=20create_minmaxagg_plan(PlannerInfo=20*root,=20= MinMaxAggPath=20*best_path)=0A=20=09=09=20*=20Since=20we=20are=20= entering=20a=20different=20planner=20context=20(subroot),=0A=20=09=09=20= *=20recurse=20to=20create_plan=20not=20create_plan_recurse.=0A=20=09=09=20= */=0A-=09=09plan=20=3D=20create_plan(subroot,=20mminfo->path);=0A+=09=09= initplan=20=3D=20create_plan(subroot,=20mminfo->path);=0A=20=0A-=09=09= plan=20=3D=20(Plan=20*)=20make_limit(plan,=0A-=09=09=09=09=09=09=09=09=20= =20=20subparse->limitOffset,=0A-=09=09=09=09=09=09=09=09=20=20=20= subparse->limitCount,=0A-=09=09=09=09=09=09=09=09=20=20=20= subparse->limitOption,=0A-=09=09=09=09=09=09=09=09=20=20=200,=20NULL,=20= NULL,=20NULL);=0A+=09=09initplan=20=3D=20(Plan=20*)=20= make_limit(initplan,=0A+=09=09=09=09=09=09=09=09=09=20=20=20= subparse->limitOffset,=0A+=09=09=09=09=09=09=09=09=09=20=20=20= subparse->limitCount,=0A+=09=09=09=09=09=09=09=09=09=20=20=20= subparse->limitOption,=0A+=09=09=09=09=09=09=09=09=09=20=20=200,=20NULL,=20= NULL,=20NULL);=0A=20=0A=20=09=09/*=20Must=20apply=20correct=20cost/width=20= data=20to=20Limit=20node=20*/=0A-=09=09plan->disabled_nodes=20=3D=20= mminfo->path->disabled_nodes;=0A-=09=09plan->startup_cost=20=3D=20= mminfo->path->startup_cost;=0A-=09=09plan->total_cost=20=3D=20= mminfo->pathcost;=0A-=09=09plan->plan_rows=20=3D=201;=0A-=09=09= plan->plan_width=20=3D=20mminfo->path->pathtarget->width;=0A-=09=09= plan->parallel_aware=20=3D=20false;=0A-=09=09plan->parallel_safe=20=3D=20= mminfo->path->parallel_safe;=0A+=09=09initplan->disabled_nodes=20=3D=20= mminfo->path->disabled_nodes;=0A+=09=09initplan->startup_cost=20=3D=20= mminfo->path->startup_cost;=0A+=09=09initplan->total_cost=20=3D=20= mminfo->pathcost;=0A+=09=09initplan->plan_rows=20=3D=201;=0A+=09=09= initplan->plan_width=20=3D=20mminfo->path->pathtarget->width;=0A+=09=09= initplan->parallel_aware=20=3D=20false;=0A+=09=09initplan->parallel_safe=20= =3D=20mminfo->path->parallel_safe;=0A=20=0A=20=09=09/*=20Convert=20the=20= plan=20into=20an=20InitPlan=20in=20the=20outer=20query.=20*/=0A-=09=09= SS_make_initplan_from_plan(root,=20subroot,=20plan,=20mminfo->param);=0A= +=09=09SS_make_initplan_from_plan(root,=20subroot,=20initplan,=20= mminfo->param);=0A=20=09}=0A=20=0A=20=09/*=20Generate=20the=20output=20= plan=20---=20basically=20just=20a=20Result=20*/=0Adiff=20--git=20= a/src/backend/statistics/dependencies.c=20= b/src/backend/statistics/dependencies.c=0Aindex=20= e3a2f5817e0..62e2ea122e9=20100644=0A---=20= a/src/backend/statistics/dependencies.c=0A+++=20= b/src/backend/statistics/dependencies.c=0A@@=20-1173,17=20+1173,17=20@@=20= dependency_is_compatible_expression(Node=20*clause,=20Index=20relid,=20= List=20*statlist,=20N=0A=20=09if=20(is_opclause(clause))=0A=20=09{=0A=20=09= =09/*=20If=20it's=20an=20opclause,=20check=20for=20Var=20=3D=20Const=20= or=20Const=20=3D=20Var.=20*/=0A-=09=09OpExpr=09=20=20=20*expr=20=3D=20= (OpExpr=20*)=20clause;=0A+=09=09OpExpr=09=20=20=20*op_expr=20=3D=20= (OpExpr=20*)=20clause;=0A=20=0A=20=09=09/*=20Only=20expressions=20with=20= two=20arguments=20are=20candidates.=20*/=0A-=09=09if=20= (list_length(expr->args)=20!=3D=202)=0A+=09=09if=20= (list_length(op_expr->args)=20!=3D=202)=0A=20=09=09=09return=20false;=0A=20= =0A=20=09=09/*=20Make=20sure=20non-selected=20argument=20is=20a=20= pseudoconstant.=20*/=0A-=09=09if=20= (is_pseudo_constant_clause(lsecond(expr->args)))=0A-=09=09=09clause_expr=20= =3D=20linitial(expr->args);=0A-=09=09else=20if=20= (is_pseudo_constant_clause(linitial(expr->args)))=0A-=09=09=09= clause_expr=20=3D=20lsecond(expr->args);=0A+=09=09if=20= (is_pseudo_constant_clause(lsecond(op_expr->args)))=0A+=09=09=09= clause_expr=20=3D=20linitial(op_expr->args);=0A+=09=09else=20if=20= (is_pseudo_constant_clause(linitial(op_expr->args)))=0A+=09=09=09= clause_expr=20=3D=20lsecond(op_expr->args);=0A=20=09=09else=0A=20=09=09=09= return=20false;=0A=20=0A@@=20-1199,7=20+1199,7=20@@=20= dependency_is_compatible_expression(Node=20*clause,=20Index=20relid,=20= List=20*statlist,=20N=0A=20=09=09=20*=20selectivity=20functions,=20and=20= to=20be=20more=20consistent=20with=20decisions=0A=20=09=09=20*=20= elsewhere=20in=20the=20planner.=0A=20=09=09=20*/=0A-=09=09if=20= (get_oprrest(expr->opno)=20!=3D=20F_EQSEL)=0A+=09=09if=20= (get_oprrest(op_expr->opno)=20!=3D=20F_EQSEL)=0A=20=09=09=09return=20= false;=0A=20=0A=20=09=09/*=20OK=20to=20proceed=20with=20checking=20"var"=20= */=0A@@=20-1207,7=20+1207,7=20@@=20= dependency_is_compatible_expression(Node=20*clause,=20Index=20relid,=20= List=20*statlist,=20N=0A=20=09else=20if=20(IsA(clause,=20= ScalarArrayOpExpr))=0A=20=09{=0A=20=09=09/*=20If=20it's=20a=20scalar=20= array=20operator,=20check=20for=20Var=20IN=20Const.=20*/=0A-=09=09= ScalarArrayOpExpr=20*expr=20=3D=20(ScalarArrayOpExpr=20*)=20clause;=0A+=09= =09ScalarArrayOpExpr=20*op_expr=20=3D=20(ScalarArrayOpExpr=20*)=20= clause;=0A=20=0A=20=09=09/*=0A=20=09=09=20*=20Reject=20ALL()=20variant,=20= we=20only=20care=20about=20ANY/IN.=0A@@=20-1215,21=20+1215,21=20@@=20= dependency_is_compatible_expression(Node=20*clause,=20Index=20relid,=20= List=20*statlist,=20N=0A=20=09=09=20*=20FIXME=20Maybe=20we=20should=20= check=20if=20all=20the=20values=20are=20the=20same,=20and=0A=20=09=09=20= *=20allow=20ALL=20in=20that=20case?=20Doesn't=20seem=20very=20practical,=20= though.=0A=20=09=09=20*/=0A-=09=09if=20(!expr->useOr)=0A+=09=09if=20= (!op_expr->useOr)=0A=20=09=09=09return=20false;=0A=20=0A=20=09=09/*=20= Only=20expressions=20with=20two=20arguments=20are=20candidates.=20*/=0A-=09= =09if=20(list_length(expr->args)=20!=3D=202)=0A+=09=09if=20= (list_length(op_expr->args)=20!=3D=202)=0A=20=09=09=09return=20false;=0A=20= =0A=20=09=09/*=0A=20=09=09=20*=20We=20know=20it's=20always=20(Var=20IN=20= Const),=20so=20we=20assume=20the=20var=20is=20the=0A=20=09=09=20*=20= first=20argument,=20and=20pseudoconstant=20is=20the=20second=20one.=0A=20= =09=09=20*/=0A-=09=09if=20= (!is_pseudo_constant_clause(lsecond(expr->args)))=0A+=09=09if=20= (!is_pseudo_constant_clause(lsecond(op_expr->args)))=0A=20=09=09=09= return=20false;=0A=20=0A-=09=09clause_expr=20=3D=20linitial(expr->args);=0A= +=09=09clause_expr=20=3D=20linitial(op_expr->args);=0A=20=0A=20=09=09/*=0A= =20=09=09=20*=20If=20it's=20not=20an=20"=3D"=20operator,=20just=20ignore=20= the=20clause,=20as=20it's=20not=0A@@=20-1238,7=20+1238,7=20@@=20= dependency_is_compatible_expression(Node=20*clause,=20Index=20relid,=20= List=20*statlist,=20N=0A=20=09=09=20*=20selectivity.=20That's=20a=20bit=20= strange,=20but=20it's=20what=20other=20similar=0A=20=09=09=20*=20places=20= do.=0A=20=09=09=20*/=0A-=09=09if=20(get_oprrest(expr->opno)=20!=3D=20= F_EQSEL)=0A+=09=09if=20(get_oprrest(op_expr->opno)=20!=3D=20F_EQSEL)=0A=20= =09=09=09return=20false;=0A=20=0A=20=09=09/*=20OK=20to=20proceed=20with=20= checking=20"var"=20*/=0Adiff=20--git=20= a/src/backend/storage/buffer/bufmgr.c=20= b/src/backend/storage/buffer/bufmgr.c=0Aindex=20d1babaff023..1434c7ee2ef=20= 100644=0A---=20a/src/backend/storage/buffer/bufmgr.c=0A+++=20= b/src/backend/storage/buffer/bufmgr.c=0A@@=20-1308,7=20+1308,7=20@@=20= ReadBuffer_common(Relation=20rel,=20SMgrRelation=20smgr,=20char=20= smgr_persistence,=0A=20=09=20*/=0A=20=09if=20(unlikely(blockNum=20=3D=3D=20= P_NEW))=0A=20=09{=0A-=09=09uint32=09=09flags=20=3D=20= EB_SKIP_EXTENSION_LOCK;=0A+=09=09uint32=09=09uflags=20=3D=20= EB_SKIP_EXTENSION_LOCK;=0A=20=0A=20=09=09/*=0A=20=09=09=20*=20Since=20= no-one=20else=20can=20be=20looking=20at=20the=20page=20contents=20yet,=20= there=20is=0A@@=20-1316,9=20+1316,9=20@@=20ReadBuffer_common(Relation=20= rel,=20SMgrRelation=20smgr,=20char=20smgr_persistence,=0A=20=09=09=20*=20= lock.=0A=20=09=09=20*/=0A=20=09=09if=20(mode=20=3D=3D=20= RBM_ZERO_AND_LOCK=20||=20mode=20=3D=3D=20RBM_ZERO_AND_CLEANUP_LOCK)=0A-=09= =09=09flags=20|=3D=20EB_LOCK_FIRST;=0A+=09=09=09uflags=20|=3D=20= EB_LOCK_FIRST;=0A=20=0A-=09=09return=20ExtendBufferedRel(BMR_REL(rel),=20= forkNum,=20strategy,=20flags);=0A+=09=09return=20= ExtendBufferedRel(BMR_REL(rel),=20forkNum,=20strategy,=20uflags);=0A=20=09= }=0A=20=0A=20=09if=20(rel)=0Adiff=20--git=20= a/src/backend/utils/adt/jsonpath_exec.c=20= b/src/backend/utils/adt/jsonpath_exec.c=0Aindex=20= 52ae0ba4cf7..32a635c3bda=20100644=0A---=20= a/src/backend/utils/adt/jsonpath_exec.c=0A+++=20= b/src/backend/utils/adt/jsonpath_exec.c=0A@@=20-536,7=20+536,7=20@@=20= jsonb_path_query_internal(FunctionCallInfo=20fcinfo,=20bool=20tz)=0A=20=09= =09MemoryContext=20oldcontext;=0A=20=09=09Jsonb=09=20=20=20*vars;=0A=20=09= =09bool=09=09silent;=0A-=09=09JsonValueList=20found=20=3D=20{0};=0A+=09=09= JsonValueList=20vals=20=3D=20{0};=0A=20=0A=20=09=09funcctx=20=3D=20= SRF_FIRSTCALL_INIT();=0A=20=09=09oldcontext=20=3D=20= MemoryContextSwitchTo(funcctx->multi_call_memory_ctx);=0A@@=20-548,9=20= +548,9=20@@=20jsonb_path_query_internal(FunctionCallInfo=20fcinfo,=20= bool=20tz)=0A=20=0A=20=09=09(void)=20executeJsonPath(jp,=20vars,=20= getJsonPathVariableFromJsonb,=0A=20=09=09=09=09=09=09=09=20=20=20= countVariablesFromJsonb,=0A-=09=09=09=09=09=09=09=20=20=20jb,=20!silent,=20= &found,=20tz);=0A+=09=09=09=09=09=09=09=20=20=20jb,=20!silent,=20&vals,=20= tz);=0A=20=0A-=09=09funcctx->user_fctx=20=3D=20= JsonValueListGetList(&found);=0A+=09=09funcctx->user_fctx=20=3D=20= JsonValueListGetList(&vals);=0A=20=0A=20=09=09= MemoryContextSwitchTo(oldcontext);=0A=20=09}=0A@@=20-1879,25=20+1879,25=20= @@=20executeBoolItem(JsonPathExecContext=20*cxt,=20JsonPathItem=20*jsp,=0A= =20=09=09=09=09=20*=20check=20that=20there=20are=20no=20errors=20at=20= all.=0A=20=09=09=09=09=20*/=0A=20=09=09=09=09JsonValueList=20vals=20=3D=20= {0};=0A-=09=09=09=09JsonPathExecResult=20res=20=3D=0A+=09=09=09=09= JsonPathExecResult=20execres=20=3D=0A=20=09=09=09=09=09= executeItemOptUnwrapResultNoThrow(cxt,=20&larg,=20jb,=0A=20=09=09=09=09=09= =09=09=09=09=09=09=09=09=20=20false,=20&vals);=0A=20=0A-=09=09=09=09if=20= (jperIsError(res))=0A+=09=09=09=09if=20(jperIsError(execres))=0A=20=09=09= =09=09=09return=20jpbUnknown;=0A=20=0A=20=09=09=09=09return=20= JsonValueListIsEmpty(&vals)=20?=20jpbFalse=20:=20jpbTrue;=0A=20=09=09=09= }=0A=20=09=09=09else=0A=20=09=09=09{=0A-=09=09=09=09JsonPathExecResult=20= res=20=3D=0A+=09=09=09=09JsonPathExecResult=20execres=20=3D=0A=20=09=09=09= =09=09executeItemOptUnwrapResultNoThrow(cxt,=20&larg,=20jb,=0A=20=09=09=09= =09=09=09=09=09=09=09=09=09=09=20=20false,=20NULL);=0A=20=0A-=09=09=09=09= if=20(jperIsError(res))=0A+=09=09=09=09if=20(jperIsError(execres))=0A=20=09= =09=09=09=09return=20jpbUnknown;=0A=20=0A-=09=09=09=09return=20res=20=3D=3D= =20jperOk=20?=20jpbTrue=20:=20jpbFalse;=0A+=09=09=09=09return=20execres=20= =3D=3D=20jperOk=20?=20jpbTrue=20:=20jpbFalse;=0A=20=09=09=09}=0A=20=0A=20= =09=09default:=0A@@=20-2066,16=20+2066,16=20@@=20= executePredicate(JsonPathExecContext=20*cxt,=20JsonPathItem=20*pred,=0A=20= =09=09/*=20Loop=20over=20right=20arg=20sequence=20or=20do=20single=20= pass=20otherwise=20*/=0A=20=09=09while=20(rarg=20?=20(rval=20!=3D=20= NULL)=20:=20first)=0A=20=09=09{=0A-=09=09=09JsonPathBool=20res=20=3D=20= exec(pred,=20lval,=20rval,=20param);=0A+=09=09=09JsonPathBool=20boolres=20= =3D=20exec(pred,=20lval,=20rval,=20param);=0A=20=0A-=09=09=09if=20(res=20= =3D=3D=20jpbUnknown)=0A+=09=09=09if=20(boolres=20=3D=3D=20jpbUnknown)=0A=20= =09=09=09{=0A=20=09=09=09=09if=20(jspStrictAbsenceOfErrors(cxt))=0A=20=09= =09=09=09=09return=20jpbUnknown;=0A=20=0A=20=09=09=09=09error=20=3D=20= true;=0A=20=09=09=09}=0A-=09=09=09else=20if=20(res=20=3D=3D=20jpbTrue)=0A= +=09=09=09else=20if=20(boolres=20=3D=3D=20jpbTrue)=0A=20=09=09=09{=0A=20=09= =09=09=09if=20(!jspStrictAbsenceOfErrors(cxt))=0A=20=09=09=09=09=09= return=20jpbTrue;=0A@@=20-4138,20=20+4138,20=20@@=20= JsonTableInitOpaque(TableFuncScanState=20*state,=20int=20natts)=0A=20=09=09= forboth(exprlc,=20state->passingvalexprs,=0A=20=09=09=09=09namelc,=20= je->passing_names)=0A=20=09=09{=0A-=09=09=09ExprState=20=20*state=20=3D=20= lfirst_node(ExprState,=20exprlc);=0A+=09=09=09ExprState=20=20*exprstate=20= =3D=20lfirst_node(ExprState,=20exprlc);=0A=20=09=09=09String=09=20=20=20= *name=20=3D=20lfirst_node(String,=20namelc);=0A=20=09=09=09= JsonPathVariable=20*var=20=3D=20palloc_object(JsonPathVariable);=0A=20=0A= =20=09=09=09var->name=20=3D=20pstrdup(name->sval);=0A=20=09=09=09= var->namelen=20=3D=20strlen(var->name);=0A-=09=09=09var->typid=20=3D=20= exprType((Node=20*)=20state->expr);=0A-=09=09=09var->typmod=20=3D=20= exprTypmod((Node=20*)=20state->expr);=0A+=09=09=09var->typid=20=3D=20= exprType((Node=20*)=20exprstate->expr);=0A+=09=09=09var->typmod=20=3D=20= exprTypmod((Node=20*)=20exprstate->expr);=0A=20=0A=20=09=09=09/*=0A=20=09= =09=09=20*=20Evaluate=20the=20expression=20and=20save=20the=20value=20to=20= be=20returned=20by=0A=20=09=09=09=20*=20GetJsonPathVar().=0A=20=09=09=09=20= */=0A-=09=09=09var->value=20=3D=20ExecEvalExpr(state,=20= ps->ps_ExprContext,=0A+=09=09=09var->value=20=3D=20= ExecEvalExpr(exprstate,=20ps->ps_ExprContext,=0A=20=09=09=09=09=09=09=09=09= =09=20=20&var->isnull);=0A=20=0A=20=09=09=09args=20=3D=20lappend(args,=20= var);=0Adiff=20--git=20a/src/backend/utils/adt/pg_upgrade_support.c=20= b/src/backend/utils/adt/pg_upgrade_support.c=0Aindex=20= b505a6b4fee..b813e65746a=20100644=0A---=20= a/src/backend/utils/adt/pg_upgrade_support.c=0A+++=20= b/src/backend/utils/adt/pg_upgrade_support.c=0A@@=20-227,8=20+227,8=20@@=20= binary_upgrade_create_empty_extension(PG_FUNCTION_ARGS)=0A=20=09=09= deconstruct_array_builtin(textArray,=20TEXTOID,=20&textDatums,=20NULL,=20= &ndatums);=0A=20=09=09for=20(i=20=3D=200;=20i=20<=20ndatums;=20i++)=0A=20= =09=09{=0A-=09=09=09char=09=20=20=20*extName=20=3D=20= TextDatumGetCString(textDatums[i]);=0A-=09=09=09Oid=09=09=09extOid=20=3D=20= get_extension_oid(extName,=20false);=0A+=09=09=09char=09=20=20=20= *extNameStr=20=3D=20TextDatumGetCString(textDatums[i]);=0A+=09=09=09Oid=09= =09=09extOid=20=3D=20get_extension_oid(extNameStr,=20false);=0A=20=0A=20=09= =09=09requiredExtensions=20=3D=20lappend_oid(requiredExtensions,=20= extOid);=0A=20=09=09}=0Adiff=20--git=20a/src/backend/utils/adt/varlena.c=20= b/src/backend/utils/adt/varlena.c=0Aindex=207caf700fd61..a3e02ea2d95=20= 100644=0A---=20a/src/backend/utils/adt/varlena.c=0A+++=20= b/src/backend/utils/adt/varlena.c=0A@@=20-3304,14=20+3304,14=20@@=20= appendStringInfoRegexpSubstr(StringInfo=20str,=20text=20*replace_text,=0A= =20=09=09=09=20*=20Copy=20the=20text=20that=20is=20back=20reference=20of=20= regexp.=20=20Note=20so=20and=20eo=0A=20=09=09=09=20*=20are=20counted=20= in=20characters=20not=20bytes.=0A=20=09=09=09=20*/=0A-=09=09=09char=09=20= =20=20*chunk_start;=0A-=09=09=09int=09=09=09chunk_len;=0A+=09=09=09char=09= =20=20=20*start;=0A+=09=09=09int=09=09=09len;=0A=20=0A=20=09=09=09= Assert(so=20>=3D=20data_pos);=0A-=09=09=09chunk_start=20=3D=20start_ptr;=0A= -=09=09=09chunk_start=20+=3D=20charlen_to_bytelen(chunk_start,=20so=20-=20= data_pos);=0A-=09=09=09chunk_len=20=3D=20charlen_to_bytelen(chunk_start,=20= eo=20-=20so);=0A-=09=09=09appendBinaryStringInfo(str,=20chunk_start,=20= chunk_len);=0A+=09=09=09start=20=3D=20start_ptr;=0A+=09=09=09start=20+=3D=20= charlen_to_bytelen(start,=20so=20-=20data_pos);=0A+=09=09=09len=20=3D=20= charlen_to_bytelen(start,=20eo=20-=20so);=0A+=09=09=09= appendBinaryStringInfo(str,=20start,=20len);=0A=20=09=09}=0A=20=09}=0A=20= }=0A@@=20-4935,7=20+4935,7=20@@=20text_format(PG_FUNCTION_ARGS)=0A=20=09=09= =09else=0A=20=09=09=09{=0A=20=09=09=09=09/*=20For=20less-usual=20= datatypes,=20convert=20to=20text=20then=20to=20int=20*/=0A-=09=09=09=09= char=09=20=20=20*str;=0A+=09=09=09=09char=09=20=20=20*s;=0A=20=0A=20=09=09= =09=09if=20(typid=20!=3D=20prev_width_type)=0A=20=09=09=09=09{=0A@@=20= -4947,12=20+4947,12=20@@=20text_format(PG_FUNCTION_ARGS)=0A=20=09=09=09=09= =09prev_width_type=20=3D=20typid;=0A=20=09=09=09=09}=0A=20=0A-=09=09=09=09= str=20=3D=20OutputFunctionCall(&typoutputinfo_width,=20value);=0A+=09=09=09= =09s=20=3D=20OutputFunctionCall(&typoutputinfo_width,=20value);=0A=20=0A=20= =09=09=09=09/*=20pg_strtoint32=20will=20complain=20about=20bad=20data=20= or=20overflow=20*/=0A-=09=09=09=09width=20=3D=20pg_strtoint32(str);=0A+=09= =09=09=09width=20=3D=20pg_strtoint32(s);=0A=20=0A-=09=09=09=09= pfree(str);=0A+=09=09=09=09pfree(s);=0A=20=09=09=09}=0A=20=09=09}=0A=20=0A= diff=20--git=20a/src/backend/utils/mmgr/freepage.c=20= b/src/backend/utils/mmgr/freepage.c=0Aindex=20d7195685f69..7488a3d547a=20= 100644=0A---=20a/src/backend/utils/mmgr/freepage.c=0A+++=20= b/src/backend/utils/mmgr/freepage.c=0A@@=20-1586,7=20+1586,7=20@@=20= FreePageManagerPutInternal(FreePageManager=20*fpm,=20Size=20first_page,=20= Size=20npages,=0A=20=09if=20(prevkey=20!=3D=20NULL=20&&=20= prevkey->first_page=20+=20prevkey->npages=20>=3D=20first_page)=0A=20=09{=0A= =20=09=09bool=09=09remove_next=20=3D=20false;=0A-=09=09Size=09=09result;=0A= +=09=09Size=09=09nprevpages;=0A=20=0A=20=09=09Assert(prevkey->first_page=20= +=20prevkey->npages=20=3D=3D=20first_page);=0A=20=09=09prevkey->npages=20= =3D=20(first_page=20-=20prevkey->first_page)=20+=20npages;=0A@@=20= -1606,7=20+1606,7=20@@=20FreePageManagerPutInternal(FreePageManager=20= *fpm,=20Size=20first_page,=20Size=20npages,=0A=20=09=09/*=20Put=20the=20= span=20on=20the=20correct=20freelist=20and=20save=20size.=20*/=0A=20=09=09= FreePagePopSpanLeader(fpm,=20prevkey->first_page);=0A=20=09=09= FreePagePushSpanLeader(fpm,=20prevkey->first_page,=20prevkey->npages);=0A= -=09=09result=20=3D=20prevkey->npages;=0A+=09=09nprevpages=20=3D=20= prevkey->npages;=0A=20=0A=20=09=09/*=0A=20=09=09=20*=20If=20we=20= consolidated=20with=20both=20the=20preceding=20and=20following=20= entries,=0A@@=20-1621,7=20+1621,7=20@@=20= FreePageManagerPutInternal(FreePageManager=20*fpm,=20Size=20first_page,=20= Size=20npages,=0A=20=09=09if=20(remove_next)=0A=20=09=09=09= FreePageBtreeRemove(fpm,=20np,=20nindex);=0A=20=0A-=09=09return=20= result;=0A+=09=09return=20nprevpages;=0A=20=09}=0A=20=0A=20=09/*=20= Consolidate=20with=20the=20next=20entry=20if=20possible.=20*/=0Adiff=20= --git=20a/src/bin/pgbench/pgbench.c=20b/src/bin/pgbench/pgbench.c=0A= index=201dae918cc09..43a9627fad4=20100644=0A---=20= a/src/bin/pgbench/pgbench.c=0A+++=20b/src/bin/pgbench/pgbench.c=0A@@=20= -4661,7=20+4661,7=20@@=20doLog(TState=20*thread,=20CState=20*st,=0A=20=09= =09=09double=09=09lag_sum2=20=3D=200.0;=0A=20=09=09=09double=09=09= lag_min=20=3D=200.0;=0A=20=09=09=09double=09=09lag_max=20=3D=200.0;=0A-=09= =09=09int64=09=09skipped=20=3D=200;=0A+=09=09=09int64=09=09skips=20=3D=20= 0;=0A=20=09=09=09int64=09=09serialization_failures=20=3D=200;=0A=20=09=09= =09int64=09=09deadlock_failures=20=3D=200;=0A=20=09=09=09int64=09=09= other_sql_failures=20=3D=200;=0A@@=20-4691,8=20+4691,8=20@@=20= doLog(TState=20*thread,=20CState=20*st,=0A=20=09=09=09=09=09lag_max);=0A=20= =0A=20=09=09=09if=20(latency_limit)=0A-=09=09=09=09skipped=20=3D=20= agg->skipped;=0A-=09=09=09fprintf(logfile,=20"=20"=20INT64_FORMAT,=20= skipped);=0A+=09=09=09=09skips=20=3D=20agg->skipped;=0A+=09=09=09= fprintf(logfile,=20"=20"=20INT64_FORMAT,=20skips);=0A=20=0A=20=09=09=09= if=20(max_tries=20!=3D=201)=0A=20=09=09=09{=0Adiff=20--git=20= a/src/bin/psql/describe.c=20b/src/bin/psql/describe.c=0Aindex=20= ab13c90ed33..0e408026183=20100644=0A---=20a/src/bin/psql/describe.c=0A= +++=20b/src/bin/psql/describe.c=0A@@=20-1758,7=20+1758,7=20@@=20= describeOneTableDetails(const=20char=20*schemaname,=0A=20=09if=20= (tableinfo.relkind=20=3D=3D=20RELKIND_SEQUENCE)=0A=20=09{=0A=20=09=09= PGresult=20=20=20*result=20=3D=20NULL;=0A-=09=09printQueryOpt=20myopt=20= =3D=20pset.popt;=0A+=09=09printQueryOpt=20popt=20=3D=20pset.popt;=0A=20=09= =09char=09=20=20=20*footers[3]=20=3D=20{NULL,=20NULL,=20NULL};=0A=20=0A=20= =09=09if=20(pset.sversion=20>=3D=20100000)=0A@@=20-1895,12=20+1895,12=20= @@=20describeOneTableDetails(const=20char=20*schemaname,=0A=20=09=09=09= printfPQExpBuffer(&title,=20_("Sequence=20\"%s.%s\""),=0A=20=09=09=09=09=09= =09=09=20=20schemaname,=20relationname);=0A=20=0A-=09=09myopt.footers=20= =3D=20footers;=0A-=09=09myopt.topt.default_footer=20=3D=20false;=0A-=09=09= myopt.title=20=3D=20title.data;=0A-=09=09myopt.translate_header=20=3D=20= true;=0A+=09=09popt.footers=20=3D=20footers;=0A+=09=09= popt.topt.default_footer=20=3D=20false;=0A+=09=09popt.title=20=3D=20= title.data;=0A+=09=09popt.translate_header=20=3D=20true;=0A=20=0A-=09=09= printQuery(res,=20&myopt,=20pset.queryFout,=20false,=20pset.logfile);=0A= +=09=09printQuery(res,=20&popt,=20pset.queryFout,=20false,=20= pset.logfile);=0A=20=0A=20=09=09free(footers[0]);=0A=20=09=09= free(footers[1]);=0A@@=20-2318,11=20+2318,11=20@@=20= describeOneTableDetails(const=20char=20*schemaname,=0A=20=0A=20=09=09if=20= (PQntuples(result)=20=3D=3D=201)=0A=20=09=09{=0A-=09=09=09char=09=20=20=20= *schemaname=20=3D=20PQgetvalue(result,=200,=200);=0A-=09=09=09char=09=20=20= =20*relname=20=3D=20PQgetvalue(result,=200,=201);=0A+=09=09=09const=20= char=20*schema=20=3D=20PQgetvalue(result,=200,=200);=0A+=09=09=09const=20= char=20*relname=20=3D=20PQgetvalue(result,=200,=201);=0A=20=0A=20=09=09=09= printfPQExpBuffer(&tmpbuf,=20_("Owning=20table:=20\"%s.%s\""),=0A-=09=09=09= =09=09=09=09=20=20schemaname,=20relname);=0A+=09=09=09=09=09=09=09=20=20= schema,=20relname);=0A=20=09=09=09printTableAddFooter(&cont,=20= tmpbuf.data);=0A=20=09=09}=0A=20=09=09PQclear(result);=0Adiff=20--git=20= a/src/bin/psql/prompt.c=20b/src/bin/psql/prompt.c=0Aindex=20= 9725d53dfe7..151b9bc1e56=20100644=0A---=20a/src/bin/psql/prompt.c=0A+++=20= b/src/bin/psql/prompt.c=0A@@=20-203,11=20+203,11=20@@=20= get_prompt(promptStatus_t=20status,=20ConditionalStack=20cstack)=0A=20=09= =09=09=09case=20'P':=0A=20=09=09=09=09=09if=20(pset.db)=0A=20=09=09=09=09= =09{=0A-=09=09=09=09=09=09PGpipelineStatus=20status=20=3D=20= PQpipelineStatus(pset.db);=0A+=09=09=09=09=09=09PGpipelineStatus=20= pipelinestatus=20=3D=20PQpipelineStatus(pset.db);=0A=20=0A-=09=09=09=09=09= =09if=20(status=20=3D=3D=20PQ_PIPELINE_ON)=0A+=09=09=09=09=09=09if=20= (pipelinestatus=20=3D=3D=20PQ_PIPELINE_ON)=0A=20=09=09=09=09=09=09=09= strlcpy(buf,=20"on",=20sizeof(buf));=0A-=09=09=09=09=09=09else=20if=20= (status=20=3D=3D=20PQ_PIPELINE_ABORTED)=0A+=09=09=09=09=09=09else=20if=20= (pipelinestatus=20=3D=3D=20PQ_PIPELINE_ABORTED)=0A=20=09=09=09=09=09=09=09= strlcpy(buf,=20"abort",=20sizeof(buf));=0A=20=09=09=09=09=09=09else=0A=20= =09=09=09=09=09=09=09strlcpy(buf,=20"off",=20sizeof(buf));=0A@@=20= -390,10=20+390,12=20@@=20get_prompt(promptStatus_t=20status,=20= ConditionalStack=20cstack)=0A=20=09/*=20Compute=20the=20visible=20width=20= of=20PROMPT1,=20for=20PROMPT2's=20%w=20*/=0A=20=09if=20(prompt_string=20= =3D=3D=20pset.prompt1)=0A=20=09{=0A-=09=09char=09=20=20=20*p=20=3D=20= destination;=0A-=09=09char=09=20=20=20*end=20=3D=20p=20+=20strlen(p);=0A= +=09=09const=20char=20*end;=0A=20=09=09bool=09=09visible=20=3D=20true;=0A= =20=0A+=09=09p=20=3D=20(const=20char=20*)=20destination;=0A+=09=09end=20= =3D=20p=20+=20strlen(p);=0A+=0A=20=09=09last_prompt1_width=20=3D=200;=0A=20= =09=09while=20(*p)=0A=20=09=09{=0Adiff=20--git=20a/src/fe_utils/print.c=20= b/src/fe_utils/print.c=0Aindex=2012d969e8666..ebb3d62f187=20100644=0A---=20= a/src/fe_utils/print.c=0A+++=20b/src/fe_utils/print.c=0A@@=20-933,7=20= +933,7=20@@=20print_aligned_text(const=20printTableContent=20*cont,=20= FILE=20*fout,=20bool=20is_pager)=0A=20=09=09if=20(!opt_tuples_only)=0A=20= =09=09{=0A=20=09=09=09int=09=09=09more_col_wrapping;=0A-=09=09=09int=09=09= =09curr_nl_line;=0A+=09=09=09int=09=09=09curr_line;=0A=20=0A=20=09=09=09= if=20(opt_border=20=3D=3D=202)=0A=20=09=09=09=09= _print_horizontal_line(col_count,=20width_wrap,=20opt_border,=0A@@=20= -945,7=20+945,7=20@@=20print_aligned_text(const=20printTableContent=20= *cont,=20FILE=20*fout,=20bool=20is_pager)=0A=20=09=09=09=09=09=09=09=20= col_lineptrs[i],=20max_nl_lines[i]);=0A=20=0A=20=09=09=09= more_col_wrapping=20=3D=20col_count;=0A-=09=09=09curr_nl_line=20=3D=200;=0A= +=09=09=09curr_line=20=3D=200;=0A=20=09=09=09if=20(col_count=20>=200)=0A=20= =09=09=09=09memset(header_done,=20false,=20col_count=20*=20= sizeof(bool));=0A=20=09=09=09while=20(more_col_wrapping)=0A@@=20-955,12=20= +955,12=20@@=20print_aligned_text(const=20printTableContent=20*cont,=20= FILE=20*fout,=20bool=20is_pager)=0A=20=0A=20=09=09=09=09for=20(i=20=3D=20= 0;=20i=20<=20cont->ncolumns;=20i++)=0A=20=09=09=09=09{=0A-=09=09=09=09=09= struct=20lineptr=20*this_line=20=3D=20col_lineptrs[i]=20+=20= curr_nl_line;=0A+=09=09=09=09=09struct=20lineptr=20*this_line=20=3D=20= col_lineptrs[i]=20+=20curr_line;=0A=20=09=09=09=09=09unsigned=20int=20= nbspace;=0A=20=0A=20=09=09=09=09=09if=20(opt_border=20!=3D=200=20||=0A=20= =09=09=09=09=09=09(!format->wrap_right_border=20&&=20i=20>=200))=0A-=09=09= =09=09=09=09fputs(curr_nl_line=20?=20format->header_nl_left=20:=20"=20",=0A= +=09=09=09=09=09=09fputs(curr_line=20?=20format->header_nl_left=20:=20"=20= ",=0A=20=09=09=09=09=09=09=09=20=20fout);=0A=20=0A=20=09=09=09=09=09if=20= (!header_done[i])=0A@@=20-987,7=20+987,7=20@@=20print_aligned_text(const=20= printTableContent=20*cont,=20FILE=20*fout,=20bool=20is_pager)=0A=20=09=09= =09=09=09if=20(opt_border=20!=3D=200=20&&=20col_count=20>=200=20&&=20i=20= <=20col_count=20-=201)=0A=20=09=09=09=09=09=09fputs(dformat->midvrule,=20= fout);=0A=20=09=09=09=09}=0A-=09=09=09=09curr_nl_line++;=0A+=09=09=09=09= curr_line++;=0A=20=0A=20=09=09=09=09if=20(opt_border=20=3D=3D=202)=0A=20=09= =09=09=09=09fputs(dformat->rightvrule,=20fout);=0Adiff=20--git=20= a/src/interfaces/libpq/fe-connect.c=20= b/src/interfaces/libpq/fe-connect.c=0Aindex=20b42a0cb4c78..514049a56a1=20= 100644=0A---=20a/src/interfaces/libpq/fe-connect.c=0A+++=20= b/src/interfaces/libpq/fe-connect.c=0A@@=20-3998,7=20+3998,7=20@@=20= keep_going:=09=09=09=09=09=09/*=20We=20will=20come=20back=20to=20here=20= until=20there=20is=0A=20=09=09=09=09int=09=09=09msgLength;=0A=20=09=09=09= =09int=09=09=09avail;=0A=20=09=09=09=09AuthRequest=20areq;=0A-=09=09=09=09= int=09=09=09res;=0A+=09=09=09=09int=09=09=09status;=0A=20=09=09=09=09= bool=09=09async;=0A=20=0A=20=09=09=09=09/*=0A@@=20-4223,9=20+4223,9=20@@=20= keep_going:=09=09=09=09=09=09/*=20We=20will=20come=20back=20to=20here=20= until=20there=20is=0A=20=09=09=09=09=20*=20Note=20that=20conn->pghost=20= must=20be=20non-NULL=20if=20we=20are=20going=20to=0A=20=09=09=09=09=20*=20= avoid=20the=20Kerberos=20code=20doing=20a=20hostname=20look-up.=0A=20=09=09= =09=09=20*/=0A-=09=09=09=09res=20=3D=20pg_fe_sendauth(areq,=20msgLength,=20= conn,=20&async);=0A+=09=09=09=09status=20=3D=20pg_fe_sendauth(areq,=20= msgLength,=20conn,=20&async);=0A=20=0A-=09=09=09=09if=20(async=20&&=20= (res=20=3D=3D=20STATUS_OK))=0A+=09=09=09=09if=20(async=20&&=20(status=20= =3D=3D=20STATUS_OK))=0A=20=09=09=09=09{=0A=20=09=09=09=09=09/*=0A=20=09=09= =09=09=09=20*=20We'll=20come=20back=20later=20once=20we're=20ready=20to=20= respond.=0A@@=20-4242,7=20+4242,7=20@@=20keep_going:=09=09=09=09=09=09/*=20= We=20will=20come=20back=20to=20here=20until=20there=20is=0A=20=09=09=09=09= =20*/=0A=20=09=09=09=09conn->inStart=20=3D=20conn->inCursor;=0A=20=0A-=09= =09=09=09if=20(res=20!=3D=20STATUS_OK)=0A+=09=09=09=09if=20(status=20!=3D=20= STATUS_OK)=0A=20=09=09=09=09{=0A=20=09=09=09=09=09/*=0A=20=09=09=09=09=09= =20*=20OAuth=20connections=20may=20perform=20two-step=20discovery,=20= where=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0003-cleanup-rename-outer-variables-to-avoid-shadowing.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0003-cleanup-rename-outer-variables-to-avoid-shadowing.patch" Content-Transfer-Encoding: quoted-printable =46rom=20bfa369c6de6f9b505a3525c8c3fbbb789e6bc2a1=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2011:51:01=20+0800=0ASubject:=20[PATCH=20= v6=2003/13]=20cleanup:=20rename=20outer=20variables=20to=20avoid=20= shadowing=0A=20inner=20locals=0A=0AThis=20commit=20resolves=20several=20= cases=20where=20an=20outer-scope=20variable=20shared=0Aa=20name=20with=20= a=20more=20frequently=20used=20inner=20variable.=20The=20fixes=20rename=20= the=0Aouter=20variables=20so=20each=20identifier=20remains=20distinct=20= within=20its=20scope.=0A=0AAuthor:=20Chao=20Li=20=0A= Reviewed-by:=20Peter=20Smith=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/catalog/objectaddress.c=20=20=20=20= =20|=2010=20+++++-----=0A=20src/backend/catalog/pg_constraint.c=20=20=20=20= =20|=20=204=20++--=0A=20src/backend/optimizer/path/equivclass.c=20|=20=20= 6=20+++---=0A=20src/backend/partitioning/partdesc.c=20=20=20=20=20|=20=20= 6=20+++---=0A=20src/backend/statistics/extended_stats.c=20|=20=206=20= +++---=0A=20src/backend/storage/aio/read_stream.c=20=20=20|=20=206=20= +++---=0A=20src/bin/pg_basebackup/pg_receivewal.c=20=20=20|=20=204=20= ++--=0A=207=20files=20changed,=2021=20insertions(+),=2021=20deletions(-)=0A= =0Adiff=20--git=20a/src/backend/catalog/objectaddress.c=20= b/src/backend/catalog/objectaddress.c=0Aindex=20d32aaff2821..71e1c583054=20= 100644=0A---=20a/src/backend/catalog/objectaddress.c=0A+++=20= b/src/backend/catalog/objectaddress.c=0A@@=20-2120,7=20+2120,7=20@@=20= pg_get_object_address(PG_FUNCTION_ARGS)=0A=20=09ObjectAddress=20addr;=0A=20= =09TupleDesc=09tupdesc;=0A=20=09Datum=09=09values[3];=0A-=09bool=09=09= nulls[3];=0A+=09bool=09=09isnulls[3];=0A=20=09HeapTuple=09htup;=0A=20=09= Relation=09relation;=0A=20=0A@@=20-2375,11=20+2375,11=20@@=20= pg_get_object_address(PG_FUNCTION_ARGS)=0A=20=09values[0]=20=3D=20= ObjectIdGetDatum(addr.classId);=0A=20=09values[1]=20=3D=20= ObjectIdGetDatum(addr.objectId);=0A=20=09values[2]=20=3D=20= Int32GetDatum(addr.objectSubId);=0A-=09nulls[0]=20=3D=20false;=0A-=09= nulls[1]=20=3D=20false;=0A-=09nulls[2]=20=3D=20false;=0A+=09isnulls[0]=20= =3D=20false;=0A+=09isnulls[1]=20=3D=20false;=0A+=09isnulls[2]=20=3D=20= false;=0A=20=0A-=09htup=20=3D=20heap_form_tuple(tupdesc,=20values,=20= nulls);=0A+=09htup=20=3D=20heap_form_tuple(tupdesc,=20values,=20= isnulls);=0A=20=0A=20=09PG_RETURN_DATUM(HeapTupleGetDatum(htup));=0A=20}=0A= diff=20--git=20a/src/backend/catalog/pg_constraint.c=20= b/src/backend/catalog/pg_constraint.c=0Aindex=20b12765ae691..48171c0f7d5=20= 100644=0A---=20a/src/backend/catalog/pg_constraint.c=0A+++=20= b/src/backend/catalog/pg_constraint.c=0A@@=20-831,7=20+831,7=20@@=20= AdjustNotNullInheritance(Oid=20relid,=20AttrNumber=20attnum,=20const=20= char=20*new_conname,=0A=20=20*=20'include_noinh'=20determines=20whether=20= to=20include=20NO=20INHERIT=20constraints=20or=20not.=0A=20=20*/=0A=20= List=20*=0A-RelationGetNotNullConstraints(Oid=20relid,=20bool=20cooked,=20= bool=20include_noinh)=0A+RelationGetNotNullConstraints(Oid=20relid,=20= bool=20want_cooked,=20bool=20include_noinh)=0A=20{=0A=20=09List=09=20=20=20= *notnulls=20=3D=20NIL;=0A=20=09Relation=09constrRel;=0A@@=20-859,7=20= +859,7=20@@=20RelationGetNotNullConstraints(Oid=20relid,=20bool=20= cooked,=20bool=20include_noinh)=0A=20=0A=20=09=09colnum=20=3D=20= extractNotNullColumn(htup);=0A=20=0A-=09=09if=20(cooked)=0A+=09=09if=20= (want_cooked)=0A=20=09=09{=0A=20=09=09=09CookedConstraint=20*cooked;=0A=20= =0Adiff=20--git=20a/src/backend/optimizer/path/equivclass.c=20= b/src/backend/optimizer/path/equivclass.c=0Aindex=20= e3697df51a2..d273288c28f=20100644=0A---=20= a/src/backend/optimizer/path/equivclass.c=0A+++=20= b/src/backend/optimizer/path/equivclass.c=0A@@=20-739,7=20+739,7=20@@=20= get_eclass_for_sort_expr(PlannerInfo=20*root,=0A=20=09=09=09=09=09=09=20= Oid=20opcintype,=0A=20=09=09=09=09=09=09=20Oid=20collation,=0A=20=09=09=09= =09=09=09=20Index=20sortref,=0A-=09=09=09=09=09=09=20Relids=20rel,=0A+=09= =09=09=09=09=09=20Relids=20relids,=0A=20=09=09=09=09=09=09=20bool=20= create_it)=0A=20{=0A=20=09JoinDomain=20*jdomain;=0A@@=20-782,14=20= +782,14=20@@=20get_eclass_for_sort_expr(PlannerInfo=20*root,=0A=20=09=09= if=20(!equal(opfamilies,=20cur_ec->ec_opfamilies))=0A=20=09=09=09= continue;=0A=20=0A-=09=09setup_eclass_member_iterator(&it,=20cur_ec,=20= rel);=0A+=09=09setup_eclass_member_iterator(&it,=20cur_ec,=20relids);=0A=20= =09=09while=20((cur_em=20=3D=20eclass_member_iterator_next(&it))=20!=3D=20= NULL)=0A=20=09=09{=0A=20=09=09=09/*=0A=20=09=09=09=20*=20Ignore=20child=20= members=20unless=20they=20match=20the=20request.=0A=20=09=09=09=20*/=0A=20= =09=09=09if=20(cur_em->em_is_child=20&&=0A-=09=09=09=09= !bms_equal(cur_em->em_relids,=20rel))=0A+=09=09=09=09= !bms_equal(cur_em->em_relids,=20relids))=0A=20=09=09=09=09continue;=0A=20= =0A=20=09=09=09/*=0Adiff=20--git=20a/src/backend/partitioning/partdesc.c=20= b/src/backend/partitioning/partdesc.c=0Aindex=20c3d275f8726..44297278756=20= 100644=0A---=20a/src/backend/partitioning/partdesc.c=0A+++=20= b/src/backend/partitioning/partdesc.c=0A@@=20-146,7=20+146,7=20@@=20= RelationBuildPartitionDesc(Relation=20rel,=20bool=20omit_detached)=0A=20=09= int=09=09=09i,=0A=20=09=09=09=09nparts;=0A=20=09bool=09=09retried=20=3D=20= false;=0A-=09PartitionKey=20key=20=3D=20RelationGetPartitionKey(rel);=0A= +=09PartitionKey=20partkey=20=3D=20RelationGetPartitionKey(rel);=0A=20=09= MemoryContext=20new_pdcxt;=0A=20=09MemoryContext=20oldcxt;=0A=20=09int=09= =09=20=20=20*mapping;=0A@@=20-308,7=20+308,7=20@@=20retry:=0A=20=09=20*=20= This=20could=20fail,=20but=20we=20haven't=20done=20any=20damage=20if=20= so.=0A=20=09=20*/=0A=20=09if=20(nparts=20>=200)=0A-=09=09boundinfo=20=3D=20= partition_bounds_create(boundspecs,=20nparts,=20key,=20&mapping);=0A+=09=09= boundinfo=20=3D=20partition_bounds_create(boundspecs,=20nparts,=20= partkey,=20&mapping);=0A=20=0A=20=09/*=0A=20=09=20*=20Now=20build=20the=20= actual=20relcache=20partition=20descriptor,=20copying=20all=20the=0A@@=20= -329,7=20+329,7=20@@=20retry:=0A=20=09if=20(nparts=20>=200)=0A=20=09{=0A=20= =09=09oldcxt=20=3D=20MemoryContextSwitchTo(new_pdcxt);=0A-=09=09= partdesc->boundinfo=20=3D=20partition_bounds_copy(boundinfo,=20key);=0A+=09= =09partdesc->boundinfo=20=3D=20partition_bounds_copy(boundinfo,=20= partkey);=0A=20=0A=20=09=09/*=20Initialize=20caching=20fields=20for=20= speeding=20up=20ExecFindPartition=20*/=0A=20=09=09= partdesc->last_found_datum_index=20=3D=20-1;=0Adiff=20--git=20= a/src/backend/statistics/extended_stats.c=20= b/src/backend/statistics/extended_stats.c=0Aindex=20= 334c6498581..44957525dd3=20100644=0A---=20= a/src/backend/statistics/extended_stats.c=0A+++=20= b/src/backend/statistics/extended_stats.c=0A@@=20-1001,7=20+1001,7=20@@=20= build_sorted_items(StatsBuildData=20*data,=20int=20*nitems,=0A=20=09Size=09= =09len;=0A=20=09SortItem=20=20=20*items;=0A=20=09Datum=09=20=20=20= *values;=0A-=09bool=09=20=20=20*isnull;=0A+=09bool=09=20=20=20*isnulls;=0A= =20=09char=09=20=20=20*ptr;=0A=20=09int=09=09=20=20=20*typlen;=0A=20=0A= @@=20-1021,7=20+1021,7=20@@=20build_sorted_items(StatsBuildData=20*data,=20= int=20*nitems,=0A=20=09values=20=3D=20(Datum=20*)=20ptr;=0A=20=09ptr=20= +=3D=20nvalues=20*=20sizeof(Datum);=0A=20=0A-=09isnull=20=3D=20(bool=20= *)=20ptr;=0A+=09isnulls=20=3D=20(bool=20*)=20ptr;=0A=20=09ptr=20+=3D=20= nvalues=20*=20sizeof(bool);=0A=20=0A=20=09/*=20make=20sure=20we=20= consumed=20the=20whole=20buffer=20exactly=20*/=0A@@=20-1032,7=20+1032,7=20= @@=20build_sorted_items(StatsBuildData=20*data,=20int=20*nitems,=0A=20=09= for=20(i=20=3D=200;=20i=20<=20data->numrows;=20i++)=0A=20=09{=0A=20=09=09= items[nrows].values=20=3D=20&values[nrows=20*=20numattrs];=0A-=09=09= items[nrows].isnull=20=3D=20&isnull[nrows=20*=20numattrs];=0A+=09=09= items[nrows].isnull=20=3D=20&isnulls[nrows=20*=20numattrs];=0A=20=0A=20=09= =09nrows++;=0A=20=09}=0Adiff=20--git=20= a/src/backend/storage/aio/read_stream.c=20= b/src/backend/storage/aio/read_stream.c=0Aindex=20= 88717c2ff8f..b8bc0b6201a=20100644=0A---=20= a/src/backend/storage/aio/read_stream.c=0A+++=20= b/src/backend/storage/aio/read_stream.c=0A@@=20-788,7=20+788,7=20@@=20= read_stream_begin_smgr_relation(int=20flags,=0A=20=20*=20the=20stream=20= early=20at=20any=20time=20by=20calling=20read_stream_end().=0A=20=20*/=0A= =20Buffer=0A-read_stream_next_buffer(ReadStream=20*stream,=20void=20= **per_buffer_data)=0A+read_stream_next_buffer(ReadStream=20*stream,=20= void=20**pper_buffer_data)=0A=20{=0A=20=09Buffer=09=09buffer;=0A=20=09= int16=09=09oldest_buffer_index;=0A@@=20-903,8=20+903,8=20@@=20= read_stream_next_buffer(ReadStream=20*stream,=20void=20= **per_buffer_data)=0A=20=09Assert(oldest_buffer_index=20>=3D=200=20&&=0A=20= =09=09=20=20=20oldest_buffer_index=20<=20stream->queue_size);=0A=20=09= buffer=20=3D=20stream->buffers[oldest_buffer_index];=0A-=09if=20= (per_buffer_data)=0A-=09=09*per_buffer_data=20=3D=20= get_per_buffer_data(stream,=20oldest_buffer_index);=0A+=09if=20= (pper_buffer_data)=0A+=09=09*pper_buffer_data=20=3D=20= get_per_buffer_data(stream,=20oldest_buffer_index);=0A=20=0A=20=09= Assert(BufferIsValid(buffer));=0A=20=0Adiff=20--git=20= a/src/bin/pg_basebackup/pg_receivewal.c=20= b/src/bin/pg_basebackup/pg_receivewal.c=0Aindex=20= ddfec298fb7..1652fecdf6d=20100644=0A---=20= a/src/bin/pg_basebackup/pg_receivewal.c=0A+++=20= b/src/bin/pg_basebackup/pg_receivewal.c=0A@@=20-265,7=20+265,7=20@@=20= close_destination_dir(DIR=20*dest_dir,=20char=20*dest_folder)=0A=20=20*=20= If=20there=20are=20no=20WAL=20files=20in=20the=20directory,=20returns=20= InvalidXLogRecPtr.=0A=20=20*/=0A=20static=20XLogRecPtr=0A= -FindStreamingStart(uint32=20*tli)=0A+FindStreamingStart(uint32=20*ptli)=0A= =20{=0A=20=09DIR=09=09=20=20=20*dir;=0A=20=09struct=20dirent=20*dirent;=0A= @@=20-486,7=20+486,7=20@@=20FindStreamingStart(uint32=20*tli)=0A=20=0A=20= =09=09XLogSegNoOffsetToRecPtr(high_segno,=200,=20WalSegSz,=20high_ptr);=0A= =20=0A-=09=09*tli=20=3D=20high_tli;=0A+=09=09*ptli=20=3D=20high_tli;=0A=20= =09=09return=20high_ptr;=0A=20=09}=0A=20=09else=0A--=20=0A2.50.1=20= (Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0004-cleanup-fix-macro-induced-variable-shadowing-in-i.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0004-cleanup-fix-macro-induced-variable-shadowing-in-i.patch" Content-Transfer-Encoding: quoted-printable =46rom=207720a3271dbeee7d4bf753363e7b1d167897ebfa=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2012:08:03=20+0800=0ASubject:=20[PATCH=20= v6=2004/13]=20cleanup:=20fix=20macro-induced=20variable=20shadowing=20in=0A= =20inval.c=0A=0AThis=20commit=20resolves=20a=20shadowing=20issue=20in=20= inval.c=20where=20variables=20defined=0Ainside=20the=20= ProcessMessageSubGroup=20and=20ProcessMessageSubGroupMulti=20macros=0A= conflicted=20with=20an=20existing=20local=20name.=20The=20fix=20renames=20= the=20macro-scoped=0Avariable=20so=20it=20no=20longer=20shadows=20the=20= local=20variable=20at=20the=20call=20site.=0A=0AAuthor:=20Chao=20Li=20= =0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/utils/cache/inval.c=20|=2044=20= ++++++++++++++++-----------------=0A=201=20file=20changed,=2022=20= insertions(+),=2022=20deletions(-)=0A=0Adiff=20--git=20= a/src/backend/utils/cache/inval.c=20b/src/backend/utils/cache/inval.c=0A= index=20d59216b28f1..4072aa06703=20100644=0A---=20= a/src/backend/utils/cache/inval.c=0A+++=20= b/src/backend/utils/cache/inval.c=0A@@=20-387,7=20+387,7=20@@=20= AppendInvalidationMessageSubGroup(InvalidationMsgsGroup=20*dest,=0A=20=09= =09int=09=09_endmsg=20=3D=20(group)->nextmsg[subgroup];=20\=0A=20=09=09= for=20(;=20_msgindex=20<=20_endmsg;=20_msgindex++)=20\=0A=20=09=09{=20\=0A= -=09=09=09SharedInvalidationMessage=20*msg=20=3D=20\=0A+=09=09=09= SharedInvalidationMessage=20*_msg=20=3D=20\=0A=20=09=09=09=09= &InvalMessageArrays[subgroup].msgs[_msgindex];=20\=0A=20=09=09=09= codeFragment;=20\=0A=20=09=09}=20\=0A@@=20-403,7=20+403,7=20@@=20= AppendInvalidationMessageSubGroup(InvalidationMsgsGroup=20*dest,=0A=20=09= do=20{=20\=0A=20=09=09int=09=09n=20=3D=20NumMessagesInSubGroup(group,=20= subgroup);=20\=0A=20=09=09if=20(n=20>=200)=20{=20\=0A-=09=09=09= SharedInvalidationMessage=20*msgs=20=3D=20\=0A+=09=09=09= SharedInvalidationMessage=20*_msgs=20=3D=20\=0A=20=09=09=09=09= &InvalMessageArrays[subgroup].msgs[(group)->firstmsg[subgroup]];=20\=0A=20= =09=09=09codeFragment;=20\=0A=20=09=09}=20\=0A@@=20-479,9=20+479,9=20@@=20= AddRelcacheInvalidationMessage(InvalidationMsgsGroup=20*group,=0A=20=09=20= *=20don't=20need=20to=20add=20individual=20ones=20when=20it=20is=20= present.=0A=20=09=20*/=0A=20=09ProcessMessageSubGroup(group,=20= RelCacheMsgs,=0A-=09=09=09=09=09=09=20=20=20if=20(msg->rc.id=20=3D=3D=20= SHAREDINVALRELCACHE_ID=20&&=0A-=09=09=09=09=09=09=09=20=20=20= (msg->rc.relId=20=3D=3D=20relId=20||=0A-=09=09=09=09=09=09=09=09= msg->rc.relId=20=3D=3D=20InvalidOid))=0A+=09=09=09=09=09=09=20=20=20if=20= (_msg->rc.id=20=3D=3D=20SHAREDINVALRELCACHE_ID=20&&=0A+=09=09=09=09=09=09= =09=20=20=20(_msg->rc.relId=20=3D=3D=20relId=20||=0A+=09=09=09=09=09=09=09= =09_msg->rc.relId=20=3D=3D=20InvalidOid))=0A=20=09=09=09=09=09=09=20=20=20= return);=0A=20=0A=20=09/*=20OK,=20add=20the=20item=20*/=0A@@=20-509,9=20= +509,9=20@@=20AddRelsyncInvalidationMessage(InvalidationMsgsGroup=20= *group,=0A=20=0A=20=09/*=20Don't=20add=20a=20duplicate=20item.=20*/=0A=20= =09ProcessMessageSubGroup(group,=20RelCacheMsgs,=0A-=09=09=09=09=09=09=20= =20=20if=20(msg->rc.id=20=3D=3D=20SHAREDINVALRELSYNC_ID=20&&=0A-=09=09=09= =09=09=09=09=20=20=20(msg->rc.relId=20=3D=3D=20relId=20||=0A-=09=09=09=09= =09=09=09=09msg->rc.relId=20=3D=3D=20InvalidOid))=0A+=09=09=09=09=09=09=20= =20=20if=20(_msg->rc.id=20=3D=3D=20SHAREDINVALRELSYNC_ID=20&&=0A+=09=09=09= =09=09=09=09=20=20=20(_msg->rc.relId=20=3D=3D=20relId=20||=0A+=09=09=09=09= =09=09=09=09_msg->rc.relId=20=3D=3D=20InvalidOid))=0A=20=09=09=09=09=09=09= =20=20=20return);=0A=20=0A=20=09/*=20OK,=20add=20the=20item=20*/=0A@@=20= -538,8=20+538,8=20@@=20= AddSnapshotInvalidationMessage(InvalidationMsgsGroup=20*group,=0A=20=09= /*=20Don't=20add=20a=20duplicate=20item=20*/=0A=20=09/*=20We=20assume=20= dbId=20need=20not=20be=20checked=20because=20it=20will=20never=20change=20= */=0A=20=09ProcessMessageSubGroup(group,=20RelCacheMsgs,=0A-=09=09=09=09=09= =09=20=20=20if=20(msg->sn.id=20=3D=3D=20SHAREDINVALSNAPSHOT_ID=20&&=0A-=09= =09=09=09=09=09=09=20=20=20msg->sn.relId=20=3D=3D=20relId)=0A+=09=09=09=09= =09=09=20=20=20if=20(_msg->sn.id=20=3D=3D=20SHAREDINVALSNAPSHOT_ID=20&&=0A= +=09=09=09=09=09=09=09=20=20=20_msg->sn.relId=20=3D=3D=20relId)=0A=20=09=09= =09=09=09=09=20=20=20return);=0A=20=0A=20=09/*=20OK,=20add=20the=20item=20= */=0A@@=20-574,8=20+574,8=20@@=20static=20void=0A=20= ProcessInvalidationMessages(InvalidationMsgsGroup=20*group,=0A=20=09=09=09= =09=09=09=09void=20(*func)=20(SharedInvalidationMessage=20*msg))=0A=20{=0A= -=09ProcessMessageSubGroup(group,=20CatCacheMsgs,=20func(msg));=0A-=09= ProcessMessageSubGroup(group,=20RelCacheMsgs,=20func(msg));=0A+=09= ProcessMessageSubGroup(group,=20CatCacheMsgs,=20func(_msg));=0A+=09= ProcessMessageSubGroup(group,=20RelCacheMsgs,=20func(_msg));=0A=20}=0A=20= =0A=20/*=0A@@=20-586,8=20+586,8=20@@=20static=20void=0A=20= ProcessInvalidationMessagesMulti(InvalidationMsgsGroup=20*group,=0A=20=09= =09=09=09=09=09=09=09=20void=20(*func)=20(const=20= SharedInvalidationMessage=20*msgs,=20int=20n))=0A=20{=0A-=09= ProcessMessageSubGroupMulti(group,=20CatCacheMsgs,=20func(msgs,=20n));=0A= -=09ProcessMessageSubGroupMulti(group,=20RelCacheMsgs,=20func(msgs,=20= n));=0A+=09ProcessMessageSubGroupMulti(group,=20CatCacheMsgs,=20= func(_msgs,=20n));=0A+=09ProcessMessageSubGroupMulti(group,=20= RelCacheMsgs,=20func(_msgs,=20n));=0A=20}=0A=20=0A=20/*=20= ----------------------------------------------------------------=0A@@=20= -1053,25=20+1053,25=20@@=20= xactGetCommittedInvalidationMessages(SharedInvalidationMessage=20**msgs,=0A= =20=09ProcessMessageSubGroupMulti(&transInvalInfo->PriorCmdInvalidMsgs,=0A= =20=09=09=09=09=09=09=09=09CatCacheMsgs,=0A=20=09=09=09=09=09=09=09=09= (memcpy(msgarray=20+=20nmsgs,=0A-=09=09=09=09=09=09=09=09=09=09msgs,=0A+=09= =09=09=09=09=09=09=09=09=09_msgs,=0A=20=09=09=09=09=09=09=09=09=09=09n=20= *=20sizeof(SharedInvalidationMessage)),=0A=20=09=09=09=09=09=09=09=09=20= nmsgs=20+=3D=20n));=0A=20=09= ProcessMessageSubGroupMulti(&transInvalInfo->ii.CurrentCmdInvalidMsgs,=0A= =20=09=09=09=09=09=09=09=09CatCacheMsgs,=0A=20=09=09=09=09=09=09=09=09= (memcpy(msgarray=20+=20nmsgs,=0A-=09=09=09=09=09=09=09=09=09=09msgs,=0A+=09= =09=09=09=09=09=09=09=09=09_msgs,=0A=20=09=09=09=09=09=09=09=09=09=09n=20= *=20sizeof(SharedInvalidationMessage)),=0A=20=09=09=09=09=09=09=09=09=20= nmsgs=20+=3D=20n));=0A=20=09= ProcessMessageSubGroupMulti(&transInvalInfo->PriorCmdInvalidMsgs,=0A=20=09= =09=09=09=09=09=09=09RelCacheMsgs,=0A=20=09=09=09=09=09=09=09=09= (memcpy(msgarray=20+=20nmsgs,=0A-=09=09=09=09=09=09=09=09=09=09msgs,=0A+=09= =09=09=09=09=09=09=09=09=09_msgs,=0A=20=09=09=09=09=09=09=09=09=09=09n=20= *=20sizeof(SharedInvalidationMessage)),=0A=20=09=09=09=09=09=09=09=09=20= nmsgs=20+=3D=20n));=0A=20=09= ProcessMessageSubGroupMulti(&transInvalInfo->ii.CurrentCmdInvalidMsgs,=0A= =20=09=09=09=09=09=09=09=09RelCacheMsgs,=0A=20=09=09=09=09=09=09=09=09= (memcpy(msgarray=20+=20nmsgs,=0A-=09=09=09=09=09=09=09=09=09=09msgs,=0A+=09= =09=09=09=09=09=09=09=09=09_msgs,=0A=20=09=09=09=09=09=09=09=09=09=09n=20= *=20sizeof(SharedInvalidationMessage)),=0A=20=09=09=09=09=09=09=09=09=20= nmsgs=20+=3D=20n));=0A=20=09Assert(nmsgs=20=3D=3D=20nummsgs);=0A@@=20= -1109,13=20+1109,13=20@@=20= inplaceGetInvalidationMessages(SharedInvalidationMessage=20**msgs,=0A=20=09= ProcessMessageSubGroupMulti(&inplaceInvalInfo->CurrentCmdInvalidMsgs,=0A=20= =09=09=09=09=09=09=09=09CatCacheMsgs,=0A=20=09=09=09=09=09=09=09=09= (memcpy(msgarray=20+=20nmsgs,=0A-=09=09=09=09=09=09=09=09=09=09msgs,=0A+=09= =09=09=09=09=09=09=09=09=09_msgs,=0A=20=09=09=09=09=09=09=09=09=09=09n=20= *=20sizeof(SharedInvalidationMessage)),=0A=20=09=09=09=09=09=09=09=09=20= nmsgs=20+=3D=20n));=0A=20=09= ProcessMessageSubGroupMulti(&inplaceInvalInfo->CurrentCmdInvalidMsgs,=0A=20= =09=09=09=09=09=09=09=09RelCacheMsgs,=0A=20=09=09=09=09=09=09=09=09= (memcpy(msgarray=20+=20nmsgs,=0A-=09=09=09=09=09=09=09=09=09=09msgs,=0A+=09= =09=09=09=09=09=09=09=09=09_msgs,=0A=20=09=09=09=09=09=09=09=09=09=09n=20= *=20sizeof(SharedInvalidationMessage)),=0A=20=09=09=09=09=09=09=09=09=20= nmsgs=20+=3D=20n));=0A=20=09Assert(nmsgs=20=3D=3D=20nummsgs);=0A@@=20= -1959,10=20+1959,10=20@@=20LogLogicalInvalidations(void)=0A=20=09=09= XLogBeginInsert();=0A=20=09=09XLogRegisterData(&xlrec,=20= MinSizeOfXactInvals);=0A=20=09=09ProcessMessageSubGroupMulti(group,=20= CatCacheMsgs,=0A-=09=09=09=09=09=09=09=09=09XLogRegisterData(msgs,=0A+=09= =09=09=09=09=09=09=09=09XLogRegisterData(_msgs,=0A=20=09=09=09=09=09=09=09= =09=09=09=09=09=09=20n=20*=20sizeof(SharedInvalidationMessage)));=0A=20=09= =09ProcessMessageSubGroupMulti(group,=20RelCacheMsgs,=0A-=09=09=09=09=09=09= =09=09=09XLogRegisterData(msgs,=0A+=09=09=09=09=09=09=09=09=09= XLogRegisterData(_msgs,=0A=20=09=09=09=09=09=09=09=09=09=09=09=09=09=20n=20= *=20sizeof(SharedInvalidationMessage)));=0A=20=09=09= XLogInsert(RM_XACT_ID,=20XLOG_XACT_INVALIDATIONS);=0A=20=09}=0A--=20=0A= 2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0005-cleanup-avoid-local-wal_level-and-wal_segment_siz.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0005-cleanup-avoid-local-wal_level-and-wal_segment_siz.patch" Content-Transfer-Encoding: quoted-printable =46rom=207ab721bcec69bd2f24e7db5406cac296b9133162=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2013:45:05=20+0800=0ASubject:=20[PATCH=20= v6=2005/13]=20cleanup:=20avoid=20local=20wal_level=20and=20= wal_segment_size=0A=20being=20shadowed=20by=20globals=0A=0AThis=20commit=20= fixes=20cases=20where=20local=20variables=20named=20wal_level=20and=0A= wal_segment_size=20were=20shadowed=20by=20global=20identifiers=20of=20= the=20same=20names.=0AThe=20local=20variables=20are=20renamed=20so=20= they=20are=20no=20longer=20shadowed=20by=20the=0Aglobals.=0A=0AAuthor:=20= Chao=20Li=20=0AReviewed-by:=20Andres=20Freund=20= =0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/access/rmgrdesc/xlogdesc.c=20=20|=20= 12=20++++++------=0A=20src/backend/access/transam/xlogreader.c=20|=20=20= 4=20++--=0A=20src/bin/pg_controldata/pg_controldata.c=20|=20=204=20++--=0A= =203=20files=20changed,=2010=20insertions(+),=2010=20deletions(-)=0A=0A= diff=20--git=20a/src/backend/access/rmgrdesc/xlogdesc.c=20= b/src/backend/access/rmgrdesc/xlogdesc.c=0Aindex=20= ff078f22264..d293c6c7e4d=20100644=0A---=20= a/src/backend/access/rmgrdesc/xlogdesc.c=0A+++=20= b/src/backend/access/rmgrdesc/xlogdesc.c=0A@@=20-34,17=20+34,17=20@@=20= const=20struct=20config_enum_entry=20wal_level_options[]=20=3D=20{=0A=20= };=0A=20=0A=20/*=0A-=20*=20Find=20a=20string=20representation=20for=20= wal_level=0A+=20*=20Find=20a=20string=20representation=20for=20wal=20= level=0A=20=20*/=0A=20static=20const=20char=20*=0A= -get_wal_level_string(int=20wal_level)=0A+get_wal_level_string(int=20= level)=0A=20{=0A=20=09const=20struct=20config_enum_entry=20*entry;=0A=20=09= const=20char=20*wal_level_str=20=3D=20"?";=0A=20=0A=20=09for=20(entry=20= =3D=20wal_level_options;=20entry->name;=20entry++)=0A=20=09{=0A-=09=09if=20= (entry->val=20=3D=3D=20wal_level)=0A+=09=09if=20(entry->val=20=3D=3D=20= level)=0A=20=09=09{=0A=20=09=09=09wal_level_str=20=3D=20entry->name;=0A=20= =09=09=09break;=0A@@=20-163,10=20+163,10=20@@=20xlog_desc(StringInfo=20= buf,=20XLogReaderState=20*record)=0A=20=09}=0A=20=09else=20if=20(info=20= =3D=3D=20XLOG_CHECKPOINT_REDO)=0A=20=09{=0A-=09=09int=09=09=09wal_level;=0A= +=09=09int=09=09=09level;=0A=20=0A-=09=09memcpy(&wal_level,=20rec,=20= sizeof(int));=0A-=09=09appendStringInfo(buf,=20"wal_level=20%s",=20= get_wal_level_string(wal_level));=0A+=09=09memcpy(&level,=20rec,=20= sizeof(int));=0A+=09=09appendStringInfo(buf,=20"wal_level=20%s",=20= get_wal_level_string(level));=0A=20=09}=0A=20=09else=20if=20(info=20=3D=3D= =20XLOG_LOGICAL_DECODING_STATUS_CHANGE)=0A=20=09{=0Adiff=20--git=20= a/src/backend/access/transam/xlogreader.c=20= b/src/backend/access/transam/xlogreader.c=0Aindex=20= 03ada8aa0c5..e378bca0220=20100644=0A---=20= a/src/backend/access/transam/xlogreader.c=0A+++=20= b/src/backend/access/transam/xlogreader.c=0A@@=20-104,7=20+104,7=20@@=20= XLogReaderSetDecodeBuffer(XLogReaderState=20*state,=20void=20*buffer,=20= size_t=20size)=0A=20=20*=20Returns=20NULL=20if=20the=20xlogreader=20= couldn't=20be=20allocated.=0A=20=20*/=0A=20XLogReaderState=20*=0A= -XLogReaderAllocate(int=20wal_segment_size,=20const=20char=20*waldir,=0A= +XLogReaderAllocate(int=20wal_seg_size,=20const=20char=20*waldir,=0A=20=09= =09=09=09=20=20=20XLogReaderRoutine=20*routine,=20void=20*private_data)=0A= =20{=0A=20=09XLogReaderState=20*state;=0A@@=20-134,7=20+134,7=20@@=20= XLogReaderAllocate(int=20wal_segment_size,=20const=20char=20*waldir,=0A=20= =09}=0A=20=0A=20=09/*=20Initialize=20segment=20info.=20*/=0A-=09= WALOpenSegmentInit(&state->seg,=20&state->segcxt,=20wal_segment_size,=0A= +=09WALOpenSegmentInit(&state->seg,=20&state->segcxt,=20wal_seg_size,=0A=20= =09=09=09=09=09=20=20=20waldir);=0A=20=0A=20=09/*=20system_identifier=20= initialized=20to=20zeroes=20above=20*/=0Adiff=20--git=20= a/src/bin/pg_controldata/pg_controldata.c=20= b/src/bin/pg_controldata/pg_controldata.c=0Aindex=20= a4060309ae0..f48985fd9cc=20100644=0A---=20= a/src/bin/pg_controldata/pg_controldata.c=0A+++=20= b/src/bin/pg_controldata/pg_controldata.c=0A@@=20-70,9=20+70,9=20@@=20= dbState(DBState=20state)=0A=20}=0A=20=0A=20static=20const=20char=20*=0A= -wal_level_str(WalLevel=20wal_level)=0A+wal_level_str(WalLevel=20level)=0A= =20{=0A-=09switch=20(wal_level)=0A+=09switch=20(level)=0A=20=09{=0A=20=09= =09case=20WAL_LEVEL_MINIMAL:=0A=20=09=09=09return=20"minimal";=0A--=20=0A= 2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0006-cleanup-avoid-local-variables-shadowed-by-static-.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0006-cleanup-avoid-local-variables-shadowed-by-static-.patch" Content-Transfer-Encoding: quoted-printable =46rom=20cf5c43919ca2f475ff69eda2e2a47761cadd212d=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2014:01:31=20+0800=0ASubject:=20[PATCH=20= v6=2006/13]=20cleanup:=20avoid=20local=20variables=20shadowed=20by=20= static=0A=20file-scope=20ones=20in=20xlogrecovery.c=0A=0AThis=20commit=20= fixes=20several=20cases=20in=20xlogrecovery.c=20where=20local=20= variables=0Aused=20names=20that=20conflicted=20with=20static=20variables=20= defined=20at=20file=20scope.=0AThe=20local=20identifiers=20are=20renamed=20= so=20they=20are=20no=20longer=20shadowed=20by=20the=0Astatic=20ones.=0A=0A= Author:=20Chao=20Li=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/access/transam/xlogrecovery.c=20|=20= 100=20+++++++++++-----------=0A=201=20file=20changed,=2050=20= insertions(+),=2050=20deletions(-)=0A=0Adiff=20--git=20= a/src/backend/access/transam/xlogrecovery.c=20= b/src/backend/access/transam/xlogrecovery.c=0Aindex=20= ecd66fd86a4..79601125c21=20100644=0A---=20= a/src/backend/access/transam/xlogrecovery.c=0A+++=20= b/src/backend/access/transam/xlogrecovery.c=0A@@=20-1219,7=20+1219,7=20= @@=20validateRecoveryParameters(void)=0A=20=20*=20Returns=20true=20if=20= a=20backup_label=20was=20found=20(and=20fills=20the=20checkpoint=0A=20=20= *=20location=20and=20TLI=20into=20*checkPointLoc=20and=20= *backupLabelTLI,=20respectively);=0A=20=20*=20returns=20false=20if=20= not.=20If=20this=20backup_label=20came=20from=20a=20streamed=20backup,=0A= -=20*=20*backupEndRequired=20is=20set=20to=20true.=20If=20this=20= backup_label=20was=20created=20during=0A+=20*=20*backupEndNeeded=20is=20= set=20to=20true.=20If=20this=20backup_label=20was=20created=20during=0A=20= =20*=20recovery,=20*backupFromStandby=20is=20set=20to=20true.=0A=20=20*=0A= =20=20*=20Also=20sets=20the=20global=20variables=20RedoStartLSN=20and=20= RedoStartTLI=20with=20the=20LSN=0A@@=20-1227,7=20+1227,7=20@@=20= validateRecoveryParameters(void)=0A=20=20*/=0A=20static=20bool=0A=20= read_backup_label(XLogRecPtr=20*checkPointLoc,=20TimeLineID=20= *backupLabelTLI,=0A-=09=09=09=09=20=20bool=20*backupEndRequired,=20bool=20= *backupFromStandby)=0A+=09=09=09=09=20=20bool=20*backupEndNeeded,=20bool=20= *backupFromStandby)=0A=20{=0A=20=09char=09=09= startxlogfilename[MAXFNAMELEN];=0A=20=09TimeLineID=09tli_from_walseg,=0A= @@=20-1244,7=20+1244,7=20@@=20read_backup_label(XLogRecPtr=20= *checkPointLoc,=20TimeLineID=20*backupLabelTLI,=0A=20=09/*=20suppress=20= possible=20uninitialized-variable=20warnings=20*/=0A=20=09*checkPointLoc=20= =3D=20InvalidXLogRecPtr;=0A=20=09*backupLabelTLI=20=3D=200;=0A-=09= *backupEndRequired=20=3D=20false;=0A+=09*backupEndNeeded=20=3D=20false;=0A= =20=09*backupFromStandby=20=3D=20false;=0A=20=0A=20=09/*=0A@@=20-1288,13=20= +1288,13=20@@=20read_backup_label(XLogRecPtr=20*checkPointLoc,=20= TimeLineID=20*backupLabelTLI,=0A=20=09=20*=20other=20option=20today=20= being=20from=20pg_rewind).=20=20If=20this=20was=20a=20streamed=0A=20=09=20= *=20backup=20then=20we=20know=20that=20we=20need=20to=20play=20through=20= until=20we=20get=20to=20the=0A=20=09=20*=20end=20of=20the=20WAL=20which=20= was=20generated=20during=20the=20backup=20(at=20which=20point=20we=0A-=09= =20*=20will=20have=20reached=20consistency=20and=20backupEndRequired=20= will=20be=20reset=20to=20be=0A+=09=20*=20will=20have=20reached=20= consistency=20and=20backupEndNeeded=20will=20be=20reset=20to=20be=0A=20=09= =20*=20false).=0A=20=09=20*/=0A=20=09if=20(fscanf(lfp,=20"BACKUP=20= METHOD:=20%19s\n",=20backuptype)=20=3D=3D=201)=0A=20=09{=0A=20=09=09if=20= (strcmp(backuptype,=20"streamed")=20=3D=3D=200)=0A-=09=09=09= *backupEndRequired=20=3D=20true;=0A+=09=09=09*backupEndNeeded=20=3D=20= true;=0A=20=09}=0A=20=0A=20=09/*=0A@@=20-1939,14=20+1939,14=20@@=20= PerformWalRecovery(void)=0A=20=20*=20Subroutine=20of=20= PerformWalRecovery,=20to=20apply=20one=20WAL=20record.=0A=20=20*/=0A=20= static=20void=0A-ApplyWalRecord(XLogReaderState=20*xlogreader,=20= XLogRecord=20*record,=20TimeLineID=20*replayTLI)=0A= +ApplyWalRecord(XLogReaderState=20*reader,=20XLogRecord=20*record,=20= TimeLineID=20*replayTLI)=0A=20{=0A=20=09ErrorContextCallback=20= errcallback;=0A=20=09bool=09=09switchedTLI=20=3D=20false;=0A=20=0A=20=09= /*=20Setup=20error=20traceback=20support=20for=20ereport()=20*/=0A=20=09= errcallback.callback=20=3D=20rm_redo_error_callback;=0A-=09= errcallback.arg=20=3D=20xlogreader;=0A+=09errcallback.arg=20=3D=20= reader;=0A=20=09errcallback.previous=20=3D=20error_context_stack;=0A=20=09= error_context_stack=20=3D=20&errcallback;=0A=20=0A@@=20-1973,7=20+1973,7=20= @@=20ApplyWalRecord(XLogReaderState=20*xlogreader,=20XLogRecord=20= *record,=20TimeLineID=20*repl=0A=20=09=09{=0A=20=09=09=09CheckPoint=09= checkPoint;=0A=20=0A-=09=09=09memcpy(&checkPoint,=20= XLogRecGetData(xlogreader),=20sizeof(CheckPoint));=0A+=09=09=09= memcpy(&checkPoint,=20XLogRecGetData(reader),=20sizeof(CheckPoint));=0A=20= =09=09=09newReplayTLI=20=3D=20checkPoint.ThisTimeLineID;=0A=20=09=09=09= prevReplayTLI=20=3D=20checkPoint.PrevTimeLineID;=0A=20=09=09}=0A@@=20= -1981,7=20+1981,7=20@@=20ApplyWalRecord(XLogReaderState=20*xlogreader,=20= XLogRecord=20*record,=20TimeLineID=20*repl=0A=20=09=09{=0A=20=09=09=09= xl_end_of_recovery=20xlrec;=0A=20=0A-=09=09=09memcpy(&xlrec,=20= XLogRecGetData(xlogreader),=20sizeof(xl_end_of_recovery));=0A+=09=09=09= memcpy(&xlrec,=20XLogRecGetData(reader),=20sizeof(xl_end_of_recovery));=0A= =20=09=09=09newReplayTLI=20=3D=20xlrec.ThisTimeLineID;=0A=20=09=09=09= prevReplayTLI=20=3D=20xlrec.PrevTimeLineID;=0A=20=09=09}=0A@@=20-1989,7=20= +1989,7=20@@=20ApplyWalRecord(XLogReaderState=20*xlogreader,=20= XLogRecord=20*record,=20TimeLineID=20*repl=0A=20=09=09if=20(newReplayTLI=20= !=3D=20*replayTLI)=0A=20=09=09{=0A=20=09=09=09/*=20Check=20that=20it's=20= OK=20to=20switch=20to=20this=20TLI=20*/=0A-=09=09=09= checkTimeLineSwitch(xlogreader->EndRecPtr,=0A+=09=09=09= checkTimeLineSwitch(reader->EndRecPtr,=0A=20=09=09=09=09=09=09=09=09= newReplayTLI,=20prevReplayTLI,=20*replayTLI);=0A=20=0A=20=09=09=09/*=20= Following=20WAL=20records=20should=20be=20run=20with=20new=20TLI=20*/=0A= @@=20-2003,7=20+2003,7=20@@=20ApplyWalRecord(XLogReaderState=20= *xlogreader,=20XLogRecord=20*record,=20TimeLineID=20*repl=0A=20=09=20*=20= XLogFlush=20will=20update=20minRecoveryPoint=20correctly.=0A=20=09=20*/=0A= =20=09SpinLockAcquire(&XLogRecoveryCtl->info_lck);=0A-=09= XLogRecoveryCtl->replayEndRecPtr=20=3D=20xlogreader->EndRecPtr;=0A+=09= XLogRecoveryCtl->replayEndRecPtr=20=3D=20reader->EndRecPtr;=0A=20=09= XLogRecoveryCtl->replayEndTLI=20=3D=20*replayTLI;=0A=20=09= SpinLockRelease(&XLogRecoveryCtl->info_lck);=0A=20=0A@@=20-2019,10=20= +2019,10=20@@=20ApplyWalRecord(XLogReaderState=20*xlogreader,=20= XLogRecord=20*record,=20TimeLineID=20*repl=0A=20=09=20*=20directly=20= here,=20rather=20than=20in=20xlog_redo()=0A=20=09=20*/=0A=20=09if=20= (record->xl_rmid=20=3D=3D=20RM_XLOG_ID)=0A-=09=09= xlogrecovery_redo(xlogreader,=20*replayTLI);=0A+=09=09= xlogrecovery_redo(reader,=20*replayTLI);=0A=20=0A=20=09/*=20Now=20apply=20= the=20WAL=20record=20itself=20*/=0A-=09= GetRmgr(record->xl_rmid).rm_redo(xlogreader);=0A+=09= GetRmgr(record->xl_rmid).rm_redo(reader);=0A=20=0A=20=09/*=0A=20=09=20*=20= After=20redo,=20check=20whether=20the=20backup=20pages=20associated=20= with=20the=20WAL=0A@@=20-2030,7=20+2030,7=20@@=20= ApplyWalRecord(XLogReaderState=20*xlogreader,=20XLogRecord=20*record,=20= TimeLineID=20*repl=0A=20=09=20*=20if=20consistency=20check=20is=20= enabled=20for=20this=20record.=0A=20=09=20*/=0A=20=09if=20= ((record->xl_info=20&=20XLR_CHECK_CONSISTENCY)=20!=3D=200)=0A-=09=09= verifyBackupPageConsistency(xlogreader);=0A+=09=09= verifyBackupPageConsistency(reader);=0A=20=0A=20=09/*=20Pop=20the=20= error=20context=20stack=20*/=0A=20=09error_context_stack=20=3D=20= errcallback.previous;=0A@@=20-2040,8=20+2040,8=20@@=20= ApplyWalRecord(XLogReaderState=20*xlogreader,=20XLogRecord=20*record,=20= TimeLineID=20*repl=0A=20=09=20*=20replayed.=0A=20=09=20*/=0A=20=09= SpinLockAcquire(&XLogRecoveryCtl->info_lck);=0A-=09= XLogRecoveryCtl->lastReplayedReadRecPtr=20=3D=20xlogreader->ReadRecPtr;=0A= -=09XLogRecoveryCtl->lastReplayedEndRecPtr=20=3D=20= xlogreader->EndRecPtr;=0A+=09XLogRecoveryCtl->lastReplayedReadRecPtr=20=3D= =20reader->ReadRecPtr;=0A+=09XLogRecoveryCtl->lastReplayedEndRecPtr=20=3D=20= reader->EndRecPtr;=0A=20=09XLogRecoveryCtl->lastReplayedTLI=20=3D=20= *replayTLI;=0A=20=09SpinLockRelease(&XLogRecoveryCtl->info_lck);=0A=20=0A= @@=20-2091,7=20+2091,7=20@@=20ApplyWalRecord(XLogReaderState=20= *xlogreader,=20XLogRecord=20*record,=20TimeLineID=20*repl=0A=20=09=09=20= *=20Before=20we=20continue=20on=20the=20new=20timeline,=20clean=20up=20= any=20(possibly=0A=20=09=09=20*=20bogus)=20future=20WAL=20segments=20on=20= the=20old=20timeline.=0A=20=09=09=20*/=0A-=09=09= RemoveNonParentXlogFiles(xlogreader->EndRecPtr,=20*replayTLI);=0A+=09=09= RemoveNonParentXlogFiles(reader->EndRecPtr,=20*replayTLI);=0A=20=0A=20=09= =09/*=20Reset=20the=20prefetcher.=20*/=0A=20=09=09= XLogPrefetchReconfigure();=0A@@=20-3164,19=20+3164,19=20@@=20= ConfirmRecoveryPaused(void)=0A=20=20*=20record=20is=20available.=0A=20=20= */=0A=20static=20XLogRecord=20*=0A-ReadRecord(XLogPrefetcher=20= *xlogprefetcher,=20int=20emode,=0A+ReadRecord(XLogPrefetcher=20= *prefetcher,=20int=20emode,=0A=20=09=09=20=20=20bool=20fetching_ckpt,=20= TimeLineID=20replayTLI)=0A=20{=0A=20=09XLogRecord=20*record;=0A-=09= XLogReaderState=20*xlogreader=20=3D=20= XLogPrefetcherGetReader(xlogprefetcher);=0A-=09XLogPageReadPrivate=20= *private=20=3D=20(XLogPageReadPrivate=20*)=20xlogreader->private_data;=0A= +=09XLogReaderState=20*reader=20=3D=20= XLogPrefetcherGetReader(prefetcher);=0A+=09XLogPageReadPrivate=20= *private=20=3D=20(XLogPageReadPrivate=20*)=20reader->private_data;=0A=20=0A= =20=09Assert(AmStartupProcess()=20||=20!IsUnderPostmaster);=0A=20=0A=20=09= /*=20Pass=20through=20parameters=20to=20XLogPageRead=20*/=0A=20=09= private->fetching_ckpt=20=3D=20fetching_ckpt;=0A=20=09private->emode=20=3D= =20emode;=0A-=09private->randAccess=20=3D=20= !XLogRecPtrIsValid(xlogreader->ReadRecPtr);=0A+=09private->randAccess=20= =3D=20!XLogRecPtrIsValid(reader->ReadRecPtr);=0A=20=09private->replayTLI=20= =3D=20replayTLI;=0A=20=0A=20=09/*=20This=20is=20the=20first=20attempt=20= to=20read=20this=20page.=20*/=0A@@=20-3186,7=20+3186,7=20@@=20= ReadRecord(XLogPrefetcher=20*xlogprefetcher,=20int=20emode,=0A=20=09{=0A=20= =09=09char=09=20=20=20*errormsg;=0A=20=0A-=09=09record=20=3D=20= XLogPrefetcherReadRecord(xlogprefetcher,=20&errormsg);=0A+=09=09record=20= =3D=20XLogPrefetcherReadRecord(prefetcher,=20&errormsg);=0A=20=09=09if=20= (record=20=3D=3D=20NULL)=0A=20=09=09{=0A=20=09=09=09/*=0A@@=20-3202,10=20= +3202,10=20@@=20ReadRecord(XLogPrefetcher=20*xlogprefetcher,=20int=20= emode,=0A=20=09=09=09=20*=20overwrite=20contrecord=20in=20the=20wrong=20= place,=20breaking=20everything.=0A=20=09=09=09=20*/=0A=20=09=09=09if=20= (!ArchiveRecoveryRequested=20&&=0A-=09=09=09=09= XLogRecPtrIsValid(xlogreader->abortedRecPtr))=0A+=09=09=09=09= XLogRecPtrIsValid(reader->abortedRecPtr))=0A=20=09=09=09{=0A-=09=09=09=09= abortedRecPtr=20=3D=20xlogreader->abortedRecPtr;=0A-=09=09=09=09= missingContrecPtr=20=3D=20xlogreader->missingContrecPtr;=0A+=09=09=09=09= abortedRecPtr=20=3D=20reader->abortedRecPtr;=0A+=09=09=09=09= missingContrecPtr=20=3D=20reader->missingContrecPtr;=0A=20=09=09=09}=0A=20= =0A=20=09=09=09if=20(readFile=20>=3D=200)=0A@@=20-3221,29=20+3221,29=20= @@=20ReadRecord(XLogPrefetcher=20*xlogprefetcher,=20int=20emode,=0A=20=09= =09=09=20*=20shouldn't=20loop=20anymore=20in=20that=20case.=0A=20=09=09=09= =20*/=0A=20=09=09=09if=20(errormsg)=0A-=09=09=09=09= ereport(emode_for_corrupt_record(emode,=20xlogreader->EndRecPtr),=0A+=09=09= =09=09ereport(emode_for_corrupt_record(emode,=20reader->EndRecPtr),=0A=20= =09=09=09=09=09=09(errmsg_internal("%s",=20errormsg)=20/*=20already=20= translated=20*/=20));=0A=20=09=09}=0A=20=0A=20=09=09/*=0A=20=09=09=20*=20= Check=20page=20TLI=20is=20one=20of=20the=20expected=20values.=0A=20=09=09= =20*/=0A-=09=09else=20if=20(!tliInHistory(xlogreader->latestPageTLI,=20= expectedTLEs))=0A+=09=09else=20if=20= (!tliInHistory(reader->latestPageTLI,=20expectedTLEs))=0A=20=09=09{=0A=20= =09=09=09char=09=09fname[MAXFNAMELEN];=0A=20=09=09=09XLogSegNo=09segno;=0A= =20=09=09=09int32=09=09offset;=0A=20=0A-=09=09=09= XLByteToSeg(xlogreader->latestPagePtr,=20segno,=20wal_segment_size);=0A-=09= =09=09offset=20=3D=20XLogSegmentOffset(xlogreader->latestPagePtr,=0A+=09=09= =09XLByteToSeg(reader->latestPagePtr,=20segno,=20wal_segment_size);=0A+=09= =09=09offset=20=3D=20XLogSegmentOffset(reader->latestPagePtr,=0A=20=09=09= =09=09=09=09=09=09=09=20=20=20wal_segment_size);=0A-=09=09=09= XLogFileName(fname,=20xlogreader->seg.ws_tli,=20segno,=0A+=09=09=09= XLogFileName(fname,=20reader->seg.ws_tli,=20segno,=0A=20=09=09=09=09=09=09= =20wal_segment_size);=0A-=09=09=09= ereport(emode_for_corrupt_record(emode,=20xlogreader->EndRecPtr),=0A+=09=09= =09ereport(emode_for_corrupt_record(emode,=20reader->EndRecPtr),=0A=20=09= =09=09=09=09errmsg("unexpected=20timeline=20ID=20%u=20in=20WAL=20segment=20= %s,=20LSN=20%X/%08X,=20offset=20%u",=0A-=09=09=09=09=09=09=20=20=20= xlogreader->latestPageTLI,=0A+=09=09=09=09=09=09=20=20=20= reader->latestPageTLI,=0A=20=09=09=09=09=09=09=20=20=20fname,=0A-=09=09=09= =09=09=09=20=20=20LSN_FORMAT_ARGS(xlogreader->latestPagePtr),=0A+=09=09=09= =09=09=09=20=20=20LSN_FORMAT_ARGS(reader->latestPagePtr),=0A=20=09=09=09=09= =09=09=20=20=20offset));=0A=20=09=09=09record=20=3D=20NULL;=0A=20=09=09}=0A= @@=20-3279,8=20+3279,8=20@@=20ReadRecord(XLogPrefetcher=20= *xlogprefetcher,=20int=20emode,=0A=20=09=09=09=09if=20= (StandbyModeRequested)=0A=20=09=09=09=09=09EnableStandbyMode();=0A=20=0A= -=09=09=09=09SwitchIntoArchiveRecovery(xlogreader->EndRecPtr,=20= replayTLI);=0A-=09=09=09=09minRecoveryPoint=20=3D=20= xlogreader->EndRecPtr;=0A+=09=09=09=09= SwitchIntoArchiveRecovery(reader->EndRecPtr,=20replayTLI);=0A+=09=09=09=09= minRecoveryPoint=20=3D=20reader->EndRecPtr;=0A=20=09=09=09=09= minRecoveryPointTLI=20=3D=20replayTLI;=0A=20=0A=20=09=09=09=09= CheckRecoveryConsistency();=0A@@=20-3333,11=20+3333,11=20@@=20= ReadRecord(XLogPrefetcher=20*xlogprefetcher,=20int=20emode,=0A=20=20*=20= sleep=20and=20retry.=0A=20=20*/=0A=20static=20int=0A= -XLogPageRead(XLogReaderState=20*xlogreader,=20XLogRecPtr=20= targetPagePtr,=20int=20reqLen,=0A+XLogPageRead(XLogReaderState=20= *reader,=20XLogRecPtr=20targetPagePtr,=20int=20reqLen,=0A=20=09=09=09=20= XLogRecPtr=20targetRecPtr,=20char=20*readBuf)=0A=20{=0A=20=09= XLogPageReadPrivate=20*private=20=3D=0A-=09=09(XLogPageReadPrivate=20*)=20= xlogreader->private_data;=0A+=09=09(XLogPageReadPrivate=20*)=20= reader->private_data;=0A=20=09int=09=09=09emode=20=3D=20private->emode;=0A= =20=09uint32=09=09targetPageOff;=0A=20=09XLogSegNo=09targetSegNo=20= PG_USED_FOR_ASSERTS_ONLY;=0A@@=20-3384,7=20+3384,7=20@@=20retry:=0A=20=09= =09=20flushedUpto=20<=20targetPagePtr=20+=20reqLen))=0A=20=09{=0A=20=09=09= if=20(readFile=20>=3D=200=20&&=0A-=09=09=09xlogreader->nonblocking=20&&=0A= +=09=09=09reader->nonblocking=20&&=0A=20=09=09=09readSource=20=3D=3D=20= XLOG_FROM_STREAM=20&&=0A=20=09=09=09flushedUpto=20<=20targetPagePtr=20+=20= reqLen)=0A=20=09=09=09return=20XLREAD_WOULDBLOCK;=0A@@=20-3394,8=20= +3394,8=20@@=20retry:=0A=20=09=09=09=09=09=09=09=09=09=09=09= private->fetching_ckpt,=0A=20=09=09=09=09=09=09=09=09=09=09=09= targetRecPtr,=0A=20=09=09=09=09=09=09=09=09=09=09=09private->replayTLI,=0A= -=09=09=09=09=09=09=09=09=09=09=09xlogreader->EndRecPtr,=0A-=09=09=09=09=09= =09=09=09=09=09=09xlogreader->nonblocking))=0A+=09=09=09=09=09=09=09=09=09= =09=09reader->EndRecPtr,=0A+=09=09=09=09=09=09=09=09=09=09=09= reader->nonblocking))=0A=20=09=09{=0A=20=09=09=09case=20= XLREAD_WOULDBLOCK:=0A=20=09=09=09=09return=20XLREAD_WOULDBLOCK;=0A@@=20= -3479,7=20+3479,7=20@@=20retry:=0A=20=09Assert(targetPageOff=20=3D=3D=20= readOff);=0A=20=09Assert(reqLen=20<=3D=20readLen);=0A=20=0A-=09= xlogreader->seg.ws_tli=20=3D=20curFileTLI;=0A+=09reader->seg.ws_tli=20=3D=20= curFileTLI;=0A=20=0A=20=09/*=0A=20=09=20*=20Check=20the=20page=20header=20= immediately,=20so=20that=20we=20can=20retry=20immediately=20if=0A@@=20= -3515,18=20+3515,18=20@@=20retry:=0A=20=09=20*/=0A=20=09if=20= (StandbyMode=20&&=0A=20=09=09(targetPagePtr=20%=20wal_segment_size)=20=3D=3D= =200=20&&=0A-=09=09!XLogReaderValidatePageHeader(xlogreader,=20= targetPagePtr,=20readBuf))=0A+=09=09= !XLogReaderValidatePageHeader(reader,=20targetPagePtr,=20readBuf))=0A=20=09= {=0A=20=09=09/*=0A=20=09=09=20*=20Emit=20this=20error=20right=20now=20= then=20retry=20this=20page=20immediately.=20Use=0A=20=09=09=20*=20= errmsg_internal()=20because=20the=20message=20was=20already=20= translated.=0A=20=09=09=20*/=0A-=09=09if=20(xlogreader->errormsg_buf[0])=0A= -=09=09=09ereport(emode_for_corrupt_record(emode,=20= xlogreader->EndRecPtr),=0A-=09=09=09=09=09(errmsg_internal("%s",=20= xlogreader->errormsg_buf)));=0A+=09=09if=20(reader->errormsg_buf[0])=0A+=09= =09=09ereport(emode_for_corrupt_record(emode,=20reader->EndRecPtr),=0A+=09= =09=09=09=09(errmsg_internal("%s",=20reader->errormsg_buf)));=0A=20=0A=20= =09=09/*=20reset=20any=20error=20XLogReaderValidatePageHeader()=20might=20= have=20set=20*/=0A-=09=09XLogReaderResetError(xlogreader);=0A+=09=09= XLogReaderResetError(reader);=0A=20=09=09goto=20next_record_is_invalid;=0A= =20=09}=0A=20=0A@@=20-3538,7=20+3538,7=20@@=20next_record_is_invalid:=0A=20= =09=20*=20If=20we're=20reading=20ahead,=20give=20up=20fast.=20=20Retries=20= and=20error=20reporting=20will=0A=20=09=20*=20be=20handled=20by=20a=20= later=20read=20when=20recovery=20catches=20up=20to=20this=20point.=0A=20=09= =20*/=0A-=09if=20(xlogreader->nonblocking)=0A+=09if=20= (reader->nonblocking)=0A=20=09=09return=20XLREAD_WOULDBLOCK;=0A=20=0A=20=09= lastSourceFailed=20=3D=20true;=0A@@=20-4116,7=20+4116,7=20@@=20= emode_for_corrupt_record(int=20emode,=20XLogRecPtr=20RecPtr)=0A=20=20*=20= Subroutine=20to=20try=20to=20fetch=20and=20validate=20a=20prior=20= checkpoint=20record.=0A=20=20*/=0A=20static=20XLogRecord=20*=0A= -ReadCheckpointRecord(XLogPrefetcher=20*xlogprefetcher,=20XLogRecPtr=20= RecPtr,=0A+ReadCheckpointRecord(XLogPrefetcher=20*prefetcher,=20= XLogRecPtr=20RecPtr,=0A=20=09=09=09=09=09=20TimeLineID=20replayTLI)=0A=20= {=0A=20=09XLogRecord=20*record;=0A@@=20-4131,8=20+4131,8=20@@=20= ReadCheckpointRecord(XLogPrefetcher=20*xlogprefetcher,=20XLogRecPtr=20= RecPtr,=0A=20=09=09return=20NULL;=0A=20=09}=0A=20=0A-=09= XLogPrefetcherBeginRead(xlogprefetcher,=20RecPtr);=0A-=09record=20=3D=20= ReadRecord(xlogprefetcher,=20LOG,=20true,=20replayTLI);=0A+=09= XLogPrefetcherBeginRead(prefetcher,=20RecPtr);=0A+=09record=20=3D=20= ReadRecord(prefetcher,=20LOG,=20true,=20replayTLI);=0A=20=0A=20=09if=20= (record=20=3D=3D=20NULL)=0A=20=09{=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A= =0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0007-cleanup-rename-local-progname-variables-to-avoid-.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0007-cleanup-rename-local-progname-variables-to-avoid-.patch" Content-Transfer-Encoding: quoted-printable =46rom=20b24ca9a9b526de86dc25e2f0286adb8b5f74f0ee=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2014:59:43=20+0800=0ASubject:=20[PATCH=20= v6=2007/13]=20cleanup:=20rename=20local=20progname=20variables=20to=20= avoid=0A=20shadowing=20the=20global=0A=0AThis=20commit=20updates=20all=20= functions=20that=20declared=20a=20local=20variable=20named=0A'progname',=20= renaming=20each=20to=20'myprogname'.=20The=20change=20prevents=20= shadowing=0Aof=20the=20global=20progname=20variable=20and=20keeps=20= identifier=20usage=20unambiguous=0Awithin=20each=20scope.=0A=0AA=20few=20= additional=20shadowing=20fixes=20in=20the=20same=20files=20are=20= included=20as=20well.=0AThese=20unrelated=20cases=20are=20addressed=20= here=20only=20because=20they=20occur=20in=20the=0Asame=20code=20= locations=20touched=20by=20the=20progname=20change,=20and=20bundling=20= them=0Akeeps=20the=20commit=20self-contained.=0A=0AAuthor:=20Chao=20Li=20= =0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/bootstrap/bootstrap.c=20=20=20=20=20= =20=20=20=20=20=20|=20=208=20+-=0A=20src/backend/main/main.c=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20|=2014=20++--=0A=20= src/bin/initdb/initdb.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20=20=20|=2060=20+++++++-------=0A=20src/bin/pg_amcheck/pg_amcheck.c=20= =20=20=20=20=20=20=20=20=20=20=20=20|=20=206=20+-=0A=20= src/bin/pg_basebackup/pg_createsubscriber.c=20|=2014=20++--=0A=20= src/bin/pg_dump/connectdb.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=204=20+-=0A=20src/bin/pg_dump/pg_dump.c=20=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20|=2090=20++++++++++-----------=0A=20= src/bin/pg_dump/pg_restore.c=20=20=20=20=20=20=20=20=20=20=20=20=20=20=20= =20|=20=204=20+-=0A=20src/bin/pg_rewind/pg_rewind.c=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20|=2022=20++---=0A=20= src/interfaces/ecpg/preproc/ecpg.c=20=20=20=20=20=20=20=20=20=20|=20=206=20= +-=0A=2010=20files=20changed,=20114=20insertions(+),=20114=20= deletions(-)=0A=0Adiff=20--git=20a/src/backend/bootstrap/bootstrap.c=20= b/src/backend/bootstrap/bootstrap.c=0Aindex=20e7699be55aa..b48881e71d0=20= 100644=0A---=20a/src/backend/bootstrap/bootstrap.c=0A+++=20= b/src/backend/bootstrap/bootstrap.c=0A@@=20-194,7=20+194,7=20@@=20void=0A= =20BootstrapModeMain(int=20argc,=20char=20*argv[],=20bool=20check_only)=0A= =20{=0A=20=09int=09=09=09i;=0A-=09char=09=20=20=20*progname=20=3D=20= argv[0];=0A+=09char=09=20=20=20*myprogname=20=3D=20argv[0];=0A=20=09int=09= =09=09flag;=0A=20=09char=09=20=20=20*userDoption=20=3D=20NULL;=0A=20=09= uint32=09=09bootstrap_data_checksum_version=20=3D=200;=09/*=20No=20= checksum=20*/=0A@@=20-290,7=20+290,7=20@@=20BootstrapModeMain(int=20= argc,=20char=20*argv[],=20bool=20check_only)=0A=20=09=09=09=09break;=0A=20= =09=09=09default:=0A=20=09=09=09=09write_stderr("Try=20\"%s=20--help\"=20= for=20more=20information.\n",=0A-=09=09=09=09=09=09=09=20progname);=0A+=09= =09=09=09=09=09=09=20myprogname);=0A=20=09=09=09=09proc_exit(1);=0A=20=09= =09=09=09break;=0A=20=09=09}=0A@@=20-298,12=20+298,12=20@@=20= BootstrapModeMain(int=20argc,=20char=20*argv[],=20bool=20check_only)=0A=20= =0A=20=09if=20(argc=20!=3D=20optind)=0A=20=09{=0A-=09=09= write_stderr("%s:=20invalid=20command-line=20arguments\n",=20progname);=0A= +=09=09write_stderr("%s:=20invalid=20command-line=20arguments\n",=20= myprogname);=0A=20=09=09proc_exit(1);=0A=20=09}=0A=20=0A=20=09/*=20= Acquire=20configuration=20parameters=20*/=0A-=09if=20= (!SelectConfigFiles(userDoption,=20progname))=0A+=09if=20= (!SelectConfigFiles(userDoption,=20myprogname))=0A=20=09=09proc_exit(1);=0A= =20=0A=20=09/*=0Adiff=20--git=20a/src/backend/main/main.c=20= b/src/backend/main/main.c=0Aindex=207b9b602f3c4..5bf4c4f4774=20100644=0A= ---=20a/src/backend/main/main.c=0A+++=20b/src/backend/main/main.c=0A@@=20= -281,7=20+281,7=20@@=20parse_dispatch_option(const=20char=20*name)=0A=20=20= *=20without=20help.=20=20Avoid=20adding=20more=20here,=20if=20you=20can.=0A= =20=20*/=0A=20static=20void=0A-startup_hacks(const=20char=20*progname)=0A= +startup_hacks(const=20char=20*myprogname)=0A=20{=0A=20=09/*=0A=20=09=20= *=20Windows-specific=20execution=20environment=20hacking.=0A@@=20-300,7=20= +300,7=20@@=20startup_hacks(const=20char=20*progname)=0A=20=09=09if=20= (err=20!=3D=200)=0A=20=09=09{=0A=20=09=09=09write_stderr("%s:=20= WSAStartup=20failed:=20%d\n",=0A-=09=09=09=09=09=09=20progname,=20err);=0A= +=09=09=09=09=09=09=20myprogname,=20err);=0A=20=09=09=09exit(1);=0A=20=09= =09}=0A=20=0A@@=20-385,10=20+385,10=20@@=20init_locale(const=20char=20= *categoryname,=20int=20category,=20const=20char=20*locale)=0A=20=20*=20= Messages=20emitted=20in=20write_console()=20do=20not=20exhibit=20this=20= problem.=0A=20=20*/=0A=20static=20void=0A-help(const=20char=20*progname)=0A= +help(const=20char=20*myprogname)=0A=20{=0A-=09printf(_("%s=20is=20the=20= PostgreSQL=20server.\n\n"),=20progname);=0A-=09printf(_("Usage:\n=20=20= %s=20[OPTION]...\n\n"),=20progname);=0A+=09printf(_("%s=20is=20the=20= PostgreSQL=20server.\n\n"),=20myprogname);=0A+=09printf(_("Usage:\n=20=20= %s=20[OPTION]...\n\n"),=20myprogname);=0A=20=09printf(_("Options:\n"));=0A= =20=09printf(_("=20=20-B=20NBUFFERS=20=20=20=20=20=20=20=20number=20of=20= shared=20buffers\n"));=0A=20=09printf(_("=20=20-c=20NAME=3DVALUE=20=20=20= =20=20=20set=20run-time=20parameter\n"));=0A@@=20-444,7=20+444,7=20@@=20= help(const=20char=20*progname)=0A=20=0A=20=0A=20static=20void=0A= -check_root(const=20char=20*progname)=0A+check_root(const=20char=20= *myprogname)=0A=20{=0A=20#ifndef=20WIN32=0A=20=09if=20(geteuid()=20=3D=3D=20= 0)=0A@@=20-467,7=20+467,7=20@@=20check_root(const=20char=20*progname)=0A=20= =09if=20(getuid()=20!=3D=20geteuid())=0A=20=09{=0A=20=09=09= write_stderr("%s:=20real=20and=20effective=20user=20IDs=20must=20= match\n",=0A-=09=09=09=09=09=20progname);=0A+=09=09=09=09=09=20= myprogname);=0A=20=09=09exit(1);=0A=20=09}=0A=20#else=09=09=09=09=09=09=09= /*=20WIN32=20*/=0Adiff=20--git=20a/src/bin/initdb/initdb.c=20= b/src/bin/initdb/initdb.c=0Aindex=2053ec1544ff3..9c1fb823c30=20100644=0A= ---=20a/src/bin/initdb/initdb.c=0A+++=20b/src/bin/initdb/initdb.c=0A@@=20= -814,7=20+814,7=20@@=20cleanup_directories_atexit(void)=0A=20static=20= char=20*=0A=20get_id(void)=0A=20{=0A-=09const=20char=20*username;=0A+=09= const=20char=20*user;=0A=20=0A=20#ifndef=20WIN32=0A=20=09if=20(geteuid()=20= =3D=3D=200)=09=09=09/*=200=20is=20root's=20uid=20*/=0A@@=20-825,9=20= +825,9=20@@=20get_id(void)=0A=20=09}=0A=20#endif=0A=20=0A-=09username=20= =3D=20get_user_name_or_exit(progname);=0A+=09user=20=3D=20= get_user_name_or_exit(progname);=0A=20=0A-=09return=20= pg_strdup(username);=0A+=09return=20pg_strdup(user);=0A=20}=0A=20=0A=20= static=20char=20*=0A@@=20-1048,14=20+1048,14=20@@=20= write_version_file(const=20char=20*extrapath)=0A=20static=20void=0A=20= set_null_conf(void)=0A=20{=0A-=09FILE=09=20=20=20*conf_file;=0A+=09FILE=09= =20=20=20*file;=0A=20=09char=09=20=20=20*path;=0A=20=0A=20=09path=20=3D=20= psprintf("%s/postgresql.conf",=20pg_data);=0A-=09conf_file=20=3D=20= fopen(path,=20PG_BINARY_W);=0A-=09if=20(conf_file=20=3D=3D=20NULL)=0A+=09= file=20=3D=20fopen(path,=20PG_BINARY_W);=0A+=09if=20(file=20=3D=3D=20= NULL)=0A=20=09=09pg_fatal("could=20not=20open=20file=20\"%s\"=20for=20= writing:=20%m",=20path);=0A-=09if=20(fclose(conf_file))=0A+=09if=20= (fclose(file))=0A=20=09=09pg_fatal("could=20not=20write=20file=20\"%s\":=20= %m",=20path);=0A=20=09free(path);=0A=20}=0A@@=20-2136,7=20+2136,7=20@@=20= my_strftime(char=20*s,=20size_t=20max,=20const=20char=20*fmt,=20const=20= struct=20tm=20*tm)=0A=20=20*=20Determine=20likely=20date=20order=20from=20= locale=0A=20=20*/=0A=20static=20int=0A-locale_date_order(const=20char=20= *locale)=0A+locale_date_order(const=20char=20*mylocale)=0A=20{=0A=20=09= struct=20tm=09testtime;=0A=20=09char=09=09buf[128];=0A@@=20-2151,7=20= +2151,7=20@@=20locale_date_order(const=20char=20*locale)=0A=20=0A=20=09= save=20=3D=20save_global_locale(LC_TIME);=0A=20=0A-=09setlocale(LC_TIME,=20= locale);=0A+=09setlocale(LC_TIME,=20mylocale);=0A=20=0A=20=09= memset(&testtime,=200,=20sizeof(testtime));=0A=20=09testtime.tm_mday=20=3D= =2022;=0A@@=20-2195,14=20+2195,14=20@@=20locale_date_order(const=20char=20= *locale)=0A=20=20*=20this=20should=20match=20the=20backend's=20= check_locale()=20function=0A=20=20*/=0A=20static=20void=0A= -check_locale_name(int=20category,=20const=20char=20*locale,=20char=20= **canonname)=0A+check_locale_name(int=20category,=20const=20char=20= *mylocale,=20char=20**canonname)=0A=20{=0A=20=09save_locale_t=20save;=0A=20= =09char=09=20=20=20*res;=0A=20=0A=20=09/*=20Don't=20let=20Windows'=20= non-ASCII=20locale=20names=20in.=20*/=0A-=09if=20(locale=20&&=20= !pg_is_ascii(locale))=0A-=09=09pg_fatal("locale=20name=20\"%s\"=20= contains=20non-ASCII=20characters",=20locale);=0A+=09if=20(mylocale=20&&=20= !pg_is_ascii(mylocale))=0A+=09=09pg_fatal("locale=20name=20\"%s\"=20= contains=20non-ASCII=20characters",=20mylocale);=0A=20=0A=20=09if=20= (canonname)=0A=20=09=09*canonname=20=3D=20NULL;=09=09/*=20in=20case=20of=20= failure=20*/=0A@@=20-2210,11=20+2210,11=20@@=20check_locale_name(int=20= category,=20const=20char=20*locale,=20char=20**canonname)=0A=20=09save=20= =3D=20save_global_locale(category);=0A=20=0A=20=09/*=20for=20setlocale()=20= call=20*/=0A-=09if=20(!locale)=0A-=09=09locale=20=3D=20"";=0A+=09if=20= (!mylocale)=0A+=09=09mylocale=20=3D=20"";=0A=20=0A=20=09/*=20set=20the=20= locale=20with=20setlocale,=20to=20see=20if=20it=20accepts=20it.=20*/=0A-=09= res=20=3D=20setlocale(category,=20locale);=0A+=09res=20=3D=20= setlocale(category,=20mylocale);=0A=20=0A=20=09/*=20save=20canonical=20= name=20if=20requested.=20*/=0A=20=09if=20(res=20&&=20canonname)=0A@@=20= -2226,9=20+2226,9=20@@=20check_locale_name(int=20category,=20const=20= char=20*locale,=20char=20**canonname)=0A=20=09/*=20complain=20if=20= locale=20wasn't=20valid=20*/=0A=20=09if=20(res=20=3D=3D=20NULL)=0A=20=09= {=0A-=09=09if=20(*locale)=0A+=09=09if=20(*mylocale)=0A=20=09=09{=0A-=09=09= =09pg_log_error("invalid=20locale=20name=20\"%s\"",=20locale);=0A+=09=09=09= pg_log_error("invalid=20locale=20name=20\"%s\"",=20mylocale);=0A=20=09=09= =09pg_log_error_hint("If=20the=20locale=20name=20is=20specific=20to=20= ICU,=20use=20--icu-locale.");=0A=20=09=09=09exit(1);=0A=20=09=09}=0A@@=20= -2258,11=20+2258,11=20@@=20check_locale_name(int=20category,=20const=20= char=20*locale,=20char=20**canonname)=0A=20=20*=20this=20should=20match=20= the=20similar=20check=20in=20the=20backend=20createdb()=20function=0A=20=20= */=0A=20static=20bool=0A-check_locale_encoding(const=20char=20*locale,=20= int=20user_enc)=0A+check_locale_encoding(const=20char=20*mylocale,=20int=20= user_enc)=0A=20{=0A=20=09int=09=09=09locale_enc;=0A=20=0A-=09locale_enc=20= =3D=20pg_get_encoding_from_locale(locale,=20true);=0A+=09locale_enc=20=3D=20= pg_get_encoding_from_locale(mylocale,=20true);=0A=20=0A=20=09/*=20See=20= notes=20in=20createdb()=20to=20understand=20these=20tests=20*/=0A=20=09= if=20(!(locale_enc=20=3D=3D=20user_enc=20||=0A@@=20-2510,11=20+2510,11=20= @@=20setlocales(void)=0A=20=20*=20print=20help=20text=0A=20=20*/=0A=20= static=20void=0A-usage(const=20char=20*progname)=0A+usage(const=20char=20= *myprogname)=0A=20{=0A-=09printf(_("%s=20initializes=20a=20PostgreSQL=20= database=20cluster.\n\n"),=20progname);=0A+=09printf(_("%s=20initializes=20= a=20PostgreSQL=20database=20cluster.\n\n"),=20myprogname);=0A=20=09= printf(_("Usage:\n"));=0A-=09printf(_("=20=20%s=20[OPTION]...=20= [DATADIR]\n"),=20progname);=0A+=09printf(_("=20=20%s=20[OPTION]...=20= [DATADIR]\n"),=20myprogname);=0A=20=09printf(_("\nOptions:\n"));=0A=20=09= printf(_("=20=20-A,=20--auth=3DMETHOD=20=20=20=20=20=20=20=20=20default=20= authentication=20method=20for=20local=20connections\n"));=0A=20=09= printf(_("=20=20=20=20=20=20--auth-host=3DMETHOD=20=20=20=20default=20= authentication=20method=20for=20local=20TCP/IP=20connections\n"));=0A@@=20= -2590,14=20+2590,14=20@@=20check_authmethod_valid(const=20char=20= *authmethod,=20const=20char=20*const=20*valid_methods,=0A=20}=0A=20=0A=20= static=20void=0A-check_need_password(const=20char=20*authmethodlocal,=20= const=20char=20*authmethodhost)=0A-{=0A-=09if=20= ((strcmp(authmethodlocal,=20"md5")=20=3D=3D=200=20||=0A-=09=09=20= strcmp(authmethodlocal,=20"password")=20=3D=3D=200=20||=0A-=09=09=20= strcmp(authmethodlocal,=20"scram-sha-256")=20=3D=3D=200)=20&&=0A-=09=09= (strcmp(authmethodhost,=20"md5")=20=3D=3D=200=20||=0A-=09=09=20= strcmp(authmethodhost,=20"password")=20=3D=3D=200=20||=0A-=09=09=20= strcmp(authmethodhost,=20"scram-sha-256")=20=3D=3D=200)=20&&=0A= +check_need_password(const=20char=20*myauthmethodlocal,=20const=20char=20= *myauthmethodhost)=0A+{=0A+=09if=20((strcmp(myauthmethodlocal,=20"md5")=20= =3D=3D=200=20||=0A+=09=09=20strcmp(myauthmethodlocal,=20"password")=20=3D=3D= =200=20||=0A+=09=09=20strcmp(myauthmethodlocal,=20"scram-sha-256")=20=3D=3D= =200)=20&&=0A+=09=09(strcmp(myauthmethodhost,=20"md5")=20=3D=3D=200=20||=0A= +=09=09=20strcmp(myauthmethodhost,=20"password")=20=3D=3D=200=20||=0A+=09= =09=20strcmp(myauthmethodhost,=20"scram-sha-256")=20=3D=3D=200)=20&&=0A=20= =09=09!(pwprompt=20||=20pwfilename))=0A=20=09=09pg_fatal("must=20specify=20= a=20password=20for=20the=20superuser=20to=20enable=20password=20= authentication");=0A=20}=0Adiff=20--git=20= a/src/bin/pg_amcheck/pg_amcheck.c=20b/src/bin/pg_amcheck/pg_amcheck.c=0A= index=2009ba0596400..22bf0fa9dcb=20100644=0A---=20= a/src/bin/pg_amcheck/pg_amcheck.c=0A+++=20= b/src/bin/pg_amcheck/pg_amcheck.c=0A@@=20-1180,11=20+1180,11=20@@=20= verify_btree_slot_handler(PGresult=20*res,=20PGconn=20*conn,=20void=20= *context)=0A=20=20*=20progname:=20the=20name=20of=20the=20executed=20= program,=20such=20as=20"pg_amcheck"=0A=20=20*/=0A=20static=20void=0A= -help(const=20char=20*progname)=0A+help(const=20char=20*myprogname)=0A=20= {=0A-=09printf(_("%s=20checks=20objects=20in=20a=20PostgreSQL=20database=20= for=20corruption.\n\n"),=20progname);=0A+=09printf(_("%s=20checks=20= objects=20in=20a=20PostgreSQL=20database=20for=20corruption.\n\n"),=20= myprogname);=0A=20=09printf(_("Usage:\n"));=0A-=09printf(_("=20=20%s=20= [OPTION]...=20[DBNAME]\n"),=20progname);=0A+=09printf(_("=20=20%s=20= [OPTION]...=20[DBNAME]\n"),=20myprogname);=0A=20=09printf(_("\nTarget=20= options:\n"));=0A=20=09printf(_("=20=20-a,=20--all=20=20=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20=20=20=20check=20all=20= databases\n"));=0A=20=09printf(_("=20=20-d,=20--database=3DPATTERN=20=20=20= =20=20=20=20=20=20=20check=20matching=20database(s)\n"));=0Adiff=20--git=20= a/src/bin/pg_basebackup/pg_createsubscriber.c=20= b/src/bin/pg_basebackup/pg_createsubscriber.c=0Aindex=20= 2bc84505aab..25ec4bb7005=20100644=0A---=20= a/src/bin/pg_basebackup/pg_createsubscriber.c=0A+++=20= b/src/bin/pg_basebackup/pg_createsubscriber.c=0A@@=20-401,32=20+401,32=20= @@=20get_sub_conninfo(const=20struct=20CreateSubscriberOptions=20*opt)=0A= =20=20*=20path=20of=20the=20progname.=0A=20=20*/=0A=20static=20char=20*=0A= -get_exec_path(const=20char=20*argv0,=20const=20char=20*progname)=0A= +get_exec_path(const=20char=20*argv0,=20const=20char=20*myprogname)=0A=20= {=0A=20=09char=09=20=20=20*versionstr;=0A=20=09char=09=20=20=20= *exec_path;=0A=20=09int=09=09=09ret;=0A=20=0A-=09versionstr=20=3D=20= psprintf("%s=20(PostgreSQL)=20%s\n",=20progname,=20PG_VERSION);=0A+=09= versionstr=20=3D=20psprintf("%s=20(PostgreSQL)=20%s\n",=20myprogname,=20= PG_VERSION);=0A=20=09exec_path=20=3D=20pg_malloc(MAXPGPATH);=0A-=09ret=20= =3D=20find_other_exec(argv0,=20progname,=20versionstr,=20exec_path);=0A+=09= ret=20=3D=20find_other_exec(argv0,=20myprogname,=20versionstr,=20= exec_path);=0A=20=0A=20=09if=20(ret=20<=200)=0A=20=09{=0A=20=09=09char=09= =09full_path[MAXPGPATH];=0A=20=0A=20=09=09if=20(find_my_exec(argv0,=20= full_path)=20<=200)=0A-=09=09=09strlcpy(full_path,=20progname,=20= sizeof(full_path));=0A+=09=09=09strlcpy(full_path,=20myprogname,=20= sizeof(full_path));=0A=20=0A=20=09=09if=20(ret=20=3D=3D=20-1)=0A=20=09=09= =09pg_fatal("program=20\"%s\"=20is=20needed=20by=20%s=20but=20was=20not=20= found=20in=20the=20same=20directory=20as=20\"%s\"",=0A-=09=09=09=09=09=20= progname,=20"pg_createsubscriber",=20full_path);=0A+=09=09=09=09=09=20= myprogname,=20"pg_createsubscriber",=20full_path);=0A=20=09=09else=0A=20=09= =09=09pg_fatal("program=20\"%s\"=20was=20found=20by=20\"%s\"=20but=20was=20= not=20the=20same=20version=20as=20%s",=0A-=09=09=09=09=09=20progname,=20= full_path,=20"pg_createsubscriber");=0A+=09=09=09=09=09=20myprogname,=20= full_path,=20"pg_createsubscriber");=0A=20=09}=0A=20=0A-=09= pg_log_debug("%s=20path=20is:=20=20%s",=20progname,=20exec_path);=0A+=09= pg_log_debug("%s=20path=20is:=20=20%s",=20myprogname,=20exec_path);=0A=20= =0A=20=09return=20exec_path;=0A=20}=0Adiff=20--git=20= a/src/bin/pg_dump/connectdb.c=20b/src/bin/pg_dump/connectdb.c=0Aindex=20= f3ce8b1cfb1..f2833fb9b25=20100644=0A---=20a/src/bin/pg_dump/connectdb.c=0A= +++=20b/src/bin/pg_dump/connectdb.c=0A@@=20-39,7=20+39,7=20@@=20static=20= char=20*constructConnStr(const=20char=20**keywords,=20const=20char=20= **values);=0A=20PGconn=20*=0A=20ConnectDatabase(const=20char=20*dbname,=20= const=20char=20*connection_string,=0A=20=09=09=09=09const=20char=20= *pghost,=20const=20char=20*pgport,=20const=20char=20*pguser,=0A-=09=09=09= =09trivalue=20prompt_password,=20bool=20fail_on_error,=20const=20char=20= *progname,=0A+=09=09=09=09trivalue=20prompt_password,=20bool=20= fail_on_error,=20const=20char=20*myprogname,=0A=20=09=09=09=09const=20= char=20**connstr,=20int=20*server_version,=20char=20*password,=0A=20=09=09= =09=09char=20*override_dbname)=0A=20{=0A@@=20-221,7=20+221,7=20@@=20= ConnectDatabase(const=20char=20*dbname,=20const=20char=20= *connection_string,=0A=20=09{=0A=20=09=09pg_log_error("aborting=20= because=20of=20server=20version=20mismatch");=0A=20=09=09= pg_log_error_detail("server=20version:=20%s;=20%s=20version:=20%s",=0A-=09= =09=09=09=09=09=09remoteversion_str,=20progname,=20PG_VERSION);=0A+=09=09= =09=09=09=09=09remoteversion_str,=20myprogname,=20PG_VERSION);=0A=20=09=09= exit_nicely(1);=0A=20=09}=0A=20=0Adiff=20--git=20= a/src/bin/pg_dump/pg_dump.c=20b/src/bin/pg_dump/pg_dump.c=0Aindex=20= 6df79067db5..49c31d672e0=20100644=0A---=20a/src/bin/pg_dump/pg_dump.c=0A= +++=20b/src/bin/pg_dump/pg_dump.c=0A@@=20-1301,11=20+1301,11=20@@=20= main(int=20argc,=20char=20**argv)=0A=20=0A=20=0A=20static=20void=0A= -help(const=20char=20*progname)=0A+help(const=20char=20*myprogname)=0A=20= {=0A-=09printf(_("%s=20exports=20a=20PostgreSQL=20database=20as=20an=20= SQL=20script=20or=20to=20other=20formats.\n\n"),=20progname);=0A+=09= printf(_("%s=20exports=20a=20PostgreSQL=20database=20as=20an=20SQL=20= script=20or=20to=20other=20formats.\n\n"),=20myprogname);=0A=20=09= printf(_("Usage:\n"));=0A-=09printf(_("=20=20%s=20[OPTION]...=20= [DBNAME]\n"),=20progname);=0A+=09printf(_("=20=20%s=20[OPTION]...=20= [DBNAME]\n"),=20myprogname);=0A=20=0A=20=09printf(_("\nGeneral=20= options:\n"));=0A=20=09printf(_("=20=20-f,=20--file=3DFILENAME=20=20=20=20= =20=20=20=20=20=20output=20file=20or=20directory=20name\n"));=0A@@=20= -1660,7=20+1660,7=20@@=20static=20void=0A=20= expand_schema_name_patterns(Archive=20*fout,=0A=20=09=09=09=09=09=09=09= SimpleStringList=20*patterns,=0A=20=09=09=09=09=09=09=09SimpleOidList=20= *oids,=0A-=09=09=09=09=09=09=09bool=20strict_names)=0A+=09=09=09=09=09=09= =09bool=20strict)=0A=20{=0A=20=09PQExpBuffer=20query;=0A=20=09PGresult=20= =20=20*res;=0A@@=20-1696,7=20+1696,7=20@@=20= expand_schema_name_patterns(Archive=20*fout,=0A=20=09=09= termPQExpBuffer(&dbbuf);=0A=20=0A=20=09=09res=20=3D=20= ExecuteSqlQuery(fout,=20query->data,=20PGRES_TUPLES_OK);=0A-=09=09if=20= (strict_names=20&&=20PQntuples(res)=20=3D=3D=200)=0A+=09=09if=20(strict=20= &&=20PQntuples(res)=20=3D=3D=200)=0A=20=09=09=09pg_fatal("no=20matching=20= schemas=20were=20found=20for=20pattern=20\"%s\"",=20cell->val);=0A=20=0A=20= =09=09for=20(i=20=3D=200;=20i=20<=20PQntuples(res);=20i++)=0A@@=20= -1719,7=20+1719,7=20@@=20static=20void=0A=20= expand_extension_name_patterns(Archive=20*fout,=0A=20=09=09=09=09=09=09=09= =20=20=20SimpleStringList=20*patterns,=0A=20=09=09=09=09=09=09=09=20=20=20= SimpleOidList=20*oids,=0A-=09=09=09=09=09=09=09=20=20=20bool=20= strict_names)=0A+=09=09=09=09=09=09=09=20=20=20bool=20strict)=0A=20{=0A=20= =09PQExpBuffer=20query;=0A=20=09PGresult=20=20=20*res;=0A@@=20-1749,7=20= +1749,7=20@@=20expand_extension_name_patterns(Archive=20*fout,=0A=20=09=09= =09=09=09=20cell->val);=0A=20=0A=20=09=09res=20=3D=20= ExecuteSqlQuery(fout,=20query->data,=20PGRES_TUPLES_OK);=0A-=09=09if=20= (strict_names=20&&=20PQntuples(res)=20=3D=3D=200)=0A+=09=09if=20(strict=20= &&=20PQntuples(res)=20=3D=3D=200)=0A=20=09=09=09pg_fatal("no=20matching=20= extensions=20were=20found=20for=20pattern=20\"%s\"",=20cell->val);=0A=20=0A= =20=09=09for=20(i=20=3D=200;=20i=20<=20PQntuples(res);=20i++)=0A@@=20= -1823,7=20+1823,7=20@@=20expand_foreign_server_name_patterns(Archive=20= *fout,=0A=20static=20void=0A=20expand_table_name_patterns(Archive=20= *fout,=0A=20=09=09=09=09=09=09=20=20=20SimpleStringList=20*patterns,=20= SimpleOidList=20*oids,=0A-=09=09=09=09=09=09=20=20=20bool=20= strict_names,=20bool=20with_child_tables)=0A+=09=09=09=09=09=09=20=20=20= bool=20strict,=20bool=20with_child_tables)=0A=20{=0A=20=09PQExpBuffer=20= query;=0A=20=09PGresult=20=20=20*res;=0A@@=20-1895,7=20+1895,7=20@@=20= expand_table_name_patterns(Archive=20*fout,=0A=20=09=09res=20=3D=20= ExecuteSqlQuery(fout,=20query->data,=20PGRES_TUPLES_OK);=0A=20=09=09= PQclear(ExecuteSqlQueryForSingleRow(fout,=0A=20=09=09=09=09=09=09=09=09=09= =09=09ALWAYS_SECURE_SEARCH_PATH_SQL));=0A-=09=09if=20(strict_names=20&&=20= PQntuples(res)=20=3D=3D=200)=0A+=09=09if=20(strict=20&&=20PQntuples(res)=20= =3D=3D=200)=0A=20=09=09=09pg_fatal("no=20matching=20tables=20were=20= found=20for=20pattern=20\"%s\"",=20cell->val);=0A=20=0A=20=09=09for=20(i=20= =3D=200;=20i=20<=20PQntuples(res);=20i++)=0A@@=20-10901,8=20+10901,8=20= @@=20dumpCommentExtended(Archive=20*fout,=20const=20char=20*type,=0A=20=09= =09=09=09=09const=20char=20*initdb_comment)=0A=20{=0A=20=09DumpOptions=20= *dopt=20=3D=20fout->dopt;=0A-=09CommentItem=20*comments;=0A-=09int=09=09=09= ncomments;=0A+=09CommentItem=20*comment_items;=0A+=09int=09=09=09= n_comment_items;=0A=20=0A=20=09/*=20do=20nothing,=20if=20--no-comments=20= is=20supplied=20*/=0A=20=09if=20(dopt->no_comments)=0A@@=20-10922,16=20= +10922,16=20@@=20dumpCommentExtended(Archive=20*fout,=20const=20char=20= *type,=0A=20=09}=0A=20=0A=20=09/*=20Search=20for=20comments=20associated=20= with=20catalogId,=20using=20table=20*/=0A-=09ncomments=20=3D=20= findComments(catalogId.tableoid,=20catalogId.oid,=0A-=09=09=09=09=09=09=09= =20&comments);=0A+=09n_comment_items=20=3D=20= findComments(catalogId.tableoid,=20catalogId.oid,=0A+=09=09=09=09=09=09=09= =09=20=20=20&comment_items);=0A=20=0A=20=09/*=20Is=20there=20one=20= matching=20the=20subid?=20*/=0A-=09while=20(ncomments=20>=200)=0A+=09= while=20(n_comment_items=20>=200)=0A=20=09{=0A-=09=09if=20= (comments->objsubid=20=3D=3D=20subid)=0A+=09=09if=20= (comment_items->objsubid=20=3D=3D=20subid)=0A=20=09=09=09break;=0A-=09=09= comments++;=0A-=09=09ncomments--;=0A+=09=09comment_items++;=0A+=09=09= n_comment_items--;=0A=20=09}=0A=20=0A=20=09if=20(initdb_comment=20!=3D=20= NULL)=0A@@=20-10944,17=20+10944,17=20@@=20dumpCommentExtended(Archive=20= *fout,=20const=20char=20*type,=0A=20=09=09=20*=20non-superuser=20use=20= of=20pg_dump.=20=20When=20the=20DBA=20has=20removed=20initdb's=0A=20=09=09= =20*=20comment,=20replicate=20that.=0A=20=09=09=20*/=0A-=09=09if=20= (ncomments=20=3D=3D=200)=0A+=09=09if=20(n_comment_items=20=3D=3D=200)=0A=20= =09=09{=0A-=09=09=09comments=20=3D=20&empty_comment;=0A-=09=09=09= ncomments=20=3D=201;=0A+=09=09=09comment_items=20=3D=20&empty_comment;=0A= +=09=09=09n_comment_items=20=3D=201;=0A=20=09=09}=0A-=09=09else=20if=20= (strcmp(comments->descr,=20initdb_comment)=20=3D=3D=200)=0A-=09=09=09= ncomments=20=3D=200;=0A+=09=09else=20if=20(strcmp(comment_items->descr,=20= initdb_comment)=20=3D=3D=200)=0A+=09=09=09n_comment_items=20=3D=200;=0A=20= =09}=0A=20=0A=20=09/*=20If=20a=20comment=20exists,=20build=20COMMENT=20= ON=20statement=20*/=0A-=09if=20(ncomments=20>=200)=0A+=09if=20= (n_comment_items=20>=200)=0A=20=09{=0A=20=09=09PQExpBuffer=20query=20=3D=20= createPQExpBuffer();=0A=20=09=09PQExpBuffer=20tag=20=3D=20= createPQExpBuffer();=0A@@=20-10963,7=20+10963,7=20@@=20= dumpCommentExtended(Archive=20*fout,=20const=20char=20*type,=0A=20=09=09= if=20(namespace=20&&=20*namespace)=0A=20=09=09=09= appendPQExpBuffer(query,=20"%s.",=20fmtId(namespace));=0A=20=09=09= appendPQExpBuffer(query,=20"%s=20IS=20",=20name);=0A-=09=09= appendStringLiteralAH(query,=20comments->descr,=20fout);=0A+=09=09= appendStringLiteralAH(query,=20comment_items->descr,=20fout);=0A=20=09=09= appendPQExpBufferStr(query,=20";\n");=0A=20=0A=20=09=09= appendPQExpBuffer(tag,=20"%s=20%s",=20type,=20name);=0A@@=20-11419,8=20= +11419,8=20@@=20dumpTableComment(Archive=20*fout,=20const=20TableInfo=20= *tbinfo,=0A=20=09=09=09=09=20const=20char=20*reltypename)=0A=20{=0A=20=09= DumpOptions=20*dopt=20=3D=20fout->dopt;=0A-=09CommentItem=20*comments;=0A= -=09int=09=09=09ncomments;=0A+=09CommentItem=20*comment_items;=0A+=09int=09= =09=09n_comment_items;=0A=20=09PQExpBuffer=20query;=0A=20=09PQExpBuffer=20= tag;=0A=20=0A@@=20-11433,21=20+11433,21=20@@=20dumpTableComment(Archive=20= *fout,=20const=20TableInfo=20*tbinfo,=0A=20=09=09return;=0A=20=0A=20=09= /*=20Search=20for=20comments=20associated=20with=20relation,=20using=20= table=20*/=0A-=09ncomments=20=3D=20= findComments(tbinfo->dobj.catId.tableoid,=0A-=09=09=09=09=09=09=09=20= tbinfo->dobj.catId.oid,=0A-=09=09=09=09=09=09=09=20&comments);=0A+=09= n_comment_items=20=3D=20findComments(tbinfo->dobj.catId.tableoid,=0A+=09=09= =09=09=09=09=09=09=20=20=20tbinfo->dobj.catId.oid,=0A+=09=09=09=09=09=09=09= =09=20=20=20&comment_items);=0A=20=0A=20=09/*=20If=20comments=20exist,=20= build=20COMMENT=20ON=20statements=20*/=0A-=09if=20(ncomments=20<=3D=200)=0A= +=09if=20(n_comment_items=20<=3D=200)=0A=20=09=09return;=0A=20=0A=20=09= query=20=3D=20createPQExpBuffer();=0A=20=09tag=20=3D=20= createPQExpBuffer();=0A=20=0A-=09while=20(ncomments=20>=200)=0A+=09while=20= (n_comment_items=20>=200)=0A=20=09{=0A-=09=09const=20char=20*descr=20=3D=20= comments->descr;=0A-=09=09int=09=09=09objsubid=20=3D=20= comments->objsubid;=0A+=09=09const=20char=20*descr=20=3D=20= comment_items->descr;=0A+=09=09int=09=09=09objsubid=20=3D=20= comment_items->objsubid;=0A=20=0A=20=09=09if=20(objsubid=20=3D=3D=200)=0A= =20=09=09{=0A@@=20-11497,8=20+11497,8=20@@=20dumpTableComment(Archive=20= *fout,=20const=20TableInfo=20*tbinfo,=0A=20=09=09=09=09=09=09=09=09=09=20= =20.nDeps=20=3D=201));=0A=20=09=09}=0A=20=0A-=09=09comments++;=0A-=09=09= ncomments--;=0A+=09=09comment_items++;=0A+=09=09n_comment_items--;=0A=20=09= }=0A=20=0A=20=09destroyPQExpBuffer(query);=0A@@=20-13148,8=20+13148,8=20= @@=20static=20void=0A=20dumpCompositeTypeColComments(Archive=20*fout,=20= const=20TypeInfo=20*tyinfo,=0A=20=09=09=09=09=09=09=09=20PGresult=20= *res)=0A=20{=0A-=09CommentItem=20*comments;=0A-=09int=09=09=09ncomments;=0A= +=09CommentItem=20*comment_items;=0A+=09int=09=09=09n_comment_items;=0A=20= =09PQExpBuffer=20query;=0A=20=09PQExpBuffer=20target;=0A=20=09int=09=09=09= i;=0A@@=20-13163,11=20+13163,11=20@@=20= dumpCompositeTypeColComments(Archive=20*fout,=20const=20TypeInfo=20= *tyinfo,=0A=20=09=09return;=0A=20=0A=20=09/*=20Search=20for=20comments=20= associated=20with=20type's=20pg_class=20OID=20*/=0A-=09ncomments=20=3D=20= findComments(RelationRelationId,=20tyinfo->typrelid,=0A-=09=09=09=09=09=09= =09=20&comments);=0A+=09n_comment_items=20=3D=20= findComments(RelationRelationId,=20tyinfo->typrelid,=0A+=09=09=09=09=09=09= =09=09=20=20=20&comment_items);=0A=20=0A=20=09/*=20If=20no=20comments=20= exist,=20we're=20done=20*/=0A-=09if=20(ncomments=20<=3D=200)=0A+=09if=20= (n_comment_items=20<=3D=200)=0A=20=09=09return;=0A=20=0A=20=09/*=20Build=20= COMMENT=20ON=20statements=20*/=0A@@=20-13178,14=20+13178,14=20@@=20= dumpCompositeTypeColComments(Archive=20*fout,=20const=20TypeInfo=20= *tyinfo,=0A=20=09i_attnum=20=3D=20PQfnumber(res,=20"attnum");=0A=20=09= i_attname=20=3D=20PQfnumber(res,=20"attname");=0A=20=09i_attisdropped=20= =3D=20PQfnumber(res,=20"attisdropped");=0A-=09while=20(ncomments=20>=20= 0)=0A+=09while=20(n_comment_items=20>=200)=0A=20=09{=0A=20=09=09const=20= char=20*attname;=0A=20=0A=20=09=09attname=20=3D=20NULL;=0A=20=09=09for=20= (i=20=3D=200;=20i=20<=20ntups;=20i++)=0A=20=09=09{=0A-=09=09=09if=20= (atoi(PQgetvalue(res,=20i,=20i_attnum))=20=3D=3D=20comments->objsubid=20= &&=0A+=09=09=09if=20(atoi(PQgetvalue(res,=20i,=20i_attnum))=20=3D=3D=20= comment_items->objsubid=20&&=0A=20=09=09=09=09PQgetvalue(res,=20i,=20= i_attisdropped)[0]=20!=3D=20't')=0A=20=09=09=09{=0A=20=09=09=09=09= attname=20=3D=20PQgetvalue(res,=20i,=20i_attname);=0A@@=20-13194,7=20= +13194,7=20@@=20dumpCompositeTypeColComments(Archive=20*fout,=20const=20= TypeInfo=20*tyinfo,=0A=20=09=09}=0A=20=09=09if=20(attname)=09=09=09/*=20= just=20in=20case=20we=20don't=20find=20it=20*/=0A=20=09=09{=0A-=09=09=09= const=20char=20*descr=20=3D=20comments->descr;=0A+=09=09=09const=20char=20= *descr=20=3D=20comment_items->descr;=0A=20=0A=20=09=09=09= resetPQExpBuffer(target);=0A=20=09=09=09appendPQExpBuffer(target,=20= "COLUMN=20%s.",=0A@@=20-13219,8=20+13219,8=20@@=20= dumpCompositeTypeColComments(Archive=20*fout,=20const=20TypeInfo=20= *tyinfo,=0A=20=09=09=09=09=09=09=09=09=09=20=20.nDeps=20=3D=201));=0A=20=09= =09}=0A=20=0A-=09=09comments++;=0A-=09=09ncomments--;=0A+=09=09= comment_items++;=0A+=09=09n_comment_items--;=0A=20=09}=0A=20=0A=20=09= destroyPQExpBuffer(query);=0Adiff=20--git=20= a/src/bin/pg_dump/pg_restore.c=20b/src/bin/pg_dump/pg_restore.c=0Aindex=20= 14d886fc86e..96500f7d5c7=20100644=0A---=20a/src/bin/pg_dump/pg_restore.c=0A= +++=20b/src/bin/pg_dump/pg_restore.c=0A@@=20-778,11=20+778,11=20@@=20= restore_one_database(const=20char=20*inputFileSpec,=20RestoreOptions=20= *opts,=0A=20}=0A=20=0A=20static=20void=0A-usage(const=20char=20= *progname)=0A+usage(const=20char=20*myprogname)=0A=20{=0A=20=09= printf(_("%s=20restores=20PostgreSQL=20databases=20from=20archives=20= created=20by=20pg_dump=20or=20pg_dumpall.\n\n"),=20progname);=0A=20=09= printf(_("Usage:\n"));=0A-=09printf(_("=20=20%s=20[OPTION]...=20= [FILE]\n"),=20progname);=0A+=09printf(_("=20=20%s=20[OPTION]...=20= [FILE]\n"),=20myprogname);=0A=20=0A=20=09printf(_("\nGeneral=20= options:\n"));=0A=20=09printf(_("=20=20-d,=20--dbname=3DNAME=20=20=20=20=20= =20=20=20connect=20to=20database=20name\n"));=0Adiff=20--git=20= a/src/bin/pg_rewind/pg_rewind.c=20b/src/bin/pg_rewind/pg_rewind.c=0A= index=209d745d4b25b..c3bdec41526=20100644=0A---=20= a/src/bin/pg_rewind/pg_rewind.c=0A+++=20b/src/bin/pg_rewind/pg_rewind.c=0A= @@=20-89,9=20+89,9=20@@=20static=20PGconn=20*conn;=0A=20static=20= rewind_source=20*source;=0A=20=0A=20static=20void=0A-usage(const=20char=20= *progname)=0A+usage(const=20char=20*myprogname)=0A=20{=0A-=09= printf(_("%s=20resynchronizes=20a=20PostgreSQL=20cluster=20with=20= another=20copy=20of=20the=20cluster.\n\n"),=20progname);=0A+=09= printf(_("%s=20resynchronizes=20a=20PostgreSQL=20cluster=20with=20= another=20copy=20of=20the=20cluster.\n\n"),=20myprogname);=0A=20=09= printf(_("Usage:\n=20=20%s=20[OPTION]...\n\n"),=20progname);=0A=20=09= printf(_("Options:\n"));=0A=20=09printf(_("=20=20-c,=20= --restore-target-wal=20=20=20=20=20=20=20use=20\"restore_command\"=20in=20= target=20configuration=20to\n"=0A@@=20-561,7=20+561,7=20@@=20main(int=20= argc,=20char=20**argv)=0A=20=20*=20target=20and=20the=20source.=0A=20=20= */=0A=20static=20void=0A-perform_rewind(filemap_t=20*filemap,=20= rewind_source=20*source,=0A+perform_rewind(filemap_t=20*filemap,=20= rewind_source=20*rewindsource,=0A=20=09=09=09=20=20=20XLogRecPtr=20= chkptrec,=0A=20=09=09=09=20=20=20TimeLineID=20chkpttli,=0A=20=09=09=09=20= =20=20XLogRecPtr=20chkptredo)=0A@@=20-595,7=20+595,7=20@@=20= perform_rewind(filemap_t=20*filemap,=20rewind_source=20*source,=0A=20=09=09= =09while=20(datapagemap_next(iter,=20&blkno))=0A=20=09=09=09{=0A=20=09=09= =09=09offset=20=3D=20blkno=20*=20BLCKSZ;=0A-=09=09=09=09= source->queue_fetch_range(source,=20entry->path,=20offset,=20BLCKSZ);=0A= +=09=09=09=09rewindsource->queue_fetch_range(rewindsource,=20= entry->path,=20offset,=20BLCKSZ);=0A=20=09=09=09}=0A=20=09=09=09= pg_free(iter);=0A=20=09=09}=0A@@=20-607,7=20+607,7=20@@=20= perform_rewind(filemap_t=20*filemap,=20rewind_source=20*source,=0A=20=09=09= =09=09break;=0A=20=0A=20=09=09=09case=20FILE_ACTION_COPY:=0A-=09=09=09=09= source->queue_fetch_file(source,=20entry->path,=20entry->source_size);=0A= +=09=09=09=09rewindsource->queue_fetch_file(rewindsource,=20entry->path,=20= entry->source_size);=0A=20=09=09=09=09break;=0A=20=0A=20=09=09=09case=20= FILE_ACTION_TRUNCATE:=0A@@=20-615,9=20+615,9=20@@=20= perform_rewind(filemap_t=20*filemap,=20rewind_source=20*source,=0A=20=09=09= =09=09break;=0A=20=0A=20=09=09=09case=20FILE_ACTION_COPY_TAIL:=0A-=09=09=09= =09source->queue_fetch_range(source,=20entry->path,=0A-=09=09=09=09=09=09= =09=09=09=09=20=20entry->target_size,=0A-=09=09=09=09=09=09=09=09=09=09=20= =20entry->source_size=20-=20entry->target_size);=0A+=09=09=09=09= rewindsource->queue_fetch_range(rewindsource,=20entry->path,=0A+=09=09=09= =09=09=09=09=09=09=09=09=09entry->target_size,=0A+=09=09=09=09=09=09=09=09= =09=09=09=09entry->source_size=20-=20entry->target_size);=0A=20=09=09=09=09= break;=0A=20=0A=20=09=09=09case=20FILE_ACTION_REMOVE:=0A@@=20-635,7=20= +635,7=20@@=20perform_rewind(filemap_t=20*filemap,=20rewind_source=20= *source,=0A=20=09}=0A=20=0A=20=09/*=20Complete=20any=20remaining=20= range-fetches=20that=20we=20queued=20up=20above.=20*/=0A-=09= source->finish_fetch(source);=0A+=09= rewindsource->finish_fetch(rewindsource);=0A=20=0A=20=09= close_target_file();=0A=20=0A@@=20-645,7=20+645,7=20@@=20= perform_rewind(filemap_t=20*filemap,=20rewind_source=20*source,=0A=20=09=20= *=20Fetch=20the=20control=20file=20from=20the=20source=20last.=20This=20= ensures=20that=20the=0A=20=09=20*=20minRecoveryPoint=20is=20up-to-date.=0A= =20=09=20*/=0A-=09buffer=20=3D=20source->fetch_file(source,=20= XLOG_CONTROL_FILE,=20&size);=0A+=09buffer=20=3D=20= rewindsource->fetch_file(rewindsource,=20XLOG_CONTROL_FILE,=20&size);=0A=20= =09digestControlFile(&ControlFile_source_after,=20buffer,=20size);=0A=20=09= pg_free(buffer);=0A=20=0A@@=20-717,7=20+717,7=20@@=20= perform_rewind(filemap_t=20*filemap,=20rewind_source=20*source,=0A=20=09=09= =09if=20(ControlFile_source_after.state=20!=3D=20DB_IN_PRODUCTION)=0A=20=09= =09=09=09pg_fatal("source=20system=20was=20in=20unexpected=20state=20at=20= end=20of=20rewind");=0A=20=0A-=09=09=09endrec=20=3D=20= source->get_current_wal_insert_lsn(source);=0A+=09=09=09endrec=20=3D=20= rewindsource->get_current_wal_insert_lsn(rewindsource);=0A=20=09=09=09= endtli=20=3D=20= Max(ControlFile_source_after.checkPointCopy.ThisTimeLineID,=0A=20=09=09=09= =09=09=09=20ControlFile_source_after.minRecoveryPointTLI);=0A=20=09=09}=0A= diff=20--git=20a/src/interfaces/ecpg/preproc/ecpg.c=20= b/src/interfaces/ecpg/preproc/ecpg.c=0Aindex=201db55be473f..77b3599e1d6=20= 100644=0A---=20a/src/interfaces/ecpg/preproc/ecpg.c=0A+++=20= b/src/interfaces/ecpg/preproc/ecpg.c=0A@@=20-32,13=20+32,13=20@@=20= struct=20_defines=20*defines=20=3D=20NULL;=0A=20struct=20declared_list=20= *g_declared_list=20=3D=20NULL;=0A=20=0A=20static=20void=0A-help(const=20= char=20*progname)=0A+help(const=20char=20*myprogname)=0A=20{=0A=20=09= printf(_("%s=20is=20the=20PostgreSQL=20embedded=20SQL=20preprocessor=20= for=20C=20programs.\n\n"),=0A-=09=09=20=20=20progname);=0A+=09=09=20=20=20= myprogname);=0A=20=09printf(_("Usage:\n"=0A=20=09=09=09=20"=20=20%s=20= [OPTION]...=20FILE...\n\n"),=0A-=09=09=20=20=20progname);=0A+=09=09=20=20= =20myprogname);=0A=20=09printf(_("Options:\n"));=0A=20=09printf(_("=20=20= -c=20=20=20=20=20=20=20=20=20=20=20=20=20automatically=20generate=20C=20= code=20from=20embedded=20SQL=20code;\n"=0A=20=09=09=09=20"=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20=20=20this=20affects=20EXEC=20SQL=20= TYPE\n"));=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0008-cleanup-avoid-local-variables-shadowed-by-static-.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0008-cleanup-avoid-local-variables-shadowed-by-static-.patch" Content-Transfer-Encoding: quoted-printable =46rom=203a951accf56280caa23f569337e96db9a2914988=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2014:59:53=20+0800=0ASubject:=20[PATCH=20= v6=2008/13]=20cleanup:=20avoid=20local=20variables=20shadowed=20by=20= static=0A=20file-scope=20ones=20in=20file_ops.c=0A=0AThis=20commit=20= fixes=20several=20cases=20in=20file_ops.c=20where=20local=20variables=20= used=0Anames=20that=20conflicted=20with=20static=20variables=20defined=20= at=20file=20scope.=20The=0Alocal=20identifiers=20are=20renamed=20so=20= they=20are=20no=20longer=20shadowed=20by=20the=20file-=0Ascope=20= variables=20and=20remain=20unambiguous=20within=20their=20respective=20= blocks.=0A=0AAuthor:=20Chao=20Li=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/bin/pg_rewind/file_ops.c=20|=2050=20= ++++++++++++++++++------------------=0A=201=20file=20changed,=2025=20= insertions(+),=2025=20deletions(-)=0A=0Adiff=20--git=20= a/src/bin/pg_rewind/file_ops.c=20b/src/bin/pg_rewind/file_ops.c=0Aindex=20= 5cfb676f41f..3279a56f531=20100644=0A---=20a/src/bin/pg_rewind/file_ops.c=0A= +++=20b/src/bin/pg_rewind/file_ops.c=0A@@=20-186,41=20+186,41=20@@=20= create_target(file_entry_t=20*entry)=0A=20void=0A=20= remove_target_file(const=20char=20*path,=20bool=20missing_ok)=0A=20{=0A-=09= char=09=09dstpath[MAXPGPATH];=0A+=09char=09=09pathbuf[MAXPGPATH];=0A=20=0A= =20=09if=20(dry_run)=0A=20=09=09return;=0A=20=0A-=09snprintf(dstpath,=20= sizeof(dstpath),=20"%s/%s",=20datadir_target,=20path);=0A-=09if=20= (unlink(dstpath)=20!=3D=200)=0A+=09snprintf(pathbuf,=20sizeof(pathbuf),=20= "%s/%s",=20datadir_target,=20path);=0A+=09if=20(unlink(pathbuf)=20!=3D=20= 0)=0A=20=09{=0A=20=09=09if=20(errno=20=3D=3D=20ENOENT=20&&=20missing_ok)=0A= =20=09=09=09return;=0A=20=0A=20=09=09pg_fatal("could=20not=20remove=20= file=20\"%s\":=20%m",=0A-=09=09=09=09=20dstpath);=0A+=09=09=09=09=20= pathbuf);=0A=20=09}=0A=20}=0A=20=0A=20void=0A=20= truncate_target_file(const=20char=20*path,=20off_t=20newsize)=0A=20{=0A-=09= char=09=09dstpath[MAXPGPATH];=0A+=09char=09=09pathbuf[MAXPGPATH];=0A=20=09= int=09=09=09fd;=0A=20=0A=20=09if=20(dry_run)=0A=20=09=09return;=0A=20=0A= -=09snprintf(dstpath,=20sizeof(dstpath),=20"%s/%s",=20datadir_target,=20= path);=0A+=09snprintf(pathbuf,=20sizeof(pathbuf),=20"%s/%s",=20= datadir_target,=20path);=0A=20=0A-=09fd=20=3D=20open(dstpath,=20= O_WRONLY,=20pg_file_create_mode);=0A+=09fd=20=3D=20open(pathbuf,=20= O_WRONLY,=20pg_file_create_mode);=0A=20=09if=20(fd=20<=200)=0A=20=09=09= pg_fatal("could=20not=20open=20file=20\"%s\"=20for=20truncation:=20%m",=0A= -=09=09=09=09=20dstpath);=0A+=09=09=09=09=20pathbuf);=0A=20=0A=20=09if=20= (ftruncate(fd,=20newsize)=20!=3D=200)=0A=20=09=09pg_fatal("could=20not=20= truncate=20file=20\"%s\"=20to=20%u:=20%m",=0A-=09=09=09=09=20dstpath,=20= (unsigned=20int)=20newsize);=0A+=09=09=09=09=20pathbuf,=20(unsigned=20= int)=20newsize);=0A=20=0A=20=09close(fd);=0A=20}=0A@@=20-228,57=20= +228,57=20@@=20truncate_target_file(const=20char=20*path,=20off_t=20= newsize)=0A=20static=20void=0A=20create_target_dir(const=20char=20*path)=0A= =20{=0A-=09char=09=09dstpath[MAXPGPATH];=0A+=09char=09=09= pathbuf[MAXPGPATH];=0A=20=0A=20=09if=20(dry_run)=0A=20=09=09return;=0A=20= =0A-=09snprintf(dstpath,=20sizeof(dstpath),=20"%s/%s",=20datadir_target,=20= path);=0A-=09if=20(mkdir(dstpath,=20pg_dir_create_mode)=20!=3D=200)=0A+=09= snprintf(pathbuf,=20sizeof(pathbuf),=20"%s/%s",=20datadir_target,=20= path);=0A+=09if=20(mkdir(pathbuf,=20pg_dir_create_mode)=20!=3D=200)=0A=20= =09=09pg_fatal("could=20not=20create=20directory=20\"%s\":=20%m",=0A-=09=09= =09=09=20dstpath);=0A+=09=09=09=09=20pathbuf);=0A=20}=0A=20=0A=20static=20= void=0A=20remove_target_dir(const=20char=20*path)=0A=20{=0A-=09char=09=09= dstpath[MAXPGPATH];=0A+=09char=09=09pathbuf[MAXPGPATH];=0A=20=0A=20=09if=20= (dry_run)=0A=20=09=09return;=0A=20=0A-=09snprintf(dstpath,=20= sizeof(dstpath),=20"%s/%s",=20datadir_target,=20path);=0A-=09if=20= (rmdir(dstpath)=20!=3D=200)=0A+=09snprintf(pathbuf,=20sizeof(pathbuf),=20= "%s/%s",=20datadir_target,=20path);=0A+=09if=20(rmdir(pathbuf)=20!=3D=20= 0)=0A=20=09=09pg_fatal("could=20not=20remove=20directory=20\"%s\":=20= %m",=0A-=09=09=09=09=20dstpath);=0A+=09=09=09=09=20pathbuf);=0A=20}=0A=20= =0A=20static=20void=0A=20create_target_symlink(const=20char=20*path,=20= const=20char=20*link)=0A=20{=0A-=09char=09=09dstpath[MAXPGPATH];=0A+=09= char=09=09pathbuf[MAXPGPATH];=0A=20=0A=20=09if=20(dry_run)=0A=20=09=09= return;=0A=20=0A-=09snprintf(dstpath,=20sizeof(dstpath),=20"%s/%s",=20= datadir_target,=20path);=0A-=09if=20(symlink(link,=20dstpath)=20!=3D=20= 0)=0A+=09snprintf(pathbuf,=20sizeof(pathbuf),=20"%s/%s",=20= datadir_target,=20path);=0A+=09if=20(symlink(link,=20pathbuf)=20!=3D=20= 0)=0A=20=09=09pg_fatal("could=20not=20create=20symbolic=20link=20at=20= \"%s\":=20%m",=0A-=09=09=09=09=20dstpath);=0A+=09=09=09=09=20pathbuf);=0A= =20}=0A=20=0A=20static=20void=0A=20remove_target_symlink(const=20char=20= *path)=0A=20{=0A-=09char=09=09dstpath[MAXPGPATH];=0A+=09char=09=09= pathbuf[MAXPGPATH];=0A=20=0A=20=09if=20(dry_run)=0A=20=09=09return;=0A=20= =0A-=09snprintf(dstpath,=20sizeof(dstpath),=20"%s/%s",=20datadir_target,=20= path);=0A-=09if=20(unlink(dstpath)=20!=3D=200)=0A+=09snprintf(pathbuf,=20= sizeof(pathbuf),=20"%s/%s",=20datadir_target,=20path);=0A+=09if=20= (unlink(pathbuf)=20!=3D=200)=0A=20=09=09pg_fatal("could=20not=20remove=20= symbolic=20link=20\"%s\":=20%m",=0A-=09=09=09=09=20dstpath);=0A+=09=09=09= =09=20pathbuf);=0A=20}=0A=20=0A=20/*=0A--=20=0A2.50.1=20(Apple=20= Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0009-cleanup-avoid-local-variables-shadowed-by-globals.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0009-cleanup-avoid-local-variables-shadowed-by-globals.patch" Content-Transfer-Encoding: quoted-printable =46rom=20d4bca5957094705c8e9b55d59a33b49b46b65fec=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2015:05:05=20+0800=0ASubject:=20[PATCH=20= v6=2009/13]=20cleanup:=20avoid=20local=20variables=20shadowed=20by=20= globals=0A=20across=20several=20files=0A=0AThis=20commit=20fixes=20= multiple=20instances=20where=20local=20variables=20used=20the=20same=0A= names=20as=20global=20identifiers=20in=20various=20modules.=20The=20= affected=20locals=20are=0Arenamed=20so=20they=20are=20no=20longer=20= shadowed=20by=20the=20globals=20and=20remain=20clear=0Awithin=20their=20= respective=20scopes.=0A=0AAuthor:=20Chao=20Li=20=0A= Discussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/libpq/be-secure-common.c=20=20=20=20= =20|=2012=20++++-----=0A=20src/common/controldata_utils.c=20=20=20=20=20=20= =20=20=20=20=20|=20=208=20+++---=0A=20= src/interfaces/ecpg/preproc/descriptor.c=20|=2034=20= ++++++++++++------------=0A=203=20files=20changed,=2027=20insertions(+),=20= 27=20deletions(-)=0A=0Adiff=20--git=20= a/src/backend/libpq/be-secure-common.c=20= b/src/backend/libpq/be-secure-common.c=0Aindex=20= c074556dbfc..a9409ad3783=20100644=0A---=20= a/src/backend/libpq/be-secure-common.c=0A+++=20= b/src/backend/libpq/be-secure-common.c=0A@@=20-111,17=20+111,17=20@@=20= error:=0A=20=20*=20Check=20permissions=20for=20SSL=20key=20files.=0A=20=20= */=0A=20bool=0A-check_ssl_key_file_permissions(const=20char=20= *ssl_key_file,=20bool=20isServerStart)=0A= +check_ssl_key_file_permissions(const=20char=20*sslKeyFile,=20bool=20= isServerStart)=0A=20{=0A=20=09int=09=09=09loglevel=20=3D=20isServerStart=20= ?=20FATAL=20:=20LOG;=0A=20=09struct=20stat=20buf;=0A=20=0A-=09if=20= (stat(ssl_key_file,=20&buf)=20!=3D=200)=0A+=09if=20(stat(sslKeyFile,=20= &buf)=20!=3D=200)=0A=20=09{=0A=20=09=09ereport(loglevel,=0A=20=09=09=09=09= (errcode_for_file_access(),=0A=20=09=09=09=09=20errmsg("could=20not=20= access=20private=20key=20file=20\"%s\":=20%m",=0A-=09=09=09=09=09=09= ssl_key_file)));=0A+=09=09=09=09=09=09sslKeyFile)));=0A=20=09=09return=20= false;=0A=20=09}=0A=20=0A@@=20-131,7=20+131,7=20@@=20= check_ssl_key_file_permissions(const=20char=20*ssl_key_file,=20bool=20= isServerStart)=0A=20=09=09ereport(loglevel,=0A=20=09=09=09=09= (errcode(ERRCODE_CONFIG_FILE_ERROR),=0A=20=09=09=09=09=20errmsg("private=20= key=20file=20\"%s\"=20is=20not=20a=20regular=20file",=0A-=09=09=09=09=09=09= ssl_key_file)));=0A+=09=09=09=09=09=09sslKeyFile)));=0A=20=09=09return=20= false;=0A=20=09}=0A=20=0A@@=20-157,7=20+157,7=20@@=20= check_ssl_key_file_permissions(const=20char=20*ssl_key_file,=20bool=20= isServerStart)=0A=20=09=09ereport(loglevel,=0A=20=09=09=09=09= (errcode(ERRCODE_CONFIG_FILE_ERROR),=0A=20=09=09=09=09=20errmsg("private=20= key=20file=20\"%s\"=20must=20be=20owned=20by=20the=20database=20user=20= or=20root",=0A-=09=09=09=09=09=09ssl_key_file)));=0A+=09=09=09=09=09=09= sslKeyFile)));=0A=20=09=09return=20false;=0A=20=09}=0A=20=0A@@=20-167,7=20= +167,7=20@@=20check_ssl_key_file_permissions(const=20char=20= *ssl_key_file,=20bool=20isServerStart)=0A=20=09=09ereport(loglevel,=0A=20= =09=09=09=09(errcode(ERRCODE_CONFIG_FILE_ERROR),=0A=20=09=09=09=09=20= errmsg("private=20key=20file=20\"%s\"=20has=20group=20or=20world=20= access",=0A-=09=09=09=09=09=09ssl_key_file),=0A+=09=09=09=09=09=09= sslKeyFile),=0A=20=09=09=09=09=20errdetail("File=20must=20have=20= permissions=20u=3Drw=20(0600)=20or=20less=20if=20owned=20by=20the=20= database=20user,=20or=20permissions=20u=3Drw,g=3Dr=20(0640)=20or=20less=20= if=20owned=20by=20root.")));=0A=20=09=09return=20false;=0A=20=09}=0Adiff=20= --git=20a/src/common/controldata_utils.c=20= b/src/common/controldata_utils.c=0Aindex=2014530c6489a..b50bc04ef5a=20= 100644=0A---=20a/src/common/controldata_utils.c=0A+++=20= b/src/common/controldata_utils.c=0A@@=20-49,11=20+49,11=20@@=0A=20=20*=20= file=20data=20is=20correct.=0A=20=20*/=0A=20ControlFileData=20*=0A= -get_controlfile(const=20char=20*DataDir,=20bool=20*crc_ok_p)=0A= +get_controlfile(const=20char=20*data_dir,=20bool=20*crc_ok_p)=0A=20{=0A=20= =09char=09=09ControlFilePath[MAXPGPATH];=0A=20=0A-=09= snprintf(ControlFilePath,=20MAXPGPATH,=20"%s/%s",=20DataDir,=20= XLOG_CONTROL_FILE);=0A+=09snprintf(ControlFilePath,=20MAXPGPATH,=20= "%s/%s",=20data_dir,=20XLOG_CONTROL_FILE);=0A=20=0A=20=09return=20= get_controlfile_by_exact_path(ControlFilePath,=20crc_ok_p);=0A=20}=0A@@=20= -186,7=20+186,7=20@@=20retry:=0A=20=20*=20routine=20in=20the=20backend.=0A= =20=20*/=0A=20void=0A-update_controlfile(const=20char=20*DataDir,=0A= +update_controlfile(const=20char=20*data_dir,=0A=20=09=09=09=09=20=20=20= ControlFileData=20*ControlFile,=20bool=20do_sync)=0A=20{=0A=20=09int=09=09= =09fd;=0A@@=20-211,7=20+211,7=20@@=20update_controlfile(const=20char=20= *DataDir,=0A=20=09memset(buffer,=200,=20PG_CONTROL_FILE_SIZE);=0A=20=09= memcpy(buffer,=20ControlFile,=20sizeof(ControlFileData));=0A=20=0A-=09= snprintf(ControlFilePath,=20sizeof(ControlFilePath),=20"%s/%s",=20= DataDir,=20XLOG_CONTROL_FILE);=0A+=09snprintf(ControlFilePath,=20= sizeof(ControlFilePath),=20"%s/%s",=20data_dir,=20XLOG_CONTROL_FILE);=0A=20= =0A=20#ifndef=20FRONTEND=0A=20=0Adiff=20--git=20= a/src/interfaces/ecpg/preproc/descriptor.c=20= b/src/interfaces/ecpg/preproc/descriptor.c=0Aindex=20= e8c7016bdc1..9dac761e393=20100644=0A---=20= a/src/interfaces/ecpg/preproc/descriptor.c=0A+++=20= b/src/interfaces/ecpg/preproc/descriptor.c=0A@@=20-72,7=20+72,7=20@@=20= ECPGnumeric_lvalue(char=20*name)=0A=20static=20struct=20descriptor=20= *descriptors;=0A=20=0A=20void=0A-add_descriptor(const=20char=20*name,=20= const=20char=20*connection)=0A+add_descriptor(const=20char=20*name,=20= const=20char=20*conn_str)=0A=20{=0A=20=09struct=20descriptor=20*new;=0A=20= =0A@@=20-83,15=20+83,15=20@@=20add_descriptor(const=20char=20*name,=20= const=20char=20*connection)=0A=20=0A=20=09new->next=20=3D=20descriptors;=0A= =20=09new->name=20=3D=20mm_strdup(name);=0A-=09if=20(connection)=0A-=09=09= new->connection=20=3D=20mm_strdup(connection);=0A+=09if=20(conn_str)=0A+=09= =09new->connection=20=3D=20mm_strdup(conn_str);=0A=20=09else=0A=20=09=09= new->connection=20=3D=20NULL;=0A=20=09descriptors=20=3D=20new;=0A=20}=0A=20= =0A=20void=0A-drop_descriptor(const=20char=20*name,=20const=20char=20= *connection)=0A+drop_descriptor(const=20char=20*name,=20const=20char=20= *conn_str)=0A=20{=0A=20=09struct=20descriptor=20*i;=0A=20=09struct=20= descriptor=20**lastptr=20=3D=20&descriptors;=0A@@=20-103,9=20+103,9=20@@=20= drop_descriptor(const=20char=20*name,=20const=20char=20*connection)=0A=20= =09{=0A=20=09=09if=20(strcmp(name,=20i->name)=20=3D=3D=200)=0A=20=09=09{=0A= -=09=09=09if=20((!connection=20&&=20!i->connection)=0A-=09=09=09=09||=20= (connection=20&&=20i->connection=0A-=09=09=09=09=09&&=20= strcmp(connection,=20i->connection)=20=3D=3D=200))=0A+=09=09=09if=20= ((!conn_str=20&&=20!i->connection)=0A+=09=09=09=09||=20(conn_str=20&&=20= i->connection=0A+=09=09=09=09=09&&=20strcmp(conn_str,=20i->connection)=20= =3D=3D=200))=0A=20=09=09=09{=0A=20=09=09=09=09*lastptr=20=3D=20i->next;=0A= =20=09=09=09=09free(i->connection);=0A@@=20-115,14=20+115,14=20@@=20= drop_descriptor(const=20char=20*name,=20const=20char=20*connection)=0A=20= =09=09=09}=0A=20=09=09}=0A=20=09}=0A-=09if=20(connection)=0A-=09=09= mmerror(PARSE_ERROR,=20ET_WARNING,=20"descriptor=20%s=20bound=20to=20= connection=20%s=20does=20not=20exist",=20name,=20connection);=0A+=09if=20= (conn_str)=0A+=09=09mmerror(PARSE_ERROR,=20ET_WARNING,=20"descriptor=20= %s=20bound=20to=20connection=20%s=20does=20not=20exist",=20name,=20= conn_str);=0A=20=09else=0A=20=09=09mmerror(PARSE_ERROR,=20ET_WARNING,=20= "descriptor=20%s=20bound=20to=20the=20default=20connection=20does=20not=20= exist",=20name);=0A=20}=0A=20=0A=20struct=20descriptor=20*=0A= -lookup_descriptor(const=20char=20*name,=20const=20char=20*connection)=0A= +lookup_descriptor(const=20char=20*name,=20const=20char=20*conn_str)=0A=20= {=0A=20=09struct=20descriptor=20*i;=0A=20=0A@@=20-133,20=20+133,20=20@@=20= lookup_descriptor(const=20char=20*name,=20const=20char=20*connection)=0A=20= =09{=0A=20=09=09if=20(strcmp(name,=20i->name)=20=3D=3D=200)=0A=20=09=09{=0A= -=09=09=09if=20((!connection=20&&=20!i->connection)=0A-=09=09=09=09||=20= (connection=20&&=20i->connection=0A-=09=09=09=09=09&&=20= strcmp(connection,=20i->connection)=20=3D=3D=200))=0A+=09=09=09if=20= ((!conn_str=20&&=20!i->connection)=0A+=09=09=09=09||=20(conn_str=20&&=20= i->connection=0A+=09=09=09=09=09&&=20strcmp(conn_str,=20i->connection)=20= =3D=3D=200))=0A=20=09=09=09=09return=20i;=0A-=09=09=09if=20(connection=20= &&=20!i->connection)=0A+=09=09=09if=20(conn_str=20&&=20!i->connection)=0A= =20=09=09=09{=0A=20=09=09=09=09/*=20overwrite=20descriptor's=20= connection=20*/=0A-=09=09=09=09i->connection=20=3D=20= mm_strdup(connection);=0A+=09=09=09=09i->connection=20=3D=20= mm_strdup(conn_str);=0A=20=09=09=09=09return=20i;=0A=20=09=09=09}=0A=20=09= =09}=0A=20=09}=0A-=09if=20(connection)=0A-=09=09mmerror(PARSE_ERROR,=20= ET_WARNING,=20"descriptor=20%s=20bound=20to=20connection=20%s=20does=20= not=20exist",=20name,=20connection);=0A+=09if=20(conn_str)=0A+=09=09= mmerror(PARSE_ERROR,=20ET_WARNING,=20"descriptor=20%s=20bound=20to=20= connection=20%s=20does=20not=20exist",=20name,=20conn_str);=0A=20=09else=0A= =20=09=09mmerror(PARSE_ERROR,=20ET_WARNING,=20"descriptor=20%s=20bound=20= to=20the=20default=20connection=20does=20not=20exist",=20name);=0A=20=09= return=20NULL;=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0010-cleanup-avoid-local-variables-shadowed-by-static-.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0010-cleanup-avoid-local-variables-shadowed-by-static-.patch" Content-Transfer-Encoding: quoted-printable =46rom=205e5f40eff514ed0ef325080a2d7a92a7b81f10e6=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2015:26:51=20+0800=0ASubject:=20[PATCH=20= v6=2010/13]=20cleanup:=20avoid=20local=20variables=20shadowed=20by=20= static=0A=20file-scope=20ones=20in=20several=20files=0A=0AThis=20commit=20= fixes=20multiple=20cases=20where=20local=20variables=20used=20names=20= that=0Aconflicted=20with=20static=20variables=20defined=20at=20file=20= scope.=20The=20affected=0Alocals=20are=20renamed=20so=20they=20are=20no=20= longer=20shadowed=20by=20the=20file-scope=0Aidentifiers=20and=20remain=20= unambiguous=20within=20their=20respective=20scopes.=0A=0AAuthor:=20Chao=20= Li=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/executor/execExprInterp.c=20|=206=20= +++---=0A=20src/bin/pg_ctl/pg_ctl.c=20=20=20=20=20=20=20=20=20=20=20=20=20= =20=20|=206=20+++---=0A=20src/bin/pg_dump/pg_dumpall.c=20=20=20=20=20=20=20= =20=20=20|=206=20+++---=0A=20src/bin/pg_resetwal/pg_resetwal.c=20=20=20=20= =20|=206=20+++---=0A=20src/bin/pg_test_fsync/pg_test_fsync.c=20|=206=20= +++---=0A=205=20files=20changed,=2015=20insertions(+),=2015=20= deletions(-)=0A=0Adiff=20--git=20a/src/backend/executor/execExprInterp.c=20= b/src/backend/executor/execExprInterp.c=0Aindex=20= 61ff5ddc74c..cb5fb7dbba6=20100644=0A---=20= a/src/backend/executor/execExprInterp.c=0A+++=20= b/src/backend/executor/execExprInterp.c=0A@@=20-471,7=20+471,7=20@@=20= ExecInterpExpr(ExprState=20*state,=20ExprContext=20*econtext,=20bool=20= *isnull)=0A=20=09=20*=20This=20array=20has=20to=20be=20in=20the=20same=20= order=20as=20enum=20ExprEvalOp.=0A=20=09=20*/=0A=20#if=20= defined(EEO_USE_COMPUTED_GOTO)=0A-=09static=20const=20void=20*const=20= dispatch_table[]=20=3D=20{=0A+=09static=20const=20void=20*const=20= _dispatch_table[]=20=3D=20{=0A=20=09=09&&CASE_EEOP_DONE_RETURN,=0A=20=09=09= &&CASE_EEOP_DONE_NO_RETURN,=0A=20=09=09&&CASE_EEOP_INNER_FETCHSOME,=0A@@=20= -595,11=20+595,11=20@@=20ExecInterpExpr(ExprState=20*state,=20= ExprContext=20*econtext,=20bool=20*isnull)=0A=20=09=09&&CASE_EEOP_LAST=0A= =20=09};=0A=20=0A-=09StaticAssertDecl(lengthof(dispatch_table)=20=3D=3D=20= EEOP_LAST=20+=201,=0A+=09StaticAssertDecl(lengthof(_dispatch_table)=20=3D=3D= =20EEOP_LAST=20+=201,=0A=20=09=09=09=09=09=20"dispatch_table=20out=20of=20= whack=20with=20ExprEvalOp");=0A=20=0A=20=09if=20(unlikely(state=20=3D=3D=20= NULL))=0A-=09=09return=20PointerGetDatum(dispatch_table);=0A+=09=09= return=20PointerGetDatum(_dispatch_table);=0A=20#else=0A=20=09= Assert(state=20!=3D=20NULL);=0A=20#endif=09=09=09=09=09=09=09/*=20= EEO_USE_COMPUTED_GOTO=20*/=0Adiff=20--git=20a/src/bin/pg_ctl/pg_ctl.c=20= b/src/bin/pg_ctl/pg_ctl.c=0Aindex=203cc61455dcb..b1fbe1f88d2=20100644=0A= ---=20a/src/bin/pg_ctl/pg_ctl.c=0A+++=20b/src/bin/pg_ctl/pg_ctl.c=0A@@=20= -873,18=20+873,18=20@@=20trap_sigint_during_startup(SIGNAL_ARGS)=0A=20}=0A= =20=0A=20static=20char=20*=0A-find_other_exec_or_die(const=20char=20= *argv0,=20const=20char=20*target,=20const=20char=20*versionstr)=0A= +find_other_exec_or_die(const=20char=20*myargv0,=20const=20char=20= *target,=20const=20char=20*versionstr)=0A=20{=0A=20=09int=09=09=09ret;=0A= =20=09char=09=20=20=20*found_path;=0A=20=0A=20=09found_path=20=3D=20= pg_malloc(MAXPGPATH);=0A=20=0A-=09if=20((ret=20=3D=20= find_other_exec(argv0,=20target,=20versionstr,=20found_path))=20<=200)=0A= +=09if=20((ret=20=3D=20find_other_exec(myargv0,=20target,=20versionstr,=20= found_path))=20<=200)=0A=20=09{=0A=20=09=09char=09=09= full_path[MAXPGPATH];=0A=20=0A-=09=09if=20(find_my_exec(argv0,=20= full_path)=20<=200)=0A+=09=09if=20(find_my_exec(myargv0,=20full_path)=20= <=200)=0A=20=09=09=09strlcpy(full_path,=20progname,=20= sizeof(full_path));=0A=20=0A=20=09=09if=20(ret=20=3D=3D=20-1)=0Adiff=20= --git=20a/src/bin/pg_dump/pg_dumpall.c=20b/src/bin/pg_dump/pg_dumpall.c=0A= index=201165a0f4afe..b1334da2075=20100644=0A---=20= a/src/bin/pg_dump/pg_dumpall.c=0A+++=20b/src/bin/pg_dump/pg_dumpall.c=0A= @@=20-2344,20=20+2344,20=20@@=20dumpTimestamp(const=20char=20*msg)=0A=20=20= *=20read_dumpall_filters=20-=20retrieve=20database=20identifier=20= patterns=20from=20file=0A=20=20*=0A=20=20*=20Parse=20the=20specified=20= filter=20file=20for=20include=20and=20exclude=20patterns,=20and=20add=0A= -=20*=20them=20to=20the=20relevant=20lists.=20=20If=20the=20filename=20= is=20"-"=20then=20filters=20will=20be=0A+=20*=20them=20to=20the=20= relevant=20lists.=20=20If=20the=20fname=20is=20"-"=20then=20filters=20= will=20be=0A=20=20*=20read=20from=20STDIN=20rather=20than=20a=20file.=0A=20= =20*=0A=20=20*=20At=20the=20moment,=20the=20only=20allowed=20filter=20is=20= for=20database=20exclusion.=0A=20=20*/=0A=20static=20void=0A= -read_dumpall_filters(const=20char=20*filename,=20SimpleStringList=20= *pattern)=0A+read_dumpall_filters(const=20char=20*fname,=20= SimpleStringList=20*pattern)=0A=20{=0A=20=09FilterStateData=20fstate;=0A=20= =09char=09=20=20=20*objname;=0A=20=09FilterCommandType=20comtype;=0A=20=09= FilterObjectType=20objtype;=0A=20=0A-=09filter_init(&fstate,=20filename,=20= exit);=0A+=09filter_init(&fstate,=20fname,=20exit);=0A=20=0A=20=09while=20= (filter_read_item(&fstate,=20&objname,=20&comtype,=20&objtype))=0A=20=09= {=0Adiff=20--git=20a/src/bin/pg_resetwal/pg_resetwal.c=20= b/src/bin/pg_resetwal/pg_resetwal.c=0Aindex=20ab766c34d4b..a9c0269101d=20= 100644=0A---=20a/src/bin/pg_resetwal/pg_resetwal.c=0A+++=20= b/src/bin/pg_resetwal/pg_resetwal.c=0A@@=20-745,15=20+745,15=20@@=20= GuessControlValues(void)=0A=20=0A=20=0A=20/*=0A-=20*=20Print=20the=20= guessed=20pg_control=20values=20when=20we=20had=20to=20guess.=0A+=20*=20= Print=20the=20bGuessed=20pg_control=20values=20when=20we=20had=20to=20= guess.=0A=20=20*=0A=20=20*=20NB:=20this=20display=20should=20be=20just=20= those=20fields=20that=20will=20not=20be=0A=20=20*=20reset=20by=20= RewriteControlFile().=0A=20=20*/=0A=20static=20void=0A= -PrintControlValues(bool=20guessed)=0A+PrintControlValues(bool=20= bGuessed)=0A=20{=0A-=09if=20(guessed)=0A+=09if=20(bGuessed)=0A=20=09=09= printf(_("Guessed=20pg_control=20values:\n\n"));=0A=20=09else=0A=20=09=09= printf(_("Current=20pg_control=20values:\n\n"));=0Adiff=20--git=20= a/src/bin/pg_test_fsync/pg_test_fsync.c=20= b/src/bin/pg_test_fsync/pg_test_fsync.c=0Aindex=20= 4b84f86e7d7..55fca0f0a19=20100644=0A---=20= a/src/bin/pg_test_fsync/pg_test_fsync.c=0A+++=20= b/src/bin/pg_test_fsync/pg_test_fsync.c=0A@@=20-622,10=20+622,10=20@@=20= pg_fsync_writethrough(int=20fd)=0A=20=20*=20print=20out=20the=20writes=20= per=20second=20for=20tests=0A=20=20*/=0A=20static=20void=0A= -print_elapse(struct=20timeval=20start_t,=20struct=20timeval=20stop_t,=20= int=20ops)=0A+print_elapse(struct=20timeval=20start_time,=20struct=20= timeval=20stop_time,=20int=20ops)=0A=20{=0A-=09double=09=09total_time=20= =3D=20(stop_t.tv_sec=20-=20start_t.tv_sec)=20+=0A-=09=09(stop_t.tv_usec=20= -=20start_t.tv_usec)=20*=200.000001;=0A+=09double=09=09total_time=20=3D=20= (stop_time.tv_sec=20-=20start_time.tv_sec)=20+=0A+=09=09= (stop_time.tv_usec=20-=20start_time.tv_usec)=20*=200.000001;=0A=20=09= double=09=09per_second=20=3D=20ops=20/=20total_time;=0A=20=09double=09=09= avg_op_time_us=20=3D=20(total_time=20/=20ops)=20*=20USECS_SEC;=0A=20=0A= --=20=0A2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0011-cleanup-rename-local-conn-variables-to-avoid-shad.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0011-cleanup-rename-local-conn-variables-to-avoid-shad.patch" Content-Transfer-Encoding: quoted-printable =46rom=203f302bf3b2a4af82d8978ee29229c5bf61f0f6f3=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Tue,=202=20Dec=202025=2016:03:19=20+0800=0ASubject:=20[PATCH=20= v6=2011/13]=20cleanup:=20rename=20local=20conn=20variables=20to=20avoid=0A= =20shadowing=20the=20global=0A=0AThis=20commit=20renames=20all=20local=20= variables=20named=20'conn'=20to=20'myconn'=20to=20avoid=0Ashadowing=20= the=20global=20connection=20variable.=20This=20ensures=20the=20local=20= and=0Aglobal=20identifiers=20remain=20clearly=20distinct=20within=20each=20= scope.=0A=0AA=20few=20additional=20shadowing=20fixes=20in=20the=20same=20= code=20areas=20are=20included=20as=0Awell.=20These=20are=20unrelated=20= to=20the=20conn=20renaming=20but=20occur=20in=20the=20same=0Afiles,=20so=20= they=20are=20bundled=20here=20to=20keep=20the=20commit=20self-contained.=0A= =0AAuthor:=20Chao=20Li=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/bin/pg_basebackup/pg_basebackup.c=20=20|=20= =2032=20++++----=0A=20src/bin/pg_basebackup/pg_recvlogical.c=20|=20=2024=20= +++---=0A=20src/bin/pg_basebackup/receivelog.c=20=20=20=20=20|=20108=20= ++++++++++++-------------=0A=20src/bin/pg_basebackup/streamutil.c=20=20=20= =20=20|=20=2058=20++++++-------=0A=204=20files=20changed,=20111=20= insertions(+),=20111=20deletions(-)=0A=0Adiff=20--git=20= a/src/bin/pg_basebackup/pg_basebackup.c=20= b/src/bin/pg_basebackup/pg_basebackup.c=0Aindex=20= fa169a8d642..81e9867d7f4=20100644=0A---=20= a/src/bin/pg_basebackup/pg_basebackup.c=0A+++=20= b/src/bin/pg_basebackup/pg_basebackup.c=0A@@=20-1013,16=20+1013,16=20@@=20= backup_parse_compress_options(char=20*option,=20char=20**algorithm,=20= char=20**detail,=0A=20=20*=20chunk.=0A=20=20*/=0A=20static=20void=0A= -ReceiveCopyData(PGconn=20*conn,=20WriteDataCallback=20callback,=0A= +ReceiveCopyData(PGconn=20*myconn,=20WriteDataCallback=20callback,=0A=20=09= =09=09=09void=20*callback_data)=0A=20{=0A=20=09PGresult=20=20=20*res;=0A=20= =0A=20=09/*=20Get=20the=20COPY=20data=20stream.=20*/=0A-=09res=20=3D=20= PQgetResult(conn);=0A+=09res=20=3D=20PQgetResult(myconn);=0A=20=09if=20= (PQresultStatus(res)=20!=3D=20PGRES_COPY_OUT)=0A=20=09=09pg_fatal("could=20= not=20get=20COPY=20data=20stream:=20%s",=0A-=09=09=09=09=20= PQerrorMessage(conn));=0A+=09=09=09=09=20PQerrorMessage(myconn));=0A=20=09= PQclear(res);=0A=20=0A=20=09/*=20Loop=20over=20chunks=20until=20done.=20= */=0A@@=20-1031,7=20+1031,7=20@@=20ReceiveCopyData(PGconn=20*conn,=20= WriteDataCallback=20callback,=0A=20=09=09int=09=09=09r;=0A=20=09=09char=09= =20=20=20*copybuf;=0A=20=0A-=09=09r=20=3D=20PQgetCopyData(conn,=20= ©buf,=200);=0A+=09=09r=20=3D=20PQgetCopyData(myconn,=20©buf,=20= 0);=0A=20=09=09if=20(r=20=3D=3D=20-1)=0A=20=09=09{=0A=20=09=09=09/*=20= End=20of=20chunk.=20*/=0A@@=20-1039,7=20+1039,7=20@@=20= ReceiveCopyData(PGconn=20*conn,=20WriteDataCallback=20callback,=0A=20=09=09= }=0A=20=09=09else=20if=20(r=20=3D=3D=20-2)=0A=20=09=09=09pg_fatal("could=20= not=20read=20COPY=20data:=20%s",=0A-=09=09=09=09=09=20= PQerrorMessage(conn));=0A+=09=09=09=09=09=20PQerrorMessage(myconn));=0A=20= =0A=20=09=09if=20(bgchild_exited)=0A=20=09=09=09pg_fatal("background=20= process=20terminated=20unexpectedly");=0A@@=20-1283,7=20+1283,7=20@@=20= CreateBackupStreamer(char=20*archive_name,=20char=20*spclocation,=0A=20=20= *=20manifest=20if=20present=20-=20as=20a=20single=20COPY=20stream.=0A=20=20= */=0A=20static=20void=0A-ReceiveArchiveStream(PGconn=20*conn,=20= pg_compress_specification=20*compress)=0A+ReceiveArchiveStream(PGconn=20= *myconn,=20pg_compress_specification=20*compress)=0A=20{=0A=20=09= ArchiveStreamState=20state;=0A=20=0A@@=20-1293,7=20+1293,7=20@@=20= ReceiveArchiveStream(PGconn=20*conn,=20pg_compress_specification=20= *compress)=0A=20=09state.compress=20=3D=20compress;=0A=20=0A=20=09/*=20= All=20the=20real=20work=20happens=20in=20ReceiveArchiveStreamChunk.=20*/=0A= -=09ReceiveCopyData(conn,=20ReceiveArchiveStreamChunk,=20&state);=0A+=09= ReceiveCopyData(myconn,=20ReceiveArchiveStreamChunk,=20&state);=0A=20=0A=20= =09/*=20If=20we=20wrote=20the=20backup=20manifest=20to=20a=20file,=20= close=20the=20file.=20*/=0A=20=09if=20(state.manifest_file=20!=3DNULL)=0A= @@=20-1598,7=20+1598,7=20@@=20ReportCopyDataParseError(size_t=20r,=20= char=20*copybuf)=0A=20=20*=20receive=20the=20backup=20manifest=20and=20= inject=20it=20into=20that=20tarfile.=0A=20=20*/=0A=20static=20void=0A= -ReceiveTarFile(PGconn=20*conn,=20char=20*archive_name,=20char=20= *spclocation,=0A+ReceiveTarFile(PGconn=20*myconn,=20char=20= *archive_name,=20char=20*spclocation,=0A=20=09=09=09=20=20=20bool=20= tablespacenum,=20pg_compress_specification=20*compress)=0A=20{=0A=20=09= WriteTarState=20state;=0A@@=20-1609,16=20+1609,16=20@@=20= ReceiveTarFile(PGconn=20*conn,=20char=20*archive_name,=20char=20= *spclocation,=0A=20=09/*=20Pass=20all=20COPY=20data=20through=20to=20the=20= backup=20streamer.=20*/=0A=20=09memset(&state,=200,=20sizeof(state));=0A=20= =09is_recovery_guc_supported=20=3D=0A-=09=09PQserverVersion(conn)=20>=3D=20= MINIMUM_VERSION_FOR_RECOVERY_GUC;=0A+=09=09PQserverVersion(myconn)=20>=3D=20= MINIMUM_VERSION_FOR_RECOVERY_GUC;=0A=20=09expect_unterminated_tarfile=20= =3D=0A-=09=09PQserverVersion(conn)=20<=20= MINIMUM_VERSION_FOR_TERMINATED_TARFILE;=0A+=09=09PQserverVersion(myconn)=20= <=20MINIMUM_VERSION_FOR_TERMINATED_TARFILE;=0A=20=09state.streamer=20=3D=20= CreateBackupStreamer(archive_name,=20spclocation,=0A=20=09=09=09=09=09=09= =09=09=09=09=20=20&manifest_inject_streamer,=0A=20=09=09=09=09=09=09=09=09= =09=09=20=20is_recovery_guc_supported,=0A=20=09=09=09=09=09=09=09=09=09=09= =20=20expect_unterminated_tarfile,=0A=20=09=09=09=09=09=09=09=09=09=09=20= =20compress);=0A=20=09state.tablespacenum=20=3D=20tablespacenum;=0A-=09= ReceiveCopyData(conn,=20ReceiveTarCopyChunk,=20&state);=0A+=09= ReceiveCopyData(myconn,=20ReceiveTarCopyChunk,=20&state);=0A=20=09= progress_update_filename(NULL);=0A=20=0A=20=09/*=0A@@=20-1633,7=20= +1633,7=20@@=20ReceiveTarFile(PGconn=20*conn,=20char=20*archive_name,=20= char=20*spclocation,=0A=20=0A=20=09=09/*=20Slurp=20the=20entire=20backup=20= manifest=20into=20a=20buffer.=20*/=0A=20=09=09initPQExpBuffer(&buf);=0A-=09= =09ReceiveBackupManifestInMemory(conn,=20&buf);=0A+=09=09= ReceiveBackupManifestInMemory(myconn,=20&buf);=0A=20=09=09if=20= (PQExpBufferDataBroken(buf))=0A=20=09=09=09pg_fatal("out=20of=20= memory");=0A=20=0A@@=20-1697,7=20+1697,7=20@@=20= get_tablespace_mapping(const=20char=20*dir)=0A=20=20*=20Receive=20the=20= backup=20manifest=20file=20and=20write=20it=20out=20to=20a=20file.=0A=20=20= */=0A=20static=20void=0A-ReceiveBackupManifest(PGconn=20*conn)=0A= +ReceiveBackupManifest(PGconn=20*myconn)=0A=20{=0A=20=09= WriteManifestState=20state;=0A=20=0A@@=20-1707,7=20+1707,7=20@@=20= ReceiveBackupManifest(PGconn=20*conn)=0A=20=09if=20(state.file=20=3D=3D=20= NULL)=0A=20=09=09pg_fatal("could=20not=20create=20file=20\"%s\":=20%m",=20= state.filename);=0A=20=0A-=09ReceiveCopyData(conn,=20= ReceiveBackupManifestChunk,=20&state);=0A+=09ReceiveCopyData(myconn,=20= ReceiveBackupManifestChunk,=20&state);=0A=20=0A=20=09fclose(state.file);=0A= =20}=0A@@=20-1734,9=20+1734,9=20@@=20ReceiveBackupManifestChunk(size_t=20= r,=20char=20*copybuf,=20void=20*callback_data)=0A=20=20*=20Receive=20the=20= backup=20manifest=20file=20and=20write=20it=20out=20to=20a=20file.=0A=20=20= */=0A=20static=20void=0A-ReceiveBackupManifestInMemory(PGconn=20*conn,=20= PQExpBuffer=20buf)=0A+ReceiveBackupManifestInMemory(PGconn=20*myconn,=20= PQExpBuffer=20buf)=0A=20{=0A-=09ReceiveCopyData(conn,=20= ReceiveBackupManifestInMemoryChunk,=20buf);=0A+=09= ReceiveCopyData(myconn,=20ReceiveBackupManifestInMemoryChunk,=20buf);=0A=20= }=0A=20=0A=20/*=0Adiff=20--git=20= a/src/bin/pg_basebackup/pg_recvlogical.c=20= b/src/bin/pg_basebackup/pg_recvlogical.c=0Aindex=20= be71783b370..9c2e606a363=20100644=0A---=20= a/src/bin/pg_basebackup/pg_recvlogical.c=0A+++=20= b/src/bin/pg_basebackup/pg_recvlogical.c=0A@@=20-73,8=20+73,8=20@@=20= static=20XLogRecPtr=20output_fsync_lsn=20=3D=20InvalidXLogRecPtr;=0A=20=0A= =20static=20void=20usage(void);=0A=20static=20void=20= StreamLogicalLog(void);=0A-static=20bool=20flushAndSendFeedback(PGconn=20= *conn,=20TimestampTz=20*now);=0A-static=20void=20= prepareToTerminate(PGconn=20*conn,=20XLogRecPtr=20endpos,=0A+static=20= bool=20flushAndSendFeedback(PGconn=20*myconn,=20TimestampTz=20*now);=0A= +static=20void=20prepareToTerminate(PGconn=20*myconn,=20XLogRecPtr=20= endpos,=0A=20=09=09=09=09=09=09=09=20=20=20StreamStopReason=20reason,=0A=20= =09=09=09=09=09=09=09=20=20=20XLogRecPtr=20lsn);=0A=20=0A@@=20-126,7=20= +126,7=20@@=20usage(void)=0A=20=20*=20Send=20a=20Standby=20Status=20= Update=20message=20to=20server.=0A=20=20*/=0A=20static=20bool=0A= -sendFeedback(PGconn=20*conn,=20TimestampTz=20now,=20bool=20force,=20= bool=20replyRequested)=0A+sendFeedback(PGconn=20*myconn,=20TimestampTz=20= now,=20bool=20force,=20bool=20replyRequested)=0A=20{=0A=20=09static=20= XLogRecPtr=20last_written_lsn=20=3D=20InvalidXLogRecPtr;=0A=20=09static=20= XLogRecPtr=20last_fsync_lsn=20=3D=20InvalidXLogRecPtr;=0A@@=20-167,10=20= +167,10=20@@=20sendFeedback(PGconn=20*conn,=20TimestampTz=20now,=20bool=20= force,=20bool=20replyRequested)=0A=20=09last_written_lsn=20=3D=20= output_written_lsn;=0A=20=09last_fsync_lsn=20=3D=20output_fsync_lsn;=0A=20= =0A-=09if=20(PQputCopyData(conn,=20replybuf,=20len)=20<=3D=200=20||=20= PQflush(conn))=0A+=09if=20(PQputCopyData(myconn,=20replybuf,=20len)=20<=3D= =200=20||=20PQflush(myconn))=0A=20=09{=0A=20=09=09pg_log_error("could=20= not=20send=20feedback=20packet:=20%s",=0A-=09=09=09=09=09=20= PQerrorMessage(conn));=0A+=09=09=09=09=09=20PQerrorMessage(myconn));=0A=20= =09=09return=20false;=0A=20=09}=0A=20=0A@@=20-1052,12=20+1052,12=20@@=20= main(int=20argc,=20char=20**argv)=0A=20=20*=20feedback.=0A=20=20*/=0A=20= static=20bool=0A-flushAndSendFeedback(PGconn=20*conn,=20TimestampTz=20= *now)=0A+flushAndSendFeedback(PGconn=20*myconn,=20TimestampTz=20*now)=0A=20= {=0A=20=09/*=20flush=20data=20to=20disk,=20so=20that=20we=20send=20a=20= recent=20flush=20pointer=20*/=0A=20=09OutputFsync(*now);=0A=20=09*now=20= =3D=20feGetCurrentTimestamp();=0A-=09if=20(!sendFeedback(conn,=20*now,=20= true,=20false))=0A+=09if=20(!sendFeedback(myconn,=20*now,=20true,=20= false))=0A=20=09=09return=20false;=0A=20=0A=20=09return=20true;=0A@@=20= -1068,11=20+1068,11=20@@=20flushAndSendFeedback(PGconn=20*conn,=20= TimestampTz=20*now)=0A=20=20*=20retry=20on=20failure.=0A=20=20*/=0A=20= static=20void=0A-prepareToTerminate(PGconn=20*conn,=20XLogRecPtr=20= endpos,=20StreamStopReason=20reason,=0A+prepareToTerminate(PGconn=20= *myconn,=20XLogRecPtr=20end_pos,=20StreamStopReason=20reason,=0A=20=09=09= =09=09=20=20=20XLogRecPtr=20lsn)=0A=20{=0A-=09(void)=20= PQputCopyEnd(conn,=20NULL);=0A-=09(void)=20PQflush(conn);=0A+=09(void)=20= PQputCopyEnd(myconn,=20NULL);=0A+=09(void)=20PQflush(myconn);=0A=20=0A=20= =09if=20(verbose)=0A=20=09{=0A@@=20-1083,12=20+1083,12=20@@=20= prepareToTerminate(PGconn=20*conn,=20XLogRecPtr=20endpos,=20= StreamStopReason=20reason,=0A=20=09=09=09=09break;=0A=20=09=09=09case=20= STREAM_STOP_KEEPALIVE:=0A=20=09=09=09=09pg_log_info("end=20position=20= %X/%08X=20reached=20by=20keepalive",=0A-=09=09=09=09=09=09=09= LSN_FORMAT_ARGS(endpos));=0A+=09=09=09=09=09=09=09= LSN_FORMAT_ARGS(end_pos));=0A=20=09=09=09=09break;=0A=20=09=09=09case=20= STREAM_STOP_END_OF_WAL:=0A=20=09=09=09=09Assert(XLogRecPtrIsValid(lsn));=0A= =20=09=09=09=09pg_log_info("end=20position=20%X/%08X=20reached=20by=20= WAL=20record=20at=20%X/%08X",=0A-=09=09=09=09=09=09=09= LSN_FORMAT_ARGS(endpos),=20LSN_FORMAT_ARGS(lsn));=0A+=09=09=09=09=09=09=09= LSN_FORMAT_ARGS(end_pos),=20LSN_FORMAT_ARGS(lsn));=0A=20=09=09=09=09= break;=0A=20=09=09=09case=20STREAM_STOP_NONE:=0A=20=09=09=09=09= Assert(false);=0Adiff=20--git=20a/src/bin/pg_basebackup/receivelog.c=20= b/src/bin/pg_basebackup/receivelog.c=0Aindex=205ce8f2ba287..220f78e3073=20= 100644=0A---=20a/src/bin/pg_basebackup/receivelog.c=0A+++=20= b/src/bin/pg_basebackup/receivelog.c=0A@@=20-32,18=20+32,18=20@@=20= static=20XLogRecPtr=20lastFlushPosition=20=3D=20InvalidXLogRecPtr;=0A=20=0A= =20static=20bool=20still_sending=20=3D=20true;=09/*=20feedback=20still=20= needs=20to=20be=20sent?=20*/=0A=20=0A-static=20PGresult=20= *HandleCopyStream(PGconn=20*conn,=20StreamCtl=20*stream,=0A+static=20= PGresult=20*HandleCopyStream(PGconn=20*myconn,=20StreamCtl=20*stream,=0A=20= =09=09=09=09=09=09=09=09=20=20XLogRecPtr=20*stoppos);=0A-static=20int=09= CopyStreamPoll(PGconn=20*conn,=20long=20timeout_ms,=20pgsocket=20= stop_socket);=0A-static=20int=09CopyStreamReceive(PGconn=20*conn,=20long=20= timeout,=20pgsocket=20stop_socket,=0A+static=20int=09= CopyStreamPoll(PGconn=20*myconn,=20long=20timeout_ms,=20pgsocket=20= stop_socket);=0A+static=20int=09CopyStreamReceive(PGconn=20*myconn,=20= long=20timeout,=20pgsocket=20stop_socket,=0A=20=09=09=09=09=09=09=09=20=20= char=20**buffer);=0A-static=20bool=20ProcessKeepaliveMsg(PGconn=20*conn,=20= StreamCtl=20*stream,=20char=20*copybuf,=0A+static=20bool=20= ProcessKeepaliveMsg(PGconn=20*myconn,=20StreamCtl=20*stream,=20char=20= *copybuf,=0A=20=09=09=09=09=09=09=09=09int=20len,=20XLogRecPtr=20= blockpos,=20TimestampTz=20*last_status);=0A-static=20bool=20= ProcessWALDataMsg(PGconn=20*conn,=20StreamCtl=20*stream,=20char=20= *copybuf,=20int=20len,=0A+static=20bool=20ProcessWALDataMsg(PGconn=20= *myconn,=20StreamCtl=20*stream,=20char=20*copybuf,=20int=20len,=0A=20=09=09= =09=09=09=09=09=20=20XLogRecPtr=20*blockpos);=0A-static=20PGresult=20= *HandleEndOfCopyStream(PGconn=20*conn,=20StreamCtl=20*stream,=20char=20= *copybuf,=0A+static=20PGresult=20*HandleEndOfCopyStream(PGconn=20= *myconn,=20StreamCtl=20*stream,=20char=20*copybuf,=0A=20=09=09=09=09=09=09= =09=09=09=20=20=20XLogRecPtr=20blockpos,=20XLogRecPtr=20*stoppos);=0A= -static=20bool=20CheckCopyStreamStop(PGconn=20*conn,=20StreamCtl=20= *stream,=20XLogRecPtr=20blockpos);=0A+static=20bool=20= CheckCopyStreamStop(PGconn=20*myconn,=20StreamCtl=20*stream,=20= XLogRecPtr=20blockpos);=0A=20static=20long=20= CalculateCopyStreamSleeptime(TimestampTz=20now,=20int=20= standby_message_timeout,=0A=20=09=09=09=09=09=09=09=09=09=09=20= TimestampTz=20last_status);=0A=20=0A@@=20-334,7=20+334,7=20@@=20= writeTimeLineHistoryFile(StreamCtl=20*stream,=20char=20*filename,=20char=20= *content)=0A=20=20*=20Send=20a=20Standby=20Status=20Update=20message=20= to=20server.=0A=20=20*/=0A=20static=20bool=0A-sendFeedback(PGconn=20= *conn,=20XLogRecPtr=20blockpos,=20TimestampTz=20now,=20bool=20= replyRequested)=0A+sendFeedback(PGconn=20*myconn,=20XLogRecPtr=20= blockpos,=20TimestampTz=20now,=20bool=20replyRequested)=0A=20{=0A=20=09= char=09=09replybuf[1=20+=208=20+=208=20+=208=20+=208=20+=201];=0A=20=09= int=09=09=09len=20=3D=200;=0A@@=20-355,10=20+355,10=20@@=20= sendFeedback(PGconn=20*conn,=20XLogRecPtr=20blockpos,=20TimestampTz=20= now,=20bool=20replyReque=0A=20=09replybuf[len]=20=3D=20replyRequested=20= ?=201=20:=200;=20/*=20replyRequested=20*/=0A=20=09len=20+=3D=201;=0A=20=0A= -=09if=20(PQputCopyData(conn,=20replybuf,=20len)=20<=3D=200=20||=20= PQflush(conn))=0A+=09if=20(PQputCopyData(myconn,=20replybuf,=20len)=20<=3D= =200=20||=20PQflush(myconn))=0A=20=09{=0A=20=09=09pg_log_error("could=20= not=20send=20feedback=20packet:=20%s",=0A-=09=09=09=09=09=20= PQerrorMessage(conn));=0A+=09=09=09=09=09=20PQerrorMessage(myconn));=0A=20= =09=09return=20false;=0A=20=09}=0A=20=0A@@=20-372,7=20+372,7=20@@=20= sendFeedback(PGconn=20*conn,=20XLogRecPtr=20blockpos,=20TimestampTz=20= now,=20bool=20replyReque=0A=20=20*=20If=20it's=20not,=20an=20error=20= message=20is=20printed=20to=20stderr,=20and=20false=20is=20returned.=0A=20= =20*/=0A=20bool=0A-CheckServerVersionForStreaming(PGconn=20*conn)=0A= +CheckServerVersionForStreaming(PGconn=20*myconn)=0A=20{=0A=20=09int=09=09= =09minServerMajor,=0A=20=09=09=09=09maxServerMajor;=0A@@=20-386,10=20= +386,10=20@@=20CheckServerVersionForStreaming(PGconn=20*conn)=0A=20=09=20= */=0A=20=09minServerMajor=20=3D=20903;=0A=20=09maxServerMajor=20=3D=20= PG_VERSION_NUM=20/=20100;=0A-=09serverMajor=20=3D=20= PQserverVersion(conn)=20/=20100;=0A+=09serverMajor=20=3D=20= PQserverVersion(myconn)=20/=20100;=0A=20=09if=20(serverMajor=20<=20= minServerMajor)=0A=20=09{=0A-=09=09const=20char=20*serverver=20=3D=20= PQparameterStatus(conn,=20"server_version");=0A+=09=09const=20char=20= *serverver=20=3D=20PQparameterStatus(myconn,=20"server_version");=0A=20=0A= =20=09=09pg_log_error("incompatible=20server=20version=20%s;=20client=20= does=20not=20support=20streaming=20from=20server=20versions=20older=20= than=20%s",=0A=20=09=09=09=09=09=20serverver=20?=20serverver=20:=20= "'unknown'",=0A@@=20-398,7=20+398,7=20@@=20= CheckServerVersionForStreaming(PGconn=20*conn)=0A=20=09}=0A=20=09else=20= if=20(serverMajor=20>=20maxServerMajor)=0A=20=09{=0A-=09=09const=20char=20= *serverver=20=3D=20PQparameterStatus(conn,=20"server_version");=0A+=09=09= const=20char=20*serverver=20=3D=20PQparameterStatus(myconn,=20= "server_version");=0A=20=0A=20=09=09pg_log_error("incompatible=20server=20= version=20%s;=20client=20does=20not=20support=20streaming=20from=20= server=20versions=20newer=20than=20%s",=0A=20=09=09=09=09=09=20serverver=20= ?=20serverver=20:=20"'unknown'",=0A@@=20-450,7=20+450,7=20@@=20= CheckServerVersionForStreaming(PGconn=20*conn)=0A=20=20*=20Note:=20The=20= WAL=20location=20*must*=20be=20at=20a=20log=20segment=20start!=0A=20=20= */=0A=20bool=0A-ReceiveXlogStream(PGconn=20*conn,=20StreamCtl=20*stream)=0A= +ReceiveXlogStream(PGconn=20*myconn,=20StreamCtl=20*stream)=0A=20{=0A=20=09= char=09=09query[128];=0A=20=09char=09=09slotcmd[128];=0A@@=20-461,7=20= +461,7=20@@=20ReceiveXlogStream(PGconn=20*conn,=20StreamCtl=20*stream)=0A= =20=09=20*=20The=20caller=20should've=20checked=20the=20server=20version=20= already,=20but=20doesn't=20do=0A=20=09=20*=20any=20harm=20to=20check=20= it=20here=20too.=0A=20=09=20*/=0A-=09if=20= (!CheckServerVersionForStreaming(conn))=0A+=09if=20= (!CheckServerVersionForStreaming(myconn))=0A=20=09=09return=20false;=0A=20= =0A=20=09/*=0A@@=20-497,7=20+497,7=20@@=20ReceiveXlogStream(PGconn=20= *conn,=20StreamCtl=20*stream)=0A=20=09=09/*=0A=20=09=09=20*=20Get=20the=20= server=20system=20identifier=20and=20timeline,=20and=20validate=20them.=0A= =20=09=09=20*/=0A-=09=09if=20(!RunIdentifySystem(conn,=20&sysidentifier,=20= &servertli,=20NULL,=20NULL))=0A+=09=09if=20(!RunIdentifySystem(myconn,=20= &sysidentifier,=20&servertli,=20NULL,=20NULL))=0A=20=09=09{=0A=20=09=09=09= pg_free(sysidentifier);=0A=20=09=09=09return=20false;=0A@@=20-536,7=20= +536,7=20@@=20ReceiveXlogStream(PGconn=20*conn,=20StreamCtl=20*stream)=0A= =20=09=09if=20(!existsTimeLineHistoryFile(stream))=0A=20=09=09{=0A=20=09=09= =09snprintf(query,=20sizeof(query),=20"TIMELINE_HISTORY=20%u",=20= stream->timeline);=0A-=09=09=09res=20=3D=20PQexec(conn,=20query);=0A+=09=09= =09res=20=3D=20PQexec(myconn,=20query);=0A=20=09=09=09if=20= (PQresultStatus(res)=20!=3D=20PGRES_TUPLES_OK)=0A=20=09=09=09{=0A=20=09=09= =09=09/*=20FIXME:=20we=20might=20send=20it=20ok,=20but=20get=20an=20= error=20*/=0A@@=20-576,7=20+576,7=20@@=20ReceiveXlogStream(PGconn=20= *conn,=20StreamCtl=20*stream)=0A=20=09=09=09=09=20slotcmd,=0A=20=09=09=09= =09=20LSN_FORMAT_ARGS(stream->startpos),=0A=20=09=09=09=09=20= stream->timeline);=0A-=09=09res=20=3D=20PQexec(conn,=20query);=0A+=09=09= res=20=3D=20PQexec(myconn,=20query);=0A=20=09=09if=20= (PQresultStatus(res)=20!=3D=20PGRES_COPY_BOTH)=0A=20=09=09{=0A=20=09=09=09= pg_log_error("could=20not=20send=20replication=20command=20\"%s\":=20= %s",=0A@@=20-587,7=20+587,7=20@@=20ReceiveXlogStream(PGconn=20*conn,=20= StreamCtl=20*stream)=0A=20=09=09PQclear(res);=0A=20=0A=20=09=09/*=20= Stream=20the=20WAL=20*/=0A-=09=09res=20=3D=20HandleCopyStream(conn,=20= stream,=20&stoppos);=0A+=09=09res=20=3D=20HandleCopyStream(myconn,=20= stream,=20&stoppos);=0A=20=09=09if=20(res=20=3D=3D=20NULL)=0A=20=09=09=09= goto=20error;=0A=20=0A@@=20-636,7=20+636,7=20@@=20= ReceiveXlogStream(PGconn=20*conn,=20StreamCtl=20*stream)=0A=20=09=09=09}=0A= =20=0A=20=09=09=09/*=20Read=20the=20final=20result,=20which=20should=20= be=20CommandComplete.=20*/=0A-=09=09=09res=20=3D=20PQgetResult(conn);=0A= +=09=09=09res=20=3D=20PQgetResult(myconn);=0A=20=09=09=09if=20= (PQresultStatus(res)=20!=3D=20PGRES_COMMAND_OK)=0A=20=09=09=09{=0A=20=09=09= =09=09pg_log_error("unexpected=20termination=20of=20replication=20= stream:=20%s",=0A@@=20-742,7=20+742,7=20@@=20= ReadEndOfStreamingResult(PGresult=20*res,=20XLogRecPtr=20*startpos,=20= uint32=20*timeline)=0A=20=20*=20On=20any=20other=20sort=20of=20error,=20= returns=20NULL.=0A=20=20*/=0A=20static=20PGresult=20*=0A= -HandleCopyStream(PGconn=20*conn,=20StreamCtl=20*stream,=0A= +HandleCopyStream(PGconn=20*myconn,=20StreamCtl=20*stream,=0A=20=09=09=09= =09=20XLogRecPtr=20*stoppos)=0A=20{=0A=20=09char=09=20=20=20*copybuf=20=3D= =20NULL;=0A@@=20-760,7=20+760,7=20@@=20HandleCopyStream(PGconn=20*conn,=20= StreamCtl=20*stream,=0A=20=09=09/*=0A=20=09=09=20*=20Check=20if=20we=20= should=20continue=20streaming,=20or=20abort=20at=20this=20point.=0A=20=09= =09=20*/=0A-=09=09if=20(!CheckCopyStreamStop(conn,=20stream,=20= blockpos))=0A+=09=09if=20(!CheckCopyStreamStop(myconn,=20stream,=20= blockpos))=0A=20=09=09=09goto=20error;=0A=20=0A=20=09=09now=20=3D=20= feGetCurrentTimestamp();=0A@@=20-780,7=20+780,7=20@@=20= HandleCopyStream(PGconn=20*conn,=20StreamCtl=20*stream,=0A=20=09=09=09=20= *=20Send=20feedback=20so=20that=20the=20server=20sees=20the=20latest=20= WAL=20locations=0A=20=09=09=09=20*=20immediately.=0A=20=09=09=09=20*/=0A= -=09=09=09if=20(!sendFeedback(conn,=20blockpos,=20now,=20false))=0A+=09=09= =09if=20(!sendFeedback(myconn,=20blockpos,=20now,=20false))=0A=20=09=09=09= =09goto=20error;=0A=20=09=09=09last_status=20=3D=20now;=0A=20=09=09}=0A= @@=20-793,7=20+793,7=20@@=20HandleCopyStream(PGconn=20*conn,=20StreamCtl=20= *stream,=0A=20=09=09=09=09=09=09=09=09=09=09=20= stream->standby_message_timeout))=0A=20=09=09{=0A=20=09=09=09/*=20Time=20= to=20send=20feedback!=20*/=0A-=09=09=09if=20(!sendFeedback(conn,=20= blockpos,=20now,=20false))=0A+=09=09=09if=20(!sendFeedback(myconn,=20= blockpos,=20now,=20false))=0A=20=09=09=09=09goto=20error;=0A=20=09=09=09= last_status=20=3D=20now;=0A=20=09=09}=0A@@=20-808,14=20+808,14=20@@=20= HandleCopyStream(PGconn=20*conn,=20StreamCtl=20*stream,=0A=20=09=09= PQfreemem(copybuf);=0A=20=09=09copybuf=20=3D=20NULL;=0A=20=0A-=09=09r=20= =3D=20CopyStreamReceive(conn,=20sleeptime,=20stream->stop_socket,=20= ©buf);=0A+=09=09r=20=3D=20CopyStreamReceive(myconn,=20sleeptime,=20= stream->stop_socket,=20©buf);=0A=20=09=09while=20(r=20!=3D=200)=0A=20= =09=09{=0A=20=09=09=09if=20(r=20=3D=3D=20-1)=0A=20=09=09=09=09goto=20= error;=0A=20=09=09=09if=20(r=20=3D=3D=20-2)=0A=20=09=09=09{=0A-=09=09=09=09= PGresult=20=20=20*res=20=3D=20HandleEndOfCopyStream(conn,=20stream,=20= copybuf,=20blockpos,=20stoppos);=0A+=09=09=09=09PGresult=20=20=20*res=20= =3D=20HandleEndOfCopyStream(myconn,=20stream,=20copybuf,=20blockpos,=20= stoppos);=0A=20=0A=20=09=09=09=09if=20(res=20=3D=3D=20NULL)=0A=20=09=09=09= =09=09goto=20error;=0A@@=20-826,20=20+826,20=20@@=20= HandleCopyStream(PGconn=20*conn,=20StreamCtl=20*stream,=0A=20=09=09=09/*=20= Check=20the=20message=20type.=20*/=0A=20=09=09=09if=20(copybuf[0]=20=3D=3D= =20PqReplMsg_Keepalive)=0A=20=09=09=09{=0A-=09=09=09=09if=20= (!ProcessKeepaliveMsg(conn,=20stream,=20copybuf,=20r,=20blockpos,=0A+=09=09= =09=09if=20(!ProcessKeepaliveMsg(myconn,=20stream,=20copybuf,=20r,=20= blockpos,=0A=20=09=09=09=09=09=09=09=09=09=09=20&last_status))=0A=20=09=09= =09=09=09goto=20error;=0A=20=09=09=09}=0A=20=09=09=09else=20if=20= (copybuf[0]=20=3D=3D=20PqReplMsg_WALData)=0A=20=09=09=09{=0A-=09=09=09=09= if=20(!ProcessWALDataMsg(conn,=20stream,=20copybuf,=20r,=20&blockpos))=0A= +=09=09=09=09if=20(!ProcessWALDataMsg(myconn,=20stream,=20copybuf,=20r,=20= &blockpos))=0A=20=09=09=09=09=09goto=20error;=0A=20=0A=20=09=09=09=09/*=0A= =20=09=09=09=09=20*=20Check=20if=20we=20should=20continue=20streaming,=20= or=20abort=20at=20this=0A=20=09=09=09=09=20*=20point.=0A=20=09=09=09=09=20= */=0A-=09=09=09=09if=20(!CheckCopyStreamStop(conn,=20stream,=20= blockpos))=0A+=09=09=09=09if=20(!CheckCopyStreamStop(myconn,=20stream,=20= blockpos))=0A=20=09=09=09=09=09goto=20error;=0A=20=09=09=09}=0A=20=09=09=09= else=0A@@=20-857,7=20+857,7=20@@=20HandleCopyStream(PGconn=20*conn,=20= StreamCtl=20*stream,=0A=20=09=09=09=20*=20Process=20the=20received=20= data,=20and=20any=20subsequent=20data=20we=20can=20read=0A=20=09=09=09=20= *=20without=20blocking.=0A=20=09=09=09=20*/=0A-=09=09=09r=20=3D=20= CopyStreamReceive(conn,=200,=20stream->stop_socket,=20©buf);=0A+=09=09= =09r=20=3D=20CopyStreamReceive(myconn,=200,=20stream->stop_socket,=20= ©buf);=0A=20=09=09}=0A=20=09}=0A=20=0A@@=20-875,7=20+875,7=20@@=20= error:=0A=20=20*=20or=20interrupted=20by=20signal=20or=20stop_socket=20= input,=20and=20-1=20on=20an=20error.=0A=20=20*/=0A=20static=20int=0A= -CopyStreamPoll(PGconn=20*conn,=20long=20timeout_ms,=20pgsocket=20= stop_socket)=0A+CopyStreamPoll(PGconn=20*myconn,=20long=20timeout_ms,=20= pgsocket=20stop_socket)=0A=20{=0A=20=09int=09=09=09ret;=0A=20=09fd_set=09= =09input_mask;=0A@@=20-884,10=20+884,10=20@@=20CopyStreamPoll(PGconn=20= *conn,=20long=20timeout_ms,=20pgsocket=20stop_socket)=0A=20=09struct=20= timeval=20timeout;=0A=20=09struct=20timeval=20*timeoutptr;=0A=20=0A-=09= connsocket=20=3D=20PQsocket(conn);=0A+=09connsocket=20=3D=20= PQsocket(myconn);=0A=20=09if=20(connsocket=20<=200)=0A=20=09{=0A-=09=09= pg_log_error("invalid=20socket:=20%s",=20PQerrorMessage(conn));=0A+=09=09= pg_log_error("invalid=20socket:=20%s",=20PQerrorMessage(myconn));=0A=20=09= =09return=20-1;=0A=20=09}=0A=20=0A@@=20-937,7=20+937,7=20@@=20= CopyStreamPoll(PGconn=20*conn,=20long=20timeout_ms,=20pgsocket=20= stop_socket)=0A=20=20*=20-1=20on=20error.=20-2=20if=20the=20server=20= ended=20the=20COPY.=0A=20=20*/=0A=20static=20int=0A= -CopyStreamReceive(PGconn=20*conn,=20long=20timeout,=20pgsocket=20= stop_socket,=0A+CopyStreamReceive(PGconn=20*myconn,=20long=20timeout,=20= pgsocket=20stop_socket,=0A=20=09=09=09=09=20=20char=20**buffer)=0A=20{=0A= =20=09char=09=20=20=20*copybuf=20=3D=20NULL;=0A@@=20-947,7=20+947,7=20@@=20= CopyStreamReceive(PGconn=20*conn,=20long=20timeout,=20pgsocket=20= stop_socket,=0A=20=09Assert(*buffer=20=3D=3D=20NULL);=0A=20=0A=20=09/*=20= Try=20to=20receive=20a=20CopyData=20message=20*/=0A-=09rawlen=20=3D=20= PQgetCopyData(conn,=20©buf,=201);=0A+=09rawlen=20=3D=20= PQgetCopyData(myconn,=20©buf,=201);=0A=20=09if=20(rawlen=20=3D=3D=20= 0)=0A=20=09{=0A=20=09=09int=09=09=09ret;=0A@@=20-957,20=20+957,20=20@@=20= CopyStreamReceive(PGconn=20*conn,=20long=20timeout,=20pgsocket=20= stop_socket,=0A=20=09=09=20*=20the=20specified=20timeout,=20so=20that=20= we=20can=20ping=20the=20server.=20=20Also=20stop=0A=20=09=09=20*=20= waiting=20if=20input=20appears=20on=20stop_socket.=0A=20=09=09=20*/=0A-=09= =09ret=20=3D=20CopyStreamPoll(conn,=20timeout,=20stop_socket);=0A+=09=09= ret=20=3D=20CopyStreamPoll(myconn,=20timeout,=20stop_socket);=0A=20=09=09= if=20(ret=20<=3D=200)=0A=20=09=09=09return=20ret;=0A=20=0A=20=09=09/*=20= Now=20there=20is=20actually=20data=20on=20the=20socket=20*/=0A-=09=09if=20= (PQconsumeInput(conn)=20=3D=3D=200)=0A+=09=09if=20= (PQconsumeInput(myconn)=20=3D=3D=200)=0A=20=09=09{=0A=20=09=09=09= pg_log_error("could=20not=20receive=20data=20from=20WAL=20stream:=20%s",=0A= -=09=09=09=09=09=09=20PQerrorMessage(conn));=0A+=09=09=09=09=09=09=20= PQerrorMessage(myconn));=0A=20=09=09=09return=20-1;=0A=20=09=09}=0A=20=0A= =20=09=09/*=20Now=20that=20we've=20consumed=20some=20input,=20try=20= again=20*/=0A-=09=09rawlen=20=3D=20PQgetCopyData(conn,=20©buf,=201);=0A= +=09=09rawlen=20=3D=20PQgetCopyData(myconn,=20©buf,=201);=0A=20=09=09= if=20(rawlen=20=3D=3D=200)=0A=20=09=09=09return=200;=0A=20=09}=0A@@=20= -978,7=20+978,7=20@@=20CopyStreamReceive(PGconn=20*conn,=20long=20= timeout,=20pgsocket=20stop_socket,=0A=20=09=09return=20-2;=0A=20=09if=20= (rawlen=20=3D=3D=20-2)=0A=20=09{=0A-=09=09pg_log_error("could=20not=20= read=20COPY=20data:=20%s",=20PQerrorMessage(conn));=0A+=09=09= pg_log_error("could=20not=20read=20COPY=20data:=20%s",=20= PQerrorMessage(myconn));=0A=20=09=09return=20-1;=0A=20=09}=0A=20=0A@@=20= -991,7=20+991,7=20@@=20CopyStreamReceive(PGconn=20*conn,=20long=20= timeout,=20pgsocket=20stop_socket,=0A=20=20*=20Process=20the=20keepalive=20= message.=0A=20=20*/=0A=20static=20bool=0A-ProcessKeepaliveMsg(PGconn=20= *conn,=20StreamCtl=20*stream,=20char=20*copybuf,=20int=20len,=0A= +ProcessKeepaliveMsg(PGconn=20*myconn,=20StreamCtl=20*stream,=20char=20= *copybuf,=20int=20len,=0A=20=09=09=09=09=09XLogRecPtr=20blockpos,=20= TimestampTz=20*last_status)=0A=20{=0A=20=09int=09=09=09pos;=0A@@=20= -1033,7=20+1033,7=20@@=20ProcessKeepaliveMsg(PGconn=20*conn,=20StreamCtl=20= *stream,=20char=20*copybuf,=20int=20len,=0A=20=09=09}=0A=20=0A=20=09=09= now=20=3D=20feGetCurrentTimestamp();=0A-=09=09if=20(!sendFeedback(conn,=20= blockpos,=20now,=20false))=0A+=09=09if=20(!sendFeedback(myconn,=20= blockpos,=20now,=20false))=0A=20=09=09=09return=20false;=0A=20=09=09= *last_status=20=3D=20now;=0A=20=09}=0A@@=20-1045,7=20+1045,7=20@@=20= ProcessKeepaliveMsg(PGconn=20*conn,=20StreamCtl=20*stream,=20char=20= *copybuf,=20int=20len,=0A=20=20*=20Process=20WALData=20message.=0A=20=20= */=0A=20static=20bool=0A-ProcessWALDataMsg(PGconn=20*conn,=20StreamCtl=20= *stream,=20char=20*copybuf,=20int=20len,=0A+ProcessWALDataMsg(PGconn=20= *myconn,=20StreamCtl=20*stream,=20char=20*copybuf,=20int=20len,=0A=20=09=09= =09=09=20=20XLogRecPtr=20*blockpos)=0A=20{=0A=20=09int=09=09=09xlogoff;=0A= @@=20-1156,10=20+1156,10=20@@=20ProcessWALDataMsg(PGconn=20*conn,=20= StreamCtl=20*stream,=20char=20*copybuf,=20int=20len,=0A=20=0A=20=09=09=09= if=20(still_sending=20&&=20stream->stream_stop(*blockpos,=20= stream->timeline,=20true))=0A=20=09=09=09{=0A-=09=09=09=09if=20= (PQputCopyEnd(conn,=20NULL)=20<=3D=200=20||=20PQflush(conn))=0A+=09=09=09= =09if=20(PQputCopyEnd(myconn,=20NULL)=20<=3D=200=20||=20PQflush(myconn))=0A= =20=09=09=09=09{=0A=20=09=09=09=09=09pg_log_error("could=20not=20send=20= copy-end=20packet:=20%s",=0A-=09=09=09=09=09=09=09=09=20= PQerrorMessage(conn));=0A+=09=09=09=09=09=09=09=09=20= PQerrorMessage(myconn));=0A=20=09=09=09=09=09return=20false;=0A=20=09=09=09= =09}=0A=20=09=09=09=09still_sending=20=3D=20false;=0A@@=20-1176,10=20= +1176,10=20@@=20ProcessWALDataMsg(PGconn=20*conn,=20StreamCtl=20*stream,=20= char=20*copybuf,=20int=20len,=0A=20=20*=20Handle=20end=20of=20the=20copy=20= stream.=0A=20=20*/=0A=20static=20PGresult=20*=0A= -HandleEndOfCopyStream(PGconn=20*conn,=20StreamCtl=20*stream,=20char=20= *copybuf,=0A+HandleEndOfCopyStream(PGconn=20*myconn,=20StreamCtl=20= *stream,=20char=20*copybuf,=0A=20=09=09=09=09=09=20=20XLogRecPtr=20= blockpos,=20XLogRecPtr=20*stoppos)=0A=20{=0A-=09PGresult=20=20=20*res=20= =3D=20PQgetResult(conn);=0A+=09PGresult=20=20=20*res=20=3D=20= PQgetResult(myconn);=0A=20=0A=20=09/*=0A=20=09=20*=20The=20server=20= closed=20its=20end=20of=20the=20copy=20stream.=20=20If=20we=20haven't=20= closed=0A@@=20-1196,14=20+1196,14=20@@=20HandleEndOfCopyStream(PGconn=20= *conn,=20StreamCtl=20*stream,=20char=20*copybuf,=0A=20=09=09}=0A=20=09=09= if=20(PQresultStatus(res)=20=3D=3D=20PGRES_COPY_IN)=0A=20=09=09{=0A-=09=09= =09if=20(PQputCopyEnd(conn,=20NULL)=20<=3D=200=20||=20PQflush(conn))=0A+=09= =09=09if=20(PQputCopyEnd(myconn,=20NULL)=20<=3D=200=20||=20= PQflush(myconn))=0A=20=09=09=09{=0A=20=09=09=09=09pg_log_error("could=20= not=20send=20copy-end=20packet:=20%s",=0A-=09=09=09=09=09=09=09=20= PQerrorMessage(conn));=0A+=09=09=09=09=09=09=09=20= PQerrorMessage(myconn));=0A=20=09=09=09=09PQclear(res);=0A=20=09=09=09=09= return=20NULL;=0A=20=09=09=09}=0A-=09=09=09res=20=3D=20= PQgetResult(conn);=0A+=09=09=09res=20=3D=20PQgetResult(myconn);=0A=20=09=09= }=0A=20=09=09still_sending=20=3D=20false;=0A=20=09}=0A@@=20-1215,7=20= +1215,7=20@@=20HandleEndOfCopyStream(PGconn=20*conn,=20StreamCtl=20= *stream,=20char=20*copybuf,=0A=20=20*=20Check=20if=20we=20should=20= continue=20streaming,=20or=20abort=20at=20this=20point.=0A=20=20*/=0A=20= static=20bool=0A-CheckCopyStreamStop(PGconn=20*conn,=20StreamCtl=20= *stream,=20XLogRecPtr=20blockpos)=0A+CheckCopyStreamStop(PGconn=20= *myconn,=20StreamCtl=20*stream,=20XLogRecPtr=20blockpos)=0A=20{=0A=20=09= if=20(still_sending=20&&=20stream->stream_stop(blockpos,=20= stream->timeline,=20false))=0A=20=09{=0A@@=20-1224,10=20+1224,10=20@@=20= CheckCopyStreamStop(PGconn=20*conn,=20StreamCtl=20*stream,=20XLogRecPtr=20= blockpos)=0A=20=09=09=09/*=20Potential=20error=20message=20is=20written=20= by=20close_walfile=20*/=0A=20=09=09=09return=20false;=0A=20=09=09}=0A-=09= =09if=20(PQputCopyEnd(conn,=20NULL)=20<=3D=200=20||=20PQflush(conn))=0A+=09= =09if=20(PQputCopyEnd(myconn,=20NULL)=20<=3D=200=20||=20PQflush(myconn))=0A= =20=09=09{=0A=20=09=09=09pg_log_error("could=20not=20send=20copy-end=20= packet:=20%s",=0A-=09=09=09=09=09=09=20PQerrorMessage(conn));=0A+=09=09=09= =09=09=09=20PQerrorMessage(myconn));=0A=20=09=09=09return=20false;=0A=20=09= =09}=0A=20=09=09still_sending=20=3D=20false;=0Adiff=20--git=20= a/src/bin/pg_basebackup/streamutil.c=20= b/src/bin/pg_basebackup/streamutil.c=0Aindex=2076abdfa2ae6..31da309d587=20= 100644=0A---=20a/src/bin/pg_basebackup/streamutil.c=0A+++=20= b/src/bin/pg_basebackup/streamutil.c=0A@@=20-31,7=20+31,7=20@@=0A=20=0A=20= int=09=09=09WalSegSz;=0A=20=0A-static=20bool=20= RetrieveDataDirCreatePerm(PGconn=20*conn);=0A+static=20bool=20= RetrieveDataDirCreatePerm(PGconn=20*myconn);=0A=20=0A=20/*=20SHOW=20= command=20for=20replication=20connection=20was=20introduced=20in=20= version=2010=20*/=0A=20#define=20MINIMUM_VERSION_FOR_SHOW_CMD=20100000=0A= @@=20-273,7=20+273,7=20@@=20GetConnection(void)=0A=20=20*=20since=20= ControlFile=20is=20not=20accessible=20here.=0A=20=20*/=0A=20bool=0A= -RetrieveWalSegSize(PGconn=20*conn)=0A+RetrieveWalSegSize(PGconn=20= *myconn)=0A=20{=0A=20=09PGresult=20=20=20*res;=0A=20=09char=09=09= xlog_unit[3];=0A@@=20-281,20=20+281,20=20@@=20RetrieveWalSegSize(PGconn=20= *conn)=0A=20=09=09=09=09multiplier=20=3D=201;=0A=20=0A=20=09/*=20check=20= connection=20existence=20*/=0A-=09Assert(conn=20!=3D=20NULL);=0A+=09= Assert(myconn=20!=3D=20NULL);=0A=20=0A=20=09/*=20for=20previous=20= versions=20set=20the=20default=20xlog=20seg=20size=20*/=0A-=09if=20= (PQserverVersion(conn)=20<=20MINIMUM_VERSION_FOR_SHOW_CMD)=0A+=09if=20= (PQserverVersion(myconn)=20<=20MINIMUM_VERSION_FOR_SHOW_CMD)=0A=20=09{=0A= =20=09=09WalSegSz=20=3D=20DEFAULT_XLOG_SEG_SIZE;=0A=20=09=09return=20= true;=0A=20=09}=0A=20=0A-=09res=20=3D=20PQexec(conn,=20"SHOW=20= wal_segment_size");=0A+=09res=20=3D=20PQexec(myconn,=20"SHOW=20= wal_segment_size");=0A=20=09if=20(PQresultStatus(res)=20!=3D=20= PGRES_TUPLES_OK)=0A=20=09{=0A=20=09=09pg_log_error("could=20not=20send=20= replication=20command=20\"%s\":=20%s",=0A-=09=09=09=09=09=20"SHOW=20= wal_segment_size",=20PQerrorMessage(conn));=0A+=09=09=09=09=09=20"SHOW=20= wal_segment_size",=20PQerrorMessage(myconn));=0A=20=0A=20=09=09= PQclear(res);=0A=20=09=09return=20false;=0A@@=20-352,23=20+352,23=20@@=20= RetrieveWalSegSize(PGconn=20*conn)=0A=20=20*=20on=20the=20data=20= directory.=0A=20=20*/=0A=20static=20bool=0A= -RetrieveDataDirCreatePerm(PGconn=20*conn)=0A= +RetrieveDataDirCreatePerm(PGconn=20*myconn)=0A=20{=0A=20=09PGresult=20=20= =20*res;=0A=20=09int=09=09=09data_directory_mode;=0A=20=0A=20=09/*=20= check=20connection=20existence=20*/=0A-=09Assert(conn=20!=3D=20NULL);=0A= +=09Assert(myconn=20!=3D=20NULL);=0A=20=0A=20=09/*=20for=20previous=20= versions=20leave=20the=20default=20group=20access=20*/=0A-=09if=20= (PQserverVersion(conn)=20<=20MINIMUM_VERSION_FOR_GROUP_ACCESS)=0A+=09if=20= (PQserverVersion(myconn)=20<=20MINIMUM_VERSION_FOR_GROUP_ACCESS)=0A=20=09= =09return=20true;=0A=20=0A-=09res=20=3D=20PQexec(conn,=20"SHOW=20= data_directory_mode");=0A+=09res=20=3D=20PQexec(myconn,=20"SHOW=20= data_directory_mode");=0A=20=09if=20(PQresultStatus(res)=20!=3D=20= PGRES_TUPLES_OK)=0A=20=09{=0A=20=09=09pg_log_error("could=20not=20send=20= replication=20command=20\"%s\":=20%s",=0A-=09=09=09=09=09=20"SHOW=20= data_directory_mode",=20PQerrorMessage(conn));=0A+=09=09=09=09=09=20= "SHOW=20data_directory_mode",=20PQerrorMessage(myconn));=0A=20=0A=20=09=09= PQclear(res);=0A=20=09=09return=20false;=0A@@=20-406,7=20+406,7=20@@=20= RetrieveDataDirCreatePerm(PGconn=20*conn)=0A=20=20*=20-=20Database=20= name=20(NULL=20in=20servers=20prior=20to=209.4)=0A=20=20*/=0A=20bool=0A= -RunIdentifySystem(PGconn=20*conn,=20char=20**sysid,=20TimeLineID=20= *starttli,=0A+RunIdentifySystem(PGconn=20*myconn,=20char=20**sysid,=20= TimeLineID=20*starttli,=0A=20=09=09=09=09=20=20XLogRecPtr=20*startpos,=20= char=20**db_name)=0A=20{=0A=20=09PGresult=20=20=20*res;=0A@@=20-414,13=20= +414,13=20@@=20RunIdentifySystem(PGconn=20*conn,=20char=20**sysid,=20= TimeLineID=20*starttli,=0A=20=09=09=09=09lo;=0A=20=0A=20=09/*=20Check=20= connection=20existence=20*/=0A-=09Assert(conn=20!=3D=20NULL);=0A+=09= Assert(myconn=20!=3D=20NULL);=0A=20=0A-=09res=20=3D=20PQexec(conn,=20= "IDENTIFY_SYSTEM");=0A+=09res=20=3D=20PQexec(myconn,=20= "IDENTIFY_SYSTEM");=0A=20=09if=20(PQresultStatus(res)=20!=3D=20= PGRES_TUPLES_OK)=0A=20=09{=0A=20=09=09pg_log_error("could=20not=20send=20= replication=20command=20\"%s\":=20%s",=0A-=09=09=09=09=09=20= "IDENTIFY_SYSTEM",=20PQerrorMessage(conn));=0A+=09=09=09=09=09=20= "IDENTIFY_SYSTEM",=20PQerrorMessage(myconn));=0A=20=0A=20=09=09= PQclear(res);=0A=20=09=09return=20false;=0A@@=20-460,7=20+460,7=20@@=20= RunIdentifySystem(PGconn=20*conn,=20char=20**sysid,=20TimeLineID=20= *starttli,=0A=20=09if=20(db_name=20!=3D=20NULL)=0A=20=09{=0A=20=09=09= *db_name=20=3D=20NULL;=0A-=09=09if=20(PQserverVersion(conn)=20>=3D=20= 90400)=0A+=09=09if=20(PQserverVersion(myconn)=20>=3D=2090400)=0A=20=09=09= {=0A=20=09=09=09if=20(PQnfields(res)=20<=204)=0A=20=09=09=09{=0A@@=20= -487,7=20+487,7=20@@=20RunIdentifySystem(PGconn=20*conn,=20char=20= **sysid,=20TimeLineID=20*starttli,=0A=20=20*=20Returns=20false=20on=20= failure,=20and=20true=20otherwise.=0A=20=20*/=0A=20bool=0A= -GetSlotInformation(PGconn=20*conn,=20const=20char=20*slot_name,=0A= +GetSlotInformation(PGconn=20*myconn,=20const=20char=20*slot_name,=0A=20=09= =09=09=09=20=20=20XLogRecPtr=20*restart_lsn,=20TimeLineID=20= *restart_tli)=0A=20{=0A=20=09PGresult=20=20=20*res;=0A@@=20-502,13=20= +502,13=20@@=20GetSlotInformation(PGconn=20*conn,=20const=20char=20= *slot_name,=0A=20=0A=20=09query=20=3D=20createPQExpBuffer();=0A=20=09= appendPQExpBuffer(query,=20"READ_REPLICATION_SLOT=20%s",=20slot_name);=0A= -=09res=20=3D=20PQexec(conn,=20query->data);=0A+=09res=20=3D=20= PQexec(myconn,=20query->data);=0A=20=09destroyPQExpBuffer(query);=0A=20=0A= =20=09if=20(PQresultStatus(res)=20!=3D=20PGRES_TUPLES_OK)=0A=20=09{=0A=20= =09=09pg_log_error("could=20not=20send=20replication=20command=20\"%s\":=20= %s",=0A-=09=09=09=09=09=20"READ_REPLICATION_SLOT",=20= PQerrorMessage(conn));=0A+=09=09=09=09=09=20"READ_REPLICATION_SLOT",=20= PQerrorMessage(myconn));=0A=20=09=09PQclear(res);=0A=20=09=09return=20= false;=0A=20=09}=0A@@=20-581,13=20+581,13=20@@=20= GetSlotInformation(PGconn=20*conn,=20const=20char=20*slot_name,=0A=20=20= *=20returns=20true=20in=20case=20of=20success.=0A=20=20*/=0A=20bool=0A= -CreateReplicationSlot(PGconn=20*conn,=20const=20char=20*slot_name,=20= const=20char=20*plugin,=0A+CreateReplicationSlot(PGconn=20*myconn,=20= const=20char=20*slot_name,=20const=20char=20*plugin,=0A=20=09=09=09=09=09= =20=20bool=20is_temporary,=20bool=20is_physical,=20bool=20reserve_wal,=0A= =20=09=09=09=09=09=20=20bool=20slot_exists_ok,=20bool=20two_phase,=20= bool=20failover)=0A=20{=0A=20=09PQExpBuffer=20query;=0A=20=09PGresult=20=20= =20*res;=0A-=09bool=09=09use_new_option_syntax=20=3D=20= (PQserverVersion(conn)=20>=3D=20150000);=0A+=09bool=09=09= use_new_option_syntax=20=3D=20(PQserverVersion(myconn)=20>=3D=20150000);=0A= =20=0A=20=09query=20=3D=20createPQExpBuffer();=0A=20=0A@@=20-617,15=20= +617,15=20@@=20CreateReplicationSlot(PGconn=20*conn,=20const=20char=20= *slot_name,=20const=20char=20*plugin,=0A=20=09}=0A=20=09else=0A=20=09{=0A= -=09=09if=20(failover=20&&=20PQserverVersion(conn)=20>=3D=20170000)=0A+=09= =09if=20(failover=20&&=20PQserverVersion(myconn)=20>=3D=20170000)=0A=20=09= =09=09AppendPlainCommandOption(query,=20use_new_option_syntax,=0A=20=09=09= =09=09=09=09=09=09=09=20"FAILOVER");=0A=20=0A-=09=09if=20(two_phase=20&&=20= PQserverVersion(conn)=20>=3D=20150000)=0A+=09=09if=20(two_phase=20&&=20= PQserverVersion(myconn)=20>=3D=20150000)=0A=20=09=09=09= AppendPlainCommandOption(query,=20use_new_option_syntax,=0A=20=09=09=09=09= =09=09=09=09=09=20"TWO_PHASE");=0A=20=0A-=09=09if=20= (PQserverVersion(conn)=20>=3D=20100000)=0A+=09=09if=20= (PQserverVersion(myconn)=20>=3D=20100000)=0A=20=09=09{=0A=20=09=09=09/*=20= pg_recvlogical=20doesn't=20use=20an=20exported=20snapshot,=20so=20= suppress=20*/=0A=20=09=09=09if=20(use_new_option_syntax)=0A@@=20-649,7=20= +649,7=20@@=20CreateReplicationSlot(PGconn=20*conn,=20const=20char=20= *slot_name,=20const=20char=20*plugin,=0A=20=09}=0A=20=0A=20=09/*=20Now=20= run=20the=20query=20*/=0A-=09res=20=3D=20PQexec(conn,=20query->data);=0A= +=09res=20=3D=20PQexec(myconn,=20query->data);=0A=20=09if=20= (PQresultStatus(res)=20!=3D=20PGRES_TUPLES_OK)=0A=20=09{=0A=20=09=09= const=20char=20*sqlstate=20=3D=20PQresultErrorField(res,=20= PG_DIAG_SQLSTATE);=0A@@=20-665,7=20+665,7=20@@=20= CreateReplicationSlot(PGconn=20*conn,=20const=20char=20*slot_name,=20= const=20char=20*plugin,=0A=20=09=09else=0A=20=09=09{=0A=20=09=09=09= pg_log_error("could=20not=20send=20replication=20command=20\"%s\":=20= %s",=0A-=09=09=09=09=09=09=20query->data,=20PQerrorMessage(conn));=0A+=09= =09=09=09=09=09=20query->data,=20PQerrorMessage(myconn));=0A=20=0A=20=09=09= =09destroyPQExpBuffer(query);=0A=20=09=09=09PQclear(res);=0A@@=20-694,7=20= +694,7=20@@=20CreateReplicationSlot(PGconn=20*conn,=20const=20char=20= *slot_name,=20const=20char=20*plugin,=0A=20=20*=20returns=20true=20in=20= case=20of=20success.=0A=20=20*/=0A=20bool=0A-DropReplicationSlot(PGconn=20= *conn,=20const=20char=20*slot_name)=0A+DropReplicationSlot(PGconn=20= *myconn,=20const=20char=20*slot_name)=0A=20{=0A=20=09PQExpBuffer=20= query;=0A=20=09PGresult=20=20=20*res;=0A@@=20-706,11=20+706,11=20@@=20= DropReplicationSlot(PGconn=20*conn,=20const=20char=20*slot_name)=0A=20=09= /*=20Build=20query=20*/=0A=20=09appendPQExpBuffer(query,=20= "DROP_REPLICATION_SLOT=20\"%s\"",=0A=20=09=09=09=09=09=20=20slot_name);=0A= -=09res=20=3D=20PQexec(conn,=20query->data);=0A+=09res=20=3D=20= PQexec(myconn,=20query->data);=0A=20=09if=20(PQresultStatus(res)=20!=3D=20= PGRES_COMMAND_OK)=0A=20=09{=0A=20=09=09pg_log_error("could=20not=20send=20= replication=20command=20\"%s\":=20%s",=0A-=09=09=09=09=09=20query->data,=20= PQerrorMessage(conn));=0A+=09=09=09=09=09=20query->data,=20= PQerrorMessage(myconn));=0A=20=0A=20=09=09destroyPQExpBuffer(query);=0A=20= =09=09PQclear(res);=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0012-cleanup-avoid-local-variables-shadowed-by-globals.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0012-cleanup-avoid-local-variables-shadowed-by-globals.patch" Content-Transfer-Encoding: quoted-printable =46rom=204e713ff4b301014795f3ef552c37af373358def4=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Wed,=203=20Dec=202025=2007:40:26=20+0800=0ASubject:=20[PATCH=20= v6=2012/13]=20cleanup:=20avoid=20local=20variables=20shadowed=20by=20= globals=0A=20in=20ecpg.header=0A=0AThis=20commit=20renames=20local=20= variables=20in=20ecpg.header=20that=20were=20shadowed=20by=0Aglobal=20= identifiers=20of=20the=20same=20names.=20The=20updated=20local=20names=20= ensure=20the=0Aidentifiers=20remain=20distinct=20and=20unambiguous=20= within=20the=20file.=0A=0AAuthor:=20Chao=20Li=20=0A= Discussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/interfaces/ecpg/preproc/ecpg.header=20|=20= 12=20++++++------=0A=201=20file=20changed,=206=20insertions(+),=206=20= deletions(-)=0A=0Adiff=20--git=20= a/src/interfaces/ecpg/preproc/ecpg.header=20= b/src/interfaces/ecpg/preproc/ecpg.header=0Aindex=20= dde69a39695..a58dda32f48=20100644=0A---=20= a/src/interfaces/ecpg/preproc/ecpg.header=0A+++=20= b/src/interfaces/ecpg/preproc/ecpg.header=0A@@=20-178,7=20+178,7=20@@=20= create_questionmarks(const=20char=20*name,=20bool=20array)=0A=20}=0A=20=0A= =20static=20char=20*=0A-adjust_outofscope_cursor_vars(struct=20cursor=20= *cur)=0A+adjust_outofscope_cursor_vars(struct=20cursor=20*pcur)=0A=20{=0A= =20=09/*=0A=20=09=20*=20Informix=20accepts=20DECLARE=20with=20variables=20= that=20are=20out=20of=20scope=20when=20OPEN=0A@@=20-203,7=20+203,7=20@@=20= adjust_outofscope_cursor_vars(struct=20cursor=20*cur)=0A=20=09=09struct=20= variable=20*newvar,=0A=20=09=09=09=09=20=20=20*newind;=0A=20=0A-=09=09= list=20=3D=20(insert=20?=20cur->argsinsert=20:=20cur->argsresult);=0A+=09= =09list=20=3D=20(insert=20?=20pcur->argsinsert=20:=20pcur->argsresult);=0A= =20=0A=20=09=09for=20(ptr=20=3D=20list;=20ptr=20!=3D=20NULL;=20ptr=20=3D=20= ptr->next)=0A=20=09=09{=0A@@=20-434,9=20+434,9=20@@=20= adjust_outofscope_cursor_vars(struct=20cursor=20*cur)=0A=20=09=09}=0A=20=0A= =20=09=09if=20(insert)=0A-=09=09=09cur->argsinsert_oos=20=3D=20newlist;=0A= +=09=09=09pcur->argsinsert_oos=20=3D=20newlist;=0A=20=09=09else=0A-=09=09= =09cur->argsresult_oos=20=3D=20newlist;=0A+=09=09=09pcur->argsresult_oos=20= =3D=20newlist;=0A=20=09}=0A=20=0A=20=09return=20result;=0A@@=20-490,7=20= +490,7=20@@=20static=20void=0A=20add_typedef(const=20char=20*name,=20= const=20char=20*dimension,=20const=20char=20*length,=0A=20=09=09=09enum=20= ECPGttype=20type_enum,=0A=20=09=09=09const=20char=20*type_dimension,=20= const=20char=20*type_index,=0A-=09=09=09int=20initializer,=20int=20= array)=0A+=09=09=09int=20initial_value,=20int=20array)=0A=20{=0A=20=09/*=20= add=20entry=20to=20list=20*/=0A=20=09struct=20typedefs=20*ptr,=0A@@=20= -498,7=20+498,7=20@@=20add_typedef(const=20char=20*name,=20const=20char=20= *dimension,=20const=20char=20*length,=0A=20=0A=20=09if=20((type_enum=20= =3D=3D=20ECPGt_struct=20||=0A=20=09=09=20type_enum=20=3D=3D=20= ECPGt_union)=20&&=0A-=09=09initializer=20=3D=3D=201)=0A+=09=09= initial_value=20=3D=3D=201)=0A=20=09=09mmerror(PARSE_ERROR,=20ET_ERROR,=20= "initializer=20not=20allowed=20in=20type=20definition");=0A=20=09else=20= if=20(INFORMIX_MODE=20&&=20strcmp(name,=20"string")=20=3D=3D=200)=0A=20=09= =09mmerror(PARSE_ERROR,=20ET_ERROR,=20"type=20name=20\"string\"=20is=20= reserved=20in=20Informix=20mode");=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A= =0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Disposition: attachment; filename=v6-0013-cleanup-avoid-local-variables-shadowed-by-globals.patch Content-Type: application/octet-stream; x-unix-mode=0644; name="v6-0013-cleanup-avoid-local-variables-shadowed-by-globals.patch" Content-Transfer-Encoding: quoted-printable =46rom=20043ede43b9b8744421e6158df71550c0ee7d9f2f=20Mon=20Sep=2017=20= 00:00:00=202001=0AFrom:=20"Chao=20Li=20(Evan)"=20=0A= Date:=20Wed,=203=20Dec=202025=2008:44:46=20+0800=0ASubject:=20[PATCH=20= v6=2013/13]=20cleanup:=20avoid=20local=20variables=20shadowed=20by=20= globals=0A=20across=20time-related=20modules=0A=0AThis=20commit=20= renames=20several=20local=20variables=20in=20date/time=20and=20timezone=0A= code=20that=20were=20shadowed=20by=20global=20identifiers=20of=20the=20= same=20names.=20The=0Aupdated=20local=20identifiers=20ensure=20clearer=20= separation=20of=20scope=20throughout=0Athe=20affected=20modules.=0A=0AA=20= few=20additional=20shadowing=20fixes=20in=20the=20same=20code=20areas=20= are=20included=20as=0Awell.=20These=20are=20unrelated=20to=20the=20conn=20= renaming=20but=20occur=20in=20the=20same=0Afiles,=20so=20they=20are=20= bundled=20here=20to=20keep=20the=20commit=20self-contained.=0A=0AAuthor:=20= Chao=20Li=20=0ADiscussion:=20= https://postgr.es/m/CAEoWx2kQ2x5gMaj8tHLJ3=3DjfC+p5YXHkJyHrDTiQw2nn2FJTmQ@= mail.gmail.com=0A---=0A=20src/backend/utils/adt/date.c=20=20=20=20=20=20=20= |=2020=20+++----=0A=20src/backend/utils/adt/datetime.c=20=20=20|=2020=20= +++----=0A=20src/backend/utils/adt/formatting.c=20|=20=208=20+--=0A=20= src/backend/utils/adt/timestamp.c=20=20|=2092=20= +++++++++++++++---------------=0A=20src/bin/initdb/findtimezone.c=20=20=20= =20=20=20|=2038=20++++++------=0A=20src/timezone/pgtz.c=20=20=20=20=20=20= =20=20=20=20=20=20=20=20=20=20|=2016=20+++---=0A=206=20files=20changed,=20= 97=20insertions(+),=2097=20deletions(-)=0A=0Adiff=20--git=20= a/src/backend/utils/adt/date.c=20b/src/backend/utils/adt/date.c=0Aindex=20= 621b9175c12..6599774800e=20100644=0A---=20a/src/backend/utils/adt/date.c=0A= +++=20b/src/backend/utils/adt/date.c=0A@@=20-570,16=20+570,16=20@@=20= Datum=0A=20date_pli(PG_FUNCTION_ARGS)=0A=20{=0A=20=09DateADT=09=09= dateVal=20=3D=20PG_GETARG_DATEADT(0);=0A-=09int32=09=09days=20=3D=20= PG_GETARG_INT32(1);=0A+=09int32=09=09dayVal=20=3D=20PG_GETARG_INT32(1);=0A= =20=09DateADT=09=09result;=0A=20=0A=20=09if=20(DATE_NOT_FINITE(dateVal))=0A= =20=09=09PG_RETURN_DATEADT(dateVal);=20/*=20can't=20change=20infinity=20= */=0A=20=0A-=09result=20=3D=20dateVal=20+=20days;=0A+=09result=20=3D=20= dateVal=20+=20dayVal;=0A=20=0A=20=09/*=20Check=20for=20integer=20= overflow=20and=20out-of-allowed-range=20*/=0A-=09if=20((days=20>=3D=200=20= ?=20(result=20<=20dateVal)=20:=20(result=20>=20dateVal))=20||=0A+=09if=20= ((dayVal=20>=3D=200=20?=20(result=20<=20dateVal)=20:=20(result=20>=20= dateVal))=20||=0A=20=09=09!IS_VALID_DATE(result))=0A=20=09=09= ereport(ERROR,=0A=20=09=09=09=09= (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),=0A@@=20-594,16=20+594,16=20= @@=20Datum=0A=20date_mii(PG_FUNCTION_ARGS)=0A=20{=0A=20=09DateADT=09=09= dateVal=20=3D=20PG_GETARG_DATEADT(0);=0A-=09int32=09=09days=20=3D=20= PG_GETARG_INT32(1);=0A+=09int32=09=09dayVal=20=3D=20PG_GETARG_INT32(1);=0A= =20=09DateADT=09=09result;=0A=20=0A=20=09if=20(DATE_NOT_FINITE(dateVal))=0A= =20=09=09PG_RETURN_DATEADT(dateVal);=20/*=20can't=20change=20infinity=20= */=0A=20=0A-=09result=20=3D=20dateVal=20-=20days;=0A+=09result=20=3D=20= dateVal=20-=20dayVal;=0A=20=0A=20=09/*=20Check=20for=20integer=20= overflow=20and=20out-of-allowed-range=20*/=0A-=09if=20((days=20>=3D=200=20= ?=20(result=20>=20dateVal)=20:=20(result=20<=20dateVal))=20||=0A+=09if=20= ((dayVal=20>=3D=200=20?=20(result=20>=20dateVal)=20:=20(result=20<=20= dateVal))=20||=0A=20=09=09!IS_VALID_DATE(result))=0A=20=09=09= ereport(ERROR,=0A=20=09=09=09=09= (errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),=0A@@=20-3159,7=20+3159,7=20= @@=20timetz_zone(PG_FUNCTION_ARGS)=0A=20=09TimeTzADT=20=20*t=20=3D=20= PG_GETARG_TIMETZADT_P(1);=0A=20=09TimeTzADT=20=20*result;=0A=20=09int=09=09= =09tz;=0A-=09char=09=09tzname[TZ_STRLEN_MAX=20+=201];=0A+=09char=09=09= tz_name[TZ_STRLEN_MAX=20+=201];=0A=20=09int=09=09=09type,=0A=20=09=09=09=09= val;=0A=20=09pg_tz=09=20=20=20*tzp;=0A@@=20-3167,9=20+3167,9=20@@=20= timetz_zone(PG_FUNCTION_ARGS)=0A=20=09/*=0A=20=09=20*=20Look=20up=20the=20= requested=20timezone.=0A=20=09=20*/=0A-=09text_to_cstring_buffer(zone,=20= tzname,=20sizeof(tzname));=0A+=09text_to_cstring_buffer(zone,=20tz_name,=20= sizeof(tz_name));=0A=20=0A-=09type=20=3D=20DecodeTimezoneName(tzname,=20= &val,=20&tzp);=0A+=09type=20=3D=20DecodeTimezoneName(tz_name,=20&val,=20= &tzp);=0A=20=0A=20=09if=20(type=20=3D=3D=20TZNAME_FIXED_OFFSET)=0A=20=09= {=0A@@=20-3182,7=20+3182,7=20@@=20timetz_zone(PG_FUNCTION_ARGS)=0A=20=09=09= TimestampTz=20now=20=3D=20GetCurrentTransactionStartTimestamp();=0A=20=09= =09int=09=09=09isdst;=0A=20=0A-=09=09tz=20=3D=20= DetermineTimeZoneAbbrevOffsetTS(now,=20tzname,=20tzp,=20&isdst);=0A+=09=09= tz=20=3D=20DetermineTimeZoneAbbrevOffsetTS(now,=20tz_name,=20tzp,=20= &isdst);=0A=20=09}=0A=20=09else=0A=20=09{=0Adiff=20--git=20= a/src/backend/utils/adt/datetime.c=20b/src/backend/utils/adt/datetime.c=0A= index=2090946db72ff..d7283b05255=20100644=0A---=20= a/src/backend/utils/adt/datetime.c=0A+++=20= b/src/backend/utils/adt/datetime.c=0A@@=20-642,12=20+642,12=20@@=20= AdjustMicroseconds(int64=20val,=20double=20fval,=20int64=20scale,=0A=20= static=20bool=0A=20AdjustDays(int64=20val,=20int=20scale,=20struct=20= pg_itm_in=20*itm_in)=0A=20{=0A-=09int=09=09=09days;=0A+=09int=09=09=09= dayVal;=0A=20=0A=20=09if=20(val=20<=20INT_MIN=20||=20val=20>=20INT_MAX)=0A= =20=09=09return=20false;=0A-=09return=20!pg_mul_s32_overflow((int32)=20= val,=20scale,=20&days)=20&&=0A-=09=09= !pg_add_s32_overflow(itm_in->tm_mday,=20days,=20&itm_in->tm_mday);=0A+=09= return=20!pg_mul_s32_overflow((int32)=20val,=20scale,=20&dayVal)=20&&=0A= +=09=09!pg_add_s32_overflow(itm_in->tm_mday,=20dayVal,=20= &itm_in->tm_mday);=0A=20}=0A=20=0A=20/*=0A@@=20-3285,7=20+3285,7=20@@=20= DecodeSpecial(int=20field,=20const=20char=20*lowtoken,=20int=20*val)=0A=20= =20*=20the=20zone=20name=20or=20the=20abbreviation's=20underlying=20= zone.=0A=20=20*/=0A=20int=0A-DecodeTimezoneName(const=20char=20*tzname,=20= int=20*offset,=20pg_tz=20**tz)=0A+DecodeTimezoneName(const=20char=20= *tz_name,=20int=20*offset,=20pg_tz=20**tz)=0A=20{=0A=20=09char=09=20=20=20= *lowzone;=0A=20=09int=09=09=09dterr,=0A@@=20-3302,8=20+3302,8=20@@=20= DecodeTimezoneName(const=20char=20*tzname,=20int=20*offset,=20pg_tz=20= **tz)=0A=20=09=20*/=0A=20=0A=20=09/*=20DecodeTimezoneAbbrev=20requires=20= lowercase=20input=20*/=0A-=09lowzone=20=3D=20= downcase_truncate_identifier(tzname,=0A-=09=09=09=09=09=09=09=09=09=09=20= =20=20strlen(tzname),=0A+=09lowzone=20=3D=20= downcase_truncate_identifier(tz_name,=0A+=09=09=09=09=09=09=09=09=09=09=20= =20=20strlen(tz_name),=0A=20=09=09=09=09=09=09=09=09=09=09=20=20=20= false);=0A=20=0A=20=09dterr=20=3D=20DecodeTimezoneAbbrev(0,=20lowzone,=20= &type,=20offset,=20tz,=20&extra);=0A@@=20-3323,11=20+3323,11=20@@=20= DecodeTimezoneName(const=20char=20*tzname,=20int=20*offset,=20pg_tz=20= **tz)=0A=20=09else=0A=20=09{=0A=20=09=09/*=20try=20it=20as=20a=20full=20= zone=20name=20*/=0A-=09=09*tz=20=3D=20pg_tzset(tzname);=0A+=09=09*tz=20=3D= =20pg_tzset(tz_name);=0A=20=09=09if=20(*tz=20=3D=3D=20NULL)=0A=20=09=09=09= ereport(ERROR,=0A=20=09=09=09=09=09= (errcode(ERRCODE_INVALID_PARAMETER_VALUE),=0A-=09=09=09=09=09=20= errmsg("time=20zone=20\"%s\"=20not=20recognized",=20tzname)));=0A+=09=09=09= =09=09=20errmsg("time=20zone=20\"%s\"=20not=20recognized",=20tz_name)));=0A= =20=09=09return=20TZNAME_ZONE;=0A=20=09}=0A=20}=0A@@=20-3340,12=20= +3340,12=20@@=20DecodeTimezoneName(const=20char=20*tzname,=20int=20= *offset,=20pg_tz=20**tz)=0A=20=20*=20result=20in=20all=20cases.=0A=20=20= */=0A=20pg_tz=20*=0A-DecodeTimezoneNameToTz(const=20char=20*tzname)=0A= +DecodeTimezoneNameToTz(const=20char=20*tz_name)=0A=20{=0A=20=09pg_tz=09=20= =20=20*result;=0A=20=09int=09=09=09offset;=0A=20=0A-=09if=20= (DecodeTimezoneName(tzname,=20&offset,=20&result)=20=3D=3D=20= TZNAME_FIXED_OFFSET)=0A+=09if=20(DecodeTimezoneName(tz_name,=20&offset,=20= &result)=20=3D=3D=20TZNAME_FIXED_OFFSET)=0A=20=09{=0A=20=09=09/*=20= fixed-offset=20abbreviation,=20get=20a=20pg_tz=20descriptor=20for=20that=20= */=0A=20=09=09result=20=3D=20pg_tzset_offset(-offset);=09/*=20flip=20to=20= POSIX=20sign=20convention=20*/=0Adiff=20--git=20= a/src/backend/utils/adt/formatting.c=20= b/src/backend/utils/adt/formatting.c=0Aindex=200716aff22b6..1c0e5566301=20= 100644=0A---=20a/src/backend/utils/adt/formatting.c=0A+++=20= b/src/backend/utils/adt/formatting.c=0A@@=20-3034,12=20+3034,12=20@@=20= DCH_to_char(FormatNode=20*node,=20bool=20is_interval,=20TmToChar=20*in,=20= char=20*out,=20Oid=20col=0A=20=09=09=09=09else=0A=20=09=09=09=09{=0A=20=09= =09=09=09=09int=09=09=09mon=20=3D=200;=0A-=09=09=09=09=09const=20char=20= *const=20*months;=0A+=09=09=09=09=09const=20char=20*const=20*pmonths;=0A=20= =0A=20=09=09=09=09=09if=20(n->key->id=20=3D=3D=20DCH_RM)=0A-=09=09=09=09=09= =09months=20=3D=20rm_months_upper;=0A+=09=09=09=09=09=09pmonths=20=3D=20= rm_months_upper;=0A=20=09=09=09=09=09else=0A-=09=09=09=09=09=09months=20= =3D=20rm_months_lower;=0A+=09=09=09=09=09=09pmonths=20=3D=20= rm_months_lower;=0A=20=0A=20=09=09=09=09=09/*=0A=20=09=09=09=09=09=20*=20= Compute=20the=20position=20in=20the=20roman-numeral=20array.=20=20Note=0A= @@=20-3074,7=20+3074,7=20@@=20DCH_to_char(FormatNode=20*node,=20bool=20= is_interval,=20TmToChar=20*in,=20char=20*out,=20Oid=20col=0A=20=09=09=09=09= =09}=0A=20=0A=20=09=09=09=09=09sprintf(s,=20"%*s",=20= IS_SUFFIX_FM(n->suffix)=20?=200=20:=20-4,=0A-=09=09=09=09=09=09=09= months[mon]);=0A+=09=09=09=09=09=09=09pmonths[mon]);=0A=20=09=09=09=09=09= s=20+=3D=20strlen(s);=0A=20=09=09=09=09}=0A=20=09=09=09=09break;=0Adiff=20= --git=20a/src/backend/utils/adt/timestamp.c=20= b/src/backend/utils/adt/timestamp.c=0Aindex=20e2603183f1c..64e44da2a47=20= 100644=0A---=20a/src/backend/utils/adt/timestamp.c=0A+++=20= b/src/backend/utils/adt/timestamp.c=0A@@=20-490,11=20+490,11=20@@=20= timestamptz_in(PG_FUNCTION_ARGS)=0A=20static=20int=0A=20= parse_sane_timezone(struct=20pg_tm=20*tm,=20text=20*zone)=0A=20{=0A-=09= char=09=09tzname[TZ_STRLEN_MAX=20+=201];=0A+=09char=09=09= tz_name[TZ_STRLEN_MAX=20+=201];=0A=20=09int=09=09=09dterr;=0A=20=09int=09= =09=09tz;=0A=20=0A-=09text_to_cstring_buffer(zone,=20tzname,=20= sizeof(tzname));=0A+=09text_to_cstring_buffer(zone,=20tz_name,=20= sizeof(tz_name));=0A=20=0A=20=09/*=0A=20=09=20*=20Look=20up=20the=20= requested=20timezone.=20=20First=20we=20try=20to=20interpret=20it=20as=20= a=0A@@=20-506,14=20+506,14=20@@=20parse_sane_timezone(struct=20pg_tm=20= *tm,=20text=20*zone)=0A=20=09=20*=20as=20invalid,=20it's=20enough=20to=20= disallow=20having=20a=20digit=20in=20the=20first=0A=20=09=20*=20position=20= of=20our=20input=20string.=0A=20=09=20*/=0A-=09if=20(isdigit((unsigned=20= char)=20*tzname))=0A+=09if=20(isdigit((unsigned=20char)=20*tz_name))=0A=20= =09=09ereport(ERROR,=0A=20=09=09=09=09= (errcode(ERRCODE_INVALID_PARAMETER_VALUE),=0A=20=09=09=09=09=20= errmsg("invalid=20input=20syntax=20for=20type=20%s:=20\"%s\"",=0A-=09=09=09= =09=09=09"numeric=20time=20zone",=20tzname),=0A+=09=09=09=09=09=09= "numeric=20time=20zone",=20tz_name),=0A=20=09=09=09=09=20= errhint("Numeric=20time=20zones=20must=20have=20\"-\"=20or=20\"+\"=20as=20= first=20character.")));=0A=20=0A-=09dterr=20=3D=20DecodeTimezone(tzname,=20= &tz);=0A+=09dterr=20=3D=20DecodeTimezone(tz_name,=20&tz);=0A=20=09if=20= (dterr=20!=3D=200)=0A=20=09{=0A=20=09=09int=09=09=09type,=0A@@=20-523,13=20= +523,13=20@@=20parse_sane_timezone(struct=20pg_tm=20*tm,=20text=20*zone)=0A= =20=09=09if=20(dterr=20=3D=3D=20DTERR_TZDISP_OVERFLOW)=0A=20=09=09=09= ereport(ERROR,=0A=20=09=09=09=09=09= (errcode(ERRCODE_INVALID_PARAMETER_VALUE),=0A-=09=09=09=09=09=20= errmsg("numeric=20time=20zone=20\"%s\"=20out=20of=20range",=20tzname)));=0A= +=09=09=09=09=09=20errmsg("numeric=20time=20zone=20\"%s\"=20out=20of=20= range",=20tz_name)));=0A=20=09=09else=20if=20(dterr=20!=3D=20= DTERR_BAD_FORMAT)=0A=20=09=09=09ereport(ERROR,=0A=20=09=09=09=09=09= (errcode(ERRCODE_INVALID_PARAMETER_VALUE),=0A-=09=09=09=09=09=20= errmsg("time=20zone=20\"%s\"=20not=20recognized",=20tzname)));=0A+=09=09=09= =09=09=20errmsg("time=20zone=20\"%s\"=20not=20recognized",=20tz_name)));=0A= =20=0A-=09=09type=20=3D=20DecodeTimezoneName(tzname,=20&val,=20&tzp);=0A= +=09=09type=20=3D=20DecodeTimezoneName(tz_name,=20&val,=20&tzp);=0A=20=0A= =20=09=09if=20(type=20=3D=3D=20TZNAME_FIXED_OFFSET)=0A=20=09=09{=0A@@=20= -539,7=20+539,7=20@@=20parse_sane_timezone(struct=20pg_tm=20*tm,=20text=20= *zone)=0A=20=09=09else=20if=20(type=20=3D=3D=20TZNAME_DYNTZ)=0A=20=09=09= {=0A=20=09=09=09/*=20dynamic-offset=20abbreviation,=20resolve=20using=20= specified=20time=20*/=0A-=09=09=09tz=20=3D=20= DetermineTimeZoneAbbrevOffset(tm,=20tzname,=20tzp);=0A+=09=09=09tz=20=3D=20= DetermineTimeZoneAbbrevOffset(tm,=20tz_name,=20tzp);=0A=20=09=09}=0A=20=09= =09else=0A=20=09=09{=0A@@=20-559,11=20+559,11=20@@=20= parse_sane_timezone(struct=20pg_tm=20*tm,=20text=20*zone)=0A=20static=20= pg_tz=20*=0A=20lookup_timezone(text=20*zone)=0A=20{=0A-=09char=09=09= tzname[TZ_STRLEN_MAX=20+=201];=0A+=09char=09=09tz_name[TZ_STRLEN_MAX=20+=20= 1];=0A=20=0A-=09text_to_cstring_buffer(zone,=20tzname,=20= sizeof(tzname));=0A+=09text_to_cstring_buffer(zone,=20tz_name,=20= sizeof(tz_name));=0A=20=0A-=09return=20DecodeTimezoneNameToTz(tzname);=0A= +=09return=20DecodeTimezoneNameToTz(tz_name);=0A=20}=0A=20=0A=20/*=0A@@=20= -1529,41=20+1529,41=20@@=20AdjustIntervalForTypmod(Interval=20*interval,=20= int32=20typmod,=0A=20Datum=0A=20make_interval(PG_FUNCTION_ARGS)=0A=20{=0A= -=09int32=09=09years=20=3D=20PG_GETARG_INT32(0);=0A-=09int32=09=09months=20= =3D=20PG_GETARG_INT32(1);=0A-=09int32=09=09weeks=20=3D=20= PG_GETARG_INT32(2);=0A-=09int32=09=09days=20=3D=20PG_GETARG_INT32(3);=0A= -=09int32=09=09hours=20=3D=20PG_GETARG_INT32(4);=0A-=09int32=09=09mins=20= =3D=20PG_GETARG_INT32(5);=0A-=09double=09=09secs=20=3D=20= PG_GETARG_FLOAT8(6);=0A+=09int32=09=09yearVal=20=3D=20= PG_GETARG_INT32(0);=0A+=09int32=09=09monthVal=20=3D=20= PG_GETARG_INT32(1);=0A+=09int32=09=09weekVal=20=3D=20PG_GETARG_INT32(2);=0A= +=09int32=09=09dayVal=20=3D=20PG_GETARG_INT32(3);=0A+=09int32=09=09= hourVal=20=3D=20PG_GETARG_INT32(4);=0A+=09int32=09=09minVal=20=3D=20= PG_GETARG_INT32(5);=0A+=09double=09=09secVal=20=3D=20= PG_GETARG_FLOAT8(6);=0A=20=09Interval=20=20=20*result;=0A=20=0A=20=09/*=0A= =20=09=20*=20Reject=20out-of-range=20inputs.=20=20We=20reject=20any=20= input=20values=20that=20cause=0A=20=09=20*=20integer=20overflow=20of=20= the=20corresponding=20interval=20fields.=0A=20=09=20*/=0A-=09if=20= (isinf(secs)=20||=20isnan(secs))=0A+=09if=20(isinf(secVal)=20||=20= isnan(secVal))=0A=20=09=09goto=20out_of_range;=0A=20=0A=20=09result=20=3D=20= palloc_object(Interval);=0A=20=0A=20=09/*=20years=20and=20months=20->=20= months=20*/=0A-=09if=20(pg_mul_s32_overflow(years,=20MONTHS_PER_YEAR,=20= &result->month)=20||=0A-=09=09pg_add_s32_overflow(result->month,=20= months,=20&result->month))=0A+=09if=20(pg_mul_s32_overflow(yearVal,=20= MONTHS_PER_YEAR,=20&result->month)=20||=0A+=09=09= pg_add_s32_overflow(result->month,=20monthVal,=20&result->month))=0A=20=09= =09goto=20out_of_range;=0A=20=0A=20=09/*=20weeks=20and=20days=20->=20= days=20*/=0A-=09if=20(pg_mul_s32_overflow(weeks,=20DAYS_PER_WEEK,=20= &result->day)=20||=0A-=09=09pg_add_s32_overflow(result->day,=20days,=20= &result->day))=0A+=09if=20(pg_mul_s32_overflow(weekVal,=20DAYS_PER_WEEK,=20= &result->day)=20||=0A+=09=09pg_add_s32_overflow(result->day,=20dayVal,=20= &result->day))=0A=20=09=09goto=20out_of_range;=0A=20=0A=20=09/*=20hours=20= and=20mins=20->=20usecs=20(cannot=20overflow=2064-bit)=20*/=0A-=09= result->time=20=3D=20hours=20*=20USECS_PER_HOUR=20+=20mins=20*=20= USECS_PER_MINUTE;=0A+=09result->time=20=3D=20hourVal=20*=20= USECS_PER_HOUR=20+=20minVal=20*=20USECS_PER_MINUTE;=0A=20=0A=20=09/*=20= secs=20->=20usecs=20*/=0A-=09secs=20=3D=20rint(float8_mul(secs,=20= USECS_PER_SEC));=0A-=09if=20(!FLOAT8_FITS_IN_INT64(secs)=20||=0A-=09=09= pg_add_s64_overflow(result->time,=20(int64)=20secs,=20&result->time))=0A= +=09secVal=20=3D=20rint(float8_mul(secVal,=20USECS_PER_SEC));=0A+=09if=20= (!FLOAT8_FITS_IN_INT64(secVal)=20||=0A+=09=09= pg_add_s64_overflow(result->time,=20(int64)=20secVal,=20&result->time))=0A= =20=09=09goto=20out_of_range;=0A=20=0A=20=09/*=20make=20sure=20that=20= the=20result=20is=20finite=20*/=0A@@=20-2131,9=20+2131,9=20@@=20= time2t(const=20int=20hour,=20const=20int=20min,=20const=20int=20sec,=20= const=20fsec_t=20fsec)=0A=20}=0A=20=0A=20static=20Timestamp=0A= -dt2local(Timestamp=20dt,=20int=20timezone)=0A+dt2local(Timestamp=20dt,=20= int=20tz)=0A=20{=0A-=09dt=20-=3D=20(timezone=20*=20USECS_PER_SEC);=0A+=09= dt=20-=3D=20(tz=20*=20USECS_PER_SEC);=0A=20=09return=20dt;=0A=20}=0A=20=0A= @@=20-2524,20=20+2524,20=20@@=20static=20inline=20INT128=0A=20= interval_cmp_value(const=20Interval=20*interval)=0A=20{=0A=20=09INT128=09= =09span;=0A-=09int64=09=09days;=0A+=09int64=09=09dayVal;=0A=20=0A=20=09= /*=0A=20=09=20*=20Combine=20the=20month=20and=20day=20fields=20into=20an=20= integral=20number=20of=20days.=0A=20=09=20*=20Because=20the=20inputs=20= are=20int32,=20int64=20arithmetic=20suffices=20here.=0A=20=09=20*/=0A-=09= days=20=3D=20interval->month=20*=20INT64CONST(30);=0A-=09days=20+=3D=20= interval->day;=0A+=09dayVal=20=3D=20interval->month=20*=20= INT64CONST(30);=0A+=09dayVal=20+=3D=20interval->day;=0A=20=0A=20=09/*=20= Widen=20time=20field=20to=20128=20bits=20*/=0A=20=09span=20=3D=20= int64_to_int128(interval->time);=0A=20=0A=20=09/*=20Scale=20up=20days=20= to=20microseconds,=20forming=20a=20128-bit=20product=20*/=0A-=09= int128_add_int64_mul_int64(&span,=20days,=20USECS_PER_DAY);=0A+=09= int128_add_int64_mul_int64(&span,=20dayVal,=20USECS_PER_DAY);=0A=20=0A=20= =09return=20span;=0A=20}=0A@@=20-6222,7=20+6222,7=20@@=20= interval_part_common(PG_FUNCTION_ARGS,=20bool=20retnumeric)=0A=20=09=09{=0A= =20=09=09=09Numeric=09=09result;=0A=20=09=09=09int64=09=09= secs_from_day_month;=0A-=09=09=09int64=09=09val;=0A+=09=09=09int64=09=09= value;=0A=20=0A=20=09=09=09/*=0A=20=09=09=09=20*=20To=20do=20this=20= calculation=20in=20integer=20arithmetic=20even=20though=0A@@=20-6245,9=20= +6245,9=20@@=20interval_part_common(PG_FUNCTION_ARGS,=20bool=20= retnumeric)=0A=20=09=09=09=20*=20numeric=20(slower).=20=20This=20= overflow=20happens=20around=2010^9=20days,=20so=0A=20=09=09=09=20*=20not=20= common=20in=20practice.=0A=20=09=09=09=20*/=0A-=09=09=09if=20= (!pg_mul_s64_overflow(secs_from_day_month,=201000000,=20&val)=20&&=0A-=09= =09=09=09!pg_add_s64_overflow(val,=20interval->time,=20&val))=0A-=09=09=09= =09result=20=3D=20int64_div_fast_to_numeric(val,=206);=0A+=09=09=09if=20= (!pg_mul_s64_overflow(secs_from_day_month,=201000000,=20&value)=20&&=0A+=09= =09=09=09!pg_add_s64_overflow(value,=20interval->time,=20&value))=0A+=09=09= =09=09result=20=3D=20int64_div_fast_to_numeric(value,=206);=0A=20=09=09=09= else=0A=20=09=09=09=09result=20=3D=0A=20=09=09=09=09=09= numeric_add_safe(int64_div_fast_to_numeric(interval->time,=206),=0A@@=20= -6311,7=20+6311,7=20@@=20timestamp_zone(PG_FUNCTION_ARGS)=0A=20=09= Timestamp=09timestamp=20=3D=20PG_GETARG_TIMESTAMP(1);=0A=20=09= TimestampTz=20result;=0A=20=09int=09=09=09tz;=0A-=09char=09=09= tzname[TZ_STRLEN_MAX=20+=201];=0A+=09char=09=09tz_name[TZ_STRLEN_MAX=20+=20= 1];=0A=20=09int=09=09=09type,=0A=20=09=09=09=09val;=0A=20=09pg_tz=09=20=20= =20*tzp;=0A@@=20-6324,9=20+6324,9=20@@=20= timestamp_zone(PG_FUNCTION_ARGS)=0A=20=09/*=0A=20=09=20*=20Look=20up=20= the=20requested=20timezone.=0A=20=09=20*/=0A-=09= text_to_cstring_buffer(zone,=20tzname,=20sizeof(tzname));=0A+=09= text_to_cstring_buffer(zone,=20tz_name,=20sizeof(tz_name));=0A=20=0A-=09= type=20=3D=20DecodeTimezoneName(tzname,=20&val,=20&tzp);=0A+=09type=20=3D=20= DecodeTimezoneName(tz_name,=20&val,=20&tzp);=0A=20=0A=20=09if=20(type=20= =3D=3D=20TZNAME_FIXED_OFFSET)=0A=20=09{=0A@@=20-6341,7=20+6341,7=20@@=20= timestamp_zone(PG_FUNCTION_ARGS)=0A=20=09=09=09ereport(ERROR,=0A=20=09=09= =09=09=09(errcode(ERRCODE_DATETIME_VALUE_OUT_OF_RANGE),=0A=20=09=09=09=09= =09=20errmsg("timestamp=20out=20of=20range")));=0A-=09=09tz=20=3D=20= -DetermineTimeZoneAbbrevOffset(&tm,=20tzname,=20tzp);=0A+=09=09tz=20=3D=20= -DetermineTimeZoneAbbrevOffset(&tm,=20tz_name,=20tzp);=0A=20=09=09result=20= =3D=20dt2local(timestamp,=20tz);=0A=20=09}=0A=20=09else=0A@@=20-6566,7=20= +6566,7=20@@=20timestamptz_zone(PG_FUNCTION_ARGS)=0A=20=09TimestampTz=20= timestamp=20=3D=20PG_GETARG_TIMESTAMPTZ(1);=0A=20=09Timestamp=09result;=0A= =20=09int=09=09=09tz;=0A-=09char=09=09tzname[TZ_STRLEN_MAX=20+=201];=0A+=09= char=09=09tz_name[TZ_STRLEN_MAX=20+=201];=0A=20=09int=09=09=09type,=0A=20= =09=09=09=09val;=0A=20=09pg_tz=09=20=20=20*tzp;=0A@@=20-6577,9=20+6577,9=20= @@=20timestamptz_zone(PG_FUNCTION_ARGS)=0A=20=09/*=0A=20=09=20*=20Look=20= up=20the=20requested=20timezone.=0A=20=09=20*/=0A-=09= text_to_cstring_buffer(zone,=20tzname,=20sizeof(tzname));=0A+=09= text_to_cstring_buffer(zone,=20tz_name,=20sizeof(tz_name));=0A=20=0A-=09= type=20=3D=20DecodeTimezoneName(tzname,=20&val,=20&tzp);=0A+=09type=20=3D=20= DecodeTimezoneName(tz_name,=20&val,=20&tzp);=0A=20=0A=20=09if=20(type=20= =3D=3D=20TZNAME_FIXED_OFFSET)=0A=20=09{=0A@@=20-6592,7=20+6592,7=20@@=20= timestamptz_zone(PG_FUNCTION_ARGS)=0A=20=09=09/*=20dynamic-offset=20= abbreviation,=20resolve=20using=20specified=20time=20*/=0A=20=09=09int=09= =09=09isdst;=0A=20=0A-=09=09tz=20=3D=20= DetermineTimeZoneAbbrevOffsetTS(timestamp,=20tzname,=20tzp,=20&isdst);=0A= +=09=09tz=20=3D=20DetermineTimeZoneAbbrevOffsetTS(timestamp,=20tz_name,=20= tzp,=20&isdst);=0A=20=09=09result=20=3D=20dt2local(timestamp,=20tz);=0A=20= =09}=0A=20=09else=0Adiff=20--git=20a/src/bin/initdb/findtimezone.c=20= b/src/bin/initdb/findtimezone.c=0Aindex=20910b97a570b..1c45a4ecd38=20= 100644=0A---=20a/src/bin/initdb/findtimezone.c=0A+++=20= b/src/bin/initdb/findtimezone.c=0A@@=20-231,7=20+231,7=20@@=20= compare_tm(struct=20tm=20*s,=20struct=20pg_tm=20*p)=0A=20=20*=20test=20= time.=0A=20=20*/=0A=20static=20int=0A-score_timezone(const=20char=20= *tzname,=20struct=20tztry=20*tt)=0A+score_timezone(const=20char=20= *tz_name,=20struct=20tztry=20*tt)=0A=20{=0A=20=09int=09=09=09i;=0A=20=09= pg_time_t=09pgtt;=0A@@=20-241,7=20+241,7=20@@=20score_timezone(const=20= char=20*tzname,=20struct=20tztry=20*tt)=0A=20=09pg_tz=09=20=20=20*tz;=0A=20= =0A=20=09/*=20Load=20timezone=20definition=20*/=0A-=09tz=20=3D=20= pg_load_tz(tzname);=0A+=09tz=20=3D=20pg_load_tz(tz_name);=0A=20=09if=20= (!tz)=0A=20=09=09return=20-1;=09=09=09=09/*=20unrecognized=20zone=20name=20= */=0A=20=0A@@=20-249,7=20+249,7=20@@=20score_timezone(const=20char=20= *tzname,=20struct=20tztry=20*tt)=0A=20=09if=20(!pg_tz_acceptable(tz))=0A=20= =09{=0A=20#ifdef=20DEBUG_IDENTIFY_TIMEZONE=0A-=09=09fprintf(stderr,=20= "Reject=20TZ=20\"%s\":=20uses=20leap=20seconds\n",=20tzname);=0A+=09=09= fprintf(stderr,=20"Reject=20TZ=20\"%s\":=20uses=20leap=20seconds\n",=20= tz_name);=0A=20#endif=0A=20=09=09return=20-1;=0A=20=09}=0A@@=20-266,7=20= +266,7=20@@=20score_timezone(const=20char=20*tzname,=20struct=20tztry=20= *tt)=0A=20=09=09{=0A=20#ifdef=20DEBUG_IDENTIFY_TIMEZONE=0A=20=09=09=09= fprintf(stderr,=20"TZ=20\"%s\"=20scores=20%d:=20at=20%ld=20= %04d-%02d-%02d=20%02d:%02d:%02d=20%s,=20system=20had=20no=20data\n",=0A-=09= =09=09=09=09tzname,=20i,=20(long)=20pgtt,=0A+=09=09=09=09=09tz_name,=20= i,=20(long)=20pgtt,=0A=20=09=09=09=09=09pgtm->tm_year=20+=201900,=20= pgtm->tm_mon=20+=201,=20pgtm->tm_mday,=0A=20=09=09=09=09=09= pgtm->tm_hour,=20pgtm->tm_min,=20pgtm->tm_sec,=0A=20=09=09=09=09=09= pgtm->tm_isdst=20?=20"dst"=20:=20"std");=0A@@=20-277,7=20+277,7=20@@=20= score_timezone(const=20char=20*tzname,=20struct=20tztry=20*tt)=0A=20=09=09= {=0A=20#ifdef=20DEBUG_IDENTIFY_TIMEZONE=0A=20=09=09=09fprintf(stderr,=20= "TZ=20\"%s\"=20scores=20%d:=20at=20%ld=20%04d-%02d-%02d=20%02d:%02d:%02d=20= %s=20versus=20%04d-%02d-%02d=20%02d:%02d:%02d=20%s\n",=0A-=09=09=09=09=09= tzname,=20i,=20(long)=20pgtt,=0A+=09=09=09=09=09tz_name,=20i,=20(long)=20= pgtt,=0A=20=09=09=09=09=09pgtm->tm_year=20+=201900,=20pgtm->tm_mon=20+=20= 1,=20pgtm->tm_mday,=0A=20=09=09=09=09=09pgtm->tm_hour,=20pgtm->tm_min,=20= pgtm->tm_sec,=0A=20=09=09=09=09=09pgtm->tm_isdst=20?=20"dst"=20:=20= "std",=0A@@=20-298,7=20+298,7=20@@=20score_timezone(const=20char=20= *tzname,=20struct=20tztry=20*tt)=0A=20=09=09=09{=0A=20#ifdef=20= DEBUG_IDENTIFY_TIMEZONE=0A=20=09=09=09=09fprintf(stderr,=20"TZ=20\"%s\"=20= scores=20%d:=20at=20%ld=20\"%s\"=20versus=20\"%s\"\n",=0A-=09=09=09=09=09= =09tzname,=20i,=20(long)=20pgtt,=0A+=09=09=09=09=09=09tz_name,=20i,=20= (long)=20pgtt,=0A=20=09=09=09=09=09=09pgtm->tm_zone,=20cbuf);=0A=20= #endif=0A=20=09=09=09=09return=20i;=0A@@=20-307,7=20+307,7=20@@=20= score_timezone(const=20char=20*tzname,=20struct=20tztry=20*tt)=0A=20=09}=0A= =20=0A=20#ifdef=20DEBUG_IDENTIFY_TIMEZONE=0A-=09fprintf(stderr,=20"TZ=20= \"%s\"=20gets=20max=20score=20%d\n",=20tzname,=20i);=0A+=09= fprintf(stderr,=20"TZ=20\"%s\"=20gets=20max=20score=20%d\n",=20tz_name,=20= i);=0A=20#endif=0A=20=0A=20=09return=20i;=0A@@=20-317,9=20+317,9=20@@=20= score_timezone(const=20char=20*tzname,=20struct=20tztry=20*tt)=0A=20=20*=20= Test=20whether=20given=20zone=20name=20is=20a=20perfect=20match=20to=20= localtime()=20behavior=0A=20=20*/=0A=20static=20bool=0A= -perfect_timezone_match(const=20char=20*tzname,=20struct=20tztry=20*tt)=0A= +perfect_timezone_match(const=20char=20*tz_name,=20struct=20tztry=20*tt)=0A= =20{=0A-=09return=20(score_timezone(tzname,=20tt)=20=3D=3D=20= tt->n_test_times);=0A+=09return=20(score_timezone(tz_name,=20tt)=20=3D=3D=20= tt->n_test_times);=0A=20}=0A=20=0A=20=0A@@=20-1725,14=20+1725,14=20@@=20= identify_system_timezone(void)=0A=20=20*=20Return=20true=20if=20the=20= given=20zone=20name=20is=20valid=20and=20is=20an=20"acceptable"=20zone.=0A= =20=20*/=0A=20static=20bool=0A-validate_zone(const=20char=20*tzname)=0A= +validate_zone(const=20char=20*zone)=0A=20{=0A=20=09pg_tz=09=20=20=20= *tz;=0A=20=0A-=09if=20(!tzname=20||=20!tzname[0])=0A+=09if=20(!zone=20||=20= !zone[0])=0A=20=09=09return=20false;=0A=20=0A-=09tz=20=3D=20= pg_load_tz(tzname);=0A+=09tz=20=3D=20pg_load_tz(zone);=0A=20=09if=20= (!tz)=0A=20=09=09return=20false;=0A=20=0A@@=20-1756,7=20+1756,7=20@@=20= validate_zone(const=20char=20*tzname)=0A=20const=20char=20*=0A=20= select_default_timezone(const=20char=20*share_path)=0A=20{=0A-=09const=20= char=20*tzname;=0A+=09const=20char=20*tz;=0A=20=0A=20=09/*=20Initialize=20= timezone=20directory=20path,=20if=20needed=20*/=0A=20#ifndef=20= SYSTEMTZDIR=0A@@=20-1764,14=20+1764,14=20@@=20= select_default_timezone(const=20char=20*share_path)=0A=20#endif=0A=20=0A=20= =09/*=20Check=20TZ=20environment=20variable=20*/=0A-=09tzname=20=3D=20= getenv("TZ");=0A-=09if=20(validate_zone(tzname))=0A-=09=09return=20= tzname;=0A+=09tz=20=3D=20getenv("TZ");=0A+=09if=20(validate_zone(tz))=0A= +=09=09return=20tz;=0A=20=0A=20=09/*=20Nope,=20so=20try=20to=20identify=20= the=20system=20timezone=20*/=0A-=09tzname=20=3D=20= identify_system_timezone();=0A-=09if=20(validate_zone(tzname))=0A-=09=09= return=20tzname;=0A+=09tz=20=3D=20identify_system_timezone();=0A+=09if=20= (validate_zone(tz))=0A+=09=09return=20tz;=0A=20=0A=20=09return=20NULL;=0A= =20}=0Adiff=20--git=20a/src/timezone/pgtz.c=20b/src/timezone/pgtz.c=0A= index=20eac988c21e7..72f41ea42d8=20100644=0A---=20a/src/timezone/pgtz.c=0A= +++=20b/src/timezone/pgtz.c=0A@@=20-231,7=20+231,7=20@@=20= init_timezone_hashtable(void)=0A=20=20*=20default=20timezone=20setting=20= is=20later=20overridden=20from=20postgresql.conf.=0A=20=20*/=0A=20pg_tz=20= *=0A-pg_tzset(const=20char=20*tzname)=0A+pg_tzset(const=20char=20*zone)=0A= =20{=0A=20=09pg_tz_cache=20*tzp;=0A=20=09struct=20state=20tzstate;=0A@@=20= -239,7=20+239,7=20@@=20pg_tzset(const=20char=20*tzname)=0A=20=09char=09=09= canonname[TZ_STRLEN_MAX=20+=201];=0A=20=09char=09=20=20=20*p;=0A=20=0A-=09= if=20(strlen(tzname)=20>=20TZ_STRLEN_MAX)=0A+=09if=20(strlen(zone)=20>=20= TZ_STRLEN_MAX)=0A=20=09=09return=20NULL;=09=09=09/*=20not=20going=20to=20= fit=20*/=0A=20=0A=20=09if=20(!timezone_cache)=0A@@=20-253,8=20+253,8=20= @@=20pg_tzset(const=20char=20*tzname)=0A=20=09=20*=20a=20POSIX-style=20= timezone=20spec.)=0A=20=09=20*/=0A=20=09p=20=3D=20uppername;=0A-=09while=20= (*tzname)=0A-=09=09*p++=20=3D=20pg_toupper((unsigned=20char)=20= *tzname++);=0A+=09while=20(*zone)=0A+=09=09*p++=20=3D=20= pg_toupper((unsigned=20char)=20*zone++);=0A=20=09*p=20=3D=20'\0';=0A=20=0A= =20=09tzp=20=3D=20(pg_tz_cache=20*)=20hash_search(timezone_cache,=0A@@=20= -321,7=20+321,7=20@@=20pg_tzset_offset(long=20gmtoffset)=0A=20{=0A=20=09= long=09=09absoffset=20=3D=20(gmtoffset=20<=200)=20?=20-gmtoffset=20:=20= gmtoffset;=0A=20=09char=09=09offsetstr[64];=0A-=09char=09=09tzname[128];=0A= +=09char=09=09zone[128];=0A=20=0A=20=09snprintf(offsetstr,=20= sizeof(offsetstr),=0A=20=09=09=09=20"%02ld",=20absoffset=20/=20= SECS_PER_HOUR);=0A@@=20-338,13=20+338,13=20@@=20pg_tzset_offset(long=20= gmtoffset)=0A=20=09=09=09=09=09=20":%02ld",=20absoffset);=0A=20=09}=0A=20= =09if=20(gmtoffset=20>=200)=0A-=09=09snprintf(tzname,=20sizeof(tzname),=20= "<-%s>+%s",=0A+=09=09snprintf(zone,=20sizeof(zone),=20"<-%s>+%s",=0A=20=09= =09=09=09=20offsetstr,=20offsetstr);=0A=20=09else=0A-=09=09= snprintf(tzname,=20sizeof(tzname),=20"<+%s>-%s",=0A+=09=09snprintf(zone,=20= sizeof(zone),=20"<+%s>-%s",=0A=20=09=09=09=09=20offsetstr,=20offsetstr);=0A= =20=0A-=09return=20pg_tzset(tzname);=0A+=09return=20pg_tzset(zone);=0A=20= }=0A=20=0A=20=0A--=20=0A2.50.1=20(Apple=20Git-155)=0A=0A= --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=us-ascii --Apple-Mail=_9940B0E6-D84B-4803-B0A5-E6D7044E337C--