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
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* definitions for query plan nodes
|
|
5
5
|
*
|
|
6
6
|
*
|
|
7
|
-
* Portions Copyright (c) 1996-
|
|
7
|
+
* Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
|
|
8
8
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
9
9
|
*
|
|
10
10
|
* src/include/nodes/plannodes.h
|
|
@@ -16,9 +16,11 @@
|
|
|
16
16
|
|
|
17
17
|
#include "access/sdir.h"
|
|
18
18
|
#include "access/stratnum.h"
|
|
19
|
+
#include "common/relpath.h"
|
|
19
20
|
#include "lib/stringinfo.h"
|
|
20
21
|
#include "nodes/bitmapset.h"
|
|
21
22
|
#include "nodes/lockoptions.h"
|
|
23
|
+
#include "nodes/parsenodes.h"
|
|
22
24
|
#include "nodes/primnodes.h"
|
|
23
25
|
|
|
24
26
|
|
|
@@ -37,13 +39,18 @@
|
|
|
37
39
|
* nodes; in such cases, commandType == CMD_UTILITY, the statement itself
|
|
38
40
|
* is in the utilityStmt field, and the rest of the struct is mostly dummy.
|
|
39
41
|
* (We do use canSetTag, stmt_location, stmt_len, and possibly queryId.)
|
|
42
|
+
*
|
|
43
|
+
* PlannedStmt, as well as all varieties of Plan, do not support equal(),
|
|
44
|
+
* not because it's not sensible but because we currently have no need.
|
|
40
45
|
* ----------------
|
|
41
46
|
*/
|
|
42
47
|
typedef struct PlannedStmt
|
|
43
48
|
{
|
|
49
|
+
pg_node_attr(no_equal, no_query_jumble)
|
|
50
|
+
|
|
44
51
|
NodeTag type;
|
|
45
52
|
|
|
46
|
-
CmdType commandType; /* select|insert|update|delete|utility */
|
|
53
|
+
CmdType commandType; /* select|insert|update|delete|merge|utility */
|
|
47
54
|
|
|
48
55
|
uint64 queryId; /* query identifier (copied from Query) */
|
|
49
56
|
|
|
@@ -65,14 +72,11 @@ typedef struct PlannedStmt
|
|
|
65
72
|
|
|
66
73
|
List *rtable; /* list of RangeTblEntry nodes */
|
|
67
74
|
|
|
68
|
-
/*
|
|
69
|
-
|
|
75
|
+
List *permInfos; /* list of RTEPermissionInfo nodes for rtable
|
|
76
|
+
* entries needing one */
|
|
70
77
|
|
|
71
|
-
/*
|
|
72
|
-
|
|
73
|
-
* targets; needed for trigger firing.
|
|
74
|
-
*/
|
|
75
|
-
List *rootResultRelations;
|
|
78
|
+
/* rtable indexes of target relations for INSERT/UPDATE/DELETE/MERGE */
|
|
79
|
+
List *resultRelations; /* integer list of RT indexes, or NIL */
|
|
76
80
|
|
|
77
81
|
List *appendRelations; /* list of AppendRelInfo nodes */
|
|
78
82
|
|
|
@@ -115,6 +119,8 @@ typedef struct PlannedStmt
|
|
|
115
119
|
*/
|
|
116
120
|
typedef struct Plan
|
|
117
121
|
{
|
|
122
|
+
pg_node_attr(abstract, no_equal, no_query_jumble)
|
|
123
|
+
|
|
118
124
|
NodeTag type;
|
|
119
125
|
|
|
120
126
|
/*
|
|
@@ -126,7 +132,7 @@ typedef struct Plan
|
|
|
126
132
|
/*
|
|
127
133
|
* planner's estimate of result size of this plan step
|
|
128
134
|
*/
|
|
129
|
-
|
|
135
|
+
Cardinality plan_rows; /* number of rows plan is expected to emit */
|
|
130
136
|
int plan_width; /* average row width in bytes */
|
|
131
137
|
|
|
132
138
|
/*
|
|
@@ -135,6 +141,11 @@ typedef struct Plan
|
|
|
135
141
|
bool parallel_aware; /* engage parallel-aware logic? */
|
|
136
142
|
bool parallel_safe; /* OK to use as part of parallel plan? */
|
|
137
143
|
|
|
144
|
+
/*
|
|
145
|
+
* information needed for asynchronous execution
|
|
146
|
+
*/
|
|
147
|
+
bool async_capable; /* engage asynchronous-capable logic? */
|
|
148
|
+
|
|
138
149
|
/*
|
|
139
150
|
* Common structural data for all Plan types.
|
|
140
151
|
*/
|
|
@@ -202,31 +213,30 @@ typedef struct ProjectSet
|
|
|
202
213
|
|
|
203
214
|
/* ----------------
|
|
204
215
|
* ModifyTable node -
|
|
205
|
-
* Apply rows produced by
|
|
216
|
+
* Apply rows produced by outer plan to result table(s),
|
|
206
217
|
* by inserting, updating, or deleting.
|
|
207
218
|
*
|
|
208
|
-
* If the originally named target table is a partitioned table
|
|
209
|
-
* nominalRelation and rootRelation contain the RT index of the
|
|
210
|
-
* root, which is not otherwise mentioned in the
|
|
211
|
-
* is zero. However, nominalRelation will
|
|
212
|
-
* EXPLAIN should claim is the
|
|
219
|
+
* If the originally named target table is a partitioned table or inheritance
|
|
220
|
+
* tree, both nominalRelation and rootRelation contain the RT index of the
|
|
221
|
+
* partition root or appendrel RTE, which is not otherwise mentioned in the
|
|
222
|
+
* plan. Otherwise rootRelation is zero. However, nominalRelation will
|
|
223
|
+
* always be set, as it's the rel that EXPLAIN should claim is the
|
|
224
|
+
* INSERT/UPDATE/DELETE/MERGE target.
|
|
213
225
|
*
|
|
214
226
|
* Note that rowMarks and epqParam are presumed to be valid for all the
|
|
215
|
-
*
|
|
227
|
+
* table(s); they can't contain any info that varies across tables.
|
|
216
228
|
* ----------------
|
|
217
229
|
*/
|
|
218
230
|
typedef struct ModifyTable
|
|
219
231
|
{
|
|
220
232
|
Plan plan;
|
|
221
|
-
CmdType operation; /* INSERT, UPDATE, or
|
|
233
|
+
CmdType operation; /* INSERT, UPDATE, DELETE, or MERGE */
|
|
222
234
|
bool canSetTag; /* do we set the command tag/es_processed? */
|
|
223
235
|
Index nominalRelation; /* Parent RT index for use of EXPLAIN */
|
|
224
|
-
Index rootRelation; /* Root RT index, if
|
|
225
|
-
bool partColsUpdated; /* some part key in hierarchy updated */
|
|
236
|
+
Index rootRelation; /* Root RT index, if partitioned/inherited */
|
|
237
|
+
bool partColsUpdated; /* some part key in hierarchy updated? */
|
|
226
238
|
List *resultRelations; /* integer list of RT indexes */
|
|
227
|
-
|
|
228
|
-
int rootResultRelIndex; /* index of the partitioned table root */
|
|
229
|
-
List *plans; /* plan(s) producing source data */
|
|
239
|
+
List *updateColnosLists; /* per-target-table update_colnos lists */
|
|
230
240
|
List *withCheckOptionLists; /* per-target-table WCO lists */
|
|
231
241
|
List *returningLists; /* per-target-table RETURNING tlists */
|
|
232
242
|
List *fdwPrivLists; /* per-target-table FDW private data lists */
|
|
@@ -235,10 +245,13 @@ typedef struct ModifyTable
|
|
|
235
245
|
int epqParam; /* ID of Param for EvalPlanQual re-eval */
|
|
236
246
|
OnConflictAction onConflictAction; /* ON CONFLICT action */
|
|
237
247
|
List *arbiterIndexes; /* List of ON CONFLICT arbiter index OIDs */
|
|
238
|
-
List *onConflictSet; /*
|
|
248
|
+
List *onConflictSet; /* INSERT ON CONFLICT DO UPDATE targetlist */
|
|
249
|
+
List *onConflictCols; /* target column numbers for onConflictSet */
|
|
239
250
|
Node *onConflictWhere; /* WHERE for ON CONFLICT UPDATE */
|
|
240
251
|
Index exclRelRTI; /* RTI of the EXCLUDED pseudo relation */
|
|
241
252
|
List *exclRelTlist; /* tlist of the EXCLUDED pseudo relation */
|
|
253
|
+
List *mergeActionLists; /* per-target-table lists of actions for
|
|
254
|
+
* MERGE */
|
|
242
255
|
} ModifyTable;
|
|
243
256
|
|
|
244
257
|
struct PartitionPruneInfo; /* forward reference to struct below */
|
|
@@ -253,6 +266,7 @@ typedef struct Append
|
|
|
253
266
|
Plan plan;
|
|
254
267
|
Bitmapset *apprelids; /* RTIs of appendrel(s) formed by this node */
|
|
255
268
|
List *appendplans;
|
|
269
|
+
int nasyncplans; /* # of asynchronous plans */
|
|
256
270
|
|
|
257
271
|
/*
|
|
258
272
|
* All 'appendplans' preceding this index are non-partial plans. All
|
|
@@ -272,14 +286,29 @@ typedef struct Append
|
|
|
272
286
|
typedef struct MergeAppend
|
|
273
287
|
{
|
|
274
288
|
Plan plan;
|
|
275
|
-
|
|
289
|
+
|
|
290
|
+
/* RTIs of appendrel(s) formed by this node */
|
|
291
|
+
Bitmapset *apprelids;
|
|
292
|
+
|
|
276
293
|
List *mergeplans;
|
|
294
|
+
|
|
277
295
|
/* these fields are just like the sort-key info in struct Sort: */
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
296
|
+
|
|
297
|
+
/* number of sort-key columns */
|
|
298
|
+
int numCols;
|
|
299
|
+
|
|
300
|
+
/* their indexes in the target list */
|
|
301
|
+
AttrNumber *sortColIdx pg_node_attr(array_size(numCols));
|
|
302
|
+
|
|
303
|
+
/* OIDs of operators to sort them by */
|
|
304
|
+
Oid *sortOperators pg_node_attr(array_size(numCols));
|
|
305
|
+
|
|
306
|
+
/* OIDs of collations */
|
|
307
|
+
Oid *collations pg_node_attr(array_size(numCols));
|
|
308
|
+
|
|
309
|
+
/* NULLS FIRST/LAST directions */
|
|
310
|
+
bool *nullsFirst pg_node_attr(array_size(numCols));
|
|
311
|
+
|
|
283
312
|
/* Info for run-time subplan pruning; NULL if we're not doing that */
|
|
284
313
|
struct PartitionPruneInfo *part_prune_info;
|
|
285
314
|
} MergeAppend;
|
|
@@ -295,14 +324,24 @@ typedef struct MergeAppend
|
|
|
295
324
|
typedef struct RecursiveUnion
|
|
296
325
|
{
|
|
297
326
|
Plan plan;
|
|
298
|
-
|
|
327
|
+
|
|
328
|
+
/* ID of Param representing work table */
|
|
329
|
+
int wtParam;
|
|
330
|
+
|
|
299
331
|
/* Remaining fields are zero/null in UNION ALL case */
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
332
|
+
|
|
333
|
+
/* number of columns to check for duplicate-ness */
|
|
334
|
+
int numCols;
|
|
335
|
+
|
|
336
|
+
/* their indexes in the target list */
|
|
337
|
+
AttrNumber *dupColIdx pg_node_attr(array_size(numCols));
|
|
338
|
+
|
|
339
|
+
/* equality operators to compare with */
|
|
340
|
+
Oid *dupOperators pg_node_attr(array_size(numCols));
|
|
341
|
+
Oid *dupCollations pg_node_attr(array_size(numCols));
|
|
342
|
+
|
|
343
|
+
/* estimated number of groups in input */
|
|
344
|
+
long numGroups;
|
|
306
345
|
} RecursiveUnion;
|
|
307
346
|
|
|
308
347
|
/* ----------------
|
|
@@ -337,10 +376,14 @@ typedef struct BitmapOr
|
|
|
337
376
|
/*
|
|
338
377
|
* ==========
|
|
339
378
|
* Scan nodes
|
|
379
|
+
*
|
|
380
|
+
* Scan is an abstract type that all relation scan plan types inherit from.
|
|
340
381
|
* ==========
|
|
341
382
|
*/
|
|
342
383
|
typedef struct Scan
|
|
343
384
|
{
|
|
385
|
+
pg_node_attr(abstract)
|
|
386
|
+
|
|
344
387
|
Plan plan;
|
|
345
388
|
Index scanrelid; /* relid is index into the range table */
|
|
346
389
|
} Scan;
|
|
@@ -349,7 +392,10 @@ typedef struct Scan
|
|
|
349
392
|
* sequential scan node
|
|
350
393
|
* ----------------
|
|
351
394
|
*/
|
|
352
|
-
typedef
|
|
395
|
+
typedef struct SeqScan
|
|
396
|
+
{
|
|
397
|
+
Scan scan;
|
|
398
|
+
} SeqScan;
|
|
353
399
|
|
|
354
400
|
/* ----------------
|
|
355
401
|
* table sample scan node
|
|
@@ -418,14 +464,28 @@ typedef struct IndexScan
|
|
|
418
464
|
* index-only scan, in which the data comes from the index not the heap.
|
|
419
465
|
* Because of this, *all* Vars in the plan node's targetlist, qual, and
|
|
420
466
|
* index expressions reference index columns and have varno = INDEX_VAR.
|
|
421
|
-
*
|
|
422
|
-
*
|
|
467
|
+
*
|
|
468
|
+
* We could almost use indexqual directly against the index's output tuple
|
|
469
|
+
* when rechecking lossy index operators, but that won't work for quals on
|
|
470
|
+
* index columns that are not retrievable. Hence, recheckqual is needed
|
|
471
|
+
* for rechecks: it expresses the same condition as indexqual, but using
|
|
472
|
+
* only index columns that are retrievable. (We will not generate an
|
|
473
|
+
* index-only scan if this is not possible. An example is that if an
|
|
474
|
+
* index has table column "x" in a retrievable index column "ind1", plus
|
|
475
|
+
* an expression f(x) in a non-retrievable column "ind2", an indexable
|
|
476
|
+
* query on f(x) will use "ind2" in indexqual and f(ind1) in recheckqual.
|
|
477
|
+
* Without the "ind1" column, an index-only scan would be disallowed.)
|
|
478
|
+
*
|
|
479
|
+
* We don't currently need a recheckable equivalent of indexorderby,
|
|
480
|
+
* because we don't support lossy operators in index ORDER BY.
|
|
423
481
|
*
|
|
424
482
|
* To help EXPLAIN interpret the index Vars for display, we provide
|
|
425
483
|
* indextlist, which represents the contents of the index as a targetlist
|
|
426
484
|
* with one TLE per index column. Vars appearing in this list reference
|
|
427
485
|
* the base table, and this is the only field in the plan node that may
|
|
428
|
-
* contain such Vars.
|
|
486
|
+
* contain such Vars. Also, for the convenience of setrefs.c, TLEs in
|
|
487
|
+
* indextlist are marked as resjunk if they correspond to columns that
|
|
488
|
+
* the index AM cannot reconstruct.
|
|
429
489
|
* ----------------
|
|
430
490
|
*/
|
|
431
491
|
typedef struct IndexOnlyScan
|
|
@@ -433,6 +493,7 @@ typedef struct IndexOnlyScan
|
|
|
433
493
|
Scan scan;
|
|
434
494
|
Oid indexid; /* OID of index to scan */
|
|
435
495
|
List *indexqual; /* list of index quals (usually OpExprs) */
|
|
496
|
+
List *recheckqual; /* index quals in recheckable form */
|
|
436
497
|
List *indexorderby; /* list of index ORDER BY exprs */
|
|
437
498
|
List *indextlist; /* TargetEntry list describing index's cols */
|
|
438
499
|
ScanDirection indexorderdir; /* forward or backward or don't care */
|
|
@@ -493,6 +554,19 @@ typedef struct TidScan
|
|
|
493
554
|
List *tidquals; /* qual(s) involving CTID = something */
|
|
494
555
|
} TidScan;
|
|
495
556
|
|
|
557
|
+
/* ----------------
|
|
558
|
+
* tid range scan node
|
|
559
|
+
*
|
|
560
|
+
* tidrangequals is an implicitly AND'ed list of qual expressions of the form
|
|
561
|
+
* "CTID relop pseudoconstant", where relop is one of >,>=,<,<=.
|
|
562
|
+
* ----------------
|
|
563
|
+
*/
|
|
564
|
+
typedef struct TidRangeScan
|
|
565
|
+
{
|
|
566
|
+
Scan scan;
|
|
567
|
+
List *tidrangequals; /* qual(s) involving CTID op something */
|
|
568
|
+
} TidRangeScan;
|
|
569
|
+
|
|
496
570
|
/* ----------------
|
|
497
571
|
* subquery scan node
|
|
498
572
|
*
|
|
@@ -503,16 +577,28 @@ typedef struct TidScan
|
|
|
503
577
|
* relation, we make this a descendant of Scan anyway for code-sharing
|
|
504
578
|
* purposes.
|
|
505
579
|
*
|
|
580
|
+
* SubqueryScanStatus caches the trivial_subqueryscan property of the node.
|
|
581
|
+
* SUBQUERY_SCAN_UNKNOWN means not yet determined. This is only used during
|
|
582
|
+
* planning.
|
|
583
|
+
*
|
|
506
584
|
* Note: we store the sub-plan in the type-specific subplan field, not in
|
|
507
585
|
* the generic lefttree field as you might expect. This is because we do
|
|
508
586
|
* not want plan-tree-traversal routines to recurse into the subplan without
|
|
509
587
|
* knowing that they are changing Query contexts.
|
|
510
588
|
* ----------------
|
|
511
589
|
*/
|
|
590
|
+
typedef enum SubqueryScanStatus
|
|
591
|
+
{
|
|
592
|
+
SUBQUERY_SCAN_UNKNOWN,
|
|
593
|
+
SUBQUERY_SCAN_TRIVIAL,
|
|
594
|
+
SUBQUERY_SCAN_NONTRIVIAL
|
|
595
|
+
} SubqueryScanStatus;
|
|
596
|
+
|
|
512
597
|
typedef struct SubqueryScan
|
|
513
598
|
{
|
|
514
599
|
Scan scan;
|
|
515
600
|
Plan *subplan;
|
|
601
|
+
SubqueryScanStatus scanstatus;
|
|
516
602
|
} SubqueryScan;
|
|
517
603
|
|
|
518
604
|
/* ----------------
|
|
@@ -607,18 +693,30 @@ typedef struct WorkTableScan
|
|
|
607
693
|
* When the plan node represents a foreign join, scan.scanrelid is zero and
|
|
608
694
|
* fs_relids must be consulted to identify the join relation. (fs_relids
|
|
609
695
|
* is valid for simple scans as well, but will always match scan.scanrelid.)
|
|
696
|
+
* fs_relids includes outer joins; fs_base_relids does not.
|
|
697
|
+
*
|
|
698
|
+
* If the FDW's PlanDirectModify() callback decides to repurpose a ForeignScan
|
|
699
|
+
* node to perform the UPDATE or DELETE operation directly in the remote
|
|
700
|
+
* server, it sets 'operation' and 'resultRelation' to identify the operation
|
|
701
|
+
* type and target relation. Note that these fields are only set if the
|
|
702
|
+
* modification is performed *fully* remotely; otherwise, the modification is
|
|
703
|
+
* driven by a local ModifyTable node and 'operation' is left to CMD_SELECT.
|
|
610
704
|
* ----------------
|
|
611
705
|
*/
|
|
612
706
|
typedef struct ForeignScan
|
|
613
707
|
{
|
|
614
708
|
Scan scan;
|
|
615
709
|
CmdType operation; /* SELECT/INSERT/UPDATE/DELETE */
|
|
710
|
+
Index resultRelation; /* direct modification target's RT index */
|
|
711
|
+
Oid checkAsUser; /* user to perform the scan as; 0 means to
|
|
712
|
+
* check as current user */
|
|
616
713
|
Oid fs_server; /* OID of foreign server */
|
|
617
714
|
List *fdw_exprs; /* expressions that FDW may evaluate */
|
|
618
715
|
List *fdw_private; /* private data for FDW */
|
|
619
716
|
List *fdw_scan_tlist; /* optional tlist describing scan tuple */
|
|
620
717
|
List *fdw_recheck_quals; /* original quals not in scan.plan.qual */
|
|
621
|
-
Bitmapset *fs_relids; /* RTIs generated by this scan */
|
|
718
|
+
Bitmapset *fs_relids; /* base+OJ RTIs generated by this scan */
|
|
719
|
+
Bitmapset *fs_base_relids; /* base RTIs generated by this scan */
|
|
622
720
|
bool fsSystemCol; /* true if any "system column" is needed */
|
|
623
721
|
} ForeignScan;
|
|
624
722
|
|
|
@@ -647,6 +745,12 @@ typedef struct CustomScan
|
|
|
647
745
|
List *custom_private; /* private data for custom code */
|
|
648
746
|
List *custom_scan_tlist; /* optional tlist describing scan tuple */
|
|
649
747
|
Bitmapset *custom_relids; /* RTIs generated by this scan */
|
|
748
|
+
|
|
749
|
+
/*
|
|
750
|
+
* NOTE: The method field of CustomScan is required to be a pointer to a
|
|
751
|
+
* static table of callback functions. So we don't copy the table itself,
|
|
752
|
+
* just reference the original one.
|
|
753
|
+
*/
|
|
650
754
|
const struct CustomScanMethods *methods;
|
|
651
755
|
} CustomScan;
|
|
652
756
|
|
|
@@ -680,6 +784,8 @@ typedef struct CustomScan
|
|
|
680
784
|
*/
|
|
681
785
|
typedef struct Join
|
|
682
786
|
{
|
|
787
|
+
pg_node_attr(abstract)
|
|
788
|
+
|
|
683
789
|
Plan plan;
|
|
684
790
|
JoinType jointype;
|
|
685
791
|
bool inner_unique;
|
|
@@ -705,6 +811,8 @@ typedef struct NestLoop
|
|
|
705
811
|
|
|
706
812
|
typedef struct NestLoopParam
|
|
707
813
|
{
|
|
814
|
+
pg_node_attr(no_equal, no_query_jumble)
|
|
815
|
+
|
|
708
816
|
NodeTag type;
|
|
709
817
|
int paramno; /* number of the PARAM_EXEC Param to set */
|
|
710
818
|
Var *paramval; /* outer-relation Var to assign to Param */
|
|
@@ -724,13 +832,26 @@ typedef struct NestLoopParam
|
|
|
724
832
|
typedef struct MergeJoin
|
|
725
833
|
{
|
|
726
834
|
Join join;
|
|
727
|
-
|
|
728
|
-
|
|
835
|
+
|
|
836
|
+
/* Can we skip mark/restore calls? */
|
|
837
|
+
bool skip_mark_restore;
|
|
838
|
+
|
|
839
|
+
/* mergeclauses as expression trees */
|
|
840
|
+
List *mergeclauses;
|
|
841
|
+
|
|
729
842
|
/* these are arrays, but have the same length as the mergeclauses list: */
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
843
|
+
|
|
844
|
+
/* per-clause OIDs of btree opfamilies */
|
|
845
|
+
Oid *mergeFamilies pg_node_attr(array_size(mergeclauses));
|
|
846
|
+
|
|
847
|
+
/* per-clause OIDs of collations */
|
|
848
|
+
Oid *mergeCollations pg_node_attr(array_size(mergeclauses));
|
|
849
|
+
|
|
850
|
+
/* per-clause ordering (ASC or DESC) */
|
|
851
|
+
int *mergeStrategies pg_node_attr(array_size(mergeclauses));
|
|
852
|
+
|
|
853
|
+
/* per-clause nulls ordering */
|
|
854
|
+
bool *mergeNullsFirst pg_node_attr(array_size(mergeclauses));
|
|
734
855
|
} MergeJoin;
|
|
735
856
|
|
|
736
857
|
/* ----------------
|
|
@@ -760,6 +881,48 @@ typedef struct Material
|
|
|
760
881
|
Plan plan;
|
|
761
882
|
} Material;
|
|
762
883
|
|
|
884
|
+
/* ----------------
|
|
885
|
+
* memoize node
|
|
886
|
+
* ----------------
|
|
887
|
+
*/
|
|
888
|
+
typedef struct Memoize
|
|
889
|
+
{
|
|
890
|
+
Plan plan;
|
|
891
|
+
|
|
892
|
+
/* size of the two arrays below */
|
|
893
|
+
int numKeys;
|
|
894
|
+
|
|
895
|
+
/* hash operators for each key */
|
|
896
|
+
Oid *hashOperators pg_node_attr(array_size(numKeys));
|
|
897
|
+
|
|
898
|
+
/* collations for each key */
|
|
899
|
+
Oid *collations pg_node_attr(array_size(numKeys));
|
|
900
|
+
|
|
901
|
+
/* cache keys in the form of exprs containing parameters */
|
|
902
|
+
List *param_exprs;
|
|
903
|
+
|
|
904
|
+
/*
|
|
905
|
+
* true if the cache entry should be marked as complete after we store the
|
|
906
|
+
* first tuple in it.
|
|
907
|
+
*/
|
|
908
|
+
bool singlerow;
|
|
909
|
+
|
|
910
|
+
/*
|
|
911
|
+
* true when cache key should be compared bit by bit, false when using
|
|
912
|
+
* hash equality ops
|
|
913
|
+
*/
|
|
914
|
+
bool binary_mode;
|
|
915
|
+
|
|
916
|
+
/*
|
|
917
|
+
* The maximum number of entries that the planner expects will fit in the
|
|
918
|
+
* cache, or 0 if unknown
|
|
919
|
+
*/
|
|
920
|
+
uint32 est_entries;
|
|
921
|
+
|
|
922
|
+
/* paramids from param_exprs */
|
|
923
|
+
Bitmapset *keyparamids;
|
|
924
|
+
} Memoize;
|
|
925
|
+
|
|
763
926
|
/* ----------------
|
|
764
927
|
* sort node
|
|
765
928
|
* ----------------
|
|
@@ -767,11 +930,21 @@ typedef struct Material
|
|
|
767
930
|
typedef struct Sort
|
|
768
931
|
{
|
|
769
932
|
Plan plan;
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
933
|
+
|
|
934
|
+
/* number of sort-key columns */
|
|
935
|
+
int numCols;
|
|
936
|
+
|
|
937
|
+
/* their indexes in the target list */
|
|
938
|
+
AttrNumber *sortColIdx pg_node_attr(array_size(numCols));
|
|
939
|
+
|
|
940
|
+
/* OIDs of operators to sort them by */
|
|
941
|
+
Oid *sortOperators pg_node_attr(array_size(numCols));
|
|
942
|
+
|
|
943
|
+
/* OIDs of collations */
|
|
944
|
+
Oid *collations pg_node_attr(array_size(numCols));
|
|
945
|
+
|
|
946
|
+
/* NULLS FIRST/LAST directions */
|
|
947
|
+
bool *nullsFirst pg_node_attr(array_size(numCols));
|
|
775
948
|
} Sort;
|
|
776
949
|
|
|
777
950
|
/* ----------------
|
|
@@ -793,10 +966,16 @@ typedef struct IncrementalSort
|
|
|
793
966
|
typedef struct Group
|
|
794
967
|
{
|
|
795
968
|
Plan plan;
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
969
|
+
|
|
970
|
+
/* number of grouping columns */
|
|
971
|
+
int numCols;
|
|
972
|
+
|
|
973
|
+
/* their indexes in the target list */
|
|
974
|
+
AttrNumber *grpColIdx pg_node_attr(array_size(numCols));
|
|
975
|
+
|
|
976
|
+
/* equality operators to compare with */
|
|
977
|
+
Oid *grpOperators pg_node_attr(array_size(numCols));
|
|
978
|
+
Oid *grpCollations pg_node_attr(array_size(numCols));
|
|
800
979
|
} Group;
|
|
801
980
|
|
|
802
981
|
/* ---------------
|
|
@@ -816,18 +995,39 @@ typedef struct Group
|
|
|
816
995
|
typedef struct Agg
|
|
817
996
|
{
|
|
818
997
|
Plan plan;
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
998
|
+
|
|
999
|
+
/* basic strategy, see nodes.h */
|
|
1000
|
+
AggStrategy aggstrategy;
|
|
1001
|
+
|
|
1002
|
+
/* agg-splitting mode, see nodes.h */
|
|
1003
|
+
AggSplit aggsplit;
|
|
1004
|
+
|
|
1005
|
+
/* number of grouping columns */
|
|
1006
|
+
int numCols;
|
|
1007
|
+
|
|
1008
|
+
/* their indexes in the target list */
|
|
1009
|
+
AttrNumber *grpColIdx pg_node_attr(array_size(numCols));
|
|
1010
|
+
|
|
1011
|
+
/* equality operators to compare with */
|
|
1012
|
+
Oid *grpOperators pg_node_attr(array_size(numCols));
|
|
1013
|
+
Oid *grpCollations pg_node_attr(array_size(numCols));
|
|
1014
|
+
|
|
1015
|
+
/* estimated number of groups in input */
|
|
1016
|
+
long numGroups;
|
|
1017
|
+
|
|
1018
|
+
/* for pass-by-ref transition data */
|
|
1019
|
+
uint64 transitionSpace;
|
|
1020
|
+
|
|
1021
|
+
/* IDs of Params used in Aggref inputs */
|
|
1022
|
+
Bitmapset *aggParams;
|
|
1023
|
+
|
|
828
1024
|
/* Note: planner provides numGroups & aggParams only in HASHED/MIXED case */
|
|
829
|
-
|
|
830
|
-
|
|
1025
|
+
|
|
1026
|
+
/* grouping sets to use */
|
|
1027
|
+
List *groupingSets;
|
|
1028
|
+
|
|
1029
|
+
/* chained Agg/Sort nodes */
|
|
1030
|
+
List *chain;
|
|
831
1031
|
} Agg;
|
|
832
1032
|
|
|
833
1033
|
/* ----------------
|
|
@@ -837,24 +1037,71 @@ typedef struct Agg
|
|
|
837
1037
|
typedef struct WindowAgg
|
|
838
1038
|
{
|
|
839
1039
|
Plan plan;
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
int
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
1040
|
+
|
|
1041
|
+
/* ID referenced by window functions */
|
|
1042
|
+
Index winref;
|
|
1043
|
+
|
|
1044
|
+
/* number of columns in partition clause */
|
|
1045
|
+
int partNumCols;
|
|
1046
|
+
|
|
1047
|
+
/* their indexes in the target list */
|
|
1048
|
+
AttrNumber *partColIdx pg_node_attr(array_size(partNumCols));
|
|
1049
|
+
|
|
1050
|
+
/* equality operators for partition columns */
|
|
1051
|
+
Oid *partOperators pg_node_attr(array_size(partNumCols));
|
|
1052
|
+
|
|
1053
|
+
/* collations for partition columns */
|
|
1054
|
+
Oid *partCollations pg_node_attr(array_size(partNumCols));
|
|
1055
|
+
|
|
1056
|
+
/* number of columns in ordering clause */
|
|
1057
|
+
int ordNumCols;
|
|
1058
|
+
|
|
1059
|
+
/* their indexes in the target list */
|
|
1060
|
+
AttrNumber *ordColIdx pg_node_attr(array_size(ordNumCols));
|
|
1061
|
+
|
|
1062
|
+
/* equality operators for ordering columns */
|
|
1063
|
+
Oid *ordOperators pg_node_attr(array_size(ordNumCols));
|
|
1064
|
+
|
|
1065
|
+
/* collations for ordering columns */
|
|
1066
|
+
Oid *ordCollations pg_node_attr(array_size(ordNumCols));
|
|
1067
|
+
|
|
1068
|
+
/* frame_clause options, see WindowDef */
|
|
1069
|
+
int frameOptions;
|
|
1070
|
+
|
|
1071
|
+
/* expression for starting bound, if any */
|
|
1072
|
+
Node *startOffset;
|
|
1073
|
+
|
|
1074
|
+
/* expression for ending bound, if any */
|
|
1075
|
+
Node *endOffset;
|
|
1076
|
+
|
|
1077
|
+
/* qual to help short-circuit execution */
|
|
1078
|
+
List *runCondition;
|
|
1079
|
+
|
|
1080
|
+
/* runCondition for display in EXPLAIN */
|
|
1081
|
+
List *runConditionOrig;
|
|
1082
|
+
|
|
852
1083
|
/* these fields are used with RANGE offset PRECEDING/FOLLOWING: */
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
Oid
|
|
856
|
-
|
|
857
|
-
|
|
1084
|
+
|
|
1085
|
+
/* in_range function for startOffset */
|
|
1086
|
+
Oid startInRangeFunc;
|
|
1087
|
+
|
|
1088
|
+
/* in_range function for endOffset */
|
|
1089
|
+
Oid endInRangeFunc;
|
|
1090
|
+
|
|
1091
|
+
/* collation for in_range tests */
|
|
1092
|
+
Oid inRangeColl;
|
|
1093
|
+
|
|
1094
|
+
/* use ASC sort order for in_range tests? */
|
|
1095
|
+
bool inRangeAsc;
|
|
1096
|
+
|
|
1097
|
+
/* nulls sort first for in_range tests? */
|
|
1098
|
+
bool inRangeNullsFirst;
|
|
1099
|
+
|
|
1100
|
+
/*
|
|
1101
|
+
* false for all apart from the WindowAgg that's closest to the root of
|
|
1102
|
+
* the plan
|
|
1103
|
+
*/
|
|
1104
|
+
bool topWindow;
|
|
858
1105
|
} WindowAgg;
|
|
859
1106
|
|
|
860
1107
|
/* ----------------
|
|
@@ -864,10 +1111,18 @@ typedef struct WindowAgg
|
|
|
864
1111
|
typedef struct Unique
|
|
865
1112
|
{
|
|
866
1113
|
Plan plan;
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
1114
|
+
|
|
1115
|
+
/* number of columns to check for uniqueness */
|
|
1116
|
+
int numCols;
|
|
1117
|
+
|
|
1118
|
+
/* their indexes in the target list */
|
|
1119
|
+
AttrNumber *uniqColIdx pg_node_attr(array_size(numCols));
|
|
1120
|
+
|
|
1121
|
+
/* equality operators to compare with */
|
|
1122
|
+
Oid *uniqOperators pg_node_attr(array_size(numCols));
|
|
1123
|
+
|
|
1124
|
+
/* collations for equality comparisons */
|
|
1125
|
+
Oid *uniqCollations pg_node_attr(array_size(numCols));
|
|
871
1126
|
} Unique;
|
|
872
1127
|
|
|
873
1128
|
/* ------------
|
|
@@ -899,16 +1154,35 @@ typedef struct Gather
|
|
|
899
1154
|
typedef struct GatherMerge
|
|
900
1155
|
{
|
|
901
1156
|
Plan plan;
|
|
902
|
-
|
|
903
|
-
|
|
1157
|
+
|
|
1158
|
+
/* planned number of worker processes */
|
|
1159
|
+
int num_workers;
|
|
1160
|
+
|
|
1161
|
+
/* ID of Param that signals a rescan, or -1 */
|
|
1162
|
+
int rescan_param;
|
|
1163
|
+
|
|
904
1164
|
/* remaining fields are just like the sort-key info in struct Sort */
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
1165
|
+
|
|
1166
|
+
/* number of sort-key columns */
|
|
1167
|
+
int numCols;
|
|
1168
|
+
|
|
1169
|
+
/* their indexes in the target list */
|
|
1170
|
+
AttrNumber *sortColIdx pg_node_attr(array_size(numCols));
|
|
1171
|
+
|
|
1172
|
+
/* OIDs of operators to sort them by */
|
|
1173
|
+
Oid *sortOperators pg_node_attr(array_size(numCols));
|
|
1174
|
+
|
|
1175
|
+
/* OIDs of collations */
|
|
1176
|
+
Oid *collations pg_node_attr(array_size(numCols));
|
|
1177
|
+
|
|
1178
|
+
/* NULLS FIRST/LAST directions */
|
|
1179
|
+
bool *nullsFirst pg_node_attr(array_size(numCols));
|
|
1180
|
+
|
|
1181
|
+
/*
|
|
1182
|
+
* param id's of initplans which are referred at gather merge or one of
|
|
1183
|
+
* it's child node
|
|
1184
|
+
*/
|
|
1185
|
+
Bitmapset *initParam;
|
|
912
1186
|
} GatherMerge;
|
|
913
1187
|
|
|
914
1188
|
/* ----------------
|
|
@@ -932,7 +1206,7 @@ typedef struct Hash
|
|
|
932
1206
|
AttrNumber skewColumn; /* outer join key's column #, or zero */
|
|
933
1207
|
bool skewInherit; /* is outer join rel an inheritance tree? */
|
|
934
1208
|
/* all other info is in the parent HashJoin node */
|
|
935
|
-
|
|
1209
|
+
Cardinality rows_total; /* estimate total rows if parallel_aware */
|
|
936
1210
|
} Hash;
|
|
937
1211
|
|
|
938
1212
|
/* ----------------
|
|
@@ -942,16 +1216,31 @@ typedef struct Hash
|
|
|
942
1216
|
typedef struct SetOp
|
|
943
1217
|
{
|
|
944
1218
|
Plan plan;
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
int
|
|
954
|
-
|
|
1219
|
+
|
|
1220
|
+
/* what to do, see nodes.h */
|
|
1221
|
+
SetOpCmd cmd;
|
|
1222
|
+
|
|
1223
|
+
/* how to do it, see nodes.h */
|
|
1224
|
+
SetOpStrategy strategy;
|
|
1225
|
+
|
|
1226
|
+
/* number of columns to check for duplicate-ness */
|
|
1227
|
+
int numCols;
|
|
1228
|
+
|
|
1229
|
+
/* their indexes in the target list */
|
|
1230
|
+
AttrNumber *dupColIdx pg_node_attr(array_size(numCols));
|
|
1231
|
+
|
|
1232
|
+
/* equality operators to compare with */
|
|
1233
|
+
Oid *dupOperators pg_node_attr(array_size(numCols));
|
|
1234
|
+
Oid *dupCollations pg_node_attr(array_size(numCols));
|
|
1235
|
+
|
|
1236
|
+
/* where is the flag column, if any */
|
|
1237
|
+
AttrNumber flagColIdx;
|
|
1238
|
+
|
|
1239
|
+
/* flag value for first input relation */
|
|
1240
|
+
int firstFlag;
|
|
1241
|
+
|
|
1242
|
+
/* estimated number of groups in input */
|
|
1243
|
+
long numGroups;
|
|
955
1244
|
} SetOp;
|
|
956
1245
|
|
|
957
1246
|
/* ----------------
|
|
@@ -980,13 +1269,27 @@ typedef struct LockRows
|
|
|
980
1269
|
typedef struct Limit
|
|
981
1270
|
{
|
|
982
1271
|
Plan plan;
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
1272
|
+
|
|
1273
|
+
/* OFFSET parameter, or NULL if none */
|
|
1274
|
+
Node *limitOffset;
|
|
1275
|
+
|
|
1276
|
+
/* COUNT parameter, or NULL if none */
|
|
1277
|
+
Node *limitCount;
|
|
1278
|
+
|
|
1279
|
+
/* limit type */
|
|
1280
|
+
LimitOption limitOption;
|
|
1281
|
+
|
|
1282
|
+
/* number of columns to check for similarity */
|
|
1283
|
+
int uniqNumCols;
|
|
1284
|
+
|
|
1285
|
+
/* their indexes in the target list */
|
|
1286
|
+
AttrNumber *uniqColIdx pg_node_attr(array_size(uniqNumCols));
|
|
1287
|
+
|
|
1288
|
+
/* equality operators to compare with */
|
|
1289
|
+
Oid *uniqOperators pg_node_attr(array_size(uniqNumCols));
|
|
1290
|
+
|
|
1291
|
+
/* collations for equality comparisons */
|
|
1292
|
+
Oid *uniqCollations pg_node_attr(array_size(uniqNumCols));
|
|
990
1293
|
} Limit;
|
|
991
1294
|
|
|
992
1295
|
|
|
@@ -1007,7 +1310,7 @@ typedef struct Limit
|
|
|
1007
1310
|
* doing a separate remote query to lock each selected row is usually pretty
|
|
1008
1311
|
* unappealing, so early locking remains a credible design choice for FDWs.
|
|
1009
1312
|
*
|
|
1010
|
-
* When doing UPDATE
|
|
1313
|
+
* When doing UPDATE/DELETE/MERGE/SELECT FOR UPDATE/SHARE, we have to uniquely
|
|
1011
1314
|
* identify all the source rows, not only those from the target relations, so
|
|
1012
1315
|
* that we can perform EvalPlanQual rechecking at need. For plain tables we
|
|
1013
1316
|
* can just fetch the TID, much as for a target relation; this case is
|
|
@@ -1036,7 +1339,7 @@ typedef enum RowMarkType
|
|
|
1036
1339
|
* PlanRowMark -
|
|
1037
1340
|
* plan-time representation of FOR [KEY] UPDATE/SHARE clauses
|
|
1038
1341
|
*
|
|
1039
|
-
* When doing UPDATE
|
|
1342
|
+
* When doing UPDATE/DELETE/MERGE/SELECT FOR UPDATE/SHARE, we create a separate
|
|
1040
1343
|
* PlanRowMark node for each non-target relation in the query. Relations that
|
|
1041
1344
|
* are not specified as FOR UPDATE/SHARE are marked ROW_MARK_REFERENCE (if
|
|
1042
1345
|
* regular tables or supported foreign tables) or ROW_MARK_COPY (if not).
|
|
@@ -1045,9 +1348,9 @@ typedef enum RowMarkType
|
|
|
1045
1348
|
* When the planner discovers that a relation is the root of an inheritance
|
|
1046
1349
|
* tree, it sets isParent true, and adds an additional PlanRowMark to the
|
|
1047
1350
|
* list for each child relation (including the target rel itself in its role
|
|
1048
|
-
* as a child
|
|
1049
|
-
* relations
|
|
1050
|
-
* entries have rti == child rel's RT index and prti == parent's RT index,
|
|
1351
|
+
* as a child, if it is not a partitioned table). Any non-leaf partitioned
|
|
1352
|
+
* child relations will also have entries with isParent = true. The child
|
|
1353
|
+
* entries have rti == child rel's RT index and prti == top parent's RT index,
|
|
1051
1354
|
* and can therefore be recognized as children by the fact that prti != rti.
|
|
1052
1355
|
* The parent's allMarkTypes field gets the OR of (1<<markType) across all
|
|
1053
1356
|
* its children (this definition allows children to use different markTypes).
|
|
@@ -1068,11 +1371,12 @@ typedef enum RowMarkType
|
|
|
1068
1371
|
* means we needn't renumber rowmarkIds when flattening subqueries, which
|
|
1069
1372
|
* would require finding and renaming the resjunk columns as well.)
|
|
1070
1373
|
* Note this means that all tables in an inheritance hierarchy share the
|
|
1071
|
-
* same resjunk column names.
|
|
1072
|
-
* columns could have different physical column numbers in each subplan.
|
|
1374
|
+
* same resjunk column names.
|
|
1073
1375
|
*/
|
|
1074
1376
|
typedef struct PlanRowMark
|
|
1075
1377
|
{
|
|
1378
|
+
pg_node_attr(no_equal, no_query_jumble)
|
|
1379
|
+
|
|
1076
1380
|
NodeTag type;
|
|
1077
1381
|
Index rti; /* range table index of markable relation */
|
|
1078
1382
|
Index prti; /* range table index of parent relation */
|
|
@@ -1117,6 +1421,8 @@ typedef struct PlanRowMark
|
|
|
1117
1421
|
*/
|
|
1118
1422
|
typedef struct PartitionPruneInfo
|
|
1119
1423
|
{
|
|
1424
|
+
pg_node_attr(no_equal, no_query_jumble)
|
|
1425
|
+
|
|
1120
1426
|
NodeTag type;
|
|
1121
1427
|
List *prune_infos;
|
|
1122
1428
|
Bitmapset *other_subplans;
|
|
@@ -1141,14 +1447,27 @@ typedef struct PartitionPruneInfo
|
|
|
1141
1447
|
*/
|
|
1142
1448
|
typedef struct PartitionedRelPruneInfo
|
|
1143
1449
|
{
|
|
1450
|
+
pg_node_attr(no_equal, no_query_jumble)
|
|
1451
|
+
|
|
1144
1452
|
NodeTag type;
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1453
|
+
|
|
1454
|
+
/* RT index of partition rel for this level */
|
|
1455
|
+
Index rtindex;
|
|
1456
|
+
|
|
1457
|
+
/* Indexes of all partitions which subplans or subparts are present for */
|
|
1458
|
+
Bitmapset *present_parts;
|
|
1459
|
+
|
|
1460
|
+
/* Length of the following arrays: */
|
|
1461
|
+
int nparts;
|
|
1462
|
+
|
|
1463
|
+
/* subplan index by partition index, or -1 */
|
|
1464
|
+
int *subplan_map pg_node_attr(array_size(nparts));
|
|
1465
|
+
|
|
1466
|
+
/* subpart index by partition index, or -1 */
|
|
1467
|
+
int *subpart_map pg_node_attr(array_size(nparts));
|
|
1468
|
+
|
|
1469
|
+
/* relation OID by partition index, or 0 */
|
|
1470
|
+
Oid *relid_map pg_node_attr(array_size(nparts));
|
|
1152
1471
|
|
|
1153
1472
|
/*
|
|
1154
1473
|
* initial_pruning_steps shows how to prune during executor startup (i.e.,
|
|
@@ -1158,8 +1477,9 @@ typedef struct PartitionedRelPruneInfo
|
|
|
1158
1477
|
*/
|
|
1159
1478
|
List *initial_pruning_steps; /* List of PartitionPruneStep */
|
|
1160
1479
|
List *exec_pruning_steps; /* List of PartitionPruneStep */
|
|
1161
|
-
|
|
1162
|
-
|
|
1480
|
+
|
|
1481
|
+
/* All PARAM_EXEC Param IDs in exec_pruning_steps */
|
|
1482
|
+
Bitmapset *execparamids;
|
|
1163
1483
|
} PartitionedRelPruneInfo;
|
|
1164
1484
|
|
|
1165
1485
|
/*
|
|
@@ -1170,12 +1490,14 @@ typedef struct PartitionedRelPruneInfo
|
|
|
1170
1490
|
*/
|
|
1171
1491
|
typedef struct PartitionPruneStep
|
|
1172
1492
|
{
|
|
1493
|
+
pg_node_attr(abstract, no_equal, no_query_jumble)
|
|
1494
|
+
|
|
1173
1495
|
NodeTag type;
|
|
1174
1496
|
int step_id;
|
|
1175
1497
|
} PartitionPruneStep;
|
|
1176
1498
|
|
|
1177
1499
|
/*
|
|
1178
|
-
* PartitionPruneStepOp - Information to prune using a set of mutually
|
|
1500
|
+
* PartitionPruneStepOp - Information to prune using a set of mutually ANDed
|
|
1179
1501
|
* OpExpr clauses
|
|
1180
1502
|
*
|
|
1181
1503
|
* This contains information extracted from up to partnatts OpExpr clauses,
|
|
@@ -1243,9 +1565,28 @@ typedef struct PartitionPruneStepCombine
|
|
|
1243
1565
|
*/
|
|
1244
1566
|
typedef struct PlanInvalItem
|
|
1245
1567
|
{
|
|
1568
|
+
pg_node_attr(no_equal, no_query_jumble)
|
|
1569
|
+
|
|
1246
1570
|
NodeTag type;
|
|
1247
1571
|
int cacheId; /* a syscache ID, see utils/syscache.h */
|
|
1248
1572
|
uint32 hashValue; /* hash value of object's cache lookup key */
|
|
1249
1573
|
} PlanInvalItem;
|
|
1250
1574
|
|
|
1575
|
+
/*
|
|
1576
|
+
* MonotonicFunction
|
|
1577
|
+
*
|
|
1578
|
+
* Allows the planner to track monotonic properties of functions. A function
|
|
1579
|
+
* is monotonically increasing if a subsequent call cannot yield a lower value
|
|
1580
|
+
* than the previous call. A monotonically decreasing function cannot yield a
|
|
1581
|
+
* higher value on subsequent calls, and a function which is both must return
|
|
1582
|
+
* the same value on each call.
|
|
1583
|
+
*/
|
|
1584
|
+
typedef enum MonotonicFunction
|
|
1585
|
+
{
|
|
1586
|
+
MONOTONICFUNC_NONE = 0,
|
|
1587
|
+
MONOTONICFUNC_INCREASING = (1 << 0),
|
|
1588
|
+
MONOTONICFUNC_DECREASING = (1 << 1),
|
|
1589
|
+
MONOTONICFUNC_BOTH = MONOTONICFUNC_INCREASING | MONOTONICFUNC_DECREASING
|
|
1590
|
+
} MonotonicFunction;
|
|
1591
|
+
|
|
1251
1592
|
#endif /* PLANNODES_H */
|