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
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
// Ensure we have asprintf's definition on glibc-based platforms to avoid compiler warnings
|
|
2
|
-
#define _GNU_SOURCE
|
|
3
1
|
#include <stdio.h>
|
|
4
2
|
|
|
5
3
|
#include "pg_query.h"
|
|
@@ -17,6 +15,8 @@
|
|
|
17
15
|
#include "nodes/parsenodes.h"
|
|
18
16
|
#include "nodes/value.h"
|
|
19
17
|
|
|
18
|
+
#include "common/hashfn.h"
|
|
19
|
+
|
|
20
20
|
#include <unistd.h>
|
|
21
21
|
#include <fcntl.h>
|
|
22
22
|
|
|
@@ -26,15 +26,41 @@ typedef struct FingerprintContext
|
|
|
26
26
|
{
|
|
27
27
|
XXH3_state_t *xxh_state;
|
|
28
28
|
|
|
29
|
+
struct listsort_cache_hash *listsort_cache;
|
|
30
|
+
|
|
29
31
|
bool write_tokens;
|
|
30
32
|
dlist_head tokens;
|
|
31
33
|
} FingerprintContext;
|
|
32
34
|
|
|
33
|
-
typedef struct
|
|
35
|
+
typedef struct FingerprintListsortItem
|
|
34
36
|
{
|
|
35
37
|
XXH64_hash_t hash;
|
|
36
38
|
size_t list_pos;
|
|
37
|
-
}
|
|
39
|
+
} FingerprintListsortItem;
|
|
40
|
+
|
|
41
|
+
typedef struct FingerprintListsortItemCacheEntry
|
|
42
|
+
{
|
|
43
|
+
/* List node this cache entry is for */
|
|
44
|
+
uintptr_t node;
|
|
45
|
+
|
|
46
|
+
/* Hashes of all list items -- this is expensive to calculate */
|
|
47
|
+
FingerprintListsortItem **listsort_items;
|
|
48
|
+
size_t listsort_items_size;
|
|
49
|
+
|
|
50
|
+
/* hash entry status */
|
|
51
|
+
char status;
|
|
52
|
+
} FingerprintListsortItemCacheEntry;
|
|
53
|
+
|
|
54
|
+
#define SH_PREFIX listsort_cache
|
|
55
|
+
#define SH_ELEMENT_TYPE FingerprintListsortItemCacheEntry
|
|
56
|
+
#define SH_KEY_TYPE uintptr_t
|
|
57
|
+
#define SH_KEY node
|
|
58
|
+
#define SH_HASH_KEY(tb, key) hash_bytes((const unsigned char *) &key, sizeof(uintptr_t))
|
|
59
|
+
#define SH_EQUAL(tb, a, b) a == b
|
|
60
|
+
#define SH_SCOPE static inline
|
|
61
|
+
#define SH_DEFINE
|
|
62
|
+
#define SH_DECLARE
|
|
63
|
+
#include "lib/simplehash.h"
|
|
38
64
|
|
|
39
65
|
typedef struct FingerprintToken
|
|
40
66
|
{
|
|
@@ -43,7 +69,7 @@ typedef struct FingerprintToken
|
|
|
43
69
|
} FingerprintToken;
|
|
44
70
|
|
|
45
71
|
static void _fingerprintNode(FingerprintContext *ctx, const void *obj, const void *parent, char *parent_field_name, unsigned int depth);
|
|
46
|
-
static void _fingerprintInitContext(FingerprintContext *ctx, bool write_tokens);
|
|
72
|
+
static void _fingerprintInitContext(FingerprintContext *ctx, FingerprintContext *parent, bool write_tokens);
|
|
47
73
|
static void _fingerprintFreeContext(FingerprintContext *ctx);
|
|
48
74
|
|
|
49
75
|
#define PG_QUERY_FINGERPRINT_VERSION 3
|
|
@@ -65,41 +91,55 @@ _fingerprintString(FingerprintContext *ctx, const char *str)
|
|
|
65
91
|
}
|
|
66
92
|
|
|
67
93
|
static void
|
|
68
|
-
_fingerprintInteger(FingerprintContext *ctx, const
|
|
94
|
+
_fingerprintInteger(FingerprintContext *ctx, const union ValUnion *value)
|
|
69
95
|
{
|
|
70
|
-
if (
|
|
96
|
+
if (value->ival.ival != 0) {
|
|
71
97
|
_fingerprintString(ctx, "Integer");
|
|
72
98
|
_fingerprintString(ctx, "ival");
|
|
73
99
|
char buffer[50];
|
|
74
|
-
sprintf(buffer, "%d",
|
|
100
|
+
sprintf(buffer, "%d", value->ival.ival);
|
|
75
101
|
_fingerprintString(ctx, buffer);
|
|
76
102
|
}
|
|
77
103
|
}
|
|
78
104
|
|
|
79
105
|
static void
|
|
80
|
-
_fingerprintFloat(FingerprintContext *ctx, const
|
|
106
|
+
_fingerprintFloat(FingerprintContext *ctx, const union ValUnion *value)
|
|
81
107
|
{
|
|
82
|
-
if (
|
|
108
|
+
if (value->fval.fval != NULL) {
|
|
109
|
+
// NB: We output `str` here intentionally, to match the output format from libpg_query 14
|
|
110
|
+
// and below. This results in stable fingerprints, despite the field name being changed in
|
|
111
|
+
// PG15 to `fval`.
|
|
83
112
|
_fingerprintString(ctx, "Float");
|
|
84
113
|
_fingerprintString(ctx, "str");
|
|
85
|
-
_fingerprintString(ctx,
|
|
114
|
+
_fingerprintString(ctx, value->fval.fval);
|
|
86
115
|
}
|
|
87
116
|
}
|
|
88
117
|
|
|
89
118
|
static void
|
|
90
|
-
|
|
119
|
+
_fingerprintBoolean(FingerprintContext *ctx, const union ValUnion *value)
|
|
91
120
|
{
|
|
92
|
-
|
|
121
|
+
_fingerprintString(ctx, "Boolean");
|
|
122
|
+
_fingerprintString(ctx, "boolval");
|
|
123
|
+
_fingerprintString(ctx, value->boolval.boolval ? "true" : "false");
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
static void
|
|
127
|
+
_fingerprintBitString(FingerprintContext *ctx, const union ValUnion *value)
|
|
128
|
+
{
|
|
129
|
+
if (value->bsval.bsval != NULL) {
|
|
130
|
+
// NB: We output `str` here intentionally, to match the output format from libpg_query 14
|
|
131
|
+
// and below. This results in stable fingerprints, despite the field name being changed in
|
|
132
|
+
// PG15 to `bsval`.
|
|
93
133
|
_fingerprintString(ctx, "BitString");
|
|
94
134
|
_fingerprintString(ctx, "str");
|
|
95
|
-
_fingerprintString(ctx,
|
|
135
|
+
_fingerprintString(ctx, value->bsval.bsval);
|
|
96
136
|
}
|
|
97
137
|
}
|
|
98
138
|
|
|
99
|
-
static int
|
|
139
|
+
static int compareFingerprintListsortItem(const void *a, const void *b)
|
|
100
140
|
{
|
|
101
|
-
|
|
102
|
-
|
|
141
|
+
FingerprintListsortItem *ca = *(FingerprintListsortItem**) a;
|
|
142
|
+
FingerprintListsortItem *cb = *(FingerprintListsortItem**) b;
|
|
103
143
|
if (ca->hash > cb->hash)
|
|
104
144
|
return 1;
|
|
105
145
|
else if (ca->hash < cb->hash)
|
|
@@ -111,38 +151,69 @@ static void
|
|
|
111
151
|
_fingerprintList(FingerprintContext *ctx, const List *node, const void *parent, char *field_name, unsigned int depth)
|
|
112
152
|
{
|
|
113
153
|
if (field_name != NULL && (strcmp(field_name, "fromClause") == 0 || strcmp(field_name, "targetList") == 0 ||
|
|
114
|
-
|
|
115
|
-
|
|
154
|
+
strcmp(field_name, "cols") == 0 || strcmp(field_name, "rexpr") == 0 || strcmp(field_name, "valuesLists") == 0 ||
|
|
155
|
+
strcmp(field_name, "args") == 0))
|
|
156
|
+
{
|
|
157
|
+
/*
|
|
158
|
+
* Check for cached values for the hashes of subnodes
|
|
159
|
+
*
|
|
160
|
+
* Note this cache is important so we avoid exponential runtime behavior,
|
|
161
|
+
* which would be the case if we fingerprinted each node twice, which
|
|
162
|
+
* then would also again have to fingerprint each of its subnodes twice,
|
|
163
|
+
* etc., leading to deep nodes to be fingerprinted many many times over.
|
|
164
|
+
*
|
|
165
|
+
* We have seen real-world problems with this logic here without
|
|
166
|
+
* a cache in place.
|
|
167
|
+
*/
|
|
168
|
+
FingerprintListsortItem** listsort_items = NULL;
|
|
169
|
+
size_t listsort_items_size = 0;
|
|
170
|
+
FingerprintListsortItemCacheEntry *entry = listsort_cache_lookup(ctx->listsort_cache, (uintptr_t) node);
|
|
171
|
+
if (entry != NULL)
|
|
172
|
+
{
|
|
173
|
+
listsort_items = entry->listsort_items;
|
|
174
|
+
listsort_items_size = entry->listsort_items_size;
|
|
175
|
+
}
|
|
176
|
+
else
|
|
177
|
+
{
|
|
178
|
+
listsort_items = palloc0(node->length * sizeof(FingerprintListsortItem*));
|
|
179
|
+
listsort_items_size = 0;
|
|
180
|
+
ListCell *lc;
|
|
181
|
+
bool found;
|
|
116
182
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
183
|
+
foreach(lc, node)
|
|
184
|
+
{
|
|
185
|
+
FingerprintContext fctx;
|
|
186
|
+
FingerprintListsortItem* lctx = palloc0(sizeof(FingerprintListsortItem));
|
|
120
187
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
188
|
+
_fingerprintInitContext(&fctx, ctx, false);
|
|
189
|
+
_fingerprintNode(&fctx, lfirst(lc), parent, field_name, depth + 1);
|
|
190
|
+
lctx->hash = XXH3_64bits_digest(fctx.xxh_state);
|
|
191
|
+
lctx->list_pos = listsort_items_size;
|
|
192
|
+
_fingerprintFreeContext(&fctx);
|
|
125
193
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
listCtx->list_pos = listCtxCount;
|
|
130
|
-
_fingerprintFreeContext(&subCtx);
|
|
194
|
+
listsort_items[listsort_items_size] = lctx;
|
|
195
|
+
listsort_items_size += 1;
|
|
196
|
+
}
|
|
131
197
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
198
|
+
pg_qsort(listsort_items, listsort_items_size, sizeof(FingerprintListsortItem*), compareFingerprintListsortItem);
|
|
199
|
+
|
|
200
|
+
FingerprintListsortItemCacheEntry *entry = listsort_cache_insert(ctx->listsort_cache, (uintptr_t) node, &found);
|
|
201
|
+
Assert(!found);
|
|
135
202
|
|
|
136
|
-
|
|
203
|
+
entry->listsort_items = listsort_items;
|
|
204
|
+
entry->listsort_items_size = listsort_items_size;
|
|
205
|
+
}
|
|
137
206
|
|
|
138
|
-
for (size_t i = 0; i <
|
|
207
|
+
for (size_t i = 0; i < listsort_items_size; i++)
|
|
139
208
|
{
|
|
140
|
-
if (i > 0 &&
|
|
209
|
+
if (i > 0 && listsort_items[i - 1]->hash == listsort_items[i]->hash)
|
|
141
210
|
continue; // Ignore duplicates
|
|
142
211
|
|
|
143
|
-
_fingerprintNode(ctx, lfirst(list_nth_cell(node,
|
|
212
|
+
_fingerprintNode(ctx, lfirst(list_nth_cell(node, listsort_items[i]->list_pos)), parent, field_name, depth + 1);
|
|
144
213
|
}
|
|
145
|
-
}
|
|
214
|
+
}
|
|
215
|
+
else
|
|
216
|
+
{
|
|
146
217
|
const ListCell *lc;
|
|
147
218
|
|
|
148
219
|
foreach(lc, node)
|
|
@@ -155,15 +226,28 @@ _fingerprintList(FingerprintContext *ctx, const List *node, const void *parent,
|
|
|
155
226
|
}
|
|
156
227
|
|
|
157
228
|
static void
|
|
158
|
-
_fingerprintInitContext(FingerprintContext *ctx, bool write_tokens)
|
|
229
|
+
_fingerprintInitContext(FingerprintContext *ctx, FingerprintContext *parent, bool write_tokens)
|
|
230
|
+
{
|
|
159
231
|
ctx->xxh_state = XXH3_createState();
|
|
160
232
|
if (ctx->xxh_state == NULL) abort();
|
|
161
233
|
if (XXH3_64bits_reset_withSeed(ctx->xxh_state, PG_QUERY_FINGERPRINT_VERSION) == XXH_ERROR) abort();
|
|
162
234
|
|
|
163
|
-
if (
|
|
235
|
+
if (parent != NULL)
|
|
236
|
+
{
|
|
237
|
+
ctx->listsort_cache = parent->listsort_cache;
|
|
238
|
+
}
|
|
239
|
+
else
|
|
240
|
+
{
|
|
241
|
+
ctx->listsort_cache = listsort_cache_create(CurrentMemoryContext, 128, NULL);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
if (write_tokens)
|
|
245
|
+
{
|
|
164
246
|
ctx->write_tokens = true;
|
|
165
247
|
dlist_init(&ctx->tokens);
|
|
166
|
-
}
|
|
248
|
+
}
|
|
249
|
+
else
|
|
250
|
+
{
|
|
167
251
|
ctx->write_tokens = false;
|
|
168
252
|
}
|
|
169
253
|
}
|
|
@@ -200,10 +284,16 @@ _fingerprintNode(FingerprintContext *ctx, const void *obj, const void *parent, c
|
|
|
200
284
|
case T_Float:
|
|
201
285
|
_fingerprintFloat(ctx, obj);
|
|
202
286
|
break;
|
|
287
|
+
case T_Boolean:
|
|
288
|
+
_fingerprintBoolean(ctx, obj);
|
|
289
|
+
break;
|
|
203
290
|
case T_String:
|
|
291
|
+
// NB: We output `str` here intentionally, to match the output format from libpg_query
|
|
292
|
+
// 14 and below. This results in stable fingerprints, despite the field name being
|
|
293
|
+
// changed in PG15 to `sval`.
|
|
204
294
|
_fingerprintString(ctx, "String");
|
|
205
295
|
_fingerprintString(ctx, "str");
|
|
206
|
-
_fingerprintString(ctx, ((
|
|
296
|
+
_fingerprintString(ctx, ((union ValUnion*) obj)->sval.sval);
|
|
207
297
|
break;
|
|
208
298
|
case T_BitString:
|
|
209
299
|
_fingerprintBitString(ctx, obj);
|
|
@@ -219,7 +309,22 @@ _fingerprintNode(FingerprintContext *ctx, const void *obj, const void *parent, c
|
|
|
219
309
|
}
|
|
220
310
|
}
|
|
221
311
|
|
|
222
|
-
|
|
312
|
+
uint64_t pg_query_fingerprint_node(const void *node)
|
|
313
|
+
{
|
|
314
|
+
FingerprintContext ctx;
|
|
315
|
+
uint64 result;
|
|
316
|
+
|
|
317
|
+
_fingerprintInitContext(&ctx, NULL, false);
|
|
318
|
+
_fingerprintNode(&ctx, node, NULL, NULL, 0);
|
|
319
|
+
|
|
320
|
+
result = XXH3_64bits_digest(ctx.xxh_state);
|
|
321
|
+
|
|
322
|
+
_fingerprintFreeContext(&ctx);
|
|
323
|
+
|
|
324
|
+
return result;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
PgQueryFingerprintResult pg_query_fingerprint_with_opts(const char* input, int parser_options, bool printTokens)
|
|
223
328
|
{
|
|
224
329
|
MemoryContext ctx = NULL;
|
|
225
330
|
PgQueryInternalParsetreeAndError parsetree_and_error;
|
|
@@ -227,7 +332,7 @@ PgQueryFingerprintResult pg_query_fingerprint_with_opts(const char* input, bool
|
|
|
227
332
|
|
|
228
333
|
ctx = pg_query_enter_memory_context();
|
|
229
334
|
|
|
230
|
-
parsetree_and_error = pg_query_raw_parse(input);
|
|
335
|
+
parsetree_and_error = pg_query_raw_parse(input, parser_options);
|
|
231
336
|
|
|
232
337
|
// These are all malloc-ed and will survive exiting the memory context, the caller is responsible to free them now
|
|
233
338
|
result.stderr_buffer = parsetree_and_error.stderr_buffer;
|
|
@@ -237,7 +342,7 @@ PgQueryFingerprintResult pg_query_fingerprint_with_opts(const char* input, bool
|
|
|
237
342
|
FingerprintContext ctx;
|
|
238
343
|
XXH64_canonical_t chash;
|
|
239
344
|
|
|
240
|
-
_fingerprintInitContext(&ctx, printTokens);
|
|
345
|
+
_fingerprintInitContext(&ctx, NULL, printTokens);
|
|
241
346
|
|
|
242
347
|
if (parsetree_and_error.tree != NULL) {
|
|
243
348
|
_fingerprintNode(&ctx, parsetree_and_error.tree, NULL, NULL, 0);
|
|
@@ -262,12 +367,13 @@ PgQueryFingerprintResult pg_query_fingerprint_with_opts(const char* input, bool
|
|
|
262
367
|
_fingerprintFreeContext(&ctx);
|
|
263
368
|
|
|
264
369
|
XXH64_canonicalFromHash(&chash, result.fingerprint);
|
|
265
|
-
|
|
370
|
+
result.fingerprint_str = malloc(17 * sizeof(char));
|
|
371
|
+
int n = snprintf(result.fingerprint_str, 17, "%02x%02x%02x%02x%02x%02x%02x%02x",
|
|
266
372
|
chash.digest[0], chash.digest[1], chash.digest[2], chash.digest[3],
|
|
267
373
|
chash.digest[4], chash.digest[5], chash.digest[6], chash.digest[7]);
|
|
268
|
-
if (
|
|
374
|
+
if (n < 0 || n >= 17) {
|
|
269
375
|
PgQueryError* error = malloc(sizeof(PgQueryError));
|
|
270
|
-
error->message = strdup("Failed to output fingerprint string due to
|
|
376
|
+
error->message = strdup("Failed to output fingerprint string due to snprintf failure");
|
|
271
377
|
result.error = error;
|
|
272
378
|
}
|
|
273
379
|
}
|
|
@@ -279,7 +385,12 @@ PgQueryFingerprintResult pg_query_fingerprint_with_opts(const char* input, bool
|
|
|
279
385
|
|
|
280
386
|
PgQueryFingerprintResult pg_query_fingerprint(const char* input)
|
|
281
387
|
{
|
|
282
|
-
return pg_query_fingerprint_with_opts(input, false);
|
|
388
|
+
return pg_query_fingerprint_with_opts(input, PG_QUERY_PARSE_DEFAULT, false);
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
PgQueryFingerprintResult pg_query_fingerprint_opts(const char* input, int parser_options)
|
|
392
|
+
{
|
|
393
|
+
return pg_query_fingerprint_with_opts(input, parser_options, false);
|
|
283
394
|
}
|
|
284
395
|
|
|
285
396
|
void pg_query_free_fingerprint_result(PgQueryFingerprintResult result)
|
|
@@ -287,6 +398,7 @@ void pg_query_free_fingerprint_result(PgQueryFingerprintResult result)
|
|
|
287
398
|
if (result.error) {
|
|
288
399
|
free(result.error->message);
|
|
289
400
|
free(result.error->filename);
|
|
401
|
+
free(result.error->funcname);
|
|
290
402
|
free(result.error);
|
|
291
403
|
}
|
|
292
404
|
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
#include <stdbool.h>
|
|
5
5
|
|
|
6
|
-
PgQueryFingerprintResult pg_query_fingerprint_with_opts(const char* input, bool printTokens);
|
|
6
|
+
extern PgQueryFingerprintResult pg_query_fingerprint_with_opts(const char* input, int parser_options, bool printTokens);
|
|
7
|
+
|
|
8
|
+
extern uint64_t pg_query_fingerprint_node(const void * node);
|
|
7
9
|
|
|
8
10
|
#endif
|
|
@@ -14,7 +14,7 @@ typedef struct {
|
|
|
14
14
|
PgQueryError* error;
|
|
15
15
|
} PgQueryInternalParsetreeAndError;
|
|
16
16
|
|
|
17
|
-
PgQueryInternalParsetreeAndError pg_query_raw_parse(const char* input);
|
|
17
|
+
PgQueryInternalParsetreeAndError pg_query_raw_parse(const char* input, int parser_options);
|
|
18
18
|
|
|
19
19
|
void pg_query_free_error(PgQueryError *error);
|
|
20
20
|
|
|
@@ -96,7 +96,6 @@ static void dump_row(StringInfo out, PLpgSQL_row *stmt);
|
|
|
96
96
|
static void dump_var(StringInfo out, PLpgSQL_var *stmt);
|
|
97
97
|
static void dump_variable(StringInfo out, PLpgSQL_variable *stmt);
|
|
98
98
|
static void dump_record_field(StringInfo out, PLpgSQL_recfield *node);
|
|
99
|
-
static void dump_array_elem(StringInfo out, PLpgSQL_arrayelem *node);
|
|
100
99
|
static void dump_stmt(StringInfo out, PLpgSQL_stmt *stmt);
|
|
101
100
|
static void dump_block(StringInfo out, PLpgSQL_stmt_block *block);
|
|
102
101
|
static void dump_exception_block(StringInfo out, PLpgSQL_exception_block *node);
|
|
@@ -117,6 +116,7 @@ static void dump_return_next(StringInfo out, PLpgSQL_stmt_return_next *stmt);
|
|
|
117
116
|
static void dump_return_query(StringInfo out, PLpgSQL_stmt_return_query *stmt);
|
|
118
117
|
static void dump_raise(StringInfo out, PLpgSQL_stmt_raise *stmt);
|
|
119
118
|
static void dump_raise_option(StringInfo out, PLpgSQL_raise_option *node);
|
|
119
|
+
static void dump_assert(StringInfo out, PLpgSQL_stmt_assert *stmt);
|
|
120
120
|
static void dump_execsql(StringInfo out, PLpgSQL_stmt_execsql *stmt);
|
|
121
121
|
static void dump_dynexecute(StringInfo out, PLpgSQL_stmt_dynexecute *stmt);
|
|
122
122
|
static void dump_dynfors(StringInfo out, PLpgSQL_stmt_dynfors *stmt);
|
|
@@ -126,6 +126,9 @@ static void dump_open(StringInfo out, PLpgSQL_stmt_open *stmt);
|
|
|
126
126
|
static void dump_fetch(StringInfo out, PLpgSQL_stmt_fetch *stmt);
|
|
127
127
|
static void dump_close(StringInfo out, PLpgSQL_stmt_close *stmt);
|
|
128
128
|
static void dump_perform(StringInfo out, PLpgSQL_stmt_perform *stmt);
|
|
129
|
+
static void dump_call(StringInfo out, PLpgSQL_stmt_call *stmt);
|
|
130
|
+
static void dump_commit(StringInfo out, PLpgSQL_stmt_commit *stmt);
|
|
131
|
+
static void dump_rollback(StringInfo out, PLpgSQL_stmt_rollback *stmt);
|
|
129
132
|
static void dump_expr(StringInfo out, PLpgSQL_expr *expr);
|
|
130
133
|
static void dump_function(StringInfo out, PLpgSQL_function *func);
|
|
131
134
|
static void dump_exception(StringInfo out, PLpgSQL_exception *node);
|
|
@@ -183,6 +186,9 @@ dump_stmt(StringInfo out, PLpgSQL_stmt *node)
|
|
|
183
186
|
case PLPGSQL_STMT_RAISE:
|
|
184
187
|
dump_raise(out, (PLpgSQL_stmt_raise *) node);
|
|
185
188
|
break;
|
|
189
|
+
case PLPGSQL_STMT_ASSERT:
|
|
190
|
+
dump_assert(out, (PLpgSQL_stmt_assert *) node);
|
|
191
|
+
break;
|
|
186
192
|
case PLPGSQL_STMT_EXECSQL:
|
|
187
193
|
dump_execsql(out, (PLpgSQL_stmt_execsql *) node);
|
|
188
194
|
break;
|
|
@@ -207,6 +213,15 @@ dump_stmt(StringInfo out, PLpgSQL_stmt *node)
|
|
|
207
213
|
case PLPGSQL_STMT_PERFORM:
|
|
208
214
|
dump_perform(out, (PLpgSQL_stmt_perform *) node);
|
|
209
215
|
break;
|
|
216
|
+
case PLPGSQL_STMT_CALL:
|
|
217
|
+
dump_call(out, (PLpgSQL_stmt_call *) node);
|
|
218
|
+
break;
|
|
219
|
+
case PLPGSQL_STMT_COMMIT:
|
|
220
|
+
dump_commit(out, (PLpgSQL_stmt_commit *) node);
|
|
221
|
+
break;
|
|
222
|
+
case PLPGSQL_STMT_ROLLBACK:
|
|
223
|
+
dump_rollback(out, (PLpgSQL_stmt_rollback *) node);
|
|
224
|
+
break;
|
|
210
225
|
default:
|
|
211
226
|
elog(ERROR, "unrecognized cmd_type: %d", node->cmd_type);
|
|
212
227
|
break;
|
|
@@ -444,6 +459,35 @@ dump_perform(StringInfo out, PLpgSQL_stmt_perform *node)
|
|
|
444
459
|
WRITE_EXPR_FIELD(expr);
|
|
445
460
|
}
|
|
446
461
|
|
|
462
|
+
static void
|
|
463
|
+
dump_call(StringInfo out, PLpgSQL_stmt_call *node)
|
|
464
|
+
{
|
|
465
|
+
WRITE_NODE_TYPE("PLpgSQL_stmt_call");
|
|
466
|
+
|
|
467
|
+
WRITE_INT_FIELD(lineno, lineno, lineno);
|
|
468
|
+
WRITE_EXPR_FIELD(expr);
|
|
469
|
+
WRITE_BOOL_FIELD(is_call, is_call, is_call);
|
|
470
|
+
WRITE_VARIABLE_FIELD(target);
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
static void
|
|
474
|
+
dump_commit(StringInfo out, PLpgSQL_stmt_commit *node)
|
|
475
|
+
{
|
|
476
|
+
WRITE_NODE_TYPE("PLpgSQL_stmt_commit");
|
|
477
|
+
|
|
478
|
+
WRITE_INT_FIELD(lineno, lineno, lineno);
|
|
479
|
+
WRITE_BOOL_FIELD(chain, chain, chain);
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
static void
|
|
483
|
+
dump_rollback(StringInfo out, PLpgSQL_stmt_rollback *node)
|
|
484
|
+
{
|
|
485
|
+
WRITE_NODE_TYPE("PLpgSQL_stmt_rollback");
|
|
486
|
+
|
|
487
|
+
WRITE_INT_FIELD(lineno, lineno, lineno);
|
|
488
|
+
WRITE_BOOL_FIELD(chain, chain, chain);
|
|
489
|
+
}
|
|
490
|
+
|
|
447
491
|
static void
|
|
448
492
|
dump_exit(StringInfo out, PLpgSQL_stmt_exit *node)
|
|
449
493
|
{
|
|
@@ -508,6 +552,16 @@ dump_raise_option(StringInfo out, PLpgSQL_raise_option *node)
|
|
|
508
552
|
WRITE_EXPR_FIELD(expr);
|
|
509
553
|
}
|
|
510
554
|
|
|
555
|
+
static void
|
|
556
|
+
dump_assert(StringInfo out, PLpgSQL_stmt_assert *node)
|
|
557
|
+
{
|
|
558
|
+
WRITE_NODE_TYPE("PLpgSQL_stmt_assert");
|
|
559
|
+
|
|
560
|
+
WRITE_INT_FIELD(lineno, lineno, lineno);
|
|
561
|
+
WRITE_EXPR_FIELD(cond);
|
|
562
|
+
WRITE_EXPR_FIELD(message);
|
|
563
|
+
}
|
|
564
|
+
|
|
511
565
|
static void
|
|
512
566
|
dump_execsql(StringInfo out, PLpgSQL_stmt_execsql *node)
|
|
513
567
|
{
|
|
@@ -572,6 +626,7 @@ dump_expr(StringInfo out, PLpgSQL_expr *node)
|
|
|
572
626
|
WRITE_NODE_TYPE("PLpgSQL_expr");
|
|
573
627
|
|
|
574
628
|
WRITE_STRING_FIELD(query, query, query);
|
|
629
|
+
WRITE_ENUM_FIELD(parseMode, parseMode, parseMode);
|
|
575
630
|
}
|
|
576
631
|
|
|
577
632
|
static void
|
|
@@ -605,9 +660,6 @@ dump_function(StringInfo out, PLpgSQL_function *node)
|
|
|
605
660
|
case PLPGSQL_DTYPE_RECFIELD:
|
|
606
661
|
dump_record_field(out, (PLpgSQL_recfield *) d);
|
|
607
662
|
break;
|
|
608
|
-
case PLPGSQL_DTYPE_ARRAYELEM:
|
|
609
|
-
dump_array_elem(out, (PLpgSQL_arrayelem *) d);
|
|
610
|
-
break;
|
|
611
663
|
default:
|
|
612
664
|
elog(WARNING, "could not dump unrecognized dtype: %d",
|
|
613
665
|
(int) d->dtype);
|
|
@@ -712,14 +764,6 @@ dump_record_field(StringInfo out, PLpgSQL_recfield *node) {
|
|
|
712
764
|
WRITE_INT_FIELD(recparentno, recparentno, recparentno);
|
|
713
765
|
}
|
|
714
766
|
|
|
715
|
-
static void
|
|
716
|
-
dump_array_elem(StringInfo out, PLpgSQL_arrayelem *node) {
|
|
717
|
-
WRITE_NODE_TYPE("PLpgSQL_arrayelem");
|
|
718
|
-
|
|
719
|
-
WRITE_EXPR_FIELD(subscript);
|
|
720
|
-
WRITE_INT_FIELD(arrayparentno, arrayparentno, arrayparentno);
|
|
721
|
-
}
|
|
722
|
-
|
|
723
767
|
char *
|
|
724
768
|
plpgsqlToJSON(PLpgSQL_function *func)
|
|
725
769
|
{
|