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,8 +3,23 @@
|
|
|
3
3
|
* execnodes.h
|
|
4
4
|
* definitions for executor state nodes
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Most plan node types declared in plannodes.h have a corresponding
|
|
7
|
+
* execution-state node type declared here. An exception is that
|
|
8
|
+
* expression nodes (subtypes of Expr) are usually represented by steps
|
|
9
|
+
* of an ExprState, and fully handled within execExpr* - but sometimes
|
|
10
|
+
* their state needs to be shared with other parts of the executor, as
|
|
11
|
+
* for example with SubPlanState, which nodeSubplan.c has to modify.
|
|
12
|
+
*
|
|
13
|
+
* Node types declared in this file do not have any copy/equal/out/read
|
|
14
|
+
* support. (That is currently hard-wired in gen_node_support.pl, rather
|
|
15
|
+
* than being explicitly represented by pg_node_attr decorations here.)
|
|
16
|
+
* There is no need for copy, equal, or read support for executor trees.
|
|
17
|
+
* Output support could be useful for debugging; but there are a lot of
|
|
18
|
+
* specialized fields that would require custom code, so for now it's
|
|
19
|
+
* not provided.
|
|
20
|
+
*
|
|
21
|
+
*
|
|
22
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
23
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
24
|
*
|
|
10
25
|
* src/include/nodes/execnodes.h
|
|
@@ -17,6 +32,7 @@
|
|
|
17
32
|
#include "access/tupconvert.h"
|
|
18
33
|
#include "executor/instrument.h"
|
|
19
34
|
#include "fmgr.h"
|
|
35
|
+
#include "lib/ilist.h"
|
|
20
36
|
#include "lib/pairingheap.h"
|
|
21
37
|
#include "nodes/params.h"
|
|
22
38
|
#include "nodes/plannodes.h"
|
|
@@ -33,7 +49,6 @@
|
|
|
33
49
|
#include "utils/tuplestore.h"
|
|
34
50
|
|
|
35
51
|
struct PlanState; /* forward references in this file */
|
|
36
|
-
struct PartitionRoutingInfo;
|
|
37
52
|
struct ParallelHashJoinState;
|
|
38
53
|
struct ExecRowMark;
|
|
39
54
|
struct ExprState;
|
|
@@ -41,12 +56,13 @@ struct ExprContext;
|
|
|
41
56
|
struct RangeTblEntry; /* avoid including parsenodes.h here */
|
|
42
57
|
struct ExprEvalStep; /* avoid including execExpr.h everywhere */
|
|
43
58
|
struct CopyMultiInsertBuffer;
|
|
59
|
+
struct LogicalTapeSet;
|
|
44
60
|
|
|
45
61
|
|
|
46
62
|
/* ----------------
|
|
47
63
|
* ExprState node
|
|
48
64
|
*
|
|
49
|
-
* ExprState
|
|
65
|
+
* ExprState represents the evaluation state for a whole expression tree.
|
|
50
66
|
* It contains instructions (in ->steps) to evaluate the expression.
|
|
51
67
|
* ----------------
|
|
52
68
|
*/
|
|
@@ -60,7 +76,7 @@ typedef Datum (*ExprStateEvalFunc) (struct ExprState *expression,
|
|
|
60
76
|
|
|
61
77
|
typedef struct ExprState
|
|
62
78
|
{
|
|
63
|
-
NodeTag
|
|
79
|
+
NodeTag type;
|
|
64
80
|
|
|
65
81
|
uint8 flags; /* bitmask of EEO_FLAG_* bits, see above */
|
|
66
82
|
|
|
@@ -141,8 +157,11 @@ typedef struct ExprState
|
|
|
141
157
|
* Unique is it a unique index?
|
|
142
158
|
* OpclassOptions opclass-specific options, or NULL if none
|
|
143
159
|
* ReadyForInserts is it valid for inserts?
|
|
160
|
+
* CheckedUnchanged IndexUnchanged status determined yet?
|
|
161
|
+
* IndexUnchanged aminsert hint, cached for retail inserts
|
|
144
162
|
* Concurrent are we doing a concurrent index build?
|
|
145
163
|
* BrokenHotChain did we detect any broken HOT chains?
|
|
164
|
+
* Summarizing is it a summarizing index?
|
|
146
165
|
* ParallelWorkers # of workers requested (excludes leader)
|
|
147
166
|
* Am Oid of index AM
|
|
148
167
|
* AmCache private cache area for index AM
|
|
@@ -170,9 +189,13 @@ typedef struct IndexInfo
|
|
|
170
189
|
uint16 *ii_UniqueStrats; /* array with one entry per column */
|
|
171
190
|
Datum *ii_OpclassOptions; /* array with one entry per column */
|
|
172
191
|
bool ii_Unique;
|
|
192
|
+
bool ii_NullsNotDistinct;
|
|
173
193
|
bool ii_ReadyForInserts;
|
|
194
|
+
bool ii_CheckedUnchanged;
|
|
195
|
+
bool ii_IndexUnchanged;
|
|
174
196
|
bool ii_Concurrent;
|
|
175
197
|
bool ii_BrokenHotChain;
|
|
198
|
+
bool ii_Summarizing;
|
|
176
199
|
int ii_ParallelWorkers;
|
|
177
200
|
Oid ii_Am;
|
|
178
201
|
void *ii_AmCache;
|
|
@@ -357,10 +380,6 @@ typedef struct ProjectionInfo
|
|
|
357
380
|
* attribute numbers of the "original" tuple and the
|
|
358
381
|
* attribute numbers of the "clean" tuple.
|
|
359
382
|
* resultSlot: tuple slot used to hold cleaned tuple.
|
|
360
|
-
* junkAttNo: not used by junkfilter code. Can be used by caller
|
|
361
|
-
* to remember the attno of a specific junk attribute
|
|
362
|
-
* (nodeModifyTable.c keeps the "ctid" or "wholerow"
|
|
363
|
-
* attno here).
|
|
364
383
|
* ----------------
|
|
365
384
|
*/
|
|
366
385
|
typedef struct JunkFilter
|
|
@@ -370,7 +389,6 @@ typedef struct JunkFilter
|
|
|
370
389
|
TupleDesc jf_cleanTupType;
|
|
371
390
|
AttrNumber *jf_cleanMap;
|
|
372
391
|
TupleTableSlot *jf_resultSlot;
|
|
373
|
-
AttrNumber jf_junkAttNo;
|
|
374
392
|
} JunkFilter;
|
|
375
393
|
|
|
376
394
|
/*
|
|
@@ -388,6 +406,22 @@ typedef struct OnConflictSetState
|
|
|
388
406
|
ExprState *oc_WhereClause; /* state for the WHERE clause */
|
|
389
407
|
} OnConflictSetState;
|
|
390
408
|
|
|
409
|
+
/* ----------------
|
|
410
|
+
* MergeActionState information
|
|
411
|
+
*
|
|
412
|
+
* Executor state for a MERGE action.
|
|
413
|
+
* ----------------
|
|
414
|
+
*/
|
|
415
|
+
typedef struct MergeActionState
|
|
416
|
+
{
|
|
417
|
+
NodeTag type;
|
|
418
|
+
|
|
419
|
+
MergeAction *mas_action; /* associated MergeAction node */
|
|
420
|
+
ProjectionInfo *mas_proj; /* projection of the action's targetlist for
|
|
421
|
+
* this rel */
|
|
422
|
+
ExprState *mas_whenqual; /* WHEN [NOT] MATCHED AND conditions */
|
|
423
|
+
} MergeActionState;
|
|
424
|
+
|
|
391
425
|
/*
|
|
392
426
|
* ResultRelInfo
|
|
393
427
|
*
|
|
@@ -395,12 +429,15 @@ typedef struct OnConflictSetState
|
|
|
395
429
|
* relation, and perhaps also fire triggers. ResultRelInfo holds all the
|
|
396
430
|
* information needed about a result relation, including indexes.
|
|
397
431
|
*
|
|
398
|
-
* Normally, a ResultRelInfo refers to a table that is in the query's
|
|
399
|
-
*
|
|
400
|
-
*
|
|
401
|
-
*
|
|
402
|
-
*
|
|
403
|
-
*
|
|
432
|
+
* Normally, a ResultRelInfo refers to a table that is in the query's range
|
|
433
|
+
* table; then ri_RangeTableIndex is the RT index and ri_RelationDesc is
|
|
434
|
+
* just a copy of the relevant es_relations[] entry. However, in some
|
|
435
|
+
* situations we create ResultRelInfos for relations that are not in the
|
|
436
|
+
* range table, namely for targets of tuple routing in a partitioned table,
|
|
437
|
+
* and when firing triggers in tables other than the target tables (See
|
|
438
|
+
* ExecGetTriggerResultRel). In these situations, ri_RangeTableIndex is 0
|
|
439
|
+
* and ri_RelationDesc is a separately-opened relcache pointer that needs to
|
|
440
|
+
* be separately closed.
|
|
404
441
|
*/
|
|
405
442
|
typedef struct ResultRelInfo
|
|
406
443
|
{
|
|
@@ -421,6 +458,24 @@ typedef struct ResultRelInfo
|
|
|
421
458
|
/* array of key/attr info for indices */
|
|
422
459
|
IndexInfo **ri_IndexRelationInfo;
|
|
423
460
|
|
|
461
|
+
/*
|
|
462
|
+
* For UPDATE/DELETE result relations, the attribute number of the row
|
|
463
|
+
* identity junk attribute in the source plan's output tuples
|
|
464
|
+
*/
|
|
465
|
+
AttrNumber ri_RowIdAttNo;
|
|
466
|
+
|
|
467
|
+
/* For UPDATE, attnums of generated columns to be computed */
|
|
468
|
+
Bitmapset *ri_extraUpdatedCols;
|
|
469
|
+
|
|
470
|
+
/* Projection to generate new tuple in an INSERT/UPDATE */
|
|
471
|
+
ProjectionInfo *ri_projectNew;
|
|
472
|
+
/* Slot to hold that tuple */
|
|
473
|
+
TupleTableSlot *ri_newTupleSlot;
|
|
474
|
+
/* Slot to hold the old tuple being updated */
|
|
475
|
+
TupleTableSlot *ri_oldTupleSlot;
|
|
476
|
+
/* Have the projection and the slots above been initialized? */
|
|
477
|
+
bool ri_projectNewInfoValid;
|
|
478
|
+
|
|
424
479
|
/* triggers to be fired, if any */
|
|
425
480
|
TriggerDesc *ri_TrigDesc;
|
|
426
481
|
|
|
@@ -447,6 +502,13 @@ typedef struct ResultRelInfo
|
|
|
447
502
|
/* true when modifying foreign table directly */
|
|
448
503
|
bool ri_usesFdwDirectModify;
|
|
449
504
|
|
|
505
|
+
/* batch insert stuff */
|
|
506
|
+
int ri_NumSlots; /* number of slots in the array */
|
|
507
|
+
int ri_NumSlotsInitialized; /* number of initialized slots */
|
|
508
|
+
int ri_BatchSize; /* max slots inserted in a single batch */
|
|
509
|
+
TupleTableSlot **ri_Slots; /* input tuples for batch insert */
|
|
510
|
+
TupleTableSlot **ri_PlanSlots;
|
|
511
|
+
|
|
450
512
|
/* list of WithCheckOption's to be checked */
|
|
451
513
|
List *ri_WithCheckOptions;
|
|
452
514
|
|
|
@@ -456,14 +518,13 @@ typedef struct ResultRelInfo
|
|
|
456
518
|
/* array of constraint-checking expr states */
|
|
457
519
|
ExprState **ri_ConstraintExprs;
|
|
458
520
|
|
|
459
|
-
/*
|
|
460
|
-
ExprState **
|
|
521
|
+
/* arrays of stored generated columns expr states, for INSERT and UPDATE */
|
|
522
|
+
ExprState **ri_GeneratedExprsI;
|
|
523
|
+
ExprState **ri_GeneratedExprsU;
|
|
461
524
|
|
|
462
525
|
/* number of stored generated columns we need to compute */
|
|
463
|
-
int
|
|
464
|
-
|
|
465
|
-
/* for removing junk attributes from tuples */
|
|
466
|
-
JunkFilter *ri_junkFilter;
|
|
526
|
+
int ri_NumGeneratedNeededI;
|
|
527
|
+
int ri_NumGeneratedNeededU;
|
|
467
528
|
|
|
468
529
|
/* list of RETURNING expressions */
|
|
469
530
|
List *ri_returningList;
|
|
@@ -477,31 +538,73 @@ typedef struct ResultRelInfo
|
|
|
477
538
|
/* ON CONFLICT evaluation state */
|
|
478
539
|
OnConflictSetState *ri_onConflict;
|
|
479
540
|
|
|
480
|
-
/*
|
|
481
|
-
List *
|
|
541
|
+
/* for MERGE, lists of MergeActionState */
|
|
542
|
+
List *ri_matchedMergeAction;
|
|
543
|
+
List *ri_notMatchedMergeAction;
|
|
482
544
|
|
|
483
|
-
/* partition check expression state */
|
|
545
|
+
/* partition check expression state (NULL if not set up yet) */
|
|
484
546
|
ExprState *ri_PartitionCheckExpr;
|
|
485
547
|
|
|
486
548
|
/*
|
|
549
|
+
* Map to convert child result relation tuples to the format of the table
|
|
550
|
+
* actually mentioned in the query (called "root"). Computed only if
|
|
551
|
+
* needed. A NULL map value indicates that no conversion is needed, so we
|
|
552
|
+
* must have a separate flag to show if the map has been computed.
|
|
553
|
+
*/
|
|
554
|
+
TupleConversionMap *ri_ChildToRootMap;
|
|
555
|
+
bool ri_ChildToRootMapValid;
|
|
556
|
+
|
|
557
|
+
/*
|
|
558
|
+
* As above, but in the other direction.
|
|
559
|
+
*/
|
|
560
|
+
TupleConversionMap *ri_RootToChildMap;
|
|
561
|
+
bool ri_RootToChildMapValid;
|
|
562
|
+
|
|
563
|
+
/*
|
|
564
|
+
* Information needed by tuple routing target relations
|
|
565
|
+
*
|
|
487
566
|
* RootResultRelInfo gives the target relation mentioned in the query, if
|
|
488
567
|
* it's a partitioned table. It is not set if the target relation
|
|
489
568
|
* mentioned in the query is an inherited table, nor when tuple routing is
|
|
490
569
|
* not needed.
|
|
570
|
+
*
|
|
571
|
+
* PartitionTupleSlot is non-NULL if RootToChild conversion is needed and
|
|
572
|
+
* the relation is a partition.
|
|
491
573
|
*/
|
|
492
574
|
struct ResultRelInfo *ri_RootResultRelInfo;
|
|
575
|
+
TupleTableSlot *ri_PartitionTupleSlot;
|
|
493
576
|
|
|
494
|
-
/*
|
|
495
|
-
struct PartitionRoutingInfo *ri_PartitionInfo;
|
|
496
|
-
|
|
497
|
-
/* For use by copy.c when performing multi-inserts */
|
|
577
|
+
/* for use by copyfrom.c when performing multi-inserts */
|
|
498
578
|
struct CopyMultiInsertBuffer *ri_CopyMultiInsertBuffer;
|
|
579
|
+
|
|
580
|
+
/*
|
|
581
|
+
* Used when a leaf partition is involved in a cross-partition update of
|
|
582
|
+
* one of its ancestors; see ExecCrossPartitionUpdateForeignKey().
|
|
583
|
+
*/
|
|
584
|
+
List *ri_ancestorResultRels;
|
|
499
585
|
} ResultRelInfo;
|
|
500
586
|
|
|
587
|
+
/* ----------------
|
|
588
|
+
* AsyncRequest
|
|
589
|
+
*
|
|
590
|
+
* State for an asynchronous tuple request.
|
|
591
|
+
* ----------------
|
|
592
|
+
*/
|
|
593
|
+
typedef struct AsyncRequest
|
|
594
|
+
{
|
|
595
|
+
struct PlanState *requestor; /* Node that wants a tuple */
|
|
596
|
+
struct PlanState *requestee; /* Node from which a tuple is wanted */
|
|
597
|
+
int request_index; /* Scratch space for requestor */
|
|
598
|
+
bool callback_pending; /* Callback is needed */
|
|
599
|
+
bool request_complete; /* Request complete, result valid */
|
|
600
|
+
TupleTableSlot *result; /* Result (NULL or an empty slot if no more
|
|
601
|
+
* tuples) */
|
|
602
|
+
} AsyncRequest;
|
|
603
|
+
|
|
501
604
|
/* ----------------
|
|
502
605
|
* EState information
|
|
503
606
|
*
|
|
504
|
-
*
|
|
607
|
+
* Working state for an Executor invocation
|
|
505
608
|
* ----------------
|
|
506
609
|
*/
|
|
507
610
|
typedef struct EState
|
|
@@ -518,6 +621,7 @@ typedef struct EState
|
|
|
518
621
|
* pointers, or NULL if not yet opened */
|
|
519
622
|
struct ExecRowMark **es_rowmarks; /* Array of per-range-table-entry
|
|
520
623
|
* ExecRowMarks, or NULL if none */
|
|
624
|
+
List *es_rteperminfos; /* List of RTEPermissionInfo */
|
|
521
625
|
PlannedStmt *es_plannedstmt; /* link to top of plan tree */
|
|
522
626
|
const char *es_sourceText; /* Source text from QueryDesc */
|
|
523
627
|
|
|
@@ -527,23 +631,18 @@ typedef struct EState
|
|
|
527
631
|
CommandId es_output_cid;
|
|
528
632
|
|
|
529
633
|
/* Info about target table(s) for insert/update/delete queries: */
|
|
530
|
-
ResultRelInfo
|
|
531
|
-
|
|
532
|
-
|
|
634
|
+
ResultRelInfo **es_result_relations; /* Array of per-range-table-entry
|
|
635
|
+
* ResultRelInfo pointers, or NULL
|
|
636
|
+
* if not a target table */
|
|
637
|
+
List *es_opened_result_relations; /* List of non-NULL entries in
|
|
638
|
+
* es_result_relations in no
|
|
639
|
+
* specific order */
|
|
533
640
|
|
|
534
|
-
/*
|
|
535
|
-
* Info about the partition root table(s) for insert/update/delete queries
|
|
536
|
-
* targeting partitioned tables. Only leaf partitions are mentioned in
|
|
537
|
-
* es_result_relations, but we need access to the roots for firing
|
|
538
|
-
* triggers and for runtime tuple routing.
|
|
539
|
-
*/
|
|
540
|
-
ResultRelInfo *es_root_result_relations; /* array of ResultRelInfos */
|
|
541
|
-
int es_num_root_result_relations; /* length of the array */
|
|
542
641
|
PartitionDirectory es_partition_directory; /* for PartitionDesc lookup */
|
|
543
642
|
|
|
544
643
|
/*
|
|
545
644
|
* The following list contains ResultRelInfos created by the tuple routing
|
|
546
|
-
* code for partitions that
|
|
645
|
+
* code for partitions that aren't found in the es_result_relations array.
|
|
547
646
|
*/
|
|
548
647
|
List *es_tuple_routing_result_relations;
|
|
549
648
|
|
|
@@ -561,7 +660,10 @@ typedef struct EState
|
|
|
561
660
|
|
|
562
661
|
List *es_tupleTable; /* List of TupleTableSlots */
|
|
563
662
|
|
|
564
|
-
uint64 es_processed; /* # of tuples processed
|
|
663
|
+
uint64 es_processed; /* # of tuples processed during one
|
|
664
|
+
* ExecutorRun() call. */
|
|
665
|
+
uint64 es_total_processed; /* total # of tuples aggregated across all
|
|
666
|
+
* ExecutorRun() calls. */
|
|
565
667
|
|
|
566
668
|
int es_top_eflags; /* eflags passed to ExecutorStart */
|
|
567
669
|
int es_instrument; /* OR of InstrumentOption flags */
|
|
@@ -605,6 +707,13 @@ typedef struct EState
|
|
|
605
707
|
int es_jit_flags;
|
|
606
708
|
struct JitContext *es_jit;
|
|
607
709
|
struct JitInstrumentation *es_jit_worker_instr;
|
|
710
|
+
|
|
711
|
+
/*
|
|
712
|
+
* Lists of ResultRelInfos for foreign tables on which batch-inserts are
|
|
713
|
+
* to be executed and owning ModifyTableStates, stored in the same order.
|
|
714
|
+
*/
|
|
715
|
+
List *es_insert_pending_result_relations;
|
|
716
|
+
List *es_insert_pending_modifytables;
|
|
608
717
|
} EState;
|
|
609
718
|
|
|
610
719
|
|
|
@@ -612,8 +721,8 @@ typedef struct EState
|
|
|
612
721
|
* ExecRowMark -
|
|
613
722
|
* runtime representation of FOR [KEY] UPDATE/SHARE clauses
|
|
614
723
|
*
|
|
615
|
-
* When doing UPDATE
|
|
616
|
-
* ExecRowMark for each non-target relation in the query (except inheritance
|
|
724
|
+
* When doing UPDATE/DELETE/MERGE/SELECT FOR [KEY] UPDATE/SHARE, we will have
|
|
725
|
+
* an ExecRowMark for each non-target relation in the query (except inheritance
|
|
617
726
|
* parent RTEs, which can be ignored at runtime). Virtual relations such as
|
|
618
727
|
* subqueries-in-FROM will have an ExecRowMark with relation == NULL. See
|
|
619
728
|
* PlanRowMark for details about most of the fields. In addition to fields
|
|
@@ -649,10 +758,7 @@ typedef struct ExecRowMark
|
|
|
649
758
|
* Each LockRows and ModifyTable node keeps a list of the rowmarks it needs to
|
|
650
759
|
* deal with. In addition to a pointer to the related entry in es_rowmarks,
|
|
651
760
|
* this struct carries the column number(s) of the resjunk columns associated
|
|
652
|
-
* with the rowmark (see comments for PlanRowMark for more detail).
|
|
653
|
-
* case of ModifyTable, there has to be a separate ExecAuxRowMark list for
|
|
654
|
-
* each child plan, because the resjunk columns could be at different physical
|
|
655
|
-
* column positions in different subplans.
|
|
761
|
+
* with the rowmark (see comments for PlanRowMark for more detail).
|
|
656
762
|
*/
|
|
657
763
|
typedef struct ExecAuxRowMark
|
|
658
764
|
{
|
|
@@ -747,17 +853,6 @@ typedef tuplehash_iterator TupleHashIterator;
|
|
|
747
853
|
* ----------------------------------------------------------------
|
|
748
854
|
*/
|
|
749
855
|
|
|
750
|
-
/* ----------------
|
|
751
|
-
* AggrefExprState node
|
|
752
|
-
* ----------------
|
|
753
|
-
*/
|
|
754
|
-
typedef struct AggrefExprState
|
|
755
|
-
{
|
|
756
|
-
NodeTag type;
|
|
757
|
-
Aggref *aggref; /* expression plan node */
|
|
758
|
-
int aggno; /* ID number for agg within its plan node */
|
|
759
|
-
} AggrefExprState;
|
|
760
|
-
|
|
761
856
|
/* ----------------
|
|
762
857
|
* WindowFuncExprState node
|
|
763
858
|
* ----------------
|
|
@@ -885,18 +980,6 @@ typedef struct SubPlanState
|
|
|
885
980
|
ExprState *cur_eq_comp; /* equality comparator for LHS vs. table */
|
|
886
981
|
} SubPlanState;
|
|
887
982
|
|
|
888
|
-
/* ----------------
|
|
889
|
-
* AlternativeSubPlanState node
|
|
890
|
-
* ----------------
|
|
891
|
-
*/
|
|
892
|
-
typedef struct AlternativeSubPlanState
|
|
893
|
-
{
|
|
894
|
-
NodeTag type;
|
|
895
|
-
AlternativeSubPlan *subplan; /* expression plan node */
|
|
896
|
-
List *subplans; /* SubPlanStates of alternative subplans */
|
|
897
|
-
int active; /* list index of the one we're using */
|
|
898
|
-
} AlternativeSubPlanState;
|
|
899
|
-
|
|
900
983
|
/*
|
|
901
984
|
* DomainConstraintState - one item to check during CoerceToDomain
|
|
902
985
|
*
|
|
@@ -947,6 +1030,8 @@ typedef TupleTableSlot *(*ExecProcNodeMtd) (struct PlanState *pstate);
|
|
|
947
1030
|
*/
|
|
948
1031
|
typedef struct PlanState
|
|
949
1032
|
{
|
|
1033
|
+
pg_node_attr(abstract)
|
|
1034
|
+
|
|
950
1035
|
NodeTag type;
|
|
951
1036
|
|
|
952
1037
|
Plan *plan; /* associated Plan node */
|
|
@@ -991,6 +1076,8 @@ typedef struct PlanState
|
|
|
991
1076
|
ExprContext *ps_ExprContext; /* node's expression-evaluation context */
|
|
992
1077
|
ProjectionInfo *ps_ProjInfo; /* info for doing tuple projection */
|
|
993
1078
|
|
|
1079
|
+
bool async_capable; /* true if node is async-capable */
|
|
1080
|
+
|
|
994
1081
|
/*
|
|
995
1082
|
* Scanslot's descriptor if known. This is a bit of a hack, but otherwise
|
|
996
1083
|
* it's hard for expression compilation to optimize based on the
|
|
@@ -1077,21 +1164,21 @@ typedef struct PlanState
|
|
|
1077
1164
|
* EvalPlanQualSlot), and/or found using the rowmark mechanism (non-locking
|
|
1078
1165
|
* rowmarks by the EPQ machinery itself, locking ones by the caller).
|
|
1079
1166
|
*
|
|
1080
|
-
* While the plan to be checked may be changed using EvalPlanQualSetPlan()
|
|
1081
|
-
*
|
|
1082
|
-
* plans need to share the same EState.
|
|
1167
|
+
* While the plan to be checked may be changed using EvalPlanQualSetPlan(),
|
|
1168
|
+
* all such plans need to share the same EState.
|
|
1083
1169
|
*/
|
|
1084
1170
|
typedef struct EPQState
|
|
1085
1171
|
{
|
|
1086
|
-
/*
|
|
1087
|
-
|
|
1172
|
+
/* These are initialized by EvalPlanQualInit() and do not change later: */
|
|
1088
1173
|
EState *parentestate; /* main query's EState */
|
|
1089
1174
|
int epqParam; /* ID of Param to force scan node re-eval */
|
|
1175
|
+
List *resultRelations; /* integer list of RT indexes, or NIL */
|
|
1090
1176
|
|
|
1091
1177
|
/*
|
|
1092
|
-
*
|
|
1093
|
-
*
|
|
1094
|
-
*
|
|
1178
|
+
* relsubs_slot[scanrelid - 1] holds the EPQ test tuple to be returned by
|
|
1179
|
+
* the scan node for the scanrelid'th RT index, in place of performing an
|
|
1180
|
+
* actual table scan. Callers should use EvalPlanQualSlot() to fetch
|
|
1181
|
+
* these slots.
|
|
1095
1182
|
*/
|
|
1096
1183
|
List *tuple_table; /* tuple table for relsubs_slot */
|
|
1097
1184
|
TupleTableSlot **relsubs_slot;
|
|
@@ -1125,11 +1212,21 @@ typedef struct EPQState
|
|
|
1125
1212
|
ExecAuxRowMark **relsubs_rowmark;
|
|
1126
1213
|
|
|
1127
1214
|
/*
|
|
1128
|
-
*
|
|
1129
|
-
*
|
|
1215
|
+
* relsubs_done[scanrelid - 1] is true if there is no EPQ tuple for this
|
|
1216
|
+
* target relation or it has already been fetched in the current scan of
|
|
1217
|
+
* this target relation within the current EvalPlanQual test.
|
|
1130
1218
|
*/
|
|
1131
1219
|
bool *relsubs_done;
|
|
1132
1220
|
|
|
1221
|
+
/*
|
|
1222
|
+
* relsubs_blocked[scanrelid - 1] is true if there is no EPQ tuple for
|
|
1223
|
+
* this target relation during the current EvalPlanQual test. We keep
|
|
1224
|
+
* these flags set for all relids listed in resultRelations, but
|
|
1225
|
+
* transiently clear the one for the relation whose tuple is actually
|
|
1226
|
+
* passed to EvalPlanQual().
|
|
1227
|
+
*/
|
|
1228
|
+
bool *relsubs_blocked;
|
|
1229
|
+
|
|
1133
1230
|
PlanState *recheckplanstate; /* EPQ specific exec nodes, for ->plan */
|
|
1134
1231
|
} EPQState;
|
|
1135
1232
|
|
|
@@ -1163,6 +1260,12 @@ typedef struct ProjectSetState
|
|
|
1163
1260
|
MemoryContext argcontext; /* context for SRF arguments */
|
|
1164
1261
|
} ProjectSetState;
|
|
1165
1262
|
|
|
1263
|
+
|
|
1264
|
+
/* flags for mt_merge_subcommands */
|
|
1265
|
+
#define MERGE_INSERT 0x01
|
|
1266
|
+
#define MERGE_UPDATE 0x02
|
|
1267
|
+
#define MERGE_DELETE 0x04
|
|
1268
|
+
|
|
1166
1269
|
/* ----------------
|
|
1167
1270
|
* ModifyTableState information
|
|
1168
1271
|
* ----------------
|
|
@@ -1170,21 +1273,34 @@ typedef struct ProjectSetState
|
|
|
1170
1273
|
typedef struct ModifyTableState
|
|
1171
1274
|
{
|
|
1172
1275
|
PlanState ps; /* its first field is NodeTag */
|
|
1173
|
-
CmdType operation; /* INSERT, UPDATE, or
|
|
1276
|
+
CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */
|
|
1174
1277
|
bool canSetTag; /* do we set the command tag/es_processed? */
|
|
1175
1278
|
bool mt_done; /* are we done? */
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1279
|
+
int mt_nrels; /* number of entries in resultRelInfo[] */
|
|
1280
|
+
ResultRelInfo *resultRelInfo; /* info about target relation(s) */
|
|
1281
|
+
|
|
1282
|
+
/*
|
|
1283
|
+
* Target relation mentioned in the original statement, used to fire
|
|
1284
|
+
* statement-level triggers and as the root for tuple routing. (This
|
|
1285
|
+
* might point to one of the resultRelInfo[] entries, but it can also be a
|
|
1286
|
+
* distinct struct.)
|
|
1287
|
+
*/
|
|
1288
|
+
ResultRelInfo *rootResultRelInfo;
|
|
1289
|
+
|
|
1185
1290
|
EPQState mt_epqstate; /* for evaluating EvalPlanQual rechecks */
|
|
1186
1291
|
bool fireBSTriggers; /* do we need to fire stmt triggers? */
|
|
1187
1292
|
|
|
1293
|
+
/*
|
|
1294
|
+
* These fields are used for inherited UPDATE and DELETE, to track which
|
|
1295
|
+
* target relation a given tuple is from. If there are a lot of target
|
|
1296
|
+
* relations, we use a hash table to translate table OIDs to
|
|
1297
|
+
* resultRelInfo[] indexes; otherwise mt_resultOidHash is NULL.
|
|
1298
|
+
*/
|
|
1299
|
+
int mt_resultOidAttno; /* resno of "tableoid" junk attr */
|
|
1300
|
+
Oid mt_lastResultOid; /* last-seen value of tableoid */
|
|
1301
|
+
int mt_lastResultIndex; /* corresponding index in resultRelInfo[] */
|
|
1302
|
+
HTAB *mt_resultOidHash; /* optional hash table to speed lookups */
|
|
1303
|
+
|
|
1188
1304
|
/*
|
|
1189
1305
|
* Slot for storing tuples in the root partitioned table's rowtype during
|
|
1190
1306
|
* an UPDATE of a partitioned table.
|
|
@@ -1200,20 +1316,25 @@ typedef struct ModifyTableState
|
|
|
1200
1316
|
/* controls transition table population for INSERT...ON CONFLICT UPDATE */
|
|
1201
1317
|
struct TransitionCaptureState *mt_oc_transition_capture;
|
|
1202
1318
|
|
|
1203
|
-
/*
|
|
1204
|
-
|
|
1319
|
+
/* Flags showing which subcommands are present INS/UPD/DEL/DO NOTHING */
|
|
1320
|
+
int mt_merge_subcommands;
|
|
1321
|
+
|
|
1322
|
+
/* tuple counters for MERGE */
|
|
1323
|
+
double mt_merge_inserted;
|
|
1324
|
+
double mt_merge_updated;
|
|
1325
|
+
double mt_merge_deleted;
|
|
1205
1326
|
} ModifyTableState;
|
|
1206
1327
|
|
|
1207
1328
|
/* ----------------
|
|
1208
1329
|
* AppendState information
|
|
1209
1330
|
*
|
|
1210
1331
|
* nplans how many plans are in the array
|
|
1211
|
-
* whichplan which plan is being executed (0 .. n-1)
|
|
1212
|
-
* special negative value. See nodeAppend.c.
|
|
1332
|
+
* whichplan which synchronous plan is being executed (0 .. n-1)
|
|
1333
|
+
* or a special negative value. See nodeAppend.c.
|
|
1213
1334
|
* prune_state details required to allow partitions to be
|
|
1214
1335
|
* eliminated from the scan, or NULL if not possible.
|
|
1215
|
-
* valid_subplans for runtime pruning, valid appendplans
|
|
1216
|
-
* scan.
|
|
1336
|
+
* valid_subplans for runtime pruning, valid synchronous appendplans
|
|
1337
|
+
* indexes to scan.
|
|
1217
1338
|
* ----------------
|
|
1218
1339
|
*/
|
|
1219
1340
|
|
|
@@ -1229,12 +1350,26 @@ struct AppendState
|
|
|
1229
1350
|
PlanState **appendplans; /* array of PlanStates for my inputs */
|
|
1230
1351
|
int as_nplans;
|
|
1231
1352
|
int as_whichplan;
|
|
1353
|
+
bool as_begun; /* false means need to initialize */
|
|
1354
|
+
Bitmapset *as_asyncplans; /* asynchronous plans indexes */
|
|
1355
|
+
int as_nasyncplans; /* # of asynchronous plans */
|
|
1356
|
+
AsyncRequest **as_asyncrequests; /* array of AsyncRequests */
|
|
1357
|
+
TupleTableSlot **as_asyncresults; /* unreturned results of async plans */
|
|
1358
|
+
int as_nasyncresults; /* # of valid entries in as_asyncresults */
|
|
1359
|
+
bool as_syncdone; /* true if all synchronous plans done in
|
|
1360
|
+
* asynchronous mode, else false */
|
|
1361
|
+
int as_nasyncremain; /* # of remaining asynchronous plans */
|
|
1362
|
+
Bitmapset *as_needrequest; /* asynchronous plans needing a new request */
|
|
1363
|
+
struct WaitEventSet *as_eventset; /* WaitEventSet used to configure file
|
|
1364
|
+
* descriptor wait events */
|
|
1232
1365
|
int as_first_partial_plan; /* Index of 'appendplans' containing
|
|
1233
1366
|
* the first partial plan */
|
|
1234
1367
|
ParallelAppendState *as_pstate; /* parallel coordination info */
|
|
1235
1368
|
Size pstate_len; /* size of parallel coordination info */
|
|
1236
1369
|
struct PartitionPruneState *as_prune_state;
|
|
1370
|
+
bool as_valid_subplans_identified; /* is as_valid_subplans valid? */
|
|
1237
1371
|
Bitmapset *as_valid_subplans;
|
|
1372
|
+
Bitmapset *as_valid_asyncplans; /* valid asynchronous plans indexes */
|
|
1238
1373
|
bool (*choose_next_subplan) (AppendState *);
|
|
1239
1374
|
};
|
|
1240
1375
|
|
|
@@ -1451,7 +1586,7 @@ typedef struct IndexScanState
|
|
|
1451
1586
|
/* ----------------
|
|
1452
1587
|
* IndexOnlyScanState information
|
|
1453
1588
|
*
|
|
1454
|
-
*
|
|
1589
|
+
* recheckqual execution state for recheckqual expressions
|
|
1455
1590
|
* ScanKeys Skey structures for index quals
|
|
1456
1591
|
* NumScanKeys number of ScanKeys
|
|
1457
1592
|
* OrderByKeys Skey structures for index ordering operators
|
|
@@ -1470,7 +1605,7 @@ typedef struct IndexScanState
|
|
|
1470
1605
|
typedef struct IndexOnlyScanState
|
|
1471
1606
|
{
|
|
1472
1607
|
ScanState ss; /* its first field is NodeTag */
|
|
1473
|
-
ExprState *
|
|
1608
|
+
ExprState *recheckqual;
|
|
1474
1609
|
struct ScanKeyData *ioss_ScanKeys;
|
|
1475
1610
|
int ioss_NumScanKeys;
|
|
1476
1611
|
struct ScanKeyData *ioss_OrderByKeys;
|
|
@@ -1633,6 +1768,24 @@ typedef struct TidScanState
|
|
|
1633
1768
|
HeapTupleData tss_htup;
|
|
1634
1769
|
} TidScanState;
|
|
1635
1770
|
|
|
1771
|
+
/* ----------------
|
|
1772
|
+
* TidRangeScanState information
|
|
1773
|
+
*
|
|
1774
|
+
* trss_tidexprs list of TidOpExpr structs (see nodeTidrangescan.c)
|
|
1775
|
+
* trss_mintid the lowest TID in the scan range
|
|
1776
|
+
* trss_maxtid the highest TID in the scan range
|
|
1777
|
+
* trss_inScan is a scan currently in progress?
|
|
1778
|
+
* ----------------
|
|
1779
|
+
*/
|
|
1780
|
+
typedef struct TidRangeScanState
|
|
1781
|
+
{
|
|
1782
|
+
ScanState ss; /* its first field is NodeTag */
|
|
1783
|
+
List *trss_tidexprs;
|
|
1784
|
+
ItemPointerData trss_mintid;
|
|
1785
|
+
ItemPointerData trss_maxtid;
|
|
1786
|
+
bool trss_inScan;
|
|
1787
|
+
} TidRangeScanState;
|
|
1788
|
+
|
|
1636
1789
|
/* ----------------
|
|
1637
1790
|
* SubqueryScanState information
|
|
1638
1791
|
*
|
|
@@ -1801,6 +1954,7 @@ typedef struct ForeignScanState
|
|
|
1801
1954
|
ScanState ss; /* its first field is NodeTag */
|
|
1802
1955
|
ExprState *fdw_recheck_quals; /* original quals not in ss.ps.qual */
|
|
1803
1956
|
Size pscan_len; /* size of parallel coordination information */
|
|
1957
|
+
ResultRelInfo *resultRelInfo; /* result rel info, if UPDATE or DELETE */
|
|
1804
1958
|
/* use struct pointer to avoid including fdwapi.h here */
|
|
1805
1959
|
struct FdwRoutine *fdwroutine;
|
|
1806
1960
|
void *fdw_state; /* foreign-data wrapper can keep state here */
|
|
@@ -1829,6 +1983,7 @@ typedef struct CustomScanState
|
|
|
1829
1983
|
List *custom_ps; /* list of child PlanState nodes, if any */
|
|
1830
1984
|
Size pscan_len; /* size of parallel coordination information */
|
|
1831
1985
|
const struct CustomExecMethods *methods;
|
|
1986
|
+
const struct TupleTableSlotOps *slotOps;
|
|
1832
1987
|
} CustomScanState;
|
|
1833
1988
|
|
|
1834
1989
|
/* ----------------------------------------------------------------
|
|
@@ -1931,7 +2086,8 @@ typedef struct MergeJoinState
|
|
|
1931
2086
|
* OuterTupleSlot is empty!)
|
|
1932
2087
|
* hj_OuterTupleSlot tuple slot for outer tuples
|
|
1933
2088
|
* hj_HashTupleSlot tuple slot for inner (hashed) tuples
|
|
1934
|
-
* hj_NullOuterTupleSlot prepared null tuple for right/full
|
|
2089
|
+
* hj_NullOuterTupleSlot prepared null tuple for right/right-anti/full
|
|
2090
|
+
* outer joins
|
|
1935
2091
|
* hj_NullInnerTupleSlot prepared null tuple for left/full outer joins
|
|
1936
2092
|
* hj_FirstOuterTupleSlot first tuple retrieved from outer plan
|
|
1937
2093
|
* hj_JoinState current state of ExecHashJoin state machine
|
|
@@ -1989,6 +2145,75 @@ typedef struct MaterialState
|
|
|
1989
2145
|
Tuplestorestate *tuplestorestate;
|
|
1990
2146
|
} MaterialState;
|
|
1991
2147
|
|
|
2148
|
+
struct MemoizeEntry;
|
|
2149
|
+
struct MemoizeTuple;
|
|
2150
|
+
struct MemoizeKey;
|
|
2151
|
+
|
|
2152
|
+
typedef struct MemoizeInstrumentation
|
|
2153
|
+
{
|
|
2154
|
+
uint64 cache_hits; /* number of rescans where we've found the
|
|
2155
|
+
* scan parameter values to be cached */
|
|
2156
|
+
uint64 cache_misses; /* number of rescans where we've not found the
|
|
2157
|
+
* scan parameter values to be cached. */
|
|
2158
|
+
uint64 cache_evictions; /* number of cache entries removed due to
|
|
2159
|
+
* the need to free memory */
|
|
2160
|
+
uint64 cache_overflows; /* number of times we've had to bypass the
|
|
2161
|
+
* cache when filling it due to not being
|
|
2162
|
+
* able to free enough space to store the
|
|
2163
|
+
* current scan's tuples. */
|
|
2164
|
+
uint64 mem_peak; /* peak memory usage in bytes */
|
|
2165
|
+
} MemoizeInstrumentation;
|
|
2166
|
+
|
|
2167
|
+
/* ----------------
|
|
2168
|
+
* Shared memory container for per-worker memoize information
|
|
2169
|
+
* ----------------
|
|
2170
|
+
*/
|
|
2171
|
+
typedef struct SharedMemoizeInfo
|
|
2172
|
+
{
|
|
2173
|
+
int num_workers;
|
|
2174
|
+
MemoizeInstrumentation sinstrument[FLEXIBLE_ARRAY_MEMBER];
|
|
2175
|
+
} SharedMemoizeInfo;
|
|
2176
|
+
|
|
2177
|
+
/* ----------------
|
|
2178
|
+
* MemoizeState information
|
|
2179
|
+
*
|
|
2180
|
+
* memoize nodes are used to cache recent and commonly seen results from
|
|
2181
|
+
* a parameterized scan.
|
|
2182
|
+
* ----------------
|
|
2183
|
+
*/
|
|
2184
|
+
typedef struct MemoizeState
|
|
2185
|
+
{
|
|
2186
|
+
ScanState ss; /* its first field is NodeTag */
|
|
2187
|
+
int mstatus; /* value of ExecMemoize state machine */
|
|
2188
|
+
int nkeys; /* number of cache keys */
|
|
2189
|
+
struct memoize_hash *hashtable; /* hash table for cache entries */
|
|
2190
|
+
TupleDesc hashkeydesc; /* tuple descriptor for cache keys */
|
|
2191
|
+
TupleTableSlot *tableslot; /* min tuple slot for existing cache entries */
|
|
2192
|
+
TupleTableSlot *probeslot; /* virtual slot used for hash lookups */
|
|
2193
|
+
ExprState *cache_eq_expr; /* Compare exec params to hash key */
|
|
2194
|
+
ExprState **param_exprs; /* exprs containing the parameters to this
|
|
2195
|
+
* node */
|
|
2196
|
+
FmgrInfo *hashfunctions; /* lookup data for hash funcs nkeys in size */
|
|
2197
|
+
Oid *collations; /* collation for comparisons nkeys in size */
|
|
2198
|
+
uint64 mem_used; /* bytes of memory used by cache */
|
|
2199
|
+
uint64 mem_limit; /* memory limit in bytes for the cache */
|
|
2200
|
+
MemoryContext tableContext; /* memory context to store cache data */
|
|
2201
|
+
dlist_head lru_list; /* least recently used entry list */
|
|
2202
|
+
struct MemoizeTuple *last_tuple; /* Used to point to the last tuple
|
|
2203
|
+
* returned during a cache hit and the
|
|
2204
|
+
* tuple we last stored when
|
|
2205
|
+
* populating the cache. */
|
|
2206
|
+
struct MemoizeEntry *entry; /* the entry that 'last_tuple' belongs to or
|
|
2207
|
+
* NULL if 'last_tuple' is NULL. */
|
|
2208
|
+
bool singlerow; /* true if the cache entry is to be marked as
|
|
2209
|
+
* complete after caching the first tuple. */
|
|
2210
|
+
bool binary_mode; /* true when cache key should be compared bit
|
|
2211
|
+
* by bit, false when using hash equality ops */
|
|
2212
|
+
MemoizeInstrumentation stats; /* execution statistics */
|
|
2213
|
+
SharedMemoizeInfo *shared_info; /* statistics for parallel workers */
|
|
2214
|
+
Bitmapset *keyparamids; /* Param->paramids of expressions belonging to
|
|
2215
|
+
* param_exprs */
|
|
2216
|
+
} MemoizeState;
|
|
1992
2217
|
|
|
1993
2218
|
/* ----------------
|
|
1994
2219
|
* When performing sorting by multiple keys, it's possible that the input
|
|
@@ -2029,6 +2254,7 @@ typedef struct SortState
|
|
|
2029
2254
|
int64 bound_Done; /* value of bound we did the sort with */
|
|
2030
2255
|
void *tuplesortstate; /* private state of tuplesort.c */
|
|
2031
2256
|
bool am_worker; /* are we a worker? */
|
|
2257
|
+
bool datumSort; /* Datum sort instead of tuple sort? */
|
|
2032
2258
|
SharedSortInfo *shared_info; /* one entry per worker */
|
|
2033
2259
|
} SortState;
|
|
2034
2260
|
|
|
@@ -2193,7 +2419,7 @@ typedef struct AggState
|
|
|
2193
2419
|
bool table_filled; /* hash table filled yet? */
|
|
2194
2420
|
int num_hashes;
|
|
2195
2421
|
MemoryContext hash_metacxt; /* memory for hash table itself */
|
|
2196
|
-
struct
|
|
2422
|
+
struct LogicalTapeSet *hash_tapeset; /* tape set for hash spill tapes */
|
|
2197
2423
|
struct HashAggSpill *hash_spills; /* HashAggSpill for each grouping set,
|
|
2198
2424
|
* exists only during first pass */
|
|
2199
2425
|
TupleTableSlot *hash_spill_rslot; /* for reading spill files */
|
|
@@ -2233,6 +2459,18 @@ typedef struct AggState
|
|
|
2233
2459
|
typedef struct WindowStatePerFuncData *WindowStatePerFunc;
|
|
2234
2460
|
typedef struct WindowStatePerAggData *WindowStatePerAgg;
|
|
2235
2461
|
|
|
2462
|
+
/*
|
|
2463
|
+
* WindowAggStatus -- Used to track the status of WindowAggState
|
|
2464
|
+
*/
|
|
2465
|
+
typedef enum WindowAggStatus
|
|
2466
|
+
{
|
|
2467
|
+
WINDOWAGG_DONE, /* No more processing to do */
|
|
2468
|
+
WINDOWAGG_RUN, /* Normal processing of window funcs */
|
|
2469
|
+
WINDOWAGG_PASSTHROUGH, /* Don't eval window funcs */
|
|
2470
|
+
WINDOWAGG_PASSTHROUGH_STRICT /* Pass-through plus don't store new
|
|
2471
|
+
* tuples during spool */
|
|
2472
|
+
} WindowAggStatus;
|
|
2473
|
+
|
|
2236
2474
|
typedef struct WindowAggState
|
|
2237
2475
|
{
|
|
2238
2476
|
ScanState ss; /* its first field is NodeTag */
|
|
@@ -2259,6 +2497,7 @@ typedef struct WindowAggState
|
|
|
2259
2497
|
struct WindowObjectData *agg_winobj; /* winobj for aggregate fetches */
|
|
2260
2498
|
int64 aggregatedbase; /* start row for current aggregates */
|
|
2261
2499
|
int64 aggregatedupto; /* rows before this one are aggregated */
|
|
2500
|
+
WindowAggStatus status; /* run status of WindowAggState */
|
|
2262
2501
|
|
|
2263
2502
|
int frameOptions; /* frame_clause options, see WindowDef */
|
|
2264
2503
|
ExprState *startOffset; /* expression for starting bound offset */
|
|
@@ -2285,8 +2524,17 @@ typedef struct WindowAggState
|
|
|
2285
2524
|
MemoryContext curaggcontext; /* current aggregate's working data */
|
|
2286
2525
|
ExprContext *tmpcontext; /* short-term evaluation context */
|
|
2287
2526
|
|
|
2527
|
+
ExprState *runcondition; /* Condition which must remain true otherwise
|
|
2528
|
+
* execution of the WindowAgg will finish or
|
|
2529
|
+
* go into pass-through mode. NULL when there
|
|
2530
|
+
* is no such condition. */
|
|
2531
|
+
|
|
2532
|
+
bool use_pass_through; /* When false, stop execution when
|
|
2533
|
+
* runcondition is no longer true. Else
|
|
2534
|
+
* just stop evaluating window funcs. */
|
|
2535
|
+
bool top_window; /* true if this is the top-most WindowAgg or
|
|
2536
|
+
* the only WindowAgg in this query level */
|
|
2288
2537
|
bool all_first; /* true if the scan is starting */
|
|
2289
|
-
bool all_done; /* true if the scan is finished */
|
|
2290
2538
|
bool partition_spooled; /* true if all tuples in current partition
|
|
2291
2539
|
* have been spooled into tuplestore */
|
|
2292
2540
|
bool more_partitions; /* true if there's more partitions after
|