pg_query 2.0.3 → 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 +165 -0
- data/README.md +67 -29
- data/Rakefile +8 -23
- data/ext/pg_query/extconf.rb +21 -3
- data/ext/pg_query/include/pg_query.h +29 -4
- data/ext/pg_query/include/pg_query_enum_defs.c +551 -272
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +563 -470
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5403 -3945
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +402 -330
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1319 -1059
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +141 -118
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1685 -1379
- data/ext/pg_query/include/{access → postgres/access}/amapi.h +47 -1
- data/ext/pg_query/include/{access → postgres/access}/attmap.h +5 -3
- data/ext/pg_query/include/{access → postgres/access}/attnum.h +2 -2
- data/ext/pg_query/include/{access → postgres/access}/clog.h +4 -2
- data/ext/pg_query/include/{access → postgres/access}/commit_ts.h +6 -9
- data/ext/pg_query/include/{access → postgres/access}/detoast.h +1 -11
- data/ext/pg_query/include/{access → postgres/access}/genam.h +21 -16
- data/ext/pg_query/include/{access → postgres/access}/gin.h +17 -4
- data/ext/pg_query/include/{access → postgres/access}/htup.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/htup_details.h +80 -88
- data/ext/pg_query/include/{access → postgres/access}/itup.h +61 -52
- 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 +17 -2
- data/ext/pg_query/include/postgres/access/rmgr.h +62 -0
- data/ext/pg_query/include/{access → postgres/access}/rmgrlist.h +24 -24
- 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 +4 -2
- data/ext/pg_query/include/{access → postgres/access}/sysattr.h +1 -1
- data/ext/pg_query/include/{access → postgres/access}/table.h +2 -1
- data/ext/pg_query/include/{access → postgres/access}/tableam.h +337 -62
- data/ext/pg_query/include/postgres/access/toast_compression.h +73 -0
- data/ext/pg_query/include/{access → postgres/access}/transam.h +123 -13
- 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 +60 -100
- data/ext/pg_query/include/{access → postgres/access}/twophase.h +5 -1
- data/ext/pg_query/include/{access → postgres/access}/xact.h +99 -32
- data/ext/pg_query/include/{access → postgres/access}/xlog.h +69 -165
- data/ext/pg_query/include/{access → postgres/access}/xlog_internal.h +147 -73
- data/ext/pg_query/include/postgres/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogdefs.h +13 -40
- data/ext/pg_query/include/postgres/access/xlogprefetcher.h +55 -0
- data/ext/pg_query/include/{access → postgres/access}/xlogreader.h +154 -37
- data/ext/pg_query/include/{access → postgres/access}/xlogrecord.h +34 -13
- data/ext/pg_query/include/postgres/access/xlogrecovery.h +158 -0
- data/ext/pg_query/include/postgres/archive/archive_module.h +59 -0
- data/ext/pg_query/include/{c.h → postgres/c.h} +245 -188
- data/ext/pg_query/include/{catalog → postgres/catalog}/catalog.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/catversion.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/dependency.h +14 -19
- data/ext/pg_query/include/postgres/catalog/genbki.h +143 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/index.h +20 -5
- data/ext/pg_query/include/postgres/catalog/indexing.h +54 -0
- data/ext/pg_query/include/{catalog → postgres/catalog}/namespace.h +5 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaccess.h +73 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/objectaddress.h +12 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate.h +14 -10
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_aggregate_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am.h +4 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_am_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute.h +45 -26
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_attribute_d.h +19 -16
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_authid_d.h +19 -9
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class.h +45 -15
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_class_d.h +31 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation.h +35 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_collation_d.h +21 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint.h +39 -13
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_constraint_d.h +10 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_control.h +13 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_conversion_d.h +4 -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 +11 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_depend_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger.h +9 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_event_trigger_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index.h +17 -7
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_index_d.h +20 -17
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language.h +10 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_language_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_namespace_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opclass_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator.h +21 -16
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_operator_d.h +37 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily.h +8 -4
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_opfamily_d.h +6 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table.h +20 -9
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_partitioned_table_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc.h +20 -11
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_proc_d.h +10 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication.h +49 -6
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_publication_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin.h +6 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_replication_origin_d.h +5 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic.h +19 -12
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_d.h +2 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext.h +19 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_statistic_ext_d.h +7 -2
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform.h +8 -5
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_transform_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger.h +24 -8
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_trigger_d.h +4 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_config_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict.h +8 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_dict_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_parser_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template.h +6 -3
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_ts_template_d.h +3 -1
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type.h +56 -24
- data/ext/pg_query/include/{catalog → postgres/catalog}/pg_type_d.h +70 -31
- data/ext/pg_query/include/{catalog → postgres/catalog}/storage.h +9 -7
- data/ext/pg_query/include/{commands → postgres/commands}/async.h +4 -5
- data/ext/pg_query/include/{commands → postgres/commands}/dbcommands.h +3 -1
- data/ext/pg_query/include/{commands → postgres/commands}/defrem.h +12 -24
- data/ext/pg_query/include/{commands → postgres/commands}/event_trigger.h +2 -2
- 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 +6 -4
- data/ext/pg_query/include/{commands → postgres/commands}/trigger.h +36 -25
- data/ext/pg_query/include/{commands → postgres/commands}/user.h +10 -4
- data/ext/pg_query/include/{commands → postgres/commands}/vacuum.h +140 -47
- data/ext/pg_query/include/postgres/common/cryptohash.h +39 -0
- data/ext/pg_query/include/{common → postgres/common}/file_perm.h +4 -4
- 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 +2 -6
- data/ext/pg_query/include/{common → postgres/common}/kwlookup.h +2 -2
- data/ext/pg_query/include/postgres/common/pg_prng.h +61 -0
- data/ext/pg_query/include/{common → postgres/common}/relpath.h +21 -14
- 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/postgres/common/string.h +44 -0
- data/ext/pg_query/include/postgres/common/unicode_east_asian_fw_table.h +125 -0
- data/ext/pg_query/include/{common/unicode_combining_table.h → postgres/common/unicode_nonspacing_table.h} +138 -8
- 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 +50 -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 +98 -32
- data/ext/pg_query/include/{executor → postgres/executor}/functions.h +17 -3
- data/ext/pg_query/include/{executor → postgres/executor}/instrument.h +33 -16
- data/ext/pg_query/include/{executor → postgres/executor}/spi.h +42 -4
- 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} +33 -8
- data/ext/pg_query/include/postgres/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/{funcapi.h → postgres/funcapi.h} +22 -10
- 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 +12 -12
- data/ext/pg_query/include/postgres/kwlist_d.h +1119 -0
- data/ext/pg_query/include/postgres/lib/dshash.h +115 -0
- data/ext/pg_query/include/{lib → postgres/lib}/ilist.h +454 -22
- data/ext/pg_query/include/{lib → postgres/lib}/pairingheap.h +1 -1
- data/ext/pg_query/include/{lib → postgres/lib}/simplehash.h +158 -33
- data/ext/pg_query/include/postgres/lib/sort_template.h +432 -0
- data/ext/pg_query/include/{lib → postgres/lib}/stringinfo.h +3 -3
- data/ext/pg_query/include/{libpq → postgres/libpq}/auth.h +12 -4
- data/ext/pg_query/include/{libpq → postgres/libpq}/crypt.h +5 -4
- data/ext/pg_query/include/{libpq → postgres/libpq}/hba.h +54 -8
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq-be.h +45 -17
- data/ext/pg_query/include/{libpq → postgres/libpq}/libpq.h +31 -20
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqcomm.h +26 -71
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqformat.h +2 -2
- data/ext/pg_query/include/{libpq → postgres/libpq}/pqsignal.h +25 -13
- 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 +125 -25
- data/ext/pg_query/include/{mb → postgres/mb}/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/{miscadmin.h → postgres/miscadmin.h} +96 -65
- data/ext/pg_query/include/{nodes → postgres/nodes}/bitmapset.h +11 -7
- data/ext/pg_query/include/{nodes → postgres/nodes}/execnodes.h +351 -103
- data/ext/pg_query/include/{nodes → postgres/nodes}/extensible.h +8 -4
- data/ext/pg_query/include/{nodes → postgres/nodes}/lockoptions.h +1 -1
- data/ext/pg_query/include/{nodes → postgres/nodes}/makefuncs.h +19 -6
- data/ext/pg_query/include/{nodes → postgres/nodes}/memnodes.h +11 -6
- 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 +100 -496
- 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 +678 -207
- data/ext/pg_query/include/{nodes → postgres/nodes}/pathnodes.h +1282 -454
- data/ext/pg_query/include/{nodes → postgres/nodes}/pg_list.h +103 -73
- data/ext/pg_query/include/{nodes → postgres/nodes}/plannodes.h +474 -133
- data/ext/pg_query/include/{nodes → postgres/nodes}/primnodes.h +754 -254
- data/ext/pg_query/include/{nodes → postgres/nodes}/print.h +1 -1
- data/ext/pg_query/include/postgres/nodes/queryjumble.h +86 -0
- 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/postgres/nodes/value.h +90 -0
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/cost.h +14 -5
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo.h +9 -7
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/geqo_gene.h +1 -1
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/optimizer.h +31 -28
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/paths.h +29 -12
- data/ext/pg_query/include/{optimizer → postgres/optimizer}/planmain.h +15 -17
- data/ext/pg_query/include/{parser → postgres/parser}/analyze.h +20 -5
- data/ext/pg_query/include/postgres/parser/kwlist.h +498 -0
- data/ext/pg_query/include/{parser → postgres/parser}/parse_agg.h +5 -8
- data/ext/pg_query/include/{parser → postgres/parser}/parse_coerce.h +6 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_expr.h +2 -3
- data/ext/pg_query/include/{parser → postgres/parser}/parse_func.h +2 -1
- data/ext/pg_query/include/{parser → postgres/parser}/parse_node.h +41 -11
- data/ext/pg_query/include/{parser → postgres/parser}/parse_oper.h +3 -5
- data/ext/pg_query/include/{parser → postgres/parser}/parse_relation.h +11 -5
- data/ext/pg_query/include/{parser → postgres/parser}/parse_type.h +4 -3
- data/ext/pg_query/include/postgres/parser/parser.h +68 -0
- 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 +2 -5
- data/ext/pg_query/include/{partitioning → postgres/partitioning}/partdefs.h +1 -1
- data/ext/pg_query/include/{pg_config.h → postgres/pg_config.h} +216 -228
- data/ext/pg_query/include/{pg_config_manual.h → postgres/pg_config_manual.h} +80 -58
- data/ext/pg_query/include/postgres/pg_config_os.h +8 -0
- data/ext/pg_query/include/{pg_getopt.h → postgres/pg_getopt.h} +6 -6
- data/ext/pg_query/include/{pg_trace.h → postgres/pg_trace.h} +1 -1
- data/ext/pg_query/include/postgres/pgstat.h +778 -0
- data/ext/pg_query/include/{pgtime.h → postgres/pgtime.h} +16 -6
- data/ext/pg_query/include/{pl_gram.h → postgres/pl_gram.h} +116 -116
- 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} +10 -10
- data/ext/pg_query/include/{pl_unreserved_kwlist.h → postgres/pl_unreserved_kwlist.h} +3 -3
- data/ext/pg_query/include/{pl_unreserved_kwlist_d.h → postgres/pl_unreserved_kwlist_d.h} +60 -60
- data/ext/pg_query/include/{plerrcodes.h → postgres/plerrcodes.h} +9 -1
- data/ext/pg_query/include/{plpgsql.h → postgres/plpgsql.h} +79 -86
- data/ext/pg_query/include/{port → postgres/port}/atomics/arch-arm.h +9 -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 +3 -3
- 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 +129 -16
- 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} +107 -111
- 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 +17 -20
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker.h +3 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgworker_internals.h +2 -2
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/bgwriter.h +6 -6
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/interrupt.h +1 -1
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/pgarch.h +7 -10
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/postmaster.h +21 -17
- data/ext/pg_query/include/postgres/postmaster/startup.h +41 -0
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/syslogger.h +16 -11
- data/ext/pg_query/include/{postmaster → postgres/postmaster}/walwriter.h +5 -3
- data/ext/pg_query/include/{regex → postgres/regex}/regex.h +27 -22
- data/ext/pg_query/include/{replication → postgres/replication}/logicallauncher.h +8 -5
- data/ext/pg_query/include/postgres/replication/logicalproto.h +274 -0
- data/ext/pg_query/include/postgres/replication/logicalworker.h +32 -0
- data/ext/pg_query/include/{replication → postgres/replication}/origin.h +8 -8
- data/ext/pg_query/include/postgres/replication/reorderbuffer.h +753 -0
- data/ext/pg_query/include/{replication → postgres/replication}/slot.h +42 -12
- data/ext/pg_query/include/{replication → postgres/replication}/syncrep.h +6 -12
- data/ext/pg_query/include/{replication → postgres/replication}/walreceiver.h +158 -20
- data/ext/pg_query/include/{replication → postgres/replication}/walsender.h +20 -20
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/prs2lock.h +1 -1
- data/ext/pg_query/include/{rewrite → postgres/rewrite}/rewriteHandler.h +1 -6
- 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 +3 -3
- data/ext/pg_query/include/{storage → postgres/storage}/block.h +24 -37
- data/ext/pg_query/include/{storage → postgres/storage}/buf.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/bufmgr.h +196 -95
- data/ext/pg_query/include/{storage → postgres/storage}/bufpage.h +152 -101
- data/ext/pg_query/include/{storage → postgres/storage}/condition_variable.h +14 -3
- data/ext/pg_query/include/{storage → postgres/storage}/dsm.h +6 -6
- data/ext/pg_query/include/{storage → postgres/storage}/dsm_impl.h +6 -2
- data/ext/pg_query/include/{storage → postgres/storage}/fd.h +48 -14
- data/ext/pg_query/include/postgres/storage/fileset.h +40 -0
- data/ext/pg_query/include/{storage → postgres/storage}/ipc.h +5 -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 +96 -57
- data/ext/pg_query/include/{storage → postgres/storage}/large_object.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/latch.h +17 -13
- data/ext/pg_query/include/{storage → postgres/storage}/lmgr.h +7 -1
- data/ext/pg_query/include/{storage → postgres/storage}/lock.h +37 -25
- data/ext/pg_query/include/{storage → postgres/storage}/lockdefs.h +4 -4
- data/ext/pg_query/include/{storage → postgres/storage}/lwlock.h +21 -33
- data/ext/pg_query/include/{storage → postgres/storage}/lwlocknames.h +0 -1
- 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 +9 -7
- data/ext/pg_query/include/{storage → postgres/storage}/pmsignal.h +15 -4
- data/ext/pg_query/include/{storage → postgres/storage}/predicate.h +5 -5
- data/ext/pg_query/include/{storage → postgres/storage}/proc.h +200 -67
- data/ext/pg_query/include/postgres/storage/procarray.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/proclist_types.h +1 -1
- data/ext/pg_query/include/{storage → postgres/storage}/procsignal.h +5 -7
- data/ext/pg_query/include/postgres/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/{storage → postgres/storage}/s_lock.h +118 -298
- data/ext/pg_query/include/{storage → postgres/storage}/sharedfileset.h +3 -11
- data/ext/pg_query/include/{storage → postgres/storage}/shm_mq.h +5 -4
- 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 +5 -5
- data/ext/pg_query/include/{storage → postgres/storage}/sinvaladt.h +4 -2
- data/ext/pg_query/include/{storage → postgres/storage}/smgr.h +21 -17
- data/ext/pg_query/include/{storage → postgres/storage}/spin.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/standby.h +17 -9
- data/ext/pg_query/include/{storage → postgres/storage}/standbydefs.h +2 -2
- data/ext/pg_query/include/{storage → postgres/storage}/sync.h +9 -5
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtag.h +7 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/cmdtaglist.h +3 -2
- 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 -2
- data/ext/pg_query/include/{tcop → postgres/tcop}/pquery.h +7 -1
- data/ext/pg_query/include/{tcop → postgres/tcop}/tcopprot.h +19 -14
- data/ext/pg_query/include/{tcop → postgres/tcop}/utility.h +7 -3
- data/ext/pg_query/include/{tsearch → postgres/tsearch}/ts_cache.h +3 -5
- data/ext/pg_query/include/{utils → postgres/utils}/acl.h +37 -71
- data/ext/pg_query/include/{utils → postgres/utils}/aclchk_internal.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/array.h +26 -2
- data/ext/pg_query/include/postgres/utils/backend_progress.h +45 -0
- data/ext/pg_query/include/postgres/utils/backend_status.h +342 -0
- data/ext/pg_query/include/{utils → postgres/utils}/builtins.h +20 -11
- data/ext/pg_query/include/{utils → postgres/utils}/bytea.h +3 -2
- 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 +48 -27
- data/ext/pg_query/include/{utils → postgres/utils}/datum.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/dsa.h +5 -1
- data/ext/pg_query/include/{utils → postgres/utils}/elog.h +154 -48
- data/ext/pg_query/include/{utils → postgres/utils}/errcodes.h +2 -0
- 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 +13 -12
- data/ext/pg_query/include/{utils → postgres/utils}/fmgroids.h +1353 -696
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrprotos.h +243 -18
- data/ext/pg_query/include/{utils → postgres/utils}/fmgrtab.h +6 -5
- data/ext/pg_query/include/{utils → postgres/utils}/guc.h +120 -121
- data/ext/pg_query/include/postgres/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/{utils → postgres/utils}/guc_tables.h +71 -21
- data/ext/pg_query/include/{utils → postgres/utils}/hsearch.h +15 -11
- data/ext/pg_query/include/{utils → postgres/utils}/inval.h +7 -3
- data/ext/pg_query/include/postgres/utils/logtape.h +77 -0
- data/ext/pg_query/include/{utils → postgres/utils}/lsyscache.h +16 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memdebug.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/memutils.h +14 -53
- 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 +38 -9
- data/ext/pg_query/include/{utils → postgres/utils}/palloc.h +33 -4
- data/ext/pg_query/include/{utils → postgres/utils}/partcache.h +3 -2
- data/ext/pg_query/include/{utils → postgres/utils}/pg_locale.h +37 -21
- data/ext/pg_query/include/postgres/utils/pgstat_internal.h +814 -0
- data/ext/pg_query/include/{utils → postgres/utils}/plancache.h +6 -5
- data/ext/pg_query/include/{utils → postgres/utils}/portal.h +12 -1
- data/ext/pg_query/include/{utils → postgres/utils}/probes.h +59 -59
- 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/postgres/utils/regproc.h +39 -0
- data/ext/pg_query/include/{utils → postgres/utils}/rel.h +129 -61
- data/ext/pg_query/include/{utils → postgres/utils}/relcache.h +21 -14
- 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 +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/{utils → postgres/utils}/snapmgr.h +38 -15
- data/ext/pg_query/include/{utils → postgres/utils}/snapshot.h +14 -1
- data/ext/pg_query/include/{utils → postgres/utils}/sortsupport.h +117 -2
- data/ext/pg_query/include/{utils → postgres/utils}/syscache.h +9 -1
- data/ext/pg_query/include/{utils → postgres/utils}/timeout.h +11 -4
- data/ext/pg_query/include/{utils → postgres/utils}/timestamp.h +46 -15
- data/ext/pg_query/include/{utils → postgres/utils}/tuplesort.h +209 -41
- data/ext/pg_query/include/{utils → postgres/utils}/tuplestore.h +2 -2
- data/ext/pg_query/include/{utils → postgres/utils}/typcache.h +24 -17
- data/ext/pg_query/include/{utils → postgres/utils}/varlena.h +17 -3
- data/ext/pg_query/include/postgres/utils/wait_event.h +294 -0
- data/ext/pg_query/include/{utils → postgres/utils}/xml.h +18 -8
- data/ext/pg_query/include/{postgres.h → postgres/varatt.h} +65 -471
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +7494 -6382
- data/ext/pg_query/include/protobuf/pg_query.pb.h +116922 -84792
- data/ext/pg_query/include/protobuf-c/protobuf-c.h +7 -3
- data/ext/pg_query/include/protobuf-c.h +7 -3
- data/ext/pg_query/pg_query.c +10 -1
- data/ext/pg_query/pg_query.pb-c.c +21026 -17002
- data/ext/pg_query/pg_query_deparse.c +1 -9896
- data/ext/pg_query/pg_query_fingerprint.c +162 -50
- data/ext/pg_query/pg_query_fingerprint.h +3 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +56 -12
- data/ext/pg_query/pg_query_normalize.c +259 -64
- data/ext/pg_query/pg_query_outfuncs.h +1 -0
- data/ext/pg_query/pg_query_outfuncs_json.c +71 -16
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +73 -12
- data/ext/pg_query/pg_query_parse.c +47 -5
- data/ext/pg_query/pg_query_parse_plpgsql.c +86 -21
- data/ext/pg_query/pg_query_readfuncs_protobuf.c +43 -8
- data/ext/pg_query/pg_query_ruby.c +6 -1
- data/ext/pg_query/pg_query_ruby_freebsd.sym +2 -0
- data/ext/pg_query/pg_query_scan.c +3 -2
- data/ext/pg_query/pg_query_split.c +6 -5
- data/ext/pg_query/postgres_deparse.c +11067 -0
- data/ext/pg_query/postgres_deparse.h +9 -0
- data/ext/pg_query/protobuf-c.c +34 -27
- data/ext/pg_query/src_backend_catalog_namespace.c +27 -10
- data/ext/pg_query/src_backend_catalog_pg_proc.c +4 -1
- data/ext/pg_query/src_backend_commands_define.c +11 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +13 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +103 -5894
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +102 -3830
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +99 -12
- data/ext/pg_query/src_backend_nodes_makefuncs.c +99 -4
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +325 -131
- data/ext/pg_query/src_backend_nodes_nodes.c +38 -0
- data/ext/pg_query/src_backend_nodes_value.c +28 -19
- data/ext/pg_query/src_backend_parser_gram.c +36104 -32074
- data/ext/pg_query/src_backend_parser_parser.c +53 -8
- data/ext/pg_query/src_backend_parser_scan.c +4893 -3701
- data/ext/pg_query/src_backend_parser_scansup.c +4 -28
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +13 -4
- data/ext/pg_query/src_backend_tcop_postgres.c +133 -105
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +140 -0
- data/ext/pg_query/src_backend_utils_adt_datum.c +17 -7
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +6 -2
- data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +187 -19
- data/ext/pg_query/src_backend_utils_error_assert.c +17 -18
- data/ext/pg_query/src_backend_utils_error_elog.c +513 -318
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +44 -17
- data/ext/pg_query/src_backend_utils_init_globals.c +9 -6
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +74 -131
- 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 +453 -314
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +549 -76
- 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 +420 -0
- data/ext/pg_query/src_common_keywords.c +15 -2
- data/ext/pg_query/src_common_kwlist_d.h +545 -498
- 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 +717 -113
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +49 -22
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -18
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +1136 -1195
- 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 +10 -10
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +2 -2
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +60 -60
- data/ext/pg_query/src_port_pg_bitutils.c +103 -40
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_qsort.c +12 -224
- data/ext/pg_query/src_port_snprintf.c +51 -29
- data/ext/pg_query/src_port_strerror.c +9 -19
- data/ext/pg_query/src_port_strlcpy.c +79 -0
- data/lib/pg_query/deparse.rb +7 -1
- data/lib/pg_query/filter_columns.rb +7 -5
- data/lib/pg_query/fingerprint.rb +21 -9
- data/lib/pg_query/node.rb +18 -13
- data/lib/pg_query/param_refs.rb +1 -1
- data/lib/pg_query/parse.rb +141 -50
- data/lib/pg_query/pg_query_pb.rb +175 -3031
- data/lib/pg_query/treewalker.rb +26 -2
- data/lib/pg_query/truncate.rb +54 -8
- data/lib/pg_query/version.rb +1 -1
- data/lib/pg_query.rb +0 -1
- metadata +443 -380
- data/ext/pg_query/guc-file.c +0 -0
- data/ext/pg_query/include/access/rmgr.h +0 -35
- data/ext/pg_query/include/access/xloginsert.h +0 -64
- data/ext/pg_query/include/bootstrap/bootstrap.h +0 -62
- data/ext/pg_query/include/catalog/genbki.h +0 -64
- data/ext/pg_query/include/catalog/indexing.h +0 -366
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/common/ip.h +0 -37
- data/ext/pg_query/include/common/string.h +0 -19
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/kwlist_d.h +0 -1072
- data/ext/pg_query/include/nodes/value.h +0 -61
- data/ext/pg_query/include/parser/gram.h +0 -1067
- data/ext/pg_query/include/parser/kwlist.h +0 -477
- data/ext/pg_query/include/parser/parse_clause.h +0 -54
- data/ext/pg_query/include/parser/parse_collate.h +0 -27
- data/ext/pg_query/include/parser/parse_target.h +0 -46
- data/ext/pg_query/include/parser/parser.h +0 -41
- data/ext/pg_query/include/pg_config_os.h +0 -8
- data/ext/pg_query/include/pgstat.h +0 -1487
- data/ext/pg_query/include/portability/instr_time.h +0 -256
- data/ext/pg_query/include/postmaster/fork_process.h +0 -17
- data/ext/pg_query/include/replication/logicalproto.h +0 -110
- data/ext/pg_query/include/replication/logicalworker.h +0 -19
- data/ext/pg_query/include/replication/reorderbuffer.h +0 -467
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -19
- 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/regproc.h +0 -28
- 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_libpq_pqcomm.c +0 -651
- data/ext/pg_query/src_backend_parser_parse_expr.c +0 -313
- data/ext/pg_query/src_backend_postmaster_postmaster.c +0 -2230
- data/ext/pg_query/src_backend_storage_lmgr_s_lock.c +0 -370
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1086
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1831
- data/ext/pg_query/src_common_string.c +0 -86
- data/ext/pg_query/src_port_erand48.c +0 -127
- data/ext/pg_query/src_port_pgsleep.c +0 -69
- data/ext/pg_query/src_port_random.c +0 -31
- data/ext/pg_query/src_port_strnlen.c +0 -39
- data/lib/pg_query/json_field_names.rb +0 -1402
- /data/ext/pg_query/include/{pg_config_ext.h → postgres/pg_config_ext.h} +0 -0
|
@@ -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,77 +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
253
|
/*
|
|
318
254
|
* On ARM and ARM64, we use __sync_lock_test_and_set(int *, int) if available.
|
|
319
255
|
*
|
|
320
256
|
* We use the int-width variant of the builtin because it works on more chips
|
|
321
257
|
* than other widths.
|
|
322
258
|
*/
|
|
323
|
-
#if defined(__arm__) || defined(__arm) || defined(__aarch64__)
|
|
259
|
+
#if defined(__arm__) || defined(__arm) || defined(__aarch64__)
|
|
324
260
|
#ifdef HAVE_GCC__SYNC_INT32_TAS
|
|
325
261
|
#define HAS_TEST_AND_SET
|
|
326
262
|
|
|
@@ -336,8 +272,25 @@ tas(volatile slock_t *lock)
|
|
|
336
272
|
|
|
337
273
|
#define S_UNLOCK(lock) __sync_lock_release(lock)
|
|
338
274
|
|
|
275
|
+
/*
|
|
276
|
+
* Using an ISB instruction to delay in spinlock loops appears beneficial on
|
|
277
|
+
* high-core-count ARM64 processors. It seems mostly a wash for smaller gear,
|
|
278
|
+
* and ISB doesn't exist at all on pre-v7 ARM chips.
|
|
279
|
+
*/
|
|
280
|
+
#if defined(__aarch64__)
|
|
281
|
+
|
|
282
|
+
#define SPIN_DELAY() spin_delay()
|
|
283
|
+
|
|
284
|
+
static __inline__ void
|
|
285
|
+
spin_delay(void)
|
|
286
|
+
{
|
|
287
|
+
__asm__ __volatile__(
|
|
288
|
+
" isb; \n");
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
#endif /* __aarch64__ */
|
|
339
292
|
#endif /* HAVE_GCC__SYNC_INT32_TAS */
|
|
340
|
-
#endif /* __arm__ || __arm || __aarch64__
|
|
293
|
+
#endif /* __arm__ || __arm || __aarch64__ */
|
|
341
294
|
|
|
342
295
|
|
|
343
296
|
/* S/390 and S/390x Linux (32- and 64-bit zSeries) */
|
|
@@ -368,7 +321,7 @@ tas(volatile slock_t *lock)
|
|
|
368
321
|
/*
|
|
369
322
|
* Solaris has always run sparc processors in TSO (total store) mode, but
|
|
370
323
|
* linux didn't use to and the *BSDs still don't. So, be careful about
|
|
371
|
-
* acquire/release semantics. The CPU will treat superfluous
|
|
324
|
+
* acquire/release semantics. The CPU will treat superfluous members as
|
|
372
325
|
* NOPs, so it's just code space.
|
|
373
326
|
*/
|
|
374
327
|
#define HAS_TEST_AND_SET
|
|
@@ -380,7 +333,7 @@ typedef unsigned char slock_t;
|
|
|
380
333
|
static __inline__ int
|
|
381
334
|
tas(volatile slock_t *lock)
|
|
382
335
|
{
|
|
383
|
-
|
|
336
|
+
slock_t _res;
|
|
384
337
|
|
|
385
338
|
/*
|
|
386
339
|
* See comment in src/backend/port/tas/sunstudio_sparc.s for why this
|
|
@@ -459,7 +412,8 @@ typedef unsigned int slock_t;
|
|
|
459
412
|
*
|
|
460
413
|
* NOTE: per the Enhanced PowerPC Architecture manual, v1.0 dated 7-May-2002,
|
|
461
414
|
* an isync is a sufficient synchronization barrier after a lwarx/stwcx loop.
|
|
462
|
-
*
|
|
415
|
+
* But if the spinlock is in ordinary memory, we can use lwsync instead for
|
|
416
|
+
* better performance.
|
|
463
417
|
*
|
|
464
418
|
* Ordinarily, we'd code the branches here using GNU-style local symbols, that
|
|
465
419
|
* is "1f" referencing "1:" and so on. But some people run gcc on AIX with
|
|
@@ -474,23 +428,15 @@ tas(volatile slock_t *lock)
|
|
|
474
428
|
int _res;
|
|
475
429
|
|
|
476
430
|
__asm__ __volatile__(
|
|
477
|
-
#ifdef USE_PPC_LWARX_MUTEX_HINT
|
|
478
431
|
" lwarx %0,0,%3,1 \n"
|
|
479
|
-
#else
|
|
480
|
-
" lwarx %0,0,%3 \n"
|
|
481
|
-
#endif
|
|
482
432
|
" cmpwi %0,0 \n"
|
|
483
433
|
" bne $+16 \n" /* branch to li %1,1 */
|
|
484
434
|
" addi %0,%0,1 \n"
|
|
485
435
|
" stwcx. %0,0,%3 \n"
|
|
486
|
-
" beq $+12 \n" /* branch to lwsync
|
|
436
|
+
" beq $+12 \n" /* branch to lwsync */
|
|
487
437
|
" li %1,1 \n"
|
|
488
438
|
" b $+12 \n" /* branch to end of asm sequence */
|
|
489
|
-
#ifdef USE_PPC_LWSYNC
|
|
490
439
|
" lwsync \n"
|
|
491
|
-
#else
|
|
492
|
-
" isync \n"
|
|
493
|
-
#endif
|
|
494
440
|
" li %1,0 \n"
|
|
495
441
|
|
|
496
442
|
: "=&b"(_t), "=r"(_res), "+m"(*lock)
|
|
@@ -501,107 +447,18 @@ tas(volatile slock_t *lock)
|
|
|
501
447
|
|
|
502
448
|
/*
|
|
503
449
|
* PowerPC S_UNLOCK is almost standard but requires a "sync" instruction.
|
|
504
|
-
*
|
|
450
|
+
* But we can use lwsync instead for better performance.
|
|
505
451
|
*/
|
|
506
|
-
#ifdef USE_PPC_LWSYNC
|
|
507
452
|
#define S_UNLOCK(lock) \
|
|
508
453
|
do \
|
|
509
454
|
{ \
|
|
510
455
|
__asm__ __volatile__ (" lwsync \n" ::: "memory"); \
|
|
511
456
|
*((volatile slock_t *) (lock)) = 0; \
|
|
512
457
|
} while (0)
|
|
513
|
-
#else
|
|
514
|
-
#define S_UNLOCK(lock) \
|
|
515
|
-
do \
|
|
516
|
-
{ \
|
|
517
|
-
__asm__ __volatile__ (" sync \n" ::: "memory"); \
|
|
518
|
-
*((volatile slock_t *) (lock)) = 0; \
|
|
519
|
-
} while (0)
|
|
520
|
-
#endif /* USE_PPC_LWSYNC */
|
|
521
458
|
|
|
522
459
|
#endif /* powerpc */
|
|
523
460
|
|
|
524
461
|
|
|
525
|
-
/* Linux Motorola 68k */
|
|
526
|
-
#if (defined(__mc68000__) || defined(__m68k__)) && defined(__linux__)
|
|
527
|
-
#define HAS_TEST_AND_SET
|
|
528
|
-
|
|
529
|
-
typedef unsigned char slock_t;
|
|
530
|
-
|
|
531
|
-
#define TAS(lock) tas(lock)
|
|
532
|
-
|
|
533
|
-
static __inline__ int
|
|
534
|
-
tas(volatile slock_t *lock)
|
|
535
|
-
{
|
|
536
|
-
register int rv;
|
|
537
|
-
|
|
538
|
-
__asm__ __volatile__(
|
|
539
|
-
" clrl %0 \n"
|
|
540
|
-
" tas %1 \n"
|
|
541
|
-
" sne %0 \n"
|
|
542
|
-
: "=d"(rv), "+m"(*lock)
|
|
543
|
-
: /* no inputs */
|
|
544
|
-
: "memory", "cc");
|
|
545
|
-
return rv;
|
|
546
|
-
}
|
|
547
|
-
|
|
548
|
-
#endif /* (__mc68000__ || __m68k__) && __linux__ */
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
/* Motorola 88k */
|
|
552
|
-
#if defined(__m88k__)
|
|
553
|
-
#define HAS_TEST_AND_SET
|
|
554
|
-
|
|
555
|
-
typedef unsigned int slock_t;
|
|
556
|
-
|
|
557
|
-
#define TAS(lock) tas(lock)
|
|
558
|
-
|
|
559
|
-
static __inline__ int
|
|
560
|
-
tas(volatile slock_t *lock)
|
|
561
|
-
{
|
|
562
|
-
register slock_t _res = 1;
|
|
563
|
-
|
|
564
|
-
__asm__ __volatile__(
|
|
565
|
-
" xmem %0, %2, %%r0 \n"
|
|
566
|
-
: "+r"(_res), "+m"(*lock)
|
|
567
|
-
: "r"(lock)
|
|
568
|
-
: "memory");
|
|
569
|
-
return (int) _res;
|
|
570
|
-
}
|
|
571
|
-
|
|
572
|
-
#endif /* __m88k__ */
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
/*
|
|
576
|
-
* VAXen -- even multiprocessor ones
|
|
577
|
-
* (thanks to Tom Ivar Helbekkmo)
|
|
578
|
-
*/
|
|
579
|
-
#if defined(__vax__)
|
|
580
|
-
#define HAS_TEST_AND_SET
|
|
581
|
-
|
|
582
|
-
typedef unsigned char slock_t;
|
|
583
|
-
|
|
584
|
-
#define TAS(lock) tas(lock)
|
|
585
|
-
|
|
586
|
-
static __inline__ int
|
|
587
|
-
tas(volatile slock_t *lock)
|
|
588
|
-
{
|
|
589
|
-
register int _res;
|
|
590
|
-
|
|
591
|
-
__asm__ __volatile__(
|
|
592
|
-
" movl $1, %0 \n"
|
|
593
|
-
" bbssi $0, (%2), 1f \n"
|
|
594
|
-
" clrl %0 \n"
|
|
595
|
-
"1: \n"
|
|
596
|
-
: "=&r"(_res), "+m"(*lock)
|
|
597
|
-
: "r"(lock)
|
|
598
|
-
: "memory");
|
|
599
|
-
return _res;
|
|
600
|
-
}
|
|
601
|
-
|
|
602
|
-
#endif /* __vax__ */
|
|
603
|
-
|
|
604
|
-
|
|
605
462
|
#if defined(__mips__) && !defined(__sgi) /* non-SGI MIPS */
|
|
606
463
|
#define HAS_TEST_AND_SET
|
|
607
464
|
|
|
@@ -631,9 +488,9 @@ typedef unsigned int slock_t;
|
|
|
631
488
|
static __inline__ int
|
|
632
489
|
tas(volatile slock_t *lock)
|
|
633
490
|
{
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
491
|
+
volatile slock_t *_l = lock;
|
|
492
|
+
int _res;
|
|
493
|
+
int _tmp;
|
|
637
494
|
|
|
638
495
|
__asm__ __volatile__(
|
|
639
496
|
" .set push \n"
|
|
@@ -673,95 +530,13 @@ do \
|
|
|
673
530
|
#endif /* __mips__ && !__sgi */
|
|
674
531
|
|
|
675
532
|
|
|
676
|
-
#if defined(
|
|
677
|
-
#define HAS_TEST_AND_SET
|
|
678
|
-
|
|
679
|
-
#include <sys/tas.h>
|
|
680
|
-
|
|
681
|
-
typedef int slock_t;
|
|
682
|
-
|
|
683
|
-
#define TAS(lock) tas(lock)
|
|
684
|
-
|
|
685
|
-
#endif /* __m32r__ */
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
#if defined(__sh__) /* Renesas' SuperH */
|
|
689
|
-
#define HAS_TEST_AND_SET
|
|
690
|
-
|
|
691
|
-
typedef unsigned char slock_t;
|
|
692
|
-
|
|
693
|
-
#define TAS(lock) tas(lock)
|
|
694
|
-
|
|
695
|
-
static __inline__ int
|
|
696
|
-
tas(volatile slock_t *lock)
|
|
697
|
-
{
|
|
698
|
-
register int _res;
|
|
699
|
-
|
|
700
|
-
/*
|
|
701
|
-
* This asm is coded as if %0 could be any register, but actually SuperH
|
|
702
|
-
* restricts the target of xor-immediate to be R0. That's handled by
|
|
703
|
-
* the "z" constraint on _res.
|
|
704
|
-
*/
|
|
705
|
-
__asm__ __volatile__(
|
|
706
|
-
" tas.b @%2 \n"
|
|
707
|
-
" movt %0 \n"
|
|
708
|
-
" xor #1,%0 \n"
|
|
709
|
-
: "=z"(_res), "+m"(*lock)
|
|
710
|
-
: "r"(lock)
|
|
711
|
-
: "memory", "t");
|
|
712
|
-
return _res;
|
|
713
|
-
}
|
|
714
|
-
|
|
715
|
-
#endif /* __sh__ */
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
/* These live in s_lock.c, but only for gcc */
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
#if defined(__m68k__) && !defined(__linux__) /* non-Linux Motorola 68k */
|
|
722
|
-
#define HAS_TEST_AND_SET
|
|
723
|
-
|
|
724
|
-
typedef unsigned char slock_t;
|
|
725
|
-
#endif
|
|
726
|
-
|
|
727
|
-
/*
|
|
728
|
-
* Default implementation of S_UNLOCK() for gcc/icc.
|
|
729
|
-
*
|
|
730
|
-
* Note that this implementation is unsafe for any platform that can reorder
|
|
731
|
-
* a memory access (either load or store) after a following store. That
|
|
732
|
-
* happens not to be possible on x86 and most legacy architectures (some are
|
|
733
|
-
* single-processor!), but many modern systems have weaker memory ordering.
|
|
734
|
-
* Those that do must define their own version of S_UNLOCK() rather than
|
|
735
|
-
* relying on this one.
|
|
736
|
-
*/
|
|
737
|
-
#if !defined(S_UNLOCK)
|
|
738
|
-
#define S_UNLOCK(lock) \
|
|
739
|
-
do { __asm__ __volatile__("" : : : "memory"); *(lock) = 0; } while (0)
|
|
740
|
-
#endif
|
|
741
|
-
|
|
742
|
-
#endif /* defined(__GNUC__) || defined(__INTEL_COMPILER) */
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
/*
|
|
747
|
-
* ---------------------------------------------------------------------
|
|
748
|
-
* Platforms that use non-gcc inline assembly:
|
|
749
|
-
* ---------------------------------------------------------------------
|
|
750
|
-
*/
|
|
751
|
-
|
|
752
|
-
#if !defined(HAS_TEST_AND_SET) /* We didn't trigger above, let's try here */
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC, GCC and HP compilers */
|
|
533
|
+
#if defined(__hppa) || defined(__hppa__) /* HP PA-RISC */
|
|
756
534
|
/*
|
|
757
535
|
* HP's PA-RISC
|
|
758
536
|
*
|
|
759
|
-
*
|
|
760
|
-
*
|
|
761
|
-
*
|
|
762
|
-
* the other three words just sit at -1.
|
|
763
|
-
*
|
|
764
|
-
* When using gcc, we can inline the required assembly code.
|
|
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.
|
|
765
540
|
*/
|
|
766
541
|
#define HAS_TEST_AND_SET
|
|
767
542
|
|
|
@@ -772,14 +547,27 @@ typedef struct
|
|
|
772
547
|
|
|
773
548
|
#define TAS_ACTIVE_WORD(lock) ((volatile int *) (((uintptr_t) (lock) + 15) & ~15))
|
|
774
549
|
|
|
775
|
-
#if defined(__GNUC__)
|
|
776
|
-
|
|
777
550
|
static __inline__ int
|
|
778
551
|
tas(volatile slock_t *lock)
|
|
779
552
|
{
|
|
780
553
|
volatile int *lockword = TAS_ACTIVE_WORD(lock);
|
|
781
|
-
|
|
554
|
+
int lockval;
|
|
782
555
|
|
|
556
|
+
/*
|
|
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.
|
|
570
|
+
*/
|
|
783
571
|
__asm__ __volatile__(
|
|
784
572
|
" ldcwx 0(0,%2),%0 \n"
|
|
785
573
|
: "=r"(lockval), "+m"(*lockword)
|
|
@@ -788,23 +576,12 @@ tas(volatile slock_t *lock)
|
|
|
788
576
|
return (lockval == 0);
|
|
789
577
|
}
|
|
790
578
|
|
|
791
|
-
/*
|
|
792
|
-
* The hppa implementation doesn't follow the rules of this files and provides
|
|
793
|
-
* a gcc specific implementation outside of the above defined(__GNUC__). It
|
|
794
|
-
* does so to avoid duplication between the HP compiler and gcc. So undefine
|
|
795
|
-
* the generic fallback S_UNLOCK from above.
|
|
796
|
-
*/
|
|
797
|
-
#ifdef S_UNLOCK
|
|
798
|
-
#undef S_UNLOCK
|
|
799
|
-
#endif
|
|
800
579
|
#define S_UNLOCK(lock) \
|
|
801
580
|
do { \
|
|
802
581
|
__asm__ __volatile__("" : : : "memory"); \
|
|
803
582
|
*TAS_ACTIVE_WORD(lock) = -1; \
|
|
804
583
|
} while (0)
|
|
805
584
|
|
|
806
|
-
#endif /* __GNUC__ */
|
|
807
|
-
|
|
808
585
|
#define S_INIT_LOCK(lock) \
|
|
809
586
|
do { \
|
|
810
587
|
volatile slock_t *lock_ = (lock); \
|
|
@@ -819,32 +596,75 @@ tas(volatile slock_t *lock)
|
|
|
819
596
|
#endif /* __hppa || __hppa__ */
|
|
820
597
|
|
|
821
598
|
|
|
822
|
-
#if defined(__hpux) && defined(__ia64) && !defined(__GNUC__)
|
|
823
599
|
/*
|
|
824
|
-
*
|
|
825
|
-
*
|
|
826
|
-
*
|
|
827
|
-
*
|
|
828
|
-
*
|
|
829
|
-
* +Ovolatile=__unordered option on the HP-UX compiler, so don't do that.
|
|
830
|
-
*
|
|
831
|
-
* See also Implementing Spinlocks on the Intel Itanium Architecture and
|
|
832
|
-
* PA-RISC, by Tor Ekqvist and David Graves, for more information. As of
|
|
833
|
-
* this writing, version 1.0 of the manual is available at:
|
|
834
|
-
* http://h21007.www2.hp.com/portal/download/files/unprot/itanium/spinlocks.pdf
|
|
600
|
+
* If we have no platform-specific knowledge, but we found that the compiler
|
|
601
|
+
* provides __sync_lock_test_and_set(), use that. Prefer the int-width
|
|
602
|
+
* version over the char-width version if we have both, on the rather dubious
|
|
603
|
+
* grounds that that's known to be more likely to work in the ARM ecosystem.
|
|
604
|
+
* (But we dealt with ARM above.)
|
|
835
605
|
*/
|
|
606
|
+
#if !defined(HAS_TEST_AND_SET)
|
|
607
|
+
|
|
608
|
+
#if defined(HAVE_GCC__SYNC_INT32_TAS)
|
|
836
609
|
#define HAS_TEST_AND_SET
|
|
837
610
|
|
|
838
|
-
|
|
611
|
+
#define TAS(lock) tas(lock)
|
|
839
612
|
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
613
|
+
typedef int slock_t;
|
|
614
|
+
|
|
615
|
+
static __inline__ int
|
|
616
|
+
tas(volatile slock_t *lock)
|
|
617
|
+
{
|
|
618
|
+
return __sync_lock_test_and_set(lock, 1);
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
#define S_UNLOCK(lock) __sync_lock_release(lock)
|
|
622
|
+
|
|
623
|
+
#elif defined(HAVE_GCC__SYNC_CHAR_TAS)
|
|
624
|
+
#define HAS_TEST_AND_SET
|
|
625
|
+
|
|
626
|
+
#define TAS(lock) tas(lock)
|
|
627
|
+
|
|
628
|
+
typedef char slock_t;
|
|
629
|
+
|
|
630
|
+
static __inline__ int
|
|
631
|
+
tas(volatile slock_t *lock)
|
|
632
|
+
{
|
|
633
|
+
return __sync_lock_test_and_set(lock, 1);
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
#define S_UNLOCK(lock) __sync_lock_release(lock)
|
|
637
|
+
|
|
638
|
+
#endif /* HAVE_GCC__SYNC_INT32_TAS */
|
|
639
|
+
|
|
640
|
+
#endif /* !defined(HAS_TEST_AND_SET) */
|
|
641
|
+
|
|
642
|
+
|
|
643
|
+
/*
|
|
644
|
+
* Default implementation of S_UNLOCK() for gcc/icc.
|
|
645
|
+
*
|
|
646
|
+
* Note that this implementation is unsafe for any platform that can reorder
|
|
647
|
+
* a memory access (either load or store) after a following store. That
|
|
648
|
+
* happens not to be possible on x86 and most legacy architectures (some are
|
|
649
|
+
* single-processor!), but many modern systems have weaker memory ordering.
|
|
650
|
+
* Those that do must define their own version of S_UNLOCK() rather than
|
|
651
|
+
* relying on this one.
|
|
652
|
+
*/
|
|
653
|
+
#if !defined(S_UNLOCK)
|
|
844
654
|
#define S_UNLOCK(lock) \
|
|
845
|
-
do {
|
|
655
|
+
do { __asm__ __volatile__("" : : : "memory"); *(lock) = 0; } while (0)
|
|
656
|
+
#endif
|
|
657
|
+
|
|
658
|
+
#endif /* defined(__GNUC__) || defined(__INTEL_COMPILER) */
|
|
659
|
+
|
|
846
660
|
|
|
847
|
-
|
|
661
|
+
/*
|
|
662
|
+
* ---------------------------------------------------------------------
|
|
663
|
+
* Platforms that use non-gcc inline assembly:
|
|
664
|
+
* ---------------------------------------------------------------------
|
|
665
|
+
*/
|
|
666
|
+
|
|
667
|
+
#if !defined(HAS_TEST_AND_SET) /* We didn't trigger above, let's try here */
|
|
848
668
|
|
|
849
669
|
#if defined(_AIX) /* AIX */
|
|
850
670
|
/*
|
|
@@ -953,7 +773,7 @@ extern int tas_sema(volatile slock_t *lock);
|
|
|
953
773
|
|
|
954
774
|
#if !defined(S_LOCK)
|
|
955
775
|
#define S_LOCK(lock) \
|
|
956
|
-
(TAS(lock) ? s_lock((lock), __FILE__, __LINE__,
|
|
776
|
+
(TAS(lock) ? s_lock((lock), __FILE__, __LINE__, __func__) : 0)
|
|
957
777
|
#endif /* S_LOCK */
|
|
958
778
|
|
|
959
779
|
#if !defined(S_LOCK_FREE)
|
|
@@ -1001,7 +821,7 @@ extern int tas(volatile slock_t *lock); /* in port/.../tas.s, or
|
|
|
1001
821
|
#define TAS_SPIN(lock) TAS(lock)
|
|
1002
822
|
#endif /* TAS_SPIN */
|
|
1003
823
|
|
|
1004
|
-
extern slock_t dummy_spinlock;
|
|
824
|
+
extern PGDLLIMPORT slock_t dummy_spinlock;
|
|
1005
825
|
|
|
1006
826
|
/*
|
|
1007
827
|
* Platform-independent out-of-line support routines
|
|
@@ -1040,8 +860,8 @@ init_spin_delay(SpinDelayStatus *status,
|
|
|
1040
860
|
status->func = func;
|
|
1041
861
|
}
|
|
1042
862
|
|
|
1043
|
-
#define init_local_spin_delay(status) init_spin_delay(status, __FILE__, __LINE__,
|
|
1044
|
-
void perform_spin_delay(SpinDelayStatus *status);
|
|
1045
|
-
void finish_spin_delay(SpinDelayStatus *status);
|
|
863
|
+
#define init_local_spin_delay(status) init_spin_delay(status, __FILE__, __LINE__, __func__)
|
|
864
|
+
extern void perform_spin_delay(SpinDelayStatus *status);
|
|
865
|
+
extern void finish_spin_delay(SpinDelayStatus *status);
|
|
1046
866
|
|
|
1047
867
|
#endif /* S_LOCK_H */
|
|
@@ -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
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
#include "storage/dsm.h"
|
|
19
19
|
#include "storage/fd.h"
|
|
20
|
+
#include "storage/fileset.h"
|
|
20
21
|
#include "storage/spin.h"
|
|
21
22
|
|
|
22
23
|
/*
|
|
@@ -24,22 +25,13 @@
|
|
|
24
25
|
*/
|
|
25
26
|
typedef struct SharedFileSet
|
|
26
27
|
{
|
|
27
|
-
|
|
28
|
-
uint32 number; /* per-PID identifier */
|
|
28
|
+
FileSet fs;
|
|
29
29
|
slock_t mutex; /* mutex protecting the reference count */
|
|
30
30
|
int refcnt; /* number of attached backends */
|
|
31
|
-
int ntablespaces; /* number of tablespaces to use */
|
|
32
|
-
Oid tablespaces[8]; /* OIDs of tablespaces to use. Assumes that
|
|
33
|
-
* it's rare that there more than temp
|
|
34
|
-
* tablespaces. */
|
|
35
31
|
} SharedFileSet;
|
|
36
32
|
|
|
37
33
|
extern void SharedFileSetInit(SharedFileSet *fileset, dsm_segment *seg);
|
|
38
34
|
extern void SharedFileSetAttach(SharedFileSet *fileset, dsm_segment *seg);
|
|
39
|
-
extern File SharedFileSetCreate(SharedFileSet *fileset, const char *name);
|
|
40
|
-
extern File SharedFileSetOpen(SharedFileSet *fileset, const char *name);
|
|
41
|
-
extern bool SharedFileSetDelete(SharedFileSet *fileset, const char *name,
|
|
42
|
-
bool error_on_failure);
|
|
43
35
|
extern void SharedFileSetDeleteAll(SharedFileSet *fileset);
|
|
44
36
|
|
|
45
37
|
#endif
|
|
@@ -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
|
|
@@ -70,9 +70,10 @@ extern shm_mq *shm_mq_get_queue(shm_mq_handle *mqh);
|
|
|
70
70
|
|
|
71
71
|
/* Send or receive messages. */
|
|
72
72
|
extern shm_mq_result shm_mq_send(shm_mq_handle *mqh,
|
|
73
|
-
Size nbytes, const void *data, bool nowait
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
Size nbytes, const void *data, bool nowait,
|
|
74
|
+
bool force_flush);
|
|
75
|
+
extern shm_mq_result shm_mq_sendv(shm_mq_handle *mqh, shm_mq_iovec *iov,
|
|
76
|
+
int iovcnt, bool nowait, bool force_flush);
|
|
76
77
|
extern shm_mq_result shm_mq_receive(shm_mq_handle *mqh,
|
|
77
78
|
Size *nbytesp, void **datap, bool nowait);
|
|
78
79
|
|
|
@@ -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
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* at the same address. This means shared memory pointers can be passed
|
|
12
12
|
* around directly between different processes.
|
|
13
13
|
*
|
|
14
|
-
* Portions Copyright (c) 1996-
|
|
14
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
15
15
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
16
16
|
*
|
|
17
17
|
* src/include/storage/shmem.h
|
|
@@ -24,13 +24,6 @@
|
|
|
24
24
|
#include "utils/hsearch.h"
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
/* shmqueue.c */
|
|
28
|
-
typedef struct SHM_QUEUE
|
|
29
|
-
{
|
|
30
|
-
struct SHM_QUEUE *prev;
|
|
31
|
-
struct SHM_QUEUE *next;
|
|
32
|
-
} SHM_QUEUE;
|
|
33
|
-
|
|
34
27
|
/* shmem.c */
|
|
35
28
|
extern void InitShmemAccess(void *seghdr);
|
|
36
29
|
extern void InitShmemAllocation(void);
|
|
@@ -63,19 +56,4 @@ typedef struct
|
|
|
63
56
|
Size allocated_size; /* # bytes actually allocated */
|
|
64
57
|
} ShmemIndexEnt;
|
|
65
58
|
|
|
66
|
-
/*
|
|
67
|
-
* prototypes for functions in shmqueue.c
|
|
68
|
-
*/
|
|
69
|
-
extern void SHMQueueInit(SHM_QUEUE *queue);
|
|
70
|
-
extern void SHMQueueElemInit(SHM_QUEUE *queue);
|
|
71
|
-
extern void SHMQueueDelete(SHM_QUEUE *queue);
|
|
72
|
-
extern void SHMQueueInsertBefore(SHM_QUEUE *queue, SHM_QUEUE *elem);
|
|
73
|
-
extern void SHMQueueInsertAfter(SHM_QUEUE *queue, SHM_QUEUE *elem);
|
|
74
|
-
extern Pointer SHMQueueNext(const SHM_QUEUE *queue, const SHM_QUEUE *curElem,
|
|
75
|
-
Size linkOffset);
|
|
76
|
-
extern Pointer SHMQueuePrev(const SHM_QUEUE *queue, const SHM_QUEUE *curElem,
|
|
77
|
-
Size linkOffset);
|
|
78
|
-
extern bool SHMQueueEmpty(const SHM_QUEUE *queue);
|
|
79
|
-
extern bool SHMQueueIsDetached(const SHM_QUEUE *queue);
|
|
80
|
-
|
|
81
59
|
#endif /* SHMEM_H */
|