pg_query 4.2.1 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -0
- data/README.md +6 -8
- data/Rakefile +5 -6
- data/ext/pg_query/extconf.rb +14 -4
- data/ext/pg_query/include/pg_query.h +27 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
- data/ext/pg_query/include/{access → postgres/access}/amapi.h +3 -1
- data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
- data/ext/pg_query/include/{access → postgres/access}/attnum.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/clog.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/genam.h +7 -5
- data/ext/pg_query/include/{access → postgres/access}/gin.h +16 -3
- data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/htup_details.h +6 -2
- data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -58
- data/ext/pg_query/include/{access → postgres/access}/parallel.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/printtup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/relation.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/relscan.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/sdir.h +12 -3
- data/ext/pg_query/include/{access → postgres/access}/skey.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/stratnum.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/table.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/tableam.h +68 -45
- data/ext/pg_query/include/{access → postgres/access}/toast_compression.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/transam.h +1 -1
- data/ext/pg_query/include/postgres/access/tsmapi.h +82 -0
- data/ext/pg_query/include/{access → postgres/access}/tupconvert.h +5 -2
- data/ext/pg_query/include/{access → postgres/access}/tupdesc.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/tupmacs.h +58 -98
- data/ext/pg_query/include/{access → postgres/access}/twophase.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/xact.h +25 -18
- data/ext/pg_query/include/{access → postgres/access}/xlog.h +15 -16
- data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +100 -62
- data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +6 -25
- data/ext/pg_query/include/{access → postgres/access}/xlogprefetcher.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +7 -6
- data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +17 -5
- data/ext/pg_query/include/{access → postgres/access}/xlogrecovery.h +4 -3
- data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
- data/ext/pg_query/include/{c.h → postgres/c.h} +144 -156
- data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +4 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +5 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/genbki.h +7 -6
- data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +4 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/indexing.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +10 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +3 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +19 -17
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -19
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +4 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +9 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +2 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/postgres/catalog/pg_database.h +124 -0
- data/ext/pg_query/include/postgres/catalog/pg_database_d.h +52 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +3 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +4 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +2 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +1 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +6 -6
- data/ext/pg_query/include/{commands → postgres/commands}/async.h +1 -1
- data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +2 -1
- data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +2 -1
- data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +1 -1
- data/ext/pg_query/include/{commands → postgres/commands}/explain.h +3 -1
- data/ext/pg_query/include/{commands → postgres/commands}/prepare.h +1 -1
- data/ext/pg_query/include/{commands → postgres/commands}/tablespace.h +4 -4
- data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +15 -14
- data/ext/pg_query/include/{commands → postgres/commands}/user.h +9 -3
- data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +60 -14
- data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
- data/ext/pg_query/include/{common → postgres/common}/file_perm.h +1 -1
- data/ext/pg_query/include/{common → postgres/common}/hashfn.h +1 -1
- data/ext/pg_query/include/postgres/common/int.h +437 -0
- data/ext/pg_query/include/{common → postgres/common}/keywords.h +1 -1
- data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
- data/ext/pg_query/include/{common → postgres/common}/pg_prng.h +3 -2
- data/ext/pg_query/include/{common → postgres/common}/relpath.h +20 -13
- data/ext/pg_query/include/postgres/common/scram-common.h +70 -0
- data/ext/pg_query/include/postgres/common/sha2.h +32 -0
- data/ext/pg_query/include/{common → postgres/common}/string.h +5 -3
- data/ext/pg_query/include/{common → postgres/common}/unicode_east_asian_fw_table.h +10 -10
- data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +31 -13
- data/ext/pg_query/include/postgres/copyfuncs.funcs.c +5013 -0
- data/ext/pg_query/include/postgres/copyfuncs.switch.c +938 -0
- data/ext/pg_query/include/{datatype → postgres/datatype}/timestamp.h +11 -4
- data/ext/pg_query/include/postgres/equalfuncs.funcs.c +3097 -0
- data/ext/pg_query/include/postgres/equalfuncs.switch.c +785 -0
- data/ext/pg_query/include/{executor → postgres/executor}/execdesc.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/executor.h +34 -17
- data/ext/pg_query/include/{executor → postgres/executor}/functions.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/spi.h +2 -2
- data/ext/pg_query/include/{executor → postgres/executor}/tablefunc.h +1 -1
- data/ext/pg_query/include/{executor → postgres/executor}/tuptable.h +18 -11
- data/ext/pg_query/include/{fmgr.h → postgres/fmgr.h} +21 -2
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +12 -12
- data/ext/pg_query/include/postgres/gram.h +1127 -0
- data/ext/pg_query/include/{parser → postgres}/gramparse.h +4 -4
- data/ext/pg_query/include/{jit → postgres/jit}/jit.h +2 -2
- data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
- data/ext/pg_query/include/{lib → postgres/lib}/dshash.h +4 -1
- data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +435 -22
- data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +9 -9
- data/ext/pg_query/include/{lib → postgres/lib}/sort_template.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
- data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +8 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +1 -1
- data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +24 -17
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +36 -25
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +1 -1
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +10 -41
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +22 -10
- data/ext/pg_query/include/postgres/libpq/sasl.h +136 -0
- data/ext/pg_query/include/postgres/libpq/scram.h +37 -0
- data/ext/pg_query/include/{mb → postgres/mb}/pg_wchar.h +35 -18
- data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +27 -15
- data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +83 -30
- data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +5 -3
- data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
- data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +14 -2
- data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +7 -4
- data/ext/pg_query/include/postgres/nodes/miscnodes.h +56 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/nodeFuncs.h +89 -29
- data/ext/pg_query/include/{nodes → postgres/nodes}/nodes.h +96 -511
- data/ext/pg_query/include/postgres/nodes/nodetags.h +471 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/params.h +3 -3
- data/ext/pg_query/include/{nodes → postgres/nodes}/parsenodes.h +377 -139
- data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1090 -440
- data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +30 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +367 -124
- data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +670 -222
- data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
- data/ext/pg_query/include/{utils → postgres/nodes}/queryjumble.h +5 -7
- data/ext/pg_query/include/postgres/nodes/replnodes.h +111 -0
- data/ext/pg_query/include/postgres/nodes/supportnodes.h +346 -0
- data/ext/pg_query/include/{nodes → postgres/nodes}/tidbitmap.h +1 -1
- data/ext/pg_query/include/{nodes → postgres/nodes}/value.h +12 -2
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +6 -4
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +8 -8
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +16 -7
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +3 -6
- data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +4 -3
- data/ext/pg_query/include/{parser → postgres/parser}/kwlist.h +12 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +4 -2
- data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +3 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +22 -4
- data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +8 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parser.h +4 -4
- data/ext/pg_query/include/{parser → postgres/parser}/parsetree.h +1 -1
- data/ext/pg_query/include/{parser → postgres/parser}/scanner.h +2 -2
- data/ext/pg_query/include/{parser → postgres/parser}/scansup.h +1 -1
- data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
- data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +158 -218
- data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +8 -46
- data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
- data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +1 -1
- data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
- data/ext/pg_query/include/{pgstat.h → postgres/pgstat.h} +173 -94
- data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +3 -3
- data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +66 -64
- data/ext/pg_query/include/{pl_reserved_kwlist.h → postgres/pl_reserved_kwlist.h} +1 -1
- data/ext/pg_query/include/{pl_reserved_kwlist_d.h → postgres/pl_reserved_kwlist_d.h} +1 -1
- data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +2 -1
- data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +48 -46
- data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +28 -33
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +3 -3
- data/ext/pg_query/include/postgres/port/atomics/arch-hppa.h +17 -0
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-ppc.h +21 -21
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-x86.h +2 -2
- data/ext/pg_query/include/{port → postgres/port}/atomics/fallback.h +3 -3
- data/ext/pg_query/include/{port → postgres/port}/atomics/generic-gcc.h +1 -1
- data/ext/pg_query/include/postgres/port/atomics/generic-msvc.h +101 -0
- data/ext/pg_query/include/postgres/port/atomics/generic-sunpro.h +106 -0
- data/ext/pg_query/include/{port → postgres/port}/atomics/generic.h +1 -1
- data/ext/pg_query/include/{port → postgres/port}/atomics.h +2 -7
- data/ext/pg_query/include/{port → postgres/port}/pg_bitutils.h +62 -25
- data/ext/pg_query/include/{port → postgres/port}/pg_bswap.h +1 -1
- data/ext/pg_query/include/{port → postgres/port}/pg_crc32c.h +1 -1
- data/ext/pg_query/include/postgres/port/simd.h +375 -0
- data/ext/pg_query/include/postgres/port/win32/arpa/inet.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/dlfcn.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/grp.h +1 -0
- data/ext/pg_query/include/postgres/port/win32/netdb.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/in.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/netinet/tcp.h +7 -0
- data/ext/pg_query/include/postgres/port/win32/pwd.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/resource.h +20 -0
- data/ext/pg_query/include/postgres/port/win32/sys/select.h +3 -0
- data/ext/pg_query/include/postgres/port/win32/sys/socket.h +26 -0
- data/ext/pg_query/include/postgres/port/win32/sys/un.h +17 -0
- data/ext/pg_query/include/postgres/port/win32/sys/wait.h +3 -0
- data/ext/pg_query/include/postgres/port/win32.h +59 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/dirent.h +34 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/file.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/param.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/sys/time.h +1 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/unistd.h +9 -0
- data/ext/pg_query/include/postgres/port/win32_msvc/utime.h +3 -0
- data/ext/pg_query/include/postgres/port/win32_port.h +594 -0
- data/ext/pg_query/include/{port.h → postgres/port.h} +42 -75
- data/ext/pg_query/include/postgres/portability/instr_time.h +197 -0
- data/ext/pg_query/include/postgres/postgres.h +579 -0
- data/ext/pg_query/include/{postgres_ext.h → postgres/postgres_ext.h} +0 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/autovacuum.h +1 -4
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +1 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
- data/ext/pg_query/include/postgres/postmaster/pgarch.h +36 -0
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +6 -3
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/startup.h +3 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +3 -1
- data/ext/pg_query/include/{regex → postgres/regex}/regex.h +9 -6
- data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +6 -1
- data/ext/pg_query/include/{replication → postgres/replication}/logicalproto.h +30 -10
- data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
- data/ext/pg_query/include/{replication → postgres/replication}/origin.h +4 -4
- data/ext/pg_query/include/{replication → postgres/replication}/reorderbuffer.h +113 -45
- data/ext/pg_query/include/{replication → postgres/replication}/slot.h +25 -6
- data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +2 -8
- data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +15 -9
- data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +13 -13
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -4
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteManip.h +11 -2
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteSupport.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/backendid.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -31
- data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +183 -87
- data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +146 -93
- data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +3 -6
- data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +4 -1
- data/ext/pg_query/include/{storage → postgres/storage}/fd.h +24 -20
- data/ext/pg_query/include/{storage → postgres/storage}/fileset.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/item.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/itemid.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/itemptr.h +94 -57
- data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/latch.h +9 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +6 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lock.h +21 -13
- data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +16 -2
- data/ext/pg_query/include/{storage → postgres/storage}/off.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pg_sema.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pg_shmem.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/proc.h +22 -17
- data/ext/pg_query/include/{storage → postgres/storage}/procarray.h +3 -2
- data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +3 -1
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +66 -309
- data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/shm_toc.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/shmem.h +1 -23
- data/ext/pg_query/include/{storage → postgres/storage}/sinval.h +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
- data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +12 -10
- data/ext/pg_query/include/{storage → postgres/storage}/spin.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/standby.h +9 -8
- data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/sync.h +3 -3
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/deparse_utility.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/dest.h +1 -3
- data/ext/pg_query/include/{tcop → postgres/tcop}/fastpath.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +1 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +3 -6
- data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +1 -1
- data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +2 -4
- data/ext/pg_query/include/{utils → postgres/utils}/acl.h +26 -81
- data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/array.h +19 -1
- data/ext/pg_query/include/{utils → postgres/utils}/backend_progress.h +2 -1
- data/ext/pg_query/include/{utils → postgres/utils}/backend_status.h +24 -3
- data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +15 -6
- data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/catcache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/date.h +37 -9
- data/ext/pg_query/include/{utils → postgres/utils}/datetime.h +41 -21
- data/ext/pg_query/include/{utils → postgres/utils}/datum.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/elog.h +104 -29
- data/ext/pg_query/include/{utils → postgres/utils}/expandeddatum.h +14 -3
- data/ext/pg_query/include/{utils → postgres/utils}/expandedrecord.h +14 -4
- data/ext/pg_query/include/{utils → postgres/utils}/float.h +7 -6
- data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +54 -1
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +45 -3
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/guc.h +59 -86
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +49 -3
- data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/inval.h +3 -3
- data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
- data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +7 -51
- data/ext/pg_query/include/postgres/utils/memutils_internal.h +136 -0
- data/ext/pg_query/include/postgres/utils/memutils_memorychunk.h +237 -0
- data/ext/pg_query/include/{utils → postgres/utils}/numeric.h +20 -5
- data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +9 -2
- data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +22 -14
- data/ext/pg_query/include/{utils → postgres/utils}/pgstat_internal.h +37 -7
- data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/portal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/probes.h +6 -6
- data/ext/pg_query/include/postgres/utils/ps_status.h +47 -0
- data/ext/pg_query/include/{utils → postgres/utils}/queryenvironment.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/regproc.h +3 -3
- data/ext/pg_query/include/{utils → postgres/utils}/rel.h +60 -43
- data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +13 -8
- data/ext/pg_query/include/{utils → postgres/utils}/reltrigger.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/resowner.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/ruleutils.h +6 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +4 -2
- data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +2 -2
- data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +4 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +41 -11
- data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +189 -35
- data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +13 -1
- data/ext/pg_query/include/{utils → postgres/utils}/wait_event.h +9 -4
- data/ext/pg_query/include/{utils → postgres/utils}/xml.h +15 -5
- data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +7 -457
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
- data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
- data/ext/pg_query/pg_query.c +10 -1
- data/ext/pg_query/pg_query.pb-c.c +19755 -17757
- data/ext/pg_query/pg_query_deparse.c +1 -10635
- data/ext/pg_query/pg_query_fingerprint.c +12 -8
- data/ext/pg_query/pg_query_fingerprint.h +1 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_json.c +6 -0
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +3 -2
- data/ext/pg_query/pg_query_parse.c +47 -5
- data/ext/pg_query/pg_query_parse_plpgsql.c +7 -5
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +1 -0
- data/ext/pg_query/pg_query_ruby.c +5 -0
- data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/pg_query_split.c +3 -3
- data/ext/pg_query/postgres_deparse.c +11067 -0
- data/ext/pg_query/postgres_deparse.h +9 -0
- data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
- data/ext/pg_query/src_backend_commands_define.c +1 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +14 -2
- data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
- data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
- data/ext/pg_query/src_backend_parser_parser.c +28 -2
- data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
- data/ext/pg_query/src_backend_parser_scansup.c +1 -1
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
- data/ext/pg_query/src_backend_utils_error_elog.c +371 -249
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
- data/ext/pg_query/src_backend_utils_init_globals.c +6 -3
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +21 -67
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +492 -0
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
- data/ext/pg_query/src_backend_utils_mmgr_slab.c +1021 -0
- data/ext/pg_query/src_common_encnames.c +4 -1
- data/ext/pg_query/src_common_hashfn.c +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +534 -510
- data/ext/pg_query/src_common_kwlookup.c +1 -1
- data/ext/pg_query/src_common_psprintf.c +1 -1
- data/ext/pg_query/src_common_stringinfo.c +4 -4
- data/ext/pg_query/src_common_wchar.c +9 -8
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
- data/ext/pg_query/src_pl_plpgsql_src_pl_handler.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/src_port_pg_bitutils.c +79 -5
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +6 -10
- data/ext/pg_query/src_port_strerror.c +1 -1
- data/ext/pg_query/src_port_strlcpy.c +79 -0
- data/lib/pg_query/fingerprint.rb +2 -3
- data/lib/pg_query/node.rb +16 -11
- data/lib/pg_query/parse.rb +1 -1
- data/lib/pg_query/pg_query_pb.rb +166 -3191
- data/lib/pg_query/treewalker.rb +23 -5
- data/lib/pg_query/version.rb +1 -1
- metadata +432 -380
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/common/ip.h +0 -31
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/kwlist_d.h +0 -1095
- data/ext/pg_query/include/parser/gram.h +0 -1101
- data/ext/pg_query/include/pg_config_os.h +0 -8
- data/ext/pg_query/include/portability/instr_time.h +0 -256
- data/ext/pg_query/include/postmaster/auxprocess.h +0 -20
- data/ext/pg_query/include/postmaster/fork_process.h +0 -17
- data/ext/pg_query/include/postmaster/pgarch.h +0 -73
- data/ext/pg_query/include/replication/logicalworker.h +0 -19
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -20
- data/ext/pg_query/include/utils/pg_lsn.h +0 -29
- data/ext/pg_query/include/utils/pidfile.h +0 -56
- data/ext/pg_query/include/utils/ps_status.h +0 -25
- data/ext/pg_query/include/utils/rls.h +0 -50
- data/ext/pg_query/include/utils/tzparser.h +0 -39
- data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2201
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -371
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
- data/ext/pg_query/src_common_pg_prng.c +0 -152
- data/ext/pg_query/src_common_string.c +0 -92
- data/ext/pg_query/src_port_pgsleep.c +0 -69
- data/ext/pg_query/src_port_strnlen.c +0 -39
- /data/ext/pg_query/include/{access → postgres/access}/rmgr.h +0 -0
- /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
- /data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +0 -0
- /data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -0
- /data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +0 -0
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*
|
|
6
6
|
* See proclist.h for functions that operate on these types.
|
|
7
7
|
*
|
|
8
|
-
* Portions Copyright (c) 2016-
|
|
8
|
+
* Portions Copyright (c) 2016-2023, PostgreSQL Global Development Group
|
|
9
9
|
*
|
|
10
10
|
* IDENTIFICATION
|
|
11
11
|
* src/include/storage/proclist_types.h
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Routines for interprocess signaling
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/procsignal.h
|
|
@@ -35,12 +35,14 @@ typedef enum
|
|
|
35
35
|
PROCSIG_WALSND_INIT_STOPPING, /* ask walsenders to prepare for shutdown */
|
|
36
36
|
PROCSIG_BARRIER, /* global barrier interrupt */
|
|
37
37
|
PROCSIG_LOG_MEMORY_CONTEXT, /* ask backend to log the memory contexts */
|
|
38
|
+
PROCSIG_PARALLEL_APPLY_MESSAGE, /* Message from parallel apply workers */
|
|
38
39
|
|
|
39
40
|
/* Recovery conflict reasons */
|
|
40
41
|
PROCSIG_RECOVERY_CONFLICT_DATABASE,
|
|
41
42
|
PROCSIG_RECOVERY_CONFLICT_TABLESPACE,
|
|
42
43
|
PROCSIG_RECOVERY_CONFLICT_LOCK,
|
|
43
44
|
PROCSIG_RECOVERY_CONFLICT_SNAPSHOT,
|
|
45
|
+
PROCSIG_RECOVERY_CONFLICT_LOGICALSLOT,
|
|
44
46
|
PROCSIG_RECOVERY_CONFLICT_BUFFERPIN,
|
|
45
47
|
PROCSIG_RECOVERY_CONFLICT_STARTUP_DEADLOCK,
|
|
46
48
|
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* relfilelocator.h
|
|
4
|
+
* Physical access information for relations.
|
|
5
|
+
*
|
|
6
|
+
*
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
|
+
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
|
+
*
|
|
10
|
+
* src/include/storage/relfilelocator.h
|
|
11
|
+
*
|
|
12
|
+
*-------------------------------------------------------------------------
|
|
13
|
+
*/
|
|
14
|
+
#ifndef RELFILELOCATOR_H
|
|
15
|
+
#define RELFILELOCATOR_H
|
|
16
|
+
|
|
17
|
+
#include "common/relpath.h"
|
|
18
|
+
#include "storage/backendid.h"
|
|
19
|
+
|
|
20
|
+
/*
|
|
21
|
+
* RelFileLocator must provide all that we need to know to physically access
|
|
22
|
+
* a relation, with the exception of the backend ID, which can be provided
|
|
23
|
+
* separately. Note, however, that a "physical" relation is comprised of
|
|
24
|
+
* multiple files on the filesystem, as each fork is stored as a separate
|
|
25
|
+
* file, and each fork can be divided into multiple segments. See md.c.
|
|
26
|
+
*
|
|
27
|
+
* spcOid identifies the tablespace of the relation. It corresponds to
|
|
28
|
+
* pg_tablespace.oid.
|
|
29
|
+
*
|
|
30
|
+
* dbOid identifies the database of the relation. It is zero for
|
|
31
|
+
* "shared" relations (those common to all databases of a cluster).
|
|
32
|
+
* Nonzero dbOid values correspond to pg_database.oid.
|
|
33
|
+
*
|
|
34
|
+
* relNumber identifies the specific relation. relNumber corresponds to
|
|
35
|
+
* pg_class.relfilenode (NOT pg_class.oid, because we need to be able
|
|
36
|
+
* to assign new physical files to relations in some situations).
|
|
37
|
+
* Notice that relNumber is only unique within a database in a particular
|
|
38
|
+
* tablespace.
|
|
39
|
+
*
|
|
40
|
+
* Note: spcOid must be GLOBALTABLESPACE_OID if and only if dbOid is
|
|
41
|
+
* zero. We support shared relations only in the "global" tablespace.
|
|
42
|
+
*
|
|
43
|
+
* Note: in pg_class we allow reltablespace == 0 to denote that the
|
|
44
|
+
* relation is stored in its database's "default" tablespace (as
|
|
45
|
+
* identified by pg_database.dattablespace). However this shorthand
|
|
46
|
+
* is NOT allowed in RelFileLocator structs --- the real tablespace ID
|
|
47
|
+
* must be supplied when setting spcOid.
|
|
48
|
+
*
|
|
49
|
+
* Note: in pg_class, relfilenode can be zero to denote that the relation
|
|
50
|
+
* is a "mapped" relation, whose current true filenode number is available
|
|
51
|
+
* from relmapper.c. Again, this case is NOT allowed in RelFileLocators.
|
|
52
|
+
*
|
|
53
|
+
* Note: various places use RelFileLocator in hashtable keys. Therefore,
|
|
54
|
+
* there *must not* be any unused padding bytes in this struct. That
|
|
55
|
+
* should be safe as long as all the fields are of type Oid.
|
|
56
|
+
*/
|
|
57
|
+
typedef struct RelFileLocator
|
|
58
|
+
{
|
|
59
|
+
Oid spcOid; /* tablespace */
|
|
60
|
+
Oid dbOid; /* database */
|
|
61
|
+
RelFileNumber relNumber; /* relation */
|
|
62
|
+
} RelFileLocator;
|
|
63
|
+
|
|
64
|
+
/*
|
|
65
|
+
* Augmenting a relfilelocator with the backend ID provides all the information
|
|
66
|
+
* we need to locate the physical storage. The backend ID is InvalidBackendId
|
|
67
|
+
* for regular relations (those accessible to more than one backend), or the
|
|
68
|
+
* owning backend's ID for backend-local relations. Backend-local relations
|
|
69
|
+
* are always transient and removed in case of a database crash; they are
|
|
70
|
+
* never WAL-logged or fsync'd.
|
|
71
|
+
*/
|
|
72
|
+
typedef struct RelFileLocatorBackend
|
|
73
|
+
{
|
|
74
|
+
RelFileLocator locator;
|
|
75
|
+
BackendId backend;
|
|
76
|
+
} RelFileLocatorBackend;
|
|
77
|
+
|
|
78
|
+
#define RelFileLocatorBackendIsTemp(rlocator) \
|
|
79
|
+
((rlocator).backend != InvalidBackendId)
|
|
80
|
+
|
|
81
|
+
/*
|
|
82
|
+
* Note: RelFileLocatorEquals and RelFileLocatorBackendEquals compare relNumber
|
|
83
|
+
* first since that is most likely to be different in two unequal
|
|
84
|
+
* RelFileLocators. It is probably redundant to compare spcOid if the other
|
|
85
|
+
* fields are found equal, but do it anyway to be sure. Likewise for checking
|
|
86
|
+
* the backend ID in RelFileLocatorBackendEquals.
|
|
87
|
+
*/
|
|
88
|
+
#define RelFileLocatorEquals(locator1, locator2) \
|
|
89
|
+
((locator1).relNumber == (locator2).relNumber && \
|
|
90
|
+
(locator1).dbOid == (locator2).dbOid && \
|
|
91
|
+
(locator1).spcOid == (locator2).spcOid)
|
|
92
|
+
|
|
93
|
+
#define RelFileLocatorBackendEquals(locator1, locator2) \
|
|
94
|
+
((locator1).locator.relNumber == (locator2).locator.relNumber && \
|
|
95
|
+
(locator1).locator.dbOid == (locator2).locator.dbOid && \
|
|
96
|
+
(locator1).backend == (locator2).backend && \
|
|
97
|
+
(locator1).locator.spcOid == (locator2).locator.spcOid)
|
|
98
|
+
|
|
99
|
+
#endif /* RELFILELOCATOR_H */
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
* when using the SysV semaphore code.
|
|
87
87
|
*
|
|
88
88
|
*
|
|
89
|
-
* Portions Copyright (c) 1996-
|
|
89
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
90
90
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
91
91
|
*
|
|
92
92
|
* src/include/storage/s_lock.h
|
|
@@ -142,7 +142,7 @@ typedef unsigned char slock_t;
|
|
|
142
142
|
static __inline__ int
|
|
143
143
|
tas(volatile slock_t *lock)
|
|
144
144
|
{
|
|
145
|
-
|
|
145
|
+
slock_t _res = 1;
|
|
146
146
|
|
|
147
147
|
/*
|
|
148
148
|
* Use a non-locking test before asserting the bus lock. Note that the
|
|
@@ -223,7 +223,7 @@ typedef unsigned char slock_t;
|
|
|
223
223
|
static __inline__ int
|
|
224
224
|
tas(volatile slock_t *lock)
|
|
225
225
|
{
|
|
226
|
-
|
|
226
|
+
slock_t _res = 1;
|
|
227
227
|
|
|
228
228
|
__asm__ __volatile__(
|
|
229
229
|
" lock \n"
|
|
@@ -250,78 +250,13 @@ spin_delay(void)
|
|
|
250
250
|
#endif /* __x86_64__ */
|
|
251
251
|
|
|
252
252
|
|
|
253
|
-
#if defined(__ia64__) || defined(__ia64)
|
|
254
|
-
/*
|
|
255
|
-
* Intel Itanium, gcc or Intel's compiler.
|
|
256
|
-
*
|
|
257
|
-
* Itanium has weak memory ordering, but we rely on the compiler to enforce
|
|
258
|
-
* strict ordering of accesses to volatile data. In particular, while the
|
|
259
|
-
* xchg instruction implicitly acts as a memory barrier with 'acquire'
|
|
260
|
-
* semantics, we do not have an explicit memory fence instruction in the
|
|
261
|
-
* S_UNLOCK macro. We use a regular assignment to clear the spinlock, and
|
|
262
|
-
* trust that the compiler marks the generated store instruction with the
|
|
263
|
-
* ".rel" opcode.
|
|
264
|
-
*
|
|
265
|
-
* Testing shows that assumption to hold on gcc, although I could not find
|
|
266
|
-
* any explicit statement on that in the gcc manual. In Intel's compiler,
|
|
267
|
-
* the -m[no-]serialize-volatile option controls that, and testing shows that
|
|
268
|
-
* it is enabled by default.
|
|
269
|
-
*
|
|
270
|
-
* While icc accepts gcc asm blocks on x86[_64], this is not true on ia64
|
|
271
|
-
* (at least not in icc versions before 12.x). So we have to carry a separate
|
|
272
|
-
* compiler-intrinsic-based implementation for it.
|
|
273
|
-
*/
|
|
274
|
-
#define HAS_TEST_AND_SET
|
|
275
|
-
|
|
276
|
-
typedef unsigned int slock_t;
|
|
277
|
-
|
|
278
|
-
#define TAS(lock) tas(lock)
|
|
279
|
-
|
|
280
|
-
/* On IA64, it's a win to use a non-locking test before the xchg proper */
|
|
281
|
-
#define TAS_SPIN(lock) (*(lock) ? 1 : TAS(lock))
|
|
282
|
-
|
|
283
|
-
#ifndef __INTEL_COMPILER
|
|
284
|
-
|
|
285
|
-
static __inline__ int
|
|
286
|
-
tas(volatile slock_t *lock)
|
|
287
|
-
{
|
|
288
|
-
long int ret;
|
|
289
|
-
|
|
290
|
-
__asm__ __volatile__(
|
|
291
|
-
" xchg4 %0=%1,%2 \n"
|
|
292
|
-
: "=r"(ret), "+m"(*lock)
|
|
293
|
-
: "r"(1)
|
|
294
|
-
: "memory");
|
|
295
|
-
return (int) ret;
|
|
296
|
-
}
|
|
297
|
-
|
|
298
|
-
#else /* __INTEL_COMPILER */
|
|
299
|
-
|
|
300
|
-
static __inline__ int
|
|
301
|
-
tas(volatile slock_t *lock)
|
|
302
|
-
{
|
|
303
|
-
int ret;
|
|
304
|
-
|
|
305
|
-
ret = _InterlockedExchange(lock,1); /* this is a xchg asm macro */
|
|
306
|
-
|
|
307
|
-
return ret;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
/* icc can't use the regular gcc S_UNLOCK() macro either in this case */
|
|
311
|
-
#define S_UNLOCK(lock) \
|
|
312
|
-
do { __memory_barrier(); *(lock) = 0; } while (0)
|
|
313
|
-
|
|
314
|
-
#endif /* __INTEL_COMPILER */
|
|
315
|
-
#endif /* __ia64__ || __ia64 */
|
|
316
|
-
|
|
317
|
-
|
|
318
253
|
/*
|
|
319
254
|
* On ARM and ARM64, we use __sync_lock_test_and_set(int *, int) if available.
|
|
320
255
|
*
|
|
321
256
|
* We use the int-width variant of the builtin because it works on more chips
|
|
322
257
|
* than other widths.
|
|
323
258
|
*/
|
|
324
|
-
#if defined(__arm__) || defined(__arm) || defined(__aarch64__)
|
|
259
|
+
#if defined(__arm__) || defined(__arm) || defined(__aarch64__)
|
|
325
260
|
#ifdef HAVE_GCC__SYNC_INT32_TAS
|
|
326
261
|
#define HAS_TEST_AND_SET
|
|
327
262
|
|
|
@@ -342,7 +277,7 @@ tas(volatile slock_t *lock)
|
|
|
342
277
|
* high-core-count ARM64 processors. It seems mostly a wash for smaller gear,
|
|
343
278
|
* and ISB doesn't exist at all on pre-v7 ARM chips.
|
|
344
279
|
*/
|
|
345
|
-
#if defined(__aarch64__)
|
|
280
|
+
#if defined(__aarch64__)
|
|
346
281
|
|
|
347
282
|
#define SPIN_DELAY() spin_delay()
|
|
348
283
|
|
|
@@ -353,9 +288,9 @@ spin_delay(void)
|
|
|
353
288
|
" isb; \n");
|
|
354
289
|
}
|
|
355
290
|
|
|
356
|
-
#endif /* __aarch64__
|
|
291
|
+
#endif /* __aarch64__ */
|
|
357
292
|
#endif /* HAVE_GCC__SYNC_INT32_TAS */
|
|
358
|
-
#endif /* __arm__ || __arm || __aarch64__
|
|
293
|
+
#endif /* __arm__ || __arm || __aarch64__ */
|
|
359
294
|
|
|
360
295
|
|
|
361
296
|
/* S/390 and S/390x Linux (32- and 64-bit zSeries) */
|
|
@@ -386,7 +321,7 @@ tas(volatile slock_t *lock)
|
|
|
386
321
|
/*
|
|
387
322
|
* Solaris has always run sparc processors in TSO (total store) mode, but
|
|
388
323
|
* linux didn't use to and the *BSDs still don't. So, be careful about
|
|
389
|
-
* acquire/release semantics. The CPU will treat superfluous
|
|
324
|
+
* acquire/release semantics. The CPU will treat superfluous members as
|
|
390
325
|
* NOPs, so it's just code space.
|
|
391
326
|
*/
|
|
392
327
|
#define HAS_TEST_AND_SET
|
|
@@ -398,7 +333,7 @@ typedef unsigned char slock_t;
|
|
|
398
333
|
static __inline__ int
|
|
399
334
|
tas(volatile slock_t *lock)
|
|
400
335
|
{
|
|
401
|
-
|
|
336
|
+
slock_t _res;
|
|
402
337
|
|
|
403
338
|
/*
|
|
404
339
|
* See comment in src/backend/port/tas/sunstudio_sparc.s for why this
|
|
@@ -477,7 +412,8 @@ typedef unsigned int slock_t;
|
|
|
477
412
|
*
|
|
478
413
|
* NOTE: per the Enhanced PowerPC Architecture manual, v1.0 dated 7-May-2002,
|
|
479
414
|
* an isync is a sufficient synchronization barrier after a lwarx/stwcx loop.
|
|
480
|
-
*
|
|
415
|
+
* But if the spinlock is in ordinary memory, we can use lwsync instead for
|
|
416
|
+
* better performance.
|
|
481
417
|
*
|
|
482
418
|
* Ordinarily, we'd code the branches here using GNU-style local symbols, that
|
|
483
419
|
* is "1f" referencing "1:" and so on. But some people run gcc on AIX with
|
|
@@ -492,23 +428,15 @@ tas(volatile slock_t *lock)
|
|
|
492
428
|
int _res;
|
|
493
429
|
|
|
494
430
|
__asm__ __volatile__(
|
|
495
|
-
#ifdef USE_PPC_LWARX_MUTEX_HINT
|
|
496
431
|
" lwarx %0,0,%3,1 \n"
|
|
497
|
-
#else
|
|
498
|
-
" lwarx %0,0,%3 \n"
|
|
499
|
-
#endif
|
|
500
432
|
" cmpwi %0,0 \n"
|
|
501
433
|
" bne $+16 \n" /* branch to li %1,1 */
|
|
502
434
|
" addi %0,%0,1 \n"
|
|
503
435
|
" stwcx. %0,0,%3 \n"
|
|
504
|
-
" beq $+12 \n" /* branch to lwsync
|
|
436
|
+
" beq $+12 \n" /* branch to lwsync */
|
|
505
437
|
" li %1,1 \n"
|
|
506
438
|
" b $+12 \n" /* branch to end of asm sequence */
|
|
507
|
-
#ifdef USE_PPC_LWSYNC
|
|
508
439
|
" lwsync \n"
|
|
509
|
-
#else
|
|
510
|
-
" isync \n"
|
|
511
|
-
#endif
|
|
512
440
|
" li %1,0 \n"
|
|
513
441
|
|
|
514
442
|
: "=&b"(_t), "=r"(_res), "+m"(*lock)
|
|
@@ -519,107 +447,18 @@ tas(volatile slock_t *lock)
|
|
|
519
447
|
|
|
520
448
|
/*
|
|
521
449
|
* PowerPC S_UNLOCK is almost standard but requires a "sync" instruction.
|
|
522
|
-
*
|
|
450
|
+
* But we can use lwsync instead for better performance.
|
|
523
451
|
*/
|
|
524
|
-
#ifdef USE_PPC_LWSYNC
|
|
525
452
|
#define S_UNLOCK(lock) \
|
|
526
453
|
do \
|
|
527
454
|
{ \
|
|
528
455
|
__asm__ __volatile__ (" lwsync \n" ::: "memory"); \
|
|
529
456
|
*((volatile slock_t *) (lock)) = 0; \
|
|
530
457
|
} while (0)
|
|
531
|
-
#else
|
|
532
|
-
#define S_UNLOCK(lock) \
|
|
533
|
-
do \
|
|
534
|
-
{ \
|
|
535
|
-
__asm__ __volatile__ (" sync \n" ::: "memory"); \
|
|
536
|
-
*((volatile slock_t *) (lock)) = 0; \
|
|
537
|
-
} while (0)
|
|
538
|
-
#endif /* USE_PPC_LWSYNC */
|
|
539
458
|
|
|
540
459
|
#endif /* powerpc */
|
|
541
460
|
|
|
542
461
|
|
|
543
|
-
/* Linux Motorola 68k */
|
|
544
|
-
#if (defined(__mc68000__) || defined(__m68k__)) && defined(__linux__)
|
|
545
|
-
#define HAS_TEST_AND_SET
|
|
546
|
-
|
|
547
|
-
typedef unsigned char slock_t;
|
|
548
|
-
|
|
549
|
-
#define TAS(lock) tas(lock)
|
|
550
|
-
|
|
551
|
-
static __inline__ int
|
|
552
|
-
tas(volatile slock_t *lock)
|
|
553
|
-
{
|
|
554
|
-
register int rv;
|
|
555
|
-
|
|
556
|
-
__asm__ __volatile__(
|
|
557
|
-
" clrl %0 \n"
|
|
558
|
-
" tas %1 \n"
|
|
559
|
-
" sne %0 \n"
|
|
560
|
-
: "=d"(rv), "+m"(*lock)
|
|
561
|
-
: /* no inputs */
|
|
562
|
-
: "memory", "cc");
|
|
563
|
-
return rv;
|
|
564
|
-
}
|
|
565
|
-
|
|
566
|
-
#endif /* (__mc68000__ || __m68k__) && __linux__ */
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
/* Motorola 88k */
|
|
570
|
-
#if defined(__m88k__)
|
|
571
|
-
#define HAS_TEST_AND_SET
|
|
572
|
-
|
|
573
|
-
typedef unsigned int slock_t;
|
|
574
|
-
|
|
575
|
-
#define TAS(lock) tas(lock)
|
|
576
|
-
|
|
577
|
-
static __inline__ int
|
|
578
|
-
tas(volatile slock_t *lock)
|
|
579
|
-
{
|
|
580
|
-
register slock_t _res = 1;
|
|
581
|
-
|
|
582
|
-
__asm__ __volatile__(
|
|
583
|
-
" xmem %0, %2, %%r0 \n"
|
|
584
|
-
: "+r"(_res), "+m"(*lock)
|
|
585
|
-
: "r"(lock)
|
|
586
|
-
: "memory");
|
|
587
|
-
return (int) _res;
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
#endif /* __m88k__ */
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
/*
|
|
594
|
-
* VAXen -- even multiprocessor ones
|
|
595
|
-
* (thanks to Tom Ivar Helbekkmo)
|
|
596
|
-
*/
|
|
597
|
-
#if defined(__vax__)
|
|
598
|
-
#define HAS_TEST_AND_SET
|
|
599
|
-
|
|
600
|
-
typedef unsigned char slock_t;
|
|
601
|
-
|
|
602
|
-
#define TAS(lock) tas(lock)
|
|
603
|
-
|
|
604
|
-
static __inline__ int
|
|
605
|
-
tas(volatile slock_t *lock)
|
|
606
|
-
{
|
|
607
|
-
register int _res;
|
|
608
|
-
|
|
609
|
-
__asm__ __volatile__(
|
|
610
|
-
" movl $1, %0 \n"
|
|
611
|
-
" bbssi $0, (%2), 1f \n"
|
|
612
|
-
" clrl %0 \n"
|
|
613
|
-
"1: \n"
|
|
614
|
-
: "=&r"(_res), "+m"(*lock)
|
|
615
|
-
: "r"(lock)
|
|
616
|
-
: "memory");
|
|
617
|
-
return _res;
|
|
618
|
-
}
|
|
619
|
-
|
|
620
|
-
#endif /* __vax__ */
|
|
621
|
-
|
|
622
|
-
|
|
623
462
|
#if defined(__mips__) && !defined(__sgi) /* non-SGI MIPS */
|
|
624
463
|
#define HAS_TEST_AND_SET
|
|
625
464
|
|
|
@@ -649,9 +488,9 @@ typedef unsigned int slock_t;
|
|
|
649
488
|
static __inline__ int
|
|
650
489
|
tas(volatile slock_t *lock)
|
|
651
490
|
{
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
491
|
+
volatile slock_t *_l = lock;
|
|
492
|
+
int _res;
|
|
493
|
+
int _tmp;
|
|
655
494
|
|
|
656
495
|
__asm__ __volatile__(
|
|
657
496
|
" .set push \n"
|
|
@@ -691,56 +530,70 @@ do \
|
|
|
691
530
|
#endif /* __mips__ && !__sgi */
|
|
692
531
|
|
|
693
532
|
|
|
694
|
-
#if defined(
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
#endif /* __m32r__ */
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
#if defined(__sh__) /* Renesas' SuperH */
|
|
533
|
+
#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC */
|
|
534
|
+
/*
|
|
535
|
+
* HP's PA-RISC
|
|
536
|
+
*
|
|
537
|
+
* Because LDCWX requires a 16-byte-aligned address, we declare slock_t as a
|
|
538
|
+
* 16-byte struct. The active word in the struct is whichever has the aligned
|
|
539
|
+
* address; the other three words just sit at -1.
|
|
540
|
+
*/
|
|
707
541
|
#define HAS_TEST_AND_SET
|
|
708
542
|
|
|
709
|
-
typedef
|
|
543
|
+
typedef struct
|
|
544
|
+
{
|
|
545
|
+
int sema[4];
|
|
546
|
+
} slock_t;
|
|
710
547
|
|
|
711
|
-
#define
|
|
548
|
+
#define TAS_ACTIVE_WORD(lock) ((volatile int *) (((uintptr_t) (lock) + 15) & ~15))
|
|
712
549
|
|
|
713
550
|
static __inline__ int
|
|
714
551
|
tas(volatile slock_t *lock)
|
|
715
552
|
{
|
|
716
|
-
|
|
553
|
+
volatile int *lockword = TAS_ACTIVE_WORD(lock);
|
|
554
|
+
int lockval;
|
|
717
555
|
|
|
718
556
|
/*
|
|
719
|
-
*
|
|
720
|
-
*
|
|
721
|
-
* the
|
|
557
|
+
* The LDCWX instruction atomically clears the target word and
|
|
558
|
+
* returns the previous value. Hence, if the instruction returns
|
|
559
|
+
* 0, someone else has already acquired the lock before we tested
|
|
560
|
+
* it (i.e., we have failed).
|
|
561
|
+
*
|
|
562
|
+
* Notice that this means that we actually clear the word to set
|
|
563
|
+
* the lock and set the word to clear the lock. This is the
|
|
564
|
+
* opposite behavior from the SPARC LDSTUB instruction. For some
|
|
565
|
+
* reason everything that H-P does is rather baroque...
|
|
566
|
+
*
|
|
567
|
+
* For details about the LDCWX instruction, see the "Precision
|
|
568
|
+
* Architecture and Instruction Reference Manual" (09740-90014 of June
|
|
569
|
+
* 1987), p. 5-38.
|
|
722
570
|
*/
|
|
723
571
|
__asm__ __volatile__(
|
|
724
|
-
"
|
|
725
|
-
"
|
|
726
|
-
"
|
|
727
|
-
: "
|
|
728
|
-
|
|
729
|
-
: "memory", "t");
|
|
730
|
-
return _res;
|
|
572
|
+
" ldcwx 0(0,%2),%0 \n"
|
|
573
|
+
: "=r"(lockval), "+m"(*lockword)
|
|
574
|
+
: "r"(lockword)
|
|
575
|
+
: "memory");
|
|
576
|
+
return (lockval == 0);
|
|
731
577
|
}
|
|
732
578
|
|
|
733
|
-
#
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
579
|
+
#define S_UNLOCK(lock) \
|
|
580
|
+
do { \
|
|
581
|
+
__asm__ __volatile__("" : : : "memory"); \
|
|
582
|
+
*TAS_ACTIVE_WORD(lock) = -1; \
|
|
583
|
+
} while (0)
|
|
737
584
|
|
|
585
|
+
#define S_INIT_LOCK(lock) \
|
|
586
|
+
do { \
|
|
587
|
+
volatile slock_t *lock_ = (lock); \
|
|
588
|
+
lock_->sema[0] = -1; \
|
|
589
|
+
lock_->sema[1] = -1; \
|
|
590
|
+
lock_->sema[2] = -1; \
|
|
591
|
+
lock_->sema[3] = -1; \
|
|
592
|
+
} while (0)
|
|
738
593
|
|
|
739
|
-
#
|
|
740
|
-
#define HAS_TEST_AND_SET
|
|
594
|
+
#define S_LOCK_FREE(lock) (*TAS_ACTIVE_WORD(lock) != 0)
|
|
741
595
|
|
|
742
|
-
|
|
743
|
-
#endif
|
|
596
|
+
#endif /* __hppa || __hppa__ */
|
|
744
597
|
|
|
745
598
|
|
|
746
599
|
/*
|
|
@@ -805,7 +658,6 @@ tas(volatile slock_t *lock)
|
|
|
805
658
|
#endif /* defined(__GNUC__) || defined(__INTEL_COMPILER) */
|
|
806
659
|
|
|
807
660
|
|
|
808
|
-
|
|
809
661
|
/*
|
|
810
662
|
* ---------------------------------------------------------------------
|
|
811
663
|
* Platforms that use non-gcc inline assembly:
|
|
@@ -814,101 +666,6 @@ tas(volatile slock_t *lock)
|
|
|
814
666
|
|
|
815
667
|
#if !defined(HAS_TEST_AND_SET) /* We didn't trigger above, let's try here */
|
|
816
668
|
|
|
817
|
-
|
|
818
|
-
#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */
|
|
819
|
-
/*
|
|
820
|
-
* HP's PA-RISC
|
|
821
|
-
*
|
|
822
|
-
* See src/backend/port/hpux/tas.c.template for details about LDCWX. Because
|
|
823
|
-
* LDCWX requires a 16-byte-aligned address, we declare slock_t as a 16-byte
|
|
824
|
-
* struct. The active word in the struct is whichever has the aligned address;
|
|
825
|
-
* the other three words just sit at -1.
|
|
826
|
-
*
|
|
827
|
-
* When using gcc, we can inline the required assembly code.
|
|
828
|
-
*/
|
|
829
|
-
#define HAS_TEST_AND_SET
|
|
830
|
-
|
|
831
|
-
typedef struct
|
|
832
|
-
{
|
|
833
|
-
int sema[4];
|
|
834
|
-
} slock_t;
|
|
835
|
-
|
|
836
|
-
#define TAS_ACTIVE_WORD(lock) ((volatile int *) (((uintptr_t) (lock) + 15) & ~15))
|
|
837
|
-
|
|
838
|
-
#if defined(__GNUC__)
|
|
839
|
-
|
|
840
|
-
static __inline__ int
|
|
841
|
-
tas(volatile slock_t *lock)
|
|
842
|
-
{
|
|
843
|
-
volatile int *lockword = TAS_ACTIVE_WORD(lock);
|
|
844
|
-
register int lockval;
|
|
845
|
-
|
|
846
|
-
__asm__ __volatile__(
|
|
847
|
-
" ldcwx 0(0,%2),%0 \n"
|
|
848
|
-
: "=r"(lockval), "+m"(*lockword)
|
|
849
|
-
: "r"(lockword)
|
|
850
|
-
: "memory");
|
|
851
|
-
return (lockval == 0);
|
|
852
|
-
}
|
|
853
|
-
|
|
854
|
-
/*
|
|
855
|
-
* The hppa implementation doesn't follow the rules of this files and provides
|
|
856
|
-
* a gcc specific implementation outside of the above defined(__GNUC__). It
|
|
857
|
-
* does so to avoid duplication between the HP compiler and gcc. So undefine
|
|
858
|
-
* the generic fallback S_UNLOCK from above.
|
|
859
|
-
*/
|
|
860
|
-
#ifdef S_UNLOCK
|
|
861
|
-
#undef S_UNLOCK
|
|
862
|
-
#endif
|
|
863
|
-
#define S_UNLOCK(lock) \
|
|
864
|
-
do { \
|
|
865
|
-
__asm__ __volatile__("" : : : "memory"); \
|
|
866
|
-
*TAS_ACTIVE_WORD(lock) = -1; \
|
|
867
|
-
} while (0)
|
|
868
|
-
|
|
869
|
-
#endif /* __GNUC__ */
|
|
870
|
-
|
|
871
|
-
#define S_INIT_LOCK(lock) \
|
|
872
|
-
do { \
|
|
873
|
-
volatile slock_t *lock_ = (lock); \
|
|
874
|
-
lock_->sema[0] = -1; \
|
|
875
|
-
lock_->sema[1] = -1; \
|
|
876
|
-
lock_->sema[2] = -1; \
|
|
877
|
-
lock_->sema[3] = -1; \
|
|
878
|
-
} while (0)
|
|
879
|
-
|
|
880
|
-
#define S_LOCK_FREE(lock) (*TAS_ACTIVE_WORD(lock) != 0)
|
|
881
|
-
|
|
882
|
-
#endif /* __hppa || __hppa__ */
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
#if defined(__hpux) && defined(__ia64) && !defined(__GNUC__)
|
|
886
|
-
/*
|
|
887
|
-
* HP-UX on Itanium, non-gcc/icc compiler
|
|
888
|
-
*
|
|
889
|
-
* We assume that the compiler enforces strict ordering of loads/stores on
|
|
890
|
-
* volatile data (see comments on the gcc-version earlier in this file).
|
|
891
|
-
* Note that this assumption does *not* hold if you use the
|
|
892
|
-
* +Ovolatile=__unordered option on the HP-UX compiler, so don't do that.
|
|
893
|
-
*
|
|
894
|
-
* See also Implementing Spinlocks on the Intel Itanium Architecture and
|
|
895
|
-
* PA-RISC, by Tor Ekqvist and David Graves, for more information. As of
|
|
896
|
-
* this writing, version 1.0 of the manual is available at:
|
|
897
|
-
* http://h21007.www2.hp.com/portal/download/files/unprot/itanium/spinlocks.pdf
|
|
898
|
-
*/
|
|
899
|
-
#define HAS_TEST_AND_SET
|
|
900
|
-
|
|
901
|
-
typedef unsigned int slock_t;
|
|
902
|
-
|
|
903
|
-
#include <ia64/sys/inline.h>
|
|
904
|
-
#define TAS(lock) _Asm_xchg(_SZ_W, lock, 1, _LDHINT_NONE)
|
|
905
|
-
/* On IA64, it's a win to use a non-locking test before the xchg proper */
|
|
906
|
-
#define TAS_SPIN(lock) (*(lock) ? 1 : TAS(lock))
|
|
907
|
-
#define S_UNLOCK(lock) \
|
|
908
|
-
do { _Asm_mf(); (*(lock)) = 0; } while (0)
|
|
909
|
-
|
|
910
|
-
#endif /* HPUX on IA64, non gcc/icc */
|
|
911
|
-
|
|
912
669
|
#if defined(_AIX) /* AIX */
|
|
913
670
|
/*
|
|
914
671
|
* AIX (POWER)
|
|
@@ -1016,7 +773,7 @@ extern int tas_sema(volatile slock_t *lock);
|
|
|
1016
773
|
|
|
1017
774
|
#if !defined(S_LOCK)
|
|
1018
775
|
#define S_LOCK(lock) \
|
|
1019
|
-
(TAS(lock) ? s_lock((lock), __FILE__, __LINE__,
|
|
776
|
+
(TAS(lock) ? s_lock((lock), __FILE__, __LINE__, __func__) : 0)
|
|
1020
777
|
#endif /* S_LOCK */
|
|
1021
778
|
|
|
1022
779
|
#if !defined(S_LOCK_FREE)
|
|
@@ -1103,7 +860,7 @@ init_spin_delay(SpinDelayStatus *status,
|
|
|
1103
860
|
status->func = func;
|
|
1104
861
|
}
|
|
1105
862
|
|
|
1106
|
-
#define init_local_spin_delay(status) init_spin_delay(status, __FILE__, __LINE__,
|
|
863
|
+
#define init_local_spin_delay(status) init_spin_delay(status, __FILE__, __LINE__, __func__)
|
|
1107
864
|
extern void perform_spin_delay(SpinDelayStatus *status);
|
|
1108
865
|
extern void finish_spin_delay(SpinDelayStatus *status);
|
|
1109
866
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Shared temporary file management.
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/storage/sharedfileset.h
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* shm_mq.h
|
|
4
4
|
* single-reader, single-writer shared memory message queue
|
|
5
5
|
*
|
|
6
|
-
* Portions Copyright (c) 1996-
|
|
6
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
7
7
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
8
8
|
*
|
|
9
9
|
* src/include/storage/shm_mq.h
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* other data structure within the segment and only put the pointer to
|
|
13
13
|
* the data structure itself in the table of contents.
|
|
14
14
|
*
|
|
15
|
-
* Portions Copyright (c) 1996-
|
|
15
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
16
16
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
17
17
|
*
|
|
18
18
|
* src/include/storage/shm_toc.h
|