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
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* port.h
|
|
4
4
|
* Header for src/port/ compatibility functions.
|
|
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/port.h
|
|
@@ -14,8 +14,6 @@
|
|
|
14
14
|
#define PG_PORT_H
|
|
15
15
|
|
|
16
16
|
#include <ctype.h>
|
|
17
|
-
#include <netdb.h>
|
|
18
|
-
#include <pwd.h>
|
|
19
17
|
|
|
20
18
|
/*
|
|
21
19
|
* Windows has enough specialized port stuff that we push most of it off
|
|
@@ -37,20 +35,25 @@ typedef SOCKET pgsocket;
|
|
|
37
35
|
#define PGINVALID_SOCKET INVALID_SOCKET
|
|
38
36
|
#endif
|
|
39
37
|
|
|
38
|
+
/* if platform lacks socklen_t, we assume this will work */
|
|
39
|
+
#ifndef HAVE_SOCKLEN_T
|
|
40
|
+
typedef unsigned int socklen_t;
|
|
41
|
+
#endif
|
|
42
|
+
|
|
40
43
|
/* non-blocking */
|
|
41
44
|
extern bool pg_set_noblock(pgsocket sock);
|
|
42
45
|
extern bool pg_set_block(pgsocket sock);
|
|
43
46
|
|
|
44
47
|
/* Portable path handling for Unix/Win32 (in path.c) */
|
|
45
48
|
|
|
46
|
-
extern bool has_drive_prefix(const char *
|
|
49
|
+
extern bool has_drive_prefix(const char *path);
|
|
47
50
|
extern char *first_dir_separator(const char *filename);
|
|
48
51
|
extern char *last_dir_separator(const char *filename);
|
|
49
52
|
extern char *first_path_var_separator(const char *pathlist);
|
|
50
53
|
extern void join_path_components(char *ret_path,
|
|
51
54
|
const char *head, const char *tail);
|
|
52
55
|
extern void canonicalize_path(char *path);
|
|
53
|
-
extern void make_native_path(char *
|
|
56
|
+
extern void make_native_path(char *filename);
|
|
54
57
|
extern void cleanup_path(char *path);
|
|
55
58
|
extern bool path_contains_parent_reference(const char *path);
|
|
56
59
|
extern bool path_is_relative_and_below_cwd(const char *path);
|
|
@@ -75,34 +78,62 @@ extern void get_parent_directory(char *path);
|
|
|
75
78
|
extern char **pgfnames(const char *path);
|
|
76
79
|
extern void pgfnames_cleanup(char **filenames);
|
|
77
80
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
*
|
|
81
|
-
* By making this a macro we avoid needing to include path.c in libpq.
|
|
82
|
-
*/
|
|
83
|
-
#ifndef WIN32
|
|
84
|
-
#define IS_DIR_SEP(ch) ((ch) == '/')
|
|
85
|
-
|
|
86
|
-
#define is_absolute_path(filename) \
|
|
81
|
+
#define IS_NONWINDOWS_DIR_SEP(ch) ((ch) == '/')
|
|
82
|
+
#define is_nonwindows_absolute_path(filename) \
|
|
87
83
|
( \
|
|
88
|
-
|
|
84
|
+
IS_NONWINDOWS_DIR_SEP((filename)[0]) \
|
|
89
85
|
)
|
|
90
|
-
#else
|
|
91
|
-
#define IS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
|
|
92
86
|
|
|
87
|
+
#define IS_WINDOWS_DIR_SEP(ch) ((ch) == '/' || (ch) == '\\')
|
|
93
88
|
/* See path_is_relative_and_below_cwd() for how we handle 'E:abc'. */
|
|
94
|
-
#define
|
|
89
|
+
#define is_windows_absolute_path(filename) \
|
|
95
90
|
( \
|
|
96
|
-
|
|
91
|
+
IS_WINDOWS_DIR_SEP((filename)[0]) || \
|
|
97
92
|
(isalpha((unsigned char) ((filename)[0])) && (filename)[1] == ':' && \
|
|
98
|
-
|
|
93
|
+
IS_WINDOWS_DIR_SEP((filename)[2])) \
|
|
99
94
|
)
|
|
95
|
+
|
|
96
|
+
/*
|
|
97
|
+
* is_absolute_path and IS_DIR_SEP
|
|
98
|
+
*
|
|
99
|
+
* By using macros here we avoid needing to include path.c in libpq.
|
|
100
|
+
*/
|
|
101
|
+
#ifndef WIN32
|
|
102
|
+
#define IS_DIR_SEP(ch) IS_NONWINDOWS_DIR_SEP(ch)
|
|
103
|
+
#define is_absolute_path(filename) is_nonwindows_absolute_path(filename)
|
|
104
|
+
#else
|
|
105
|
+
#define IS_DIR_SEP(ch) IS_WINDOWS_DIR_SEP(ch)
|
|
106
|
+
#define is_absolute_path(filename) is_windows_absolute_path(filename)
|
|
100
107
|
#endif
|
|
101
108
|
|
|
109
|
+
/*
|
|
110
|
+
* This macro provides a centralized list of all errnos that identify
|
|
111
|
+
* hard failure of a previously-established network connection.
|
|
112
|
+
* The macro is intended to be used in a switch statement, in the form
|
|
113
|
+
* "case ALL_CONNECTION_FAILURE_ERRNOS:".
|
|
114
|
+
*
|
|
115
|
+
* Note: this groups EPIPE and ECONNRESET, which we take to indicate a
|
|
116
|
+
* probable server crash, with other errors that indicate loss of network
|
|
117
|
+
* connectivity without proving much about the server's state. Places that
|
|
118
|
+
* are actually reporting errors typically single out EPIPE and ECONNRESET,
|
|
119
|
+
* while allowing the network failures to be reported generically.
|
|
120
|
+
*/
|
|
121
|
+
#define ALL_CONNECTION_FAILURE_ERRNOS \
|
|
122
|
+
EPIPE: \
|
|
123
|
+
case ECONNRESET: \
|
|
124
|
+
case ECONNABORTED: \
|
|
125
|
+
case EHOSTDOWN: \
|
|
126
|
+
case EHOSTUNREACH: \
|
|
127
|
+
case ENETDOWN: \
|
|
128
|
+
case ENETRESET: \
|
|
129
|
+
case ENETUNREACH: \
|
|
130
|
+
case ETIMEDOUT
|
|
131
|
+
|
|
102
132
|
/* Portable locale initialization (in exec.c) */
|
|
103
133
|
extern void set_pglocale_pgservice(const char *argv0, const char *app);
|
|
104
134
|
|
|
105
135
|
/* Portable way to find and execute binaries (in exec.c) */
|
|
136
|
+
extern int validate_exec(const char *path);
|
|
106
137
|
extern int find_my_exec(const char *argv0, char *retpath);
|
|
107
138
|
extern int find_other_exec(const char *argv0, const char *target,
|
|
108
139
|
const char *versionstr, char *retpath);
|
|
@@ -111,6 +142,11 @@ extern char *pipe_read_line(char *cmd, char *line, int maxsize);
|
|
|
111
142
|
/* Doesn't belong here, but this is used with find_other_exec(), so... */
|
|
112
143
|
#define PG_BACKEND_VERSIONSTR "postgres (PostgreSQL) " PG_VERSION "\n"
|
|
113
144
|
|
|
145
|
+
#ifdef EXEC_BACKEND
|
|
146
|
+
/* Disable ASLR before exec, for developer builds only (in exec.c) */
|
|
147
|
+
extern int pg_disable_aslr(void);
|
|
148
|
+
#endif
|
|
149
|
+
|
|
114
150
|
|
|
115
151
|
#if defined(WIN32) || defined(__CYGWIN__)
|
|
116
152
|
#define EXE ".exe"
|
|
@@ -172,15 +208,24 @@ extern unsigned char pg_ascii_tolower(unsigned char ch);
|
|
|
172
208
|
#undef printf
|
|
173
209
|
#endif
|
|
174
210
|
|
|
175
|
-
extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args);
|
|
211
|
+
extern int pg_vsnprintf(char *str, size_t count, const char *fmt, va_list args) pg_attribute_printf(3, 0);
|
|
176
212
|
extern int pg_snprintf(char *str, size_t count, const char *fmt,...) pg_attribute_printf(3, 4);
|
|
177
|
-
extern int pg_vsprintf(char *str, const char *fmt, va_list args);
|
|
213
|
+
extern int pg_vsprintf(char *str, const char *fmt, va_list args) pg_attribute_printf(2, 0);
|
|
178
214
|
extern int pg_sprintf(char *str, const char *fmt,...) pg_attribute_printf(2, 3);
|
|
179
|
-
extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args);
|
|
215
|
+
extern int pg_vfprintf(FILE *stream, const char *fmt, va_list args) pg_attribute_printf(2, 0);
|
|
180
216
|
extern int pg_fprintf(FILE *stream, const char *fmt,...) pg_attribute_printf(2, 3);
|
|
181
|
-
extern int pg_vprintf(const char *fmt, va_list args);
|
|
217
|
+
extern int pg_vprintf(const char *fmt, va_list args) pg_attribute_printf(1, 0);
|
|
182
218
|
extern int pg_printf(const char *fmt,...) pg_attribute_printf(1, 2);
|
|
183
219
|
|
|
220
|
+
#ifndef WIN32
|
|
221
|
+
/*
|
|
222
|
+
* We add a pg_ prefix as a warning that the Windows implementations have the
|
|
223
|
+
* non-standard side-effect of changing the current file position.
|
|
224
|
+
*/
|
|
225
|
+
#define pg_pread pread
|
|
226
|
+
#define pg_pwrite pwrite
|
|
227
|
+
#endif
|
|
228
|
+
|
|
184
229
|
/*
|
|
185
230
|
* We use __VA_ARGS__ for printf to prevent replacing references to
|
|
186
231
|
* the "printf" format archetype in format() attribute declarations.
|
|
@@ -213,10 +258,6 @@ extern char *pg_strerror_r(int errnum, char *buf, size_t buflen);
|
|
|
213
258
|
/* Wrap strsignal(), or provide our own version if necessary */
|
|
214
259
|
extern const char *pg_strsignal(int signum);
|
|
215
260
|
|
|
216
|
-
/* Portable prompt handling */
|
|
217
|
-
extern void simple_prompt(const char *prompt, char *destination, size_t destlen,
|
|
218
|
-
bool echo);
|
|
219
|
-
|
|
220
261
|
extern int pclose_check(FILE *stream);
|
|
221
262
|
|
|
222
263
|
/* Global variable holding time zone information. */
|
|
@@ -256,7 +297,6 @@ extern int pgunlink(const char *path);
|
|
|
256
297
|
#if defined(WIN32) && !defined(__CYGWIN__)
|
|
257
298
|
extern int pgsymlink(const char *oldpath, const char *newpath);
|
|
258
299
|
extern int pgreadlink(const char *path, char *buf, size_t size);
|
|
259
|
-
extern bool pgwin32_is_junction(const char *path);
|
|
260
300
|
|
|
261
301
|
#define symlink(oldpath, newpath) pgsymlink(oldpath, newpath)
|
|
262
302
|
#define readlink(path, buf, size) pgreadlink(path, buf, size)
|
|
@@ -271,6 +311,7 @@ extern bool rmtree(const char *path, bool rmtopdir);
|
|
|
271
311
|
* passing of other special options.
|
|
272
312
|
*/
|
|
273
313
|
#define O_DIRECT 0x80000000
|
|
314
|
+
extern HANDLE pgwin32_open_handle(const char *, int, bool);
|
|
274
315
|
extern int pgwin32_open(const char *, int,...);
|
|
275
316
|
extern FILE *pgwin32_fopen(const char *, const char *);
|
|
276
317
|
#define open(a,b,c) pgwin32_open(a,b,c)
|
|
@@ -299,11 +340,6 @@ extern FILE *pgwin32_popen(const char *command, const char *type);
|
|
|
299
340
|
#define popen(a,b) pgwin32_popen(a,b)
|
|
300
341
|
#define pclose(a) _pclose(a)
|
|
301
342
|
|
|
302
|
-
/* New versions of MingW have gettimeofday, old mingw and msvc don't */
|
|
303
|
-
#ifndef HAVE_GETTIMEOFDAY
|
|
304
|
-
/* Last parameter not used */
|
|
305
|
-
extern int gettimeofday(struct timeval *tp, struct timezone *tzp);
|
|
306
|
-
#endif
|
|
307
343
|
#else /* !WIN32 */
|
|
308
344
|
|
|
309
345
|
/*
|
|
@@ -337,15 +373,6 @@ extern int gettimeofday(struct timeval *tp, struct timezone *tzp);
|
|
|
337
373
|
#define pgoff_t off_t
|
|
338
374
|
#endif
|
|
339
375
|
|
|
340
|
-
extern double pg_erand48(unsigned short xseed[3]);
|
|
341
|
-
extern long pg_lrand48(void);
|
|
342
|
-
extern long pg_jrand48(unsigned short xseed[3]);
|
|
343
|
-
extern void pg_srand48(long seed);
|
|
344
|
-
|
|
345
|
-
#ifndef HAVE_FLS
|
|
346
|
-
extern int fls(int mask);
|
|
347
|
-
#endif
|
|
348
|
-
|
|
349
376
|
#ifndef HAVE_GETPEEREID
|
|
350
377
|
/* On Windows, Perl might have incompatible definitions of uid_t and gid_t. */
|
|
351
378
|
#ifndef PLPERL_HAVE_UID_GID
|
|
@@ -373,16 +400,13 @@ extern int getpeereid(int sock, uid_t *uid, gid_t *gid);
|
|
|
373
400
|
extern void explicit_bzero(void *buf, size_t len);
|
|
374
401
|
#endif
|
|
375
402
|
|
|
376
|
-
#ifndef HAVE_STRTOF
|
|
377
|
-
extern float strtof(const char *nptr, char **endptr);
|
|
378
|
-
#endif
|
|
379
|
-
|
|
380
403
|
#ifdef HAVE_BUGGY_STRTOF
|
|
381
404
|
extern float pg_strtof(const char *nptr, char **endptr);
|
|
382
405
|
#define strtof(a,b) (pg_strtof((a),(b)))
|
|
383
406
|
#endif
|
|
384
407
|
|
|
385
|
-
#
|
|
408
|
+
#ifdef WIN32
|
|
409
|
+
/* src/port/win32link.c */
|
|
386
410
|
extern int link(const char *src, const char *dst);
|
|
387
411
|
#endif
|
|
388
412
|
|
|
@@ -396,23 +420,6 @@ extern char *mkdtemp(char *path);
|
|
|
396
420
|
extern int inet_aton(const char *cp, struct in_addr *addr);
|
|
397
421
|
#endif
|
|
398
422
|
|
|
399
|
-
/*
|
|
400
|
-
* Windows and older Unix don't have pread(2) and pwrite(2). We have
|
|
401
|
-
* replacement functions, but they have slightly different semantics so we'll
|
|
402
|
-
* use a name with a pg_ prefix to avoid confusion.
|
|
403
|
-
*/
|
|
404
|
-
#ifdef HAVE_PREAD
|
|
405
|
-
#define pg_pread pread
|
|
406
|
-
#else
|
|
407
|
-
extern ssize_t pg_pread(int fd, void *buf, size_t nbyte, off_t offset);
|
|
408
|
-
#endif
|
|
409
|
-
|
|
410
|
-
#ifdef HAVE_PWRITE
|
|
411
|
-
#define pg_pwrite pwrite
|
|
412
|
-
#else
|
|
413
|
-
extern ssize_t pg_pwrite(int fd, const void *buf, size_t nbyte, off_t offset);
|
|
414
|
-
#endif
|
|
415
|
-
|
|
416
423
|
#if !HAVE_DECL_STRLCAT
|
|
417
424
|
extern size_t strlcat(char *dst, const char *src, size_t siz);
|
|
418
425
|
#endif
|
|
@@ -425,53 +432,12 @@ extern size_t strlcpy(char *dst, const char *src, size_t siz);
|
|
|
425
432
|
extern size_t strnlen(const char *str, size_t maxlen);
|
|
426
433
|
#endif
|
|
427
434
|
|
|
428
|
-
|
|
429
|
-
extern long random(void);
|
|
430
|
-
#endif
|
|
431
|
-
|
|
432
|
-
#ifndef HAVE_UNSETENV
|
|
433
|
-
extern void unsetenv(const char *name);
|
|
434
|
-
#endif
|
|
435
|
-
|
|
436
|
-
#ifndef HAVE_SRANDOM
|
|
437
|
-
extern void srandom(unsigned int seed);
|
|
438
|
-
#endif
|
|
439
|
-
|
|
440
|
-
#ifndef HAVE_DLOPEN
|
|
441
|
-
extern void *dlopen(const char *file, int mode);
|
|
442
|
-
extern void *dlsym(void *handle, const char *symbol);
|
|
443
|
-
extern int dlclose(void *handle);
|
|
444
|
-
extern char *dlerror(void);
|
|
445
|
-
#endif
|
|
446
|
-
|
|
447
|
-
/*
|
|
448
|
-
* In some older systems, the RTLD_NOW flag isn't defined and the mode
|
|
449
|
-
* argument to dlopen must always be 1.
|
|
450
|
-
*/
|
|
451
|
-
#if !HAVE_DECL_RTLD_NOW
|
|
452
|
-
#define RTLD_NOW 1
|
|
453
|
-
#endif
|
|
454
|
-
|
|
455
|
-
/*
|
|
456
|
-
* The RTLD_GLOBAL flag is wanted if available, but it doesn't exist
|
|
457
|
-
* everywhere. If it doesn't exist, set it to 0 so it has no effect.
|
|
458
|
-
*/
|
|
459
|
-
#if !HAVE_DECL_RTLD_GLOBAL
|
|
460
|
-
#define RTLD_GLOBAL 0
|
|
461
|
-
#endif
|
|
462
|
-
|
|
463
|
-
/* thread.h */
|
|
435
|
+
/* thread.c */
|
|
464
436
|
#ifndef WIN32
|
|
465
|
-
extern
|
|
466
|
-
|
|
437
|
+
extern bool pg_get_user_name(uid_t user_id, char *buffer, size_t buflen);
|
|
438
|
+
extern bool pg_get_user_home_dir(uid_t user_id, char *buffer, size_t buflen);
|
|
467
439
|
#endif
|
|
468
440
|
|
|
469
|
-
extern int pqGethostbyname(const char *name,
|
|
470
|
-
struct hostent *resultbuf,
|
|
471
|
-
char *buffer, size_t buflen,
|
|
472
|
-
struct hostent **result,
|
|
473
|
-
int *herrno);
|
|
474
|
-
|
|
475
441
|
extern void pg_qsort(void *base, size_t nel, size_t elsize,
|
|
476
442
|
int (*cmp) (const void *, const void *));
|
|
477
443
|
extern int pg_qsort_strcmp(const void *a, const void *b);
|
|
@@ -483,6 +449,14 @@ typedef int (*qsort_arg_comparator) (const void *a, const void *b, void *arg);
|
|
|
483
449
|
extern void qsort_arg(void *base, size_t nel, size_t elsize,
|
|
484
450
|
qsort_arg_comparator cmp, void *arg);
|
|
485
451
|
|
|
452
|
+
extern void qsort_interruptible(void *base, size_t nel, size_t elsize,
|
|
453
|
+
qsort_arg_comparator cmp, void *arg);
|
|
454
|
+
|
|
455
|
+
extern void *bsearch_arg(const void *key, const void *base0,
|
|
456
|
+
size_t nmemb, size_t size,
|
|
457
|
+
int (*compar) (const void *, const void *, void *),
|
|
458
|
+
void *arg);
|
|
459
|
+
|
|
486
460
|
/* port/chklocale.c */
|
|
487
461
|
extern int pg_get_encoding_from_locale(const char *ctype, bool write_message);
|
|
488
462
|
|
|
@@ -495,6 +469,7 @@ extern char *pg_inet_net_ntop(int af, const void *src, int bits,
|
|
|
495
469
|
char *dst, size_t size);
|
|
496
470
|
|
|
497
471
|
/* port/pg_strong_random.c */
|
|
472
|
+
extern void pg_strong_random_init(void);
|
|
498
473
|
extern bool pg_strong_random(void *buf, size_t len);
|
|
499
474
|
|
|
500
475
|
/*
|
|
@@ -510,15 +485,36 @@ extern int pg_check_dir(const char *dir);
|
|
|
510
485
|
extern int pg_mkdir_p(char *path, int omode);
|
|
511
486
|
|
|
512
487
|
/* port/pqsignal.c */
|
|
513
|
-
typedef void (*pqsigfunc) (
|
|
488
|
+
typedef void (*pqsigfunc) (SIGNAL_ARGS);
|
|
514
489
|
extern pqsigfunc pqsignal(int signo, pqsigfunc func);
|
|
515
490
|
|
|
516
491
|
/* port/quotes.c */
|
|
517
492
|
extern char *escape_single_quotes_ascii(const char *src);
|
|
518
493
|
|
|
519
494
|
/* common/wait_error.c */
|
|
520
|
-
extern char *wait_result_to_str(int
|
|
495
|
+
extern char *wait_result_to_str(int exitstatus);
|
|
521
496
|
extern bool wait_result_is_signal(int exit_status, int signum);
|
|
522
497
|
extern bool wait_result_is_any_signal(int exit_status, bool include_command_not_found);
|
|
498
|
+
extern int wait_result_to_exit_code(int exit_status);
|
|
499
|
+
|
|
500
|
+
/*
|
|
501
|
+
* Interfaces that we assume all Unix system have. We retain individual macros
|
|
502
|
+
* for better documentation.
|
|
503
|
+
*
|
|
504
|
+
* For symlink-related functions, there is often no need to test these macros,
|
|
505
|
+
* because we provided basic support on Windows that can work with absolute
|
|
506
|
+
* paths to directories. Code that wants to test for complete symlink support
|
|
507
|
+
* (including relative paths and non-directories) should be conditional on
|
|
508
|
+
* HAVE_READLINK or HAVE_SYMLINK.
|
|
509
|
+
*/
|
|
510
|
+
#ifndef WIN32
|
|
511
|
+
#define HAVE_GETRLIMIT 1
|
|
512
|
+
#define HAVE_POLL 1
|
|
513
|
+
#define HAVE_POLL_H 1
|
|
514
|
+
#define HAVE_READLINK 1
|
|
515
|
+
#define HAVE_SETSID 1
|
|
516
|
+
#define HAVE_SHM_OPEN 1
|
|
517
|
+
#define HAVE_SYMLINK 1
|
|
518
|
+
#endif
|
|
523
519
|
|
|
524
520
|
#endif /* PG_PORT_H */
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
/*-------------------------------------------------------------------------
|
|
2
|
+
*
|
|
3
|
+
* instr_time.h
|
|
4
|
+
* portable high-precision interval timing
|
|
5
|
+
*
|
|
6
|
+
* This file provides an abstraction layer to hide portability issues in
|
|
7
|
+
* interval timing. On Unix we use clock_gettime(), and on Windows we use
|
|
8
|
+
* QueryPerformanceCounter(). These macros also give some breathing room to
|
|
9
|
+
* use other high-precision-timing APIs.
|
|
10
|
+
*
|
|
11
|
+
* The basic data type is instr_time, which all callers should treat as an
|
|
12
|
+
* opaque typedef. instr_time can store either an absolute time (of
|
|
13
|
+
* unspecified reference time) or an interval. The operations provided
|
|
14
|
+
* for it are:
|
|
15
|
+
*
|
|
16
|
+
* INSTR_TIME_IS_ZERO(t) is t equal to zero?
|
|
17
|
+
*
|
|
18
|
+
* INSTR_TIME_SET_ZERO(t) set t to zero (memset is acceptable too)
|
|
19
|
+
*
|
|
20
|
+
* INSTR_TIME_SET_CURRENT(t) set t to current time
|
|
21
|
+
*
|
|
22
|
+
* INSTR_TIME_SET_CURRENT_LAZY(t) set t to current time if t is zero,
|
|
23
|
+
* evaluates to whether t changed
|
|
24
|
+
*
|
|
25
|
+
* INSTR_TIME_ADD(x, y) x += y
|
|
26
|
+
*
|
|
27
|
+
* INSTR_TIME_SUBTRACT(x, y) x -= y
|
|
28
|
+
*
|
|
29
|
+
* INSTR_TIME_ACCUM_DIFF(x, y, z) x += (y - z)
|
|
30
|
+
*
|
|
31
|
+
* INSTR_TIME_GET_DOUBLE(t) convert t to double (in seconds)
|
|
32
|
+
*
|
|
33
|
+
* INSTR_TIME_GET_MILLISEC(t) convert t to double (in milliseconds)
|
|
34
|
+
*
|
|
35
|
+
* INSTR_TIME_GET_MICROSEC(t) convert t to uint64 (in microseconds)
|
|
36
|
+
*
|
|
37
|
+
* INSTR_TIME_GET_NANOSEC(t) convert t to uint64 (in nanoseconds)
|
|
38
|
+
*
|
|
39
|
+
* Note that INSTR_TIME_SUBTRACT and INSTR_TIME_ACCUM_DIFF convert
|
|
40
|
+
* absolute times to intervals. The INSTR_TIME_GET_xxx operations are
|
|
41
|
+
* only useful on intervals.
|
|
42
|
+
*
|
|
43
|
+
* When summing multiple measurements, it's recommended to leave the
|
|
44
|
+
* running sum in instr_time form (ie, use INSTR_TIME_ADD or
|
|
45
|
+
* INSTR_TIME_ACCUM_DIFF) and convert to a result format only at the end.
|
|
46
|
+
*
|
|
47
|
+
* Beware of multiple evaluations of the macro arguments.
|
|
48
|
+
*
|
|
49
|
+
*
|
|
50
|
+
* Copyright (c) 2001-2023, PostgreSQL Global Development Group
|
|
51
|
+
*
|
|
52
|
+
* src/include/portability/instr_time.h
|
|
53
|
+
*
|
|
54
|
+
*-------------------------------------------------------------------------
|
|
55
|
+
*/
|
|
56
|
+
#ifndef INSTR_TIME_H
|
|
57
|
+
#define INSTR_TIME_H
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/*
|
|
61
|
+
* We store interval times as an int64 integer on all platforms, as int64 is
|
|
62
|
+
* cheap to add/subtract, the most common operation for instr_time. The
|
|
63
|
+
* acquisition of time and converting to specific units of time is platform
|
|
64
|
+
* specific.
|
|
65
|
+
*
|
|
66
|
+
* To avoid users of the API relying on the integer representation, we wrap
|
|
67
|
+
* the 64bit integer in a struct.
|
|
68
|
+
*/
|
|
69
|
+
typedef struct instr_time
|
|
70
|
+
{
|
|
71
|
+
int64 ticks; /* in platforms specific unit */
|
|
72
|
+
} instr_time;
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
/* helpers macros used in platform specific code below */
|
|
76
|
+
|
|
77
|
+
#define NS_PER_S INT64CONST(1000000000)
|
|
78
|
+
#define NS_PER_MS INT64CONST(1000000)
|
|
79
|
+
#define NS_PER_US INT64CONST(1000)
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
#ifndef WIN32
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
/* Use clock_gettime() */
|
|
86
|
+
|
|
87
|
+
#include <time.h>
|
|
88
|
+
|
|
89
|
+
/*
|
|
90
|
+
* The best clockid to use according to the POSIX spec is CLOCK_MONOTONIC,
|
|
91
|
+
* since that will give reliable interval timing even in the face of changes
|
|
92
|
+
* to the system clock. However, POSIX doesn't require implementations to
|
|
93
|
+
* provide anything except CLOCK_REALTIME, so fall back to that if we don't
|
|
94
|
+
* find CLOCK_MONOTONIC.
|
|
95
|
+
*
|
|
96
|
+
* Also, some implementations have nonstandard clockids with better properties
|
|
97
|
+
* than CLOCK_MONOTONIC. In particular, as of macOS 10.12, Apple provides
|
|
98
|
+
* CLOCK_MONOTONIC_RAW which is both faster to read and higher resolution than
|
|
99
|
+
* their version of CLOCK_MONOTONIC.
|
|
100
|
+
*/
|
|
101
|
+
#if defined(__darwin__) && defined(CLOCK_MONOTONIC_RAW)
|
|
102
|
+
#define PG_INSTR_CLOCK CLOCK_MONOTONIC_RAW
|
|
103
|
+
#elif defined(CLOCK_MONOTONIC)
|
|
104
|
+
#define PG_INSTR_CLOCK CLOCK_MONOTONIC
|
|
105
|
+
#else
|
|
106
|
+
#define PG_INSTR_CLOCK CLOCK_REALTIME
|
|
107
|
+
#endif
|
|
108
|
+
|
|
109
|
+
/* helper for INSTR_TIME_SET_CURRENT */
|
|
110
|
+
static inline instr_time
|
|
111
|
+
pg_clock_gettime_ns(void)
|
|
112
|
+
{
|
|
113
|
+
instr_time now;
|
|
114
|
+
struct timespec tmp;
|
|
115
|
+
|
|
116
|
+
clock_gettime(PG_INSTR_CLOCK, &tmp);
|
|
117
|
+
now.ticks = tmp.tv_sec * NS_PER_S + tmp.tv_nsec;
|
|
118
|
+
|
|
119
|
+
return now;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
#define INSTR_TIME_SET_CURRENT(t) \
|
|
123
|
+
((t) = pg_clock_gettime_ns())
|
|
124
|
+
|
|
125
|
+
#define INSTR_TIME_GET_NANOSEC(t) \
|
|
126
|
+
((int64) (t).ticks)
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
#else /* WIN32 */
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
/* Use QueryPerformanceCounter() */
|
|
133
|
+
|
|
134
|
+
/* helper for INSTR_TIME_SET_CURRENT */
|
|
135
|
+
static inline instr_time
|
|
136
|
+
pg_query_performance_counter(void)
|
|
137
|
+
{
|
|
138
|
+
instr_time now;
|
|
139
|
+
LARGE_INTEGER tmp;
|
|
140
|
+
|
|
141
|
+
QueryPerformanceCounter(&tmp);
|
|
142
|
+
now.ticks = tmp.QuadPart;
|
|
143
|
+
|
|
144
|
+
return now;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
static inline double
|
|
148
|
+
GetTimerFrequency(void)
|
|
149
|
+
{
|
|
150
|
+
LARGE_INTEGER f;
|
|
151
|
+
|
|
152
|
+
QueryPerformanceFrequency(&f);
|
|
153
|
+
return (double) f.QuadPart;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
#define INSTR_TIME_SET_CURRENT(t) \
|
|
157
|
+
((t) = pg_query_performance_counter())
|
|
158
|
+
|
|
159
|
+
#define INSTR_TIME_GET_NANOSEC(t) \
|
|
160
|
+
((int64) ((t).ticks * ((double) NS_PER_S / GetTimerFrequency())))
|
|
161
|
+
|
|
162
|
+
#endif /* WIN32 */
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
/*
|
|
166
|
+
* Common macros
|
|
167
|
+
*/
|
|
168
|
+
|
|
169
|
+
#define INSTR_TIME_IS_ZERO(t) ((t).ticks == 0)
|
|
170
|
+
|
|
171
|
+
|
|
172
|
+
#define INSTR_TIME_SET_ZERO(t) ((t).ticks = 0)
|
|
173
|
+
|
|
174
|
+
#define INSTR_TIME_SET_CURRENT_LAZY(t) \
|
|
175
|
+
(INSTR_TIME_IS_ZERO(t) ? INSTR_TIME_SET_CURRENT(t), true : false)
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
#define INSTR_TIME_ADD(x,y) \
|
|
179
|
+
((x).ticks += (y).ticks)
|
|
180
|
+
|
|
181
|
+
#define INSTR_TIME_SUBTRACT(x,y) \
|
|
182
|
+
((x).ticks -= (y).ticks)
|
|
183
|
+
|
|
184
|
+
#define INSTR_TIME_ACCUM_DIFF(x,y,z) \
|
|
185
|
+
((x).ticks += (y).ticks - (z).ticks)
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
#define INSTR_TIME_GET_DOUBLE(t) \
|
|
189
|
+
((double) INSTR_TIME_GET_NANOSEC(t) / NS_PER_S)
|
|
190
|
+
|
|
191
|
+
#define INSTR_TIME_GET_MILLISEC(t) \
|
|
192
|
+
((double) INSTR_TIME_GET_NANOSEC(t) / NS_PER_MS)
|
|
193
|
+
|
|
194
|
+
#define INSTR_TIME_GET_MICROSEC(t) \
|
|
195
|
+
(INSTR_TIME_GET_NANOSEC(t) / NS_PER_US)
|
|
196
|
+
|
|
197
|
+
#endif /* INSTR_TIME_H */
|