pg_query 4.2.2 → 5.0.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 +12 -0
- data/README.md +6 -8
- data/Rakefile +3 -3
- data/ext/pg_query/extconf.rb +1 -3
- data/ext/pg_query/include/access/amapi.h +3 -1
- data/ext/pg_query/include/access/attmap.h +5 -3
- data/ext/pg_query/include/access/attnum.h +1 -1
- data/ext/pg_query/include/access/clog.h +1 -1
- data/ext/pg_query/include/access/commit_ts.h +1 -1
- data/ext/pg_query/include/access/detoast.h +1 -1
- data/ext/pg_query/include/access/genam.h +7 -5
- data/ext/pg_query/include/access/gin.h +16 -3
- data/ext/pg_query/include/access/htup.h +1 -1
- data/ext/pg_query/include/access/htup_details.h +6 -2
- data/ext/pg_query/include/access/itup.h +61 -58
- data/ext/pg_query/include/access/parallel.h +2 -2
- data/ext/pg_query/include/access/printtup.h +1 -1
- data/ext/pg_query/include/access/relation.h +1 -1
- data/ext/pg_query/include/access/relscan.h +1 -1
- data/ext/pg_query/include/access/rmgrlist.h +2 -2
- data/ext/pg_query/include/access/sdir.h +12 -3
- data/ext/pg_query/include/access/skey.h +1 -1
- data/ext/pg_query/include/access/stratnum.h +1 -1
- data/ext/pg_query/include/access/sysattr.h +1 -1
- data/ext/pg_query/include/access/table.h +1 -1
- data/ext/pg_query/include/access/tableam.h +68 -45
- data/ext/pg_query/include/access/toast_compression.h +1 -1
- data/ext/pg_query/include/access/transam.h +1 -1
- data/ext/pg_query/include/access/tsmapi.h +82 -0
- data/ext/pg_query/include/access/tupconvert.h +5 -2
- data/ext/pg_query/include/access/tupdesc.h +2 -2
- data/ext/pg_query/include/access/tupmacs.h +58 -98
- data/ext/pg_query/include/access/twophase.h +2 -2
- data/ext/pg_query/include/access/xact.h +25 -18
- data/ext/pg_query/include/access/xlog.h +15 -16
- data/ext/pg_query/include/access/xlog_internal.h +100 -62
- data/ext/pg_query/include/access/xlogbackup.h +41 -0
- data/ext/pg_query/include/access/xlogdefs.h +6 -25
- data/ext/pg_query/include/access/xlogprefetcher.h +1 -1
- data/ext/pg_query/include/access/xlogreader.h +7 -6
- data/ext/pg_query/include/access/xlogrecord.h +17 -5
- data/ext/pg_query/include/access/xlogrecovery.h +4 -3
- data/ext/pg_query/include/archive/archive_module.h +59 -0
- data/ext/pg_query/include/c.h +144 -156
- data/ext/pg_query/include/catalog/catalog.h +4 -3
- data/ext/pg_query/include/catalog/catversion.h +6 -2
- data/ext/pg_query/include/catalog/dependency.h +5 -4
- data/ext/pg_query/include/catalog/genbki.h +7 -6
- data/ext/pg_query/include/catalog/index.h +4 -4
- data/ext/pg_query/include/catalog/indexing.h +1 -1
- data/ext/pg_query/include/catalog/namespace.h +2 -2
- data/ext/pg_query/include/catalog/objectaccess.h +10 -8
- data/ext/pg_query/include/catalog/objectaddress.h +3 -3
- data/ext/pg_query/include/catalog/pg_aggregate.h +1 -1
- data/ext/pg_query/include/catalog/pg_aggregate_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_am.h +1 -1
- data/ext/pg_query/include/catalog/pg_am_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_attribute.h +19 -17
- data/ext/pg_query/include/catalog/pg_attribute_d.h +19 -19
- data/ext/pg_query/include/catalog/pg_authid.h +1 -1
- data/ext/pg_query/include/catalog/pg_authid_d.h +3 -1
- data/ext/pg_query/include/catalog/pg_class.h +1 -1
- data/ext/pg_query/include/catalog/pg_class_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_collation.h +3 -1
- data/ext/pg_query/include/catalog/pg_collation_d.h +4 -3
- data/ext/pg_query/include/catalog/pg_constraint.h +2 -2
- data/ext/pg_query/include/catalog/pg_constraint_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_control.h +9 -1
- data/ext/pg_query/include/catalog/pg_conversion.h +2 -2
- data/ext/pg_query/include/catalog/pg_conversion_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_database.h +124 -0
- data/ext/pg_query/include/catalog/pg_database_d.h +52 -0
- data/ext/pg_query/include/catalog/pg_depend.h +1 -1
- data/ext/pg_query/include/catalog/pg_depend_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_event_trigger.h +1 -1
- data/ext/pg_query/include/catalog/pg_event_trigger_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_index.h +1 -1
- data/ext/pg_query/include/catalog/pg_index_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_language.h +1 -1
- data/ext/pg_query/include/catalog/pg_language_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_namespace.h +1 -1
- data/ext/pg_query/include/catalog/pg_namespace_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_opclass.h +1 -1
- data/ext/pg_query/include/catalog/pg_opclass_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_operator.h +1 -1
- data/ext/pg_query/include/catalog/pg_operator_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_opfamily.h +3 -2
- data/ext/pg_query/include/catalog/pg_opfamily_d.h +4 -2
- data/ext/pg_query/include/catalog/pg_partitioned_table.h +1 -1
- data/ext/pg_query/include/catalog/pg_partitioned_table_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_proc.h +1 -1
- data/ext/pg_query/include/catalog/pg_proc_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_publication.h +2 -5
- data/ext/pg_query/include/catalog/pg_publication_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_replication_origin.h +1 -1
- data/ext/pg_query/include/catalog/pg_replication_origin_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext.h +1 -1
- data/ext/pg_query/include/catalog/pg_statistic_ext_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_transform.h +1 -1
- data/ext/pg_query/include/catalog/pg_transform_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_trigger.h +1 -1
- data/ext/pg_query/include/catalog/pg_trigger_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_config.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_config_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_dict.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_dict_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_parser.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_parser_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_template.h +1 -1
- data/ext/pg_query/include/catalog/pg_ts_template_d.h +1 -1
- data/ext/pg_query/include/catalog/pg_type.h +1 -1
- data/ext/pg_query/include/catalog/pg_type_d.h +1 -1
- data/ext/pg_query/include/catalog/storage.h +6 -6
- data/ext/pg_query/include/commands/async.h +1 -1
- data/ext/pg_query/include/commands/dbcommands.h +2 -1
- data/ext/pg_query/include/commands/defrem.h +2 -1
- data/ext/pg_query/include/commands/event_trigger.h +1 -1
- data/ext/pg_query/include/commands/explain.h +3 -1
- data/ext/pg_query/include/commands/prepare.h +1 -1
- data/ext/pg_query/include/commands/tablespace.h +4 -4
- data/ext/pg_query/include/commands/trigger.h +15 -14
- data/ext/pg_query/include/commands/user.h +9 -3
- data/ext/pg_query/include/commands/vacuum.h +60 -14
- data/ext/pg_query/include/common/cryptohash.h +39 -0
- data/ext/pg_query/include/common/file_perm.h +1 -1
- data/ext/pg_query/include/common/hashfn.h +1 -1
- data/ext/pg_query/include/common/int.h +437 -0
- data/ext/pg_query/include/common/ip.h +4 -2
- data/ext/pg_query/include/common/keywords.h +1 -1
- data/ext/pg_query/include/common/kwlookup.h +2 -2
- data/ext/pg_query/include/common/pg_prng.h +3 -2
- data/ext/pg_query/include/common/relpath.h +20 -13
- data/ext/pg_query/include/common/scram-common.h +70 -0
- data/ext/pg_query/include/common/sha2.h +32 -0
- data/ext/pg_query/include/common/string.h +5 -3
- data/ext/pg_query/include/common/unicode_east_asian_fw_table.h +10 -10
- data/ext/pg_query/include/common/{unicode_combining_table.h → unicode_nonspacing_table.h} +31 -13
- data/ext/pg_query/include/copyfuncs.funcs.c +5013 -0
- data/ext/pg_query/include/copyfuncs.switch.c +938 -0
- data/ext/pg_query/include/datatype/timestamp.h +11 -4
- data/ext/pg_query/include/equalfuncs.funcs.c +3097 -0
- data/ext/pg_query/include/equalfuncs.switch.c +785 -0
- data/ext/pg_query/include/executor/execdesc.h +1 -1
- data/ext/pg_query/include/executor/executor.h +34 -17
- data/ext/pg_query/include/executor/functions.h +1 -1
- data/ext/pg_query/include/executor/instrument.h +1 -1
- data/ext/pg_query/include/executor/spi.h +2 -2
- data/ext/pg_query/include/executor/tablefunc.h +1 -1
- data/ext/pg_query/include/executor/tuptable.h +18 -11
- data/ext/pg_query/include/fmgr.h +21 -2
- data/ext/pg_query/include/foreign/fdwapi.h +294 -0
- data/ext/pg_query/include/funcapi.h +12 -12
- data/ext/pg_query/include/gram.h +1127 -0
- data/ext/pg_query/include/{parser/gramparse.h → gramparse.h} +4 -4
- data/ext/pg_query/include/jit/jit.h +2 -2
- data/ext/pg_query/include/kwlist_d.h +534 -510
- data/ext/pg_query/include/lib/dshash.h +4 -1
- data/ext/pg_query/include/lib/ilist.h +435 -22
- data/ext/pg_query/include/lib/pairingheap.h +1 -1
- data/ext/pg_query/include/lib/simplehash.h +9 -9
- data/ext/pg_query/include/lib/sort_template.h +1 -1
- data/ext/pg_query/include/lib/stringinfo.h +3 -3
- data/ext/pg_query/include/libpq/auth.h +8 -2
- data/ext/pg_query/include/libpq/crypt.h +1 -1
- data/ext/pg_query/include/libpq/hba.h +24 -17
- data/ext/pg_query/include/libpq/libpq-be.h +36 -25
- data/ext/pg_query/include/libpq/libpq.h +1 -1
- data/ext/pg_query/include/libpq/pqcomm.h +10 -41
- data/ext/pg_query/include/libpq/pqformat.h +2 -2
- data/ext/pg_query/include/libpq/pqsignal.h +22 -10
- data/ext/pg_query/include/libpq/sasl.h +136 -0
- data/ext/pg_query/include/libpq/scram.h +37 -0
- data/ext/pg_query/include/mb/pg_wchar.h +35 -18
- data/ext/pg_query/include/mb/stringinfo_mb.h +1 -1
- data/ext/pg_query/include/miscadmin.h +26 -14
- data/ext/pg_query/include/nodes/bitmapset.h +11 -7
- data/ext/pg_query/include/nodes/execnodes.h +83 -30
- data/ext/pg_query/include/nodes/extensible.h +5 -3
- data/ext/pg_query/include/nodes/lockoptions.h +1 -1
- data/ext/pg_query/include/nodes/makefuncs.h +14 -2
- data/ext/pg_query/include/nodes/memnodes.h +7 -4
- data/ext/pg_query/include/nodes/miscnodes.h +56 -0
- data/ext/pg_query/include/nodes/nodeFuncs.h +89 -29
- data/ext/pg_query/include/nodes/nodes.h +95 -510
- data/ext/pg_query/include/nodes/nodetags.h +471 -0
- data/ext/pg_query/include/nodes/params.h +3 -3
- data/ext/pg_query/include/nodes/parsenodes.h +377 -139
- data/ext/pg_query/include/nodes/pathnodes.h +1090 -440
- data/ext/pg_query/include/nodes/pg_list.h +30 -7
- data/ext/pg_query/include/nodes/plannodes.h +367 -124
- data/ext/pg_query/include/nodes/primnodes.h +670 -222
- data/ext/pg_query/include/nodes/print.h +1 -1
- data/ext/pg_query/include/{utils → nodes}/queryjumble.h +5 -7
- data/ext/pg_query/include/nodes/replnodes.h +111 -0
- data/ext/pg_query/include/nodes/supportnodes.h +346 -0
- data/ext/pg_query/include/nodes/tidbitmap.h +1 -1
- data/ext/pg_query/include/nodes/value.h +12 -2
- data/ext/pg_query/include/optimizer/cost.h +6 -4
- data/ext/pg_query/include/optimizer/geqo.h +1 -1
- data/ext/pg_query/include/optimizer/geqo_gene.h +1 -1
- data/ext/pg_query/include/optimizer/optimizer.h +8 -8
- data/ext/pg_query/include/optimizer/paths.h +16 -7
- data/ext/pg_query/include/optimizer/planmain.h +3 -6
- data/ext/pg_query/include/parser/analyze.h +4 -3
- data/ext/pg_query/include/parser/kwlist.h +12 -1
- data/ext/pg_query/include/parser/parse_agg.h +4 -2
- data/ext/pg_query/include/parser/parse_coerce.h +3 -1
- data/ext/pg_query/include/parser/parse_expr.h +1 -1
- data/ext/pg_query/include/parser/parse_func.h +1 -1
- data/ext/pg_query/include/parser/parse_node.h +22 -4
- data/ext/pg_query/include/parser/parse_oper.h +3 -3
- data/ext/pg_query/include/parser/parse_relation.h +8 -3
- data/ext/pg_query/include/parser/parse_type.h +4 -3
- data/ext/pg_query/include/parser/parser.h +1 -1
- data/ext/pg_query/include/parser/parsetree.h +1 -1
- data/ext/pg_query/include/parser/scanner.h +2 -2
- data/ext/pg_query/include/parser/scansup.h +1 -1
- data/ext/pg_query/include/partitioning/partdefs.h +1 -1
- data/ext/pg_query/include/pg_config.h +23 -217
- data/ext/pg_query/include/pg_config_manual.h +8 -46
- data/ext/pg_query/include/pg_getopt.h +1 -1
- data/ext/pg_query/include/pg_query.h +27 -3
- data/ext/pg_query/include/pg_query_enum_defs.c +311 -149
- data/ext/pg_query/include/pg_query_fingerprint_conds.c +545 -489
- data/ext/pg_query/include/pg_query_fingerprint_defs.c +5092 -4432
- data/ext/pg_query/include/pg_query_outfuncs_conds.c +385 -343
- data/ext/pg_query/include/pg_query_outfuncs_defs.c +1294 -1161
- data/ext/pg_query/include/pg_query_readfuncs_conds.c +137 -123
- data/ext/pg_query/include/pg_query_readfuncs_defs.c +1657 -1496
- data/ext/pg_query/include/pg_trace.h +1 -1
- data/ext/pg_query/include/pgstat.h +172 -93
- data/ext/pg_query/include/pgtime.h +3 -3
- data/ext/pg_query/include/pl_gram.h +64 -62
- data/ext/pg_query/include/pl_reserved_kwlist.h +1 -1
- data/ext/pg_query/include/pl_reserved_kwlist_d.h +1 -1
- data/ext/pg_query/include/pl_unreserved_kwlist.h +2 -1
- data/ext/pg_query/include/pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/include/plpgsql.h +17 -22
- data/ext/pg_query/include/port/atomics/arch-arm.h +3 -3
- data/ext/pg_query/include/port/atomics/arch-ppc.h +21 -21
- data/ext/pg_query/include/port/atomics/arch-x86.h +2 -2
- data/ext/pg_query/include/port/atomics/fallback.h +3 -3
- data/ext/pg_query/include/port/atomics/generic-gcc.h +1 -1
- data/ext/pg_query/include/port/atomics/generic.h +1 -1
- data/ext/pg_query/include/port/atomics.h +2 -7
- data/ext/pg_query/include/port/pg_bitutils.h +62 -25
- data/ext/pg_query/include/port/pg_bswap.h +1 -1
- data/ext/pg_query/include/port/pg_crc32c.h +1 -1
- data/ext/pg_query/include/port/simd.h +375 -0
- data/ext/pg_query/include/port.h +42 -75
- data/ext/pg_query/include/portability/instr_time.h +81 -140
- data/ext/pg_query/include/postgres.h +205 -434
- data/ext/pg_query/include/postgres_ext.h +0 -1
- data/ext/pg_query/include/postmaster/autovacuum.h +1 -4
- data/ext/pg_query/include/postmaster/auxprocess.h +1 -1
- data/ext/pg_query/include/postmaster/bgworker.h +2 -2
- data/ext/pg_query/include/postmaster/bgworker_internals.h +1 -1
- data/ext/pg_query/include/postmaster/bgwriter.h +2 -2
- data/ext/pg_query/include/postmaster/fork_process.h +1 -1
- data/ext/pg_query/include/postmaster/interrupt.h +1 -1
- data/ext/pg_query/include/postmaster/pgarch.h +1 -38
- data/ext/pg_query/include/postmaster/postmaster.h +5 -2
- data/ext/pg_query/include/postmaster/startup.h +3 -1
- data/ext/pg_query/include/postmaster/syslogger.h +2 -2
- data/ext/pg_query/include/postmaster/walwriter.h +3 -1
- data/ext/pg_query/include/protobuf/pg_query.pb-c.h +6186 -5585
- data/ext/pg_query/include/protobuf/pg_query.pb.h +112443 -91222
- data/ext/pg_query/include/regex/regex.h +9 -6
- data/ext/pg_query/include/replication/logicallauncher.h +6 -1
- data/ext/pg_query/include/replication/logicalproto.h +30 -10
- data/ext/pg_query/include/replication/logicalworker.h +14 -1
- data/ext/pg_query/include/replication/origin.h +4 -4
- data/ext/pg_query/include/replication/reorderbuffer.h +113 -45
- data/ext/pg_query/include/replication/slot.h +25 -6
- data/ext/pg_query/include/replication/syncrep.h +2 -8
- data/ext/pg_query/include/replication/walreceiver.h +15 -9
- data/ext/pg_query/include/replication/walsender.h +13 -13
- data/ext/pg_query/include/rewrite/prs2lock.h +1 -1
- data/ext/pg_query/include/rewrite/rewriteHandler.h +1 -4
- data/ext/pg_query/include/rewrite/rewriteManip.h +11 -2
- data/ext/pg_query/include/rewrite/rewriteSupport.h +1 -1
- data/ext/pg_query/include/src_backend_nodes_copyfuncs.funcs.c +5321 -0
- data/ext/pg_query/include/src_backend_nodes_equalfuncs.funcs.c +3354 -0
- data/ext/pg_query/include/storage/backendid.h +1 -1
- data/ext/pg_query/include/storage/block.h +24 -31
- data/ext/pg_query/include/storage/buf.h +1 -1
- data/ext/pg_query/include/storage/bufmgr.h +183 -87
- data/ext/pg_query/include/storage/bufpage.h +146 -93
- data/ext/pg_query/include/storage/condition_variable.h +2 -2
- data/ext/pg_query/include/storage/dsm.h +3 -6
- data/ext/pg_query/include/storage/dsm_impl.h +4 -1
- data/ext/pg_query/include/storage/fd.h +24 -20
- data/ext/pg_query/include/storage/fileset.h +1 -1
- data/ext/pg_query/include/storage/ipc.h +1 -1
- data/ext/pg_query/include/storage/item.h +1 -1
- data/ext/pg_query/include/storage/itemid.h +1 -1
- data/ext/pg_query/include/storage/itemptr.h +94 -57
- data/ext/pg_query/include/storage/large_object.h +1 -1
- data/ext/pg_query/include/storage/latch.h +9 -1
- data/ext/pg_query/include/storage/lmgr.h +6 -1
- data/ext/pg_query/include/storage/lock.h +21 -13
- data/ext/pg_query/include/storage/lockdefs.h +3 -3
- data/ext/pg_query/include/storage/lwlock.h +16 -2
- data/ext/pg_query/include/storage/off.h +1 -1
- data/ext/pg_query/include/storage/pg_sema.h +1 -1
- data/ext/pg_query/include/storage/pg_shmem.h +1 -1
- data/ext/pg_query/include/storage/pmsignal.h +1 -1
- data/ext/pg_query/include/storage/predicate.h +2 -2
- data/ext/pg_query/include/storage/proc.h +22 -17
- data/ext/pg_query/include/storage/procarray.h +3 -2
- data/ext/pg_query/include/storage/proclist_types.h +1 -1
- data/ext/pg_query/include/storage/procsignal.h +3 -1
- data/ext/pg_query/include/storage/relfilelocator.h +99 -0
- data/ext/pg_query/include/storage/s_lock.h +66 -309
- data/ext/pg_query/include/storage/sharedfileset.h +1 -1
- data/ext/pg_query/include/storage/shm_mq.h +1 -1
- data/ext/pg_query/include/storage/shm_toc.h +1 -1
- data/ext/pg_query/include/storage/shmem.h +1 -23
- data/ext/pg_query/include/storage/sinval.h +3 -3
- data/ext/pg_query/include/storage/sinvaladt.h +4 -2
- data/ext/pg_query/include/storage/smgr.h +12 -10
- data/ext/pg_query/include/storage/spin.h +1 -1
- data/ext/pg_query/include/storage/standby.h +9 -8
- data/ext/pg_query/include/storage/standbydefs.h +1 -1
- data/ext/pg_query/include/storage/sync.h +3 -3
- data/ext/pg_query/include/tcop/cmdtag.h +7 -2
- data/ext/pg_query/include/tcop/cmdtaglist.h +1 -1
- data/ext/pg_query/include/tcop/deparse_utility.h +1 -1
- data/ext/pg_query/include/tcop/dest.h +1 -3
- data/ext/pg_query/include/tcop/fastpath.h +1 -1
- data/ext/pg_query/include/tcop/pquery.h +1 -1
- data/ext/pg_query/include/tcop/tcopprot.h +1 -4
- data/ext/pg_query/include/tcop/utility.h +1 -1
- data/ext/pg_query/include/tsearch/ts_cache.h +2 -4
- data/ext/pg_query/include/utils/acl.h +26 -81
- data/ext/pg_query/include/utils/aclchk_internal.h +1 -1
- data/ext/pg_query/include/utils/array.h +19 -1
- data/ext/pg_query/include/utils/backend_progress.h +2 -1
- data/ext/pg_query/include/utils/backend_status.h +24 -3
- data/ext/pg_query/include/utils/builtins.h +14 -5
- data/ext/pg_query/include/utils/bytea.h +1 -1
- data/ext/pg_query/include/utils/catcache.h +1 -1
- data/ext/pg_query/include/utils/date.h +37 -9
- data/ext/pg_query/include/utils/datetime.h +41 -21
- data/ext/pg_query/include/utils/datum.h +1 -1
- data/ext/pg_query/include/utils/dsa.h +5 -1
- data/ext/pg_query/include/utils/elog.h +101 -26
- data/ext/pg_query/include/utils/expandeddatum.h +14 -3
- data/ext/pg_query/include/utils/expandedrecord.h +14 -4
- data/ext/pg_query/include/utils/float.h +7 -6
- data/ext/pg_query/include/utils/fmgroids.h +54 -1
- data/ext/pg_query/include/utils/fmgrprotos.h +45 -3
- data/ext/pg_query/include/utils/fmgrtab.h +1 -1
- data/ext/pg_query/include/utils/guc.h +55 -82
- data/ext/pg_query/include/utils/guc_hooks.h +163 -0
- data/ext/pg_query/include/utils/guc_tables.h +49 -3
- data/ext/pg_query/include/utils/hsearch.h +1 -1
- data/ext/pg_query/include/utils/inval.h +3 -3
- data/ext/pg_query/include/utils/logtape.h +77 -0
- data/ext/pg_query/include/utils/lsyscache.h +5 -1
- data/ext/pg_query/include/utils/memdebug.h +1 -1
- data/ext/pg_query/include/utils/memutils.h +5 -49
- data/ext/pg_query/include/utils/memutils_internal.h +136 -0
- data/ext/pg_query/include/utils/memutils_memorychunk.h +237 -0
- data/ext/pg_query/include/utils/numeric.h +20 -5
- data/ext/pg_query/include/utils/palloc.h +8 -1
- data/ext/pg_query/include/utils/partcache.h +3 -2
- data/ext/pg_query/include/utils/pg_locale.h +22 -14
- data/ext/pg_query/include/utils/pgstat_internal.h +37 -7
- data/ext/pg_query/include/utils/pidfile.h +1 -1
- data/ext/pg_query/include/utils/plancache.h +1 -1
- data/ext/pg_query/include/utils/portal.h +1 -1
- data/ext/pg_query/include/utils/probes.h +6 -6
- data/ext/pg_query/include/utils/ps_status.h +23 -1
- data/ext/pg_query/include/utils/queryenvironment.h +1 -1
- data/ext/pg_query/include/utils/regproc.h +3 -3
- data/ext/pg_query/include/utils/rel.h +60 -43
- data/ext/pg_query/include/utils/relcache.h +13 -8
- data/ext/pg_query/include/utils/reltrigger.h +1 -1
- data/ext/pg_query/include/utils/resowner.h +1 -1
- data/ext/pg_query/include/utils/ruleutils.h +6 -1
- data/ext/pg_query/include/utils/sharedtuplestore.h +1 -1
- data/ext/pg_query/include/utils/snapmgr.h +4 -2
- data/ext/pg_query/include/utils/snapshot.h +1 -1
- data/ext/pg_query/include/utils/sortsupport.h +2 -2
- data/ext/pg_query/include/utils/syscache.h +4 -1
- data/ext/pg_query/include/utils/timeout.h +1 -1
- data/ext/pg_query/include/utils/timestamp.h +41 -11
- data/ext/pg_query/include/utils/tuplesort.h +189 -35
- data/ext/pg_query/include/utils/tuplestore.h +1 -1
- data/ext/pg_query/include/utils/typcache.h +1 -1
- data/ext/pg_query/include/utils/varlena.h +13 -1
- data/ext/pg_query/include/utils/wait_event.h +9 -4
- data/ext/pg_query/include/utils/xml.h +15 -5
- data/ext/pg_query/include/varatt.h +358 -0
- data/ext/pg_query/pg_query.c +1 -1
- data/ext/pg_query/pg_query.pb-c.c +19755 -17757
- data/ext/pg_query/pg_query_fingerprint.c +8 -3
- data/ext/pg_query/pg_query_fingerprint.h +1 -1
- data/ext/pg_query/pg_query_internal.h +1 -1
- data/ext/pg_query/pg_query_json_plpgsql.c +1 -0
- data/ext/pg_query/pg_query_normalize.c +1 -1
- data/ext/pg_query/pg_query_outfuncs_protobuf.c +2 -2
- data/ext/pg_query/pg_query_parse.c +46 -4
- data/ext/pg_query/pg_query_parse_plpgsql.c +1 -1
- data/ext/pg_query/pg_query_scan.c +1 -1
- data/ext/pg_query/pg_query_split.c +2 -2
- data/ext/pg_query/postgres_deparse.c +511 -109
- data/ext/pg_query/src_backend_catalog_namespace.c +7 -2
- data/ext/pg_query/src_backend_catalog_pg_proc.c +1 -1
- data/ext/pg_query/src_backend_commands_define.c +1 -1
- data/ext/pg_query/src_backend_nodes_bitmapset.c +11 -70
- data/ext/pg_query/src_backend_nodes_copyfuncs.c +96 -6202
- data/ext/pg_query/src_backend_nodes_equalfuncs.c +95 -4068
- data/ext/pg_query/src_backend_nodes_extensible.c +6 -29
- data/ext/pg_query/src_backend_nodes_list.c +14 -2
- data/ext/pg_query/src_backend_nodes_makefuncs.c +95 -1
- data/ext/pg_query/src_backend_nodes_nodeFuncs.c +283 -132
- data/ext/pg_query/src_backend_nodes_value.c +1 -1
- data/ext/pg_query/src_backend_parser_gram.c +33208 -31806
- data/ext/pg_query/src_backend_parser_parser.c +28 -2
- data/ext/pg_query/src_backend_parser_scan.c +4318 -3329
- data/ext/pg_query/src_backend_parser_scansup.c +1 -1
- data/ext/pg_query/src_backend_postmaster_postmaster.c +129 -110
- data/ext/pg_query/src_backend_storage_ipc_ipc.c +1 -1
- data/ext/pg_query/src_backend_tcop_postgres.c +66 -87
- data/ext/pg_query/src_backend_utils_activity_pgstat_database.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_datum.c +5 -7
- data/ext/pg_query/src_backend_utils_adt_expandeddatum.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_format_type.c +1 -1
- data/ext/pg_query/src_backend_utils_adt_numutils.c +489 -0
- data/ext/pg_query/src_backend_utils_adt_ruleutils.c +79 -5
- data/ext/pg_query/src_backend_utils_error_assert.c +4 -7
- data/ext/pg_query/src_backend_utils_error_elog.c +354 -97
- data/ext/pg_query/src_backend_utils_fmgr_fmgr.c +33 -1
- data/ext/pg_query/src_backend_utils_init_globals.c +5 -2
- data/ext/pg_query/src_backend_utils_mb_mbutils.c +13 -4
- data/ext/pg_query/src_backend_utils_misc_guc_tables.c +494 -0
- data/ext/pg_query/src_backend_utils_mmgr_alignedalloc.c +163 -0
- data/ext/pg_query/src_backend_utils_mmgr_aset.c +449 -312
- data/ext/pg_query/src_backend_utils_mmgr_generation.c +1039 -0
- data/ext/pg_query/src_backend_utils_mmgr_mcxt.c +398 -49
- 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 +1 -1
- data/ext/pg_query/src_common_keywords.c +1 -1
- data/ext/pg_query/src_common_kwlist_d.h +534 -510
- 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 +9 -8
- data/ext/pg_query/src_pl_plpgsql_src_pl_comp.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_funcs.c +3 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_gram.c +661 -694
- 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 +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_scanner.c +1 -1
- data/ext/pg_query/src_pl_plpgsql_src_pl_unreserved_kwlist_d.h +48 -46
- data/ext/pg_query/src_port_pg_bitutils.c +1 -1
- data/ext/pg_query/src_port_pgstrcasecmp.c +29 -1
- data/ext/pg_query/src_port_snprintf.c +3 -7
- data/ext/pg_query/src_port_strerror.c +1 -1
- data/ext/pg_query/src_port_strnlen.c +1 -1
- data/lib/pg_query/pg_query_pb.rb +166 -3191
- data/lib/pg_query/treewalker.rb +7 -2
- data/lib/pg_query/version.rb +1 -1
- metadata +43 -24
- data/ext/pg_query/include/catalog/pg_parameter_acl.h +0 -60
- data/ext/pg_query/include/catalog/pg_parameter_acl_d.h +0 -34
- data/ext/pg_query/include/commands/variable.h +0 -38
- data/ext/pg_query/include/getaddrinfo.h +0 -162
- data/ext/pg_query/include/parser/gram.h +0 -1101
- data/ext/pg_query/include/storage/relfilenode.h +0 -99
- data/ext/pg_query/include/utils/dynahash.h +0 -20
- data/ext/pg_query/include/utils/pg_lsn.h +0 -29
- 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_storage_lmgr_s_lock.c +0 -371
- data/ext/pg_query/src_backend_utils_hash_dynahash.c +0 -1116
- data/ext/pg_query/src_backend_utils_misc_guc.c +0 -1993
- data/ext/pg_query/src_common_pg_prng.c +0 -152
- data/ext/pg_query/src_common_string.c +0 -92
- data/ext/pg_query/src_port_pgsleep.c +0 -69
|
@@ -29,6 +29,7 @@ typedef enum DeparseNodeContext {
|
|
|
29
29
|
DEPARSE_NODE_CONTEXT_CREATE_TYPE,
|
|
30
30
|
DEPARSE_NODE_CONTEXT_ALTER_TYPE,
|
|
31
31
|
DEPARSE_NODE_CONTEXT_SET_STATEMENT,
|
|
32
|
+
DEPARSE_NODE_CONTEXT_FUNC_EXPR,
|
|
32
33
|
// Identifier vs constant context
|
|
33
34
|
DEPARSE_NODE_CONTEXT_IDENTIFIER,
|
|
34
35
|
DEPARSE_NODE_CONTEXT_CONSTANT
|
|
@@ -189,13 +190,18 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call);
|
|
|
189
190
|
static void deparseMinMaxExpr(StringInfo str, MinMaxExpr *min_max_expr);
|
|
190
191
|
static void deparseXmlExpr(StringInfo str, XmlExpr* xml_expr);
|
|
191
192
|
static void deparseXmlSerialize(StringInfo str, XmlSerialize *xml_serialize);
|
|
193
|
+
static void deparseJsonIsPredicate(StringInfo str, JsonIsPredicate *json_is_predicate);
|
|
194
|
+
static void deparseJsonObjectAgg(StringInfo str, JsonObjectAgg *json_object_agg);
|
|
195
|
+
static void deparseJsonArrayAgg(StringInfo str, JsonArrayAgg *json_array_agg);
|
|
196
|
+
static void deparseJsonObjectConstructor(StringInfo str, JsonObjectConstructor *json_object_constructor);
|
|
197
|
+
static void deparseJsonArrayConstructor(StringInfo str, JsonArrayConstructor *json_array_constructor);
|
|
198
|
+
static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConstructor *json_array_query_constructor);
|
|
192
199
|
static void deparseConstraint(StringInfo str, Constraint *constraint);
|
|
193
200
|
static void deparseSchemaStmt(StringInfo str, Node *node);
|
|
194
201
|
static void deparseExecuteStmt(StringInfo str, ExecuteStmt *execute_stmt);
|
|
195
202
|
static void deparseTriggerTransition(StringInfo str, TriggerTransition *trigger_transition);
|
|
196
203
|
static void deparseCreateOpClassItem(StringInfo str, CreateOpClassItem *create_op_class_item);
|
|
197
204
|
static void deparseAConst(StringInfo str, A_Const *a_const);
|
|
198
|
-
static void deparseCurrentOfExpr(StringInfo str, CurrentOfExpr *current_of_expr);
|
|
199
205
|
static void deparseGroupingFunc(StringInfo str, GroupingFunc *grouping_func);
|
|
200
206
|
|
|
201
207
|
static void deparsePreparableStmt(StringInfo str, Node *node);
|
|
@@ -245,89 +251,144 @@ static void deparseAnyNameSkipLast(StringInfo str, List *parts)
|
|
|
245
251
|
}
|
|
246
252
|
}
|
|
247
253
|
|
|
248
|
-
// "
|
|
249
|
-
static void
|
|
254
|
+
// "func_expr" in gram.y
|
|
255
|
+
static void deparseFuncExpr(StringInfo str, Node *node)
|
|
250
256
|
{
|
|
251
|
-
if (node == NULL)
|
|
252
|
-
return;
|
|
253
257
|
switch (nodeTag(node))
|
|
254
258
|
{
|
|
255
259
|
case T_FuncCall:
|
|
256
260
|
deparseFuncCall(str, castNode(FuncCall, node));
|
|
257
261
|
break;
|
|
258
|
-
case
|
|
259
|
-
|
|
260
|
-
break;
|
|
261
|
-
case T_TypeCast:
|
|
262
|
-
deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_NONE);
|
|
263
|
-
break;
|
|
264
|
-
case T_A_Const:
|
|
265
|
-
deparseAConst(str, castNode(A_Const, node));
|
|
266
|
-
break;
|
|
267
|
-
case T_ColumnRef:
|
|
268
|
-
deparseColumnRef(str, castNode(ColumnRef, node));
|
|
269
|
-
break;
|
|
270
|
-
case T_A_Expr:
|
|
271
|
-
deparseAExpr(str, castNode(A_Expr, node), DEPARSE_NODE_CONTEXT_NONE);
|
|
262
|
+
case T_SQLValueFunction:
|
|
263
|
+
deparseSQLValueFunction(str, castNode(SQLValueFunction, node));
|
|
272
264
|
break;
|
|
273
|
-
case
|
|
274
|
-
|
|
265
|
+
case T_MinMaxExpr:
|
|
266
|
+
deparseMinMaxExpr(str, castNode(MinMaxExpr, node));
|
|
275
267
|
break;
|
|
276
|
-
case
|
|
277
|
-
|
|
268
|
+
case T_CoalesceExpr:
|
|
269
|
+
deparseCoalesceExpr(str, castNode(CoalesceExpr, node));
|
|
278
270
|
break;
|
|
279
|
-
case
|
|
280
|
-
|
|
271
|
+
case T_XmlExpr:
|
|
272
|
+
deparseXmlExpr(str, castNode(XmlExpr, node));
|
|
281
273
|
break;
|
|
282
274
|
case T_XmlSerialize:
|
|
283
275
|
deparseXmlSerialize(str, castNode(XmlSerialize, node));
|
|
284
276
|
break;
|
|
285
|
-
case
|
|
286
|
-
|
|
277
|
+
case T_JsonObjectAgg:
|
|
278
|
+
deparseJsonObjectAgg(str, castNode(JsonObjectAgg, node));
|
|
287
279
|
break;
|
|
288
|
-
case
|
|
289
|
-
|
|
280
|
+
case T_JsonArrayAgg:
|
|
281
|
+
deparseJsonArrayAgg(str, castNode(JsonArrayAgg, node));
|
|
290
282
|
break;
|
|
291
|
-
case
|
|
292
|
-
|
|
283
|
+
case T_JsonObjectConstructor:
|
|
284
|
+
deparseJsonObjectConstructor(str, castNode(JsonObjectConstructor, node));
|
|
293
285
|
break;
|
|
294
|
-
case
|
|
295
|
-
|
|
286
|
+
case T_JsonArrayConstructor:
|
|
287
|
+
deparseJsonArrayConstructor(str, castNode(JsonArrayConstructor, node));
|
|
296
288
|
break;
|
|
297
|
-
case
|
|
298
|
-
|
|
289
|
+
case T_JsonArrayQueryConstructor:
|
|
290
|
+
deparseJsonArrayQueryConstructor(str, castNode(JsonArrayQueryConstructor, node));
|
|
299
291
|
break;
|
|
300
|
-
|
|
301
|
-
|
|
292
|
+
default:
|
|
293
|
+
elog(ERROR, "deparse: unpermitted node type in func_expr: %d",
|
|
294
|
+
(int) nodeTag(node));
|
|
302
295
|
break;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
static void deparseCExpr(StringInfo str, Node *node);
|
|
300
|
+
|
|
301
|
+
// "a_expr" in gram.y
|
|
302
|
+
static void deparseExpr(StringInfo str, Node *node)
|
|
303
|
+
{
|
|
304
|
+
if (node == NULL)
|
|
305
|
+
return;
|
|
306
|
+
switch (nodeTag(node))
|
|
307
|
+
{
|
|
308
|
+
case T_ColumnRef:
|
|
309
|
+
case T_A_Const:
|
|
310
|
+
case T_ParamRef:
|
|
303
311
|
case T_A_Indirection:
|
|
304
|
-
|
|
312
|
+
case T_CaseExpr:
|
|
313
|
+
case T_SubLink:
|
|
314
|
+
case T_A_ArrayExpr:
|
|
315
|
+
case T_RowExpr:
|
|
316
|
+
case T_GroupingFunc:
|
|
317
|
+
deparseCExpr(str, node);
|
|
318
|
+
break;
|
|
319
|
+
case T_TypeCast:
|
|
320
|
+
deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_NONE);
|
|
305
321
|
break;
|
|
306
322
|
case T_CollateClause:
|
|
307
323
|
deparseCollateClause(str, castNode(CollateClause, node));
|
|
308
324
|
break;
|
|
309
|
-
case
|
|
310
|
-
|
|
325
|
+
case T_A_Expr:
|
|
326
|
+
deparseAExpr(str, castNode(A_Expr, node), DEPARSE_NODE_CONTEXT_NONE);
|
|
311
327
|
break;
|
|
312
|
-
case
|
|
313
|
-
|
|
328
|
+
case T_BoolExpr:
|
|
329
|
+
deparseBoolExpr(str, castNode(BoolExpr, node));
|
|
314
330
|
break;
|
|
315
|
-
case
|
|
316
|
-
|
|
331
|
+
case T_NullTest:
|
|
332
|
+
deparseNullTest(str, castNode(NullTest, node));
|
|
317
333
|
break;
|
|
318
334
|
case T_BooleanTest:
|
|
319
335
|
deparseBooleanTest(str, castNode(BooleanTest, node));
|
|
320
336
|
break;
|
|
321
|
-
case
|
|
322
|
-
|
|
337
|
+
case T_JsonIsPredicate:
|
|
338
|
+
deparseJsonIsPredicate(str, castNode(JsonIsPredicate, node));
|
|
339
|
+
break;
|
|
340
|
+
case T_SetToDefault:
|
|
341
|
+
deparseSetToDefault(str, castNode(SetToDefault, node));
|
|
342
|
+
break;
|
|
343
|
+
case T_FuncCall:
|
|
344
|
+
case T_SQLValueFunction:
|
|
345
|
+
case T_MinMaxExpr:
|
|
346
|
+
case T_CoalesceExpr:
|
|
347
|
+
case T_XmlExpr:
|
|
348
|
+
case T_XmlSerialize:
|
|
349
|
+
case T_JsonObjectAgg:
|
|
350
|
+
case T_JsonArrayAgg:
|
|
351
|
+
case T_JsonObjectConstructor:
|
|
352
|
+
case T_JsonArrayConstructor:
|
|
353
|
+
case T_JsonArrayQueryConstructor:
|
|
354
|
+
deparseFuncExpr(str, node);
|
|
323
355
|
break;
|
|
324
356
|
default:
|
|
325
|
-
|
|
357
|
+
// Note that this is also the fallthrough for deparseBExpr and deparseCExpr
|
|
358
|
+
elog(ERROR, "deparse: unpermitted node type in a_expr/b_expr/c_expr: %d",
|
|
326
359
|
(int) nodeTag(node));
|
|
327
360
|
break;
|
|
328
361
|
}
|
|
329
362
|
}
|
|
330
363
|
|
|
364
|
+
// "b_expr" in gram.y
|
|
365
|
+
static void deparseBExpr(StringInfo str, Node *node)
|
|
366
|
+
{
|
|
367
|
+
if (IsA(node, XmlExpr)) {
|
|
368
|
+
deparseXmlExpr(str, castNode(XmlExpr, node));
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
if (IsA(node, A_Expr)) {
|
|
373
|
+
A_Expr *a_expr = castNode(A_Expr, node);
|
|
374
|
+
// Other kinds are handled by "c_expr", with parens added around them
|
|
375
|
+
if (a_expr->kind == AEXPR_OP || a_expr->kind == AEXPR_DISTINCT || a_expr->kind == AEXPR_NOT_DISTINCT) {
|
|
376
|
+
deparseAExpr(str, a_expr, DEPARSE_NODE_CONTEXT_NONE);
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
if (IsA(node, BoolExpr)) {
|
|
382
|
+
BoolExpr *bool_expr = castNode(BoolExpr, node);
|
|
383
|
+
if (bool_expr->boolop == NOT_EXPR) {
|
|
384
|
+
deparseBoolExpr(str, bool_expr);
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
deparseCExpr(str, node);
|
|
390
|
+
}
|
|
391
|
+
|
|
331
392
|
// "c_expr" in gram.y
|
|
332
393
|
static void deparseCExpr(StringInfo str, Node *node)
|
|
333
394
|
{
|
|
@@ -339,14 +400,6 @@ static void deparseCExpr(StringInfo str, Node *node)
|
|
|
339
400
|
case T_A_Const:
|
|
340
401
|
deparseAConst(str, castNode(A_Const, node));
|
|
341
402
|
break;
|
|
342
|
-
case T_TypeCast:
|
|
343
|
-
deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_NONE);
|
|
344
|
-
break;
|
|
345
|
-
case T_A_Expr:
|
|
346
|
-
appendStringInfoChar(str, '(');
|
|
347
|
-
deparseAExpr(str, castNode(A_Expr, node), DEPARSE_NODE_CONTEXT_NONE);
|
|
348
|
-
appendStringInfoChar(str, ')');
|
|
349
|
-
break;
|
|
350
403
|
case T_ParamRef:
|
|
351
404
|
deparseParamRef(str, castNode(ParamRef, node));
|
|
352
405
|
break;
|
|
@@ -356,9 +409,6 @@ static void deparseCExpr(StringInfo str, Node *node)
|
|
|
356
409
|
case T_CaseExpr:
|
|
357
410
|
deparseCaseExpr(str, castNode(CaseExpr, node));
|
|
358
411
|
break;
|
|
359
|
-
case T_FuncCall:
|
|
360
|
-
deparseFuncCall(str, castNode(FuncCall, node));
|
|
361
|
-
break;
|
|
362
412
|
case T_SubLink:
|
|
363
413
|
deparseSubLink(str, castNode(SubLink, node));
|
|
364
414
|
break;
|
|
@@ -371,9 +421,23 @@ static void deparseCExpr(StringInfo str, Node *node)
|
|
|
371
421
|
case T_GroupingFunc:
|
|
372
422
|
deparseGroupingFunc(str, castNode(GroupingFunc, node));
|
|
373
423
|
break;
|
|
424
|
+
case T_FuncCall:
|
|
425
|
+
case T_SQLValueFunction:
|
|
426
|
+
case T_MinMaxExpr:
|
|
427
|
+
case T_CoalesceExpr:
|
|
428
|
+
case T_XmlExpr:
|
|
429
|
+
case T_XmlSerialize:
|
|
430
|
+
case T_JsonObjectAgg:
|
|
431
|
+
case T_JsonArrayAgg:
|
|
432
|
+
case T_JsonObjectConstructor:
|
|
433
|
+
case T_JsonArrayConstructor:
|
|
434
|
+
case T_JsonArrayQueryConstructor:
|
|
435
|
+
deparseFuncExpr(str, node);
|
|
436
|
+
break;
|
|
374
437
|
default:
|
|
375
|
-
|
|
376
|
-
|
|
438
|
+
appendStringInfoChar(str, '(');
|
|
439
|
+
deparseExpr(str, node);
|
|
440
|
+
appendStringInfoChar(str, ')');
|
|
377
441
|
break;
|
|
378
442
|
}
|
|
379
443
|
}
|
|
@@ -1634,6 +1698,27 @@ static void deparseWhereClause(StringInfo str, Node *node)
|
|
|
1634
1698
|
}
|
|
1635
1699
|
}
|
|
1636
1700
|
|
|
1701
|
+
// "where_or_current_clause" in gram.y
|
|
1702
|
+
//
|
|
1703
|
+
// Note this method adds a trailing space if a value is output
|
|
1704
|
+
static void deparseWhereOrCurrentClause(StringInfo str, Node *node)
|
|
1705
|
+
{
|
|
1706
|
+
if (node == NULL)
|
|
1707
|
+
return;
|
|
1708
|
+
|
|
1709
|
+
appendStringInfoString(str, "WHERE ");
|
|
1710
|
+
|
|
1711
|
+
if (IsA(node, CurrentOfExpr)) {
|
|
1712
|
+
CurrentOfExpr *current_of_expr = castNode(CurrentOfExpr, node);
|
|
1713
|
+
appendStringInfoString(str, "CURRENT OF ");
|
|
1714
|
+
appendStringInfoString(str, quote_identifier(current_of_expr->cursor_name));
|
|
1715
|
+
} else {
|
|
1716
|
+
deparseExpr(str, node);
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
appendStringInfoChar(str, ' ');
|
|
1720
|
+
}
|
|
1721
|
+
|
|
1637
1722
|
// "group_by_list" in gram.y
|
|
1638
1723
|
static void deparseGroupByList(StringInfo str, List *l)
|
|
1639
1724
|
{
|
|
@@ -1685,7 +1770,7 @@ static void deparseNameList(StringInfo str, List *l)
|
|
|
1685
1770
|
}
|
|
1686
1771
|
}
|
|
1687
1772
|
|
|
1688
|
-
// "opt_sort_clause" in gram.y
|
|
1773
|
+
// "opt_sort_clause" and "json_array_aggregate_order_by_clause_opt" in gram.y
|
|
1689
1774
|
//
|
|
1690
1775
|
// Note this method adds a trailing space if a value is output
|
|
1691
1776
|
static void deparseOptSortClause(StringInfo str, List *l)
|
|
@@ -1782,7 +1867,7 @@ static void deparseFuncExprWindowless(StringInfo str, Node* node)
|
|
|
1782
1867
|
deparseSQLValueFunction(str, castNode(SQLValueFunction, node));
|
|
1783
1868
|
break;
|
|
1784
1869
|
case T_TypeCast:
|
|
1785
|
-
deparseTypeCast(str, castNode(TypeCast, node),
|
|
1870
|
+
deparseTypeCast(str, castNode(TypeCast, node), DEPARSE_NODE_CONTEXT_FUNC_EXPR);
|
|
1786
1871
|
break;
|
|
1787
1872
|
case T_CoalesceExpr:
|
|
1788
1873
|
deparseCoalesceExpr(str, castNode(CoalesceExpr, node));
|
|
@@ -1826,14 +1911,15 @@ static void deparseIndexElem(StringInfo str, IndexElem* index_elem)
|
|
|
1826
1911
|
{
|
|
1827
1912
|
switch (nodeTag(index_elem->expr))
|
|
1828
1913
|
{
|
|
1829
|
-
|
|
1830
|
-
case
|
|
1831
|
-
case
|
|
1832
|
-
case T_CoalesceExpr:
|
|
1833
|
-
case T_MinMaxExpr:
|
|
1834
|
-
case T_XmlExpr:
|
|
1835
|
-
case T_XmlSerialize:
|
|
1914
|
+
// Simple function calls can be written without wrapping parens
|
|
1915
|
+
case T_FuncCall: // func_application
|
|
1916
|
+
case T_SQLValueFunction: // func_expr_common_subexpr
|
|
1917
|
+
case T_CoalesceExpr: // func_expr_common_subexpr
|
|
1918
|
+
case T_MinMaxExpr: // func_expr_common_subexpr
|
|
1919
|
+
case T_XmlExpr: // func_expr_common_subexpr
|
|
1920
|
+
case T_XmlSerialize: // func_expr_common_subexpr
|
|
1836
1921
|
deparseFuncExprWindowless(str, index_elem->expr);
|
|
1922
|
+
appendStringInfoString(str, " ");
|
|
1837
1923
|
break;
|
|
1838
1924
|
default:
|
|
1839
1925
|
appendStringInfoChar(str, '(');
|
|
@@ -2267,9 +2353,11 @@ static void deparseSelectStmt(StringInfo str, SelectStmt *stmt)
|
|
|
2267
2353
|
|
|
2268
2354
|
if (IsA(stmt->limitCount, A_Const) && castNode(A_Const, stmt->limitCount)->isnull)
|
|
2269
2355
|
appendStringInfoString(str, "ALL");
|
|
2270
|
-
else
|
|
2356
|
+
else if (stmt->limitOption == LIMIT_OPTION_WITH_TIES)
|
|
2271
2357
|
deparseCExpr(str, stmt->limitCount);
|
|
2272
|
-
|
|
2358
|
+
else
|
|
2359
|
+
deparseExpr(str, stmt->limitCount);
|
|
2360
|
+
|
|
2273
2361
|
appendStringInfoChar(str, ' ');
|
|
2274
2362
|
|
|
2275
2363
|
if (stmt->limitOption == LIMIT_OPTION_WITH_TIES)
|
|
@@ -2463,9 +2551,9 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
|
|
|
2463
2551
|
* Note that the first and second arguments are switched in this format
|
|
2464
2552
|
*/
|
|
2465
2553
|
appendStringInfoString(str, "POSITION(");
|
|
2466
|
-
|
|
2554
|
+
deparseBExpr(str, lsecond(func_call->args));
|
|
2467
2555
|
appendStringInfoString(str, " IN ");
|
|
2468
|
-
|
|
2556
|
+
deparseBExpr(str, linitial(func_call->args));
|
|
2469
2557
|
appendStringInfoChar(str, ')');
|
|
2470
2558
|
return;
|
|
2471
2559
|
} else if (func_call->funcformat == COERCE_SQL_SYNTAX &&
|
|
@@ -2580,7 +2668,18 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
|
|
|
2580
2668
|
* keyword parameter style when its called as a keyword, not as a regular function (i.e. pg_catalog.timezone)
|
|
2581
2669
|
* Note that the arguments are swapped in this case
|
|
2582
2670
|
*/
|
|
2583
|
-
|
|
2671
|
+
Expr* e = lsecond(func_call->args);
|
|
2672
|
+
|
|
2673
|
+
if (IsA(e, A_Expr)) {
|
|
2674
|
+
appendStringInfoChar(str, '(');
|
|
2675
|
+
}
|
|
2676
|
+
|
|
2677
|
+
deparseExpr(str, (Node*) e);
|
|
2678
|
+
|
|
2679
|
+
if (IsA(e, A_Expr)) {
|
|
2680
|
+
appendStringInfoChar(str, ')');
|
|
2681
|
+
}
|
|
2682
|
+
|
|
2584
2683
|
appendStringInfoString(str, " AT TIME ZONE ");
|
|
2585
2684
|
deparseExpr(str, linitial(func_call->args));
|
|
2586
2685
|
return;
|
|
@@ -2639,6 +2738,13 @@ static void deparseFuncCall(StringInfo str, FuncCall *func_call)
|
|
|
2639
2738
|
deparseExpr(str, lsecond(func_call->args));
|
|
2640
2739
|
appendStringInfoChar(str, ')');
|
|
2641
2740
|
return;
|
|
2741
|
+
} else if (func_call->funcformat == COERCE_SQL_SYNTAX &&
|
|
2742
|
+
list_length(func_call->funcname) == 2 &&
|
|
2743
|
+
strcmp(strVal(linitial(func_call->funcname)), "pg_catalog") == 0 &&
|
|
2744
|
+
strcmp(strVal(lsecond(func_call->funcname)), "system_user") == 0)
|
|
2745
|
+
{
|
|
2746
|
+
appendStringInfoString(str, "SYSTEM_USER");
|
|
2747
|
+
return;
|
|
2642
2748
|
}
|
|
2643
2749
|
|
|
2644
2750
|
deparseFuncName(str, func_call->funcname);
|
|
@@ -2877,8 +2983,8 @@ static void deparseAExpr(StringInfo str, A_Expr* a_expr, DeparseNodeContext cont
|
|
|
2877
2983
|
ListCell *lc;
|
|
2878
2984
|
char *name;
|
|
2879
2985
|
|
|
2880
|
-
bool need_lexpr_parens = a_expr->lexpr != NULL && (IsA(a_expr->lexpr, BoolExpr) || IsA(a_expr->lexpr, NullTest) || IsA(a_expr->lexpr, A_Expr));
|
|
2881
|
-
bool need_rexpr_parens = a_expr->rexpr != NULL && (IsA(a_expr->rexpr, BoolExpr) || IsA(a_expr->rexpr, NullTest) || IsA(a_expr->rexpr, A_Expr));
|
|
2986
|
+
bool need_lexpr_parens = a_expr->lexpr != NULL && (IsA(a_expr->lexpr, BoolExpr) || IsA(a_expr->lexpr, BooleanTest) || IsA(a_expr->lexpr, NullTest) || IsA(a_expr->lexpr, A_Expr));
|
|
2987
|
+
bool need_rexpr_parens = a_expr->rexpr != NULL && (IsA(a_expr->rexpr, BoolExpr) || IsA(a_expr->rexpr, BooleanTest) || IsA(a_expr->rexpr, NullTest) || IsA(a_expr->rexpr, A_Expr));
|
|
2882
2988
|
|
|
2883
2989
|
switch (a_expr->kind) {
|
|
2884
2990
|
case AEXPR_OP: /* normal operator */
|
|
@@ -3298,6 +3404,7 @@ static void deparseJoinExpr(StringInfo str, JoinExpr *join_expr)
|
|
|
3298
3404
|
break;
|
|
3299
3405
|
case JOIN_SEMI:
|
|
3300
3406
|
case JOIN_ANTI:
|
|
3407
|
+
case JOIN_RIGHT_ANTI:
|
|
3301
3408
|
case JOIN_UNIQUE_OUTER:
|
|
3302
3409
|
case JOIN_UNIQUE_INNER:
|
|
3303
3410
|
// Only used by the planner/executor, not seen in parser output
|
|
@@ -3543,7 +3650,7 @@ static void deparseTypeCast(StringInfo str, TypeCast *type_cast, DeparseNodeCont
|
|
|
3543
3650
|
|
|
3544
3651
|
Assert(type_cast->typeName != NULL);
|
|
3545
3652
|
|
|
3546
|
-
if (IsA(type_cast->arg, A_Expr))
|
|
3653
|
+
if (IsA(type_cast->arg, A_Expr) || context == DEPARSE_NODE_CONTEXT_FUNC_EXPR)
|
|
3547
3654
|
{
|
|
3548
3655
|
appendStringInfoString(str, "CAST(");
|
|
3549
3656
|
deparseExpr(str, type_cast->arg);
|
|
@@ -3948,7 +4055,16 @@ static void deparseMinMaxExpr(StringInfo str, MinMaxExpr *min_max_expr)
|
|
|
3948
4055
|
|
|
3949
4056
|
static void deparseBooleanTest(StringInfo str, BooleanTest *boolean_test)
|
|
3950
4057
|
{
|
|
4058
|
+
bool need_parens = IsA(boolean_test->arg, BoolExpr);
|
|
4059
|
+
|
|
4060
|
+
if (need_parens)
|
|
4061
|
+
appendStringInfoChar(str, '(');
|
|
4062
|
+
|
|
3951
4063
|
deparseExpr(str, (Node *) boolean_test->arg);
|
|
4064
|
+
|
|
4065
|
+
if (need_parens)
|
|
4066
|
+
appendStringInfoChar(str, ')');
|
|
4067
|
+
|
|
3952
4068
|
switch (boolean_test->booltesttype)
|
|
3953
4069
|
{
|
|
3954
4070
|
case IS_TRUE:
|
|
@@ -3990,6 +4106,13 @@ static void deparseColumnDef(StringInfo str, ColumnDef *column_def)
|
|
|
3990
4106
|
appendStringInfoChar(str, ' ');
|
|
3991
4107
|
}
|
|
3992
4108
|
|
|
4109
|
+
if (column_def->storage_name)
|
|
4110
|
+
{
|
|
4111
|
+
appendStringInfoString(str, "STORAGE ");
|
|
4112
|
+
appendStringInfoString(str, column_def->storage_name);
|
|
4113
|
+
appendStringInfoChar(str, ' ');
|
|
4114
|
+
}
|
|
4115
|
+
|
|
3993
4116
|
if (column_def->raw_default != NULL)
|
|
3994
4117
|
{
|
|
3995
4118
|
appendStringInfoString(str, "USING ");
|
|
@@ -3997,6 +4120,13 @@ static void deparseColumnDef(StringInfo str, ColumnDef *column_def)
|
|
|
3997
4120
|
appendStringInfoChar(str, ' ');
|
|
3998
4121
|
}
|
|
3999
4122
|
|
|
4123
|
+
if (column_def->compression != NULL)
|
|
4124
|
+
{
|
|
4125
|
+
appendStringInfoString(str, "COMPRESSION ");
|
|
4126
|
+
appendStringInfoString(str, column_def->compression);
|
|
4127
|
+
appendStringInfoChar(str, ' ');
|
|
4128
|
+
}
|
|
4129
|
+
|
|
4000
4130
|
if (column_def->fdwoptions != NULL)
|
|
4001
4131
|
{
|
|
4002
4132
|
deparseCreateGenericOptions(str, column_def->fdwoptions);
|
|
@@ -4171,7 +4301,7 @@ static void deparseUpdateStmt(StringInfo str, UpdateStmt *update_stmt)
|
|
|
4171
4301
|
}
|
|
4172
4302
|
|
|
4173
4303
|
deparseFromClause(str, update_stmt->fromClause);
|
|
4174
|
-
|
|
4304
|
+
deparseWhereOrCurrentClause(str, update_stmt->whereClause);
|
|
4175
4305
|
|
|
4176
4306
|
if (list_length(update_stmt->returningList) > 0)
|
|
4177
4307
|
{
|
|
@@ -4285,7 +4415,7 @@ static void deparseDeleteStmt(StringInfo str, DeleteStmt *delete_stmt)
|
|
|
4285
4415
|
appendStringInfoChar(str, ' ');
|
|
4286
4416
|
}
|
|
4287
4417
|
|
|
4288
|
-
|
|
4418
|
+
deparseWhereOrCurrentClause(str, delete_stmt->whereClause);
|
|
4289
4419
|
|
|
4290
4420
|
if (list_length(delete_stmt->returningList) > 0)
|
|
4291
4421
|
{
|
|
@@ -4500,6 +4630,8 @@ static void deparseTableLikeClause(StringInfo str, TableLikeClause *table_like_c
|
|
|
4500
4630
|
{
|
|
4501
4631
|
if (table_like_clause->options & CREATE_TABLE_LIKE_COMMENTS)
|
|
4502
4632
|
appendStringInfoString(str, "INCLUDING COMMENTS ");
|
|
4633
|
+
if (table_like_clause->options & CREATE_TABLE_LIKE_COMPRESSION)
|
|
4634
|
+
appendStringInfoString(str, "INCLUDING COMPRESSION ");
|
|
4503
4635
|
if (table_like_clause->options & CREATE_TABLE_LIKE_CONSTRAINTS)
|
|
4504
4636
|
appendStringInfoString(str, "INCLUDING CONSTRAINTS ");
|
|
4505
4637
|
if (table_like_clause->options & CREATE_TABLE_LIKE_DEFAULTS)
|
|
@@ -4607,7 +4739,7 @@ static void deparseConstraint(StringInfo str, Constraint *constraint)
|
|
|
4607
4739
|
break;
|
|
4608
4740
|
case CONSTR_DEFAULT:
|
|
4609
4741
|
appendStringInfoString(str, "DEFAULT ");
|
|
4610
|
-
|
|
4742
|
+
deparseBExpr(str, constraint->raw_expr);
|
|
4611
4743
|
break;
|
|
4612
4744
|
case CONSTR_IDENTITY:
|
|
4613
4745
|
appendStringInfoString(str, "GENERATED ");
|
|
@@ -4641,6 +4773,8 @@ static void deparseConstraint(StringInfo str, Constraint *constraint)
|
|
|
4641
4773
|
break;
|
|
4642
4774
|
case CONSTR_UNIQUE:
|
|
4643
4775
|
appendStringInfoString(str, "UNIQUE ");
|
|
4776
|
+
if (constraint->nulls_not_distinct)
|
|
4777
|
+
appendStringInfoString(str, "NULLS NOT DISTINCT ");
|
|
4644
4778
|
break;
|
|
4645
4779
|
case CONSTR_EXCLUSION:
|
|
4646
4780
|
appendStringInfoString(str, "EXCLUDE ");
|
|
@@ -4899,13 +5033,15 @@ static void deparseCreateFunctionStmt(StringInfo str, CreateFunctionStmt *create
|
|
|
4899
5033
|
/* RETURN or BEGIN ... END
|
|
4900
5034
|
*/
|
|
4901
5035
|
if (IsA(create_function_stmt->sql_body, ReturnStmt))
|
|
5036
|
+
{
|
|
4902
5037
|
deparseReturnStmt(str, castNode(ReturnStmt, create_function_stmt->sql_body));
|
|
5038
|
+
}
|
|
4903
5039
|
else
|
|
4904
5040
|
{
|
|
4905
5041
|
appendStringInfoString(str, "BEGIN ATOMIC ");
|
|
4906
|
-
if (linitial(create_function_stmt->sql_body) != NULL)
|
|
5042
|
+
if (IsA(create_function_stmt->sql_body, List), linitial((List *) create_function_stmt->sql_body) != NULL)
|
|
4907
5043
|
{
|
|
4908
|
-
List *body_stmt_list = castNode(List, linitial(create_function_stmt->sql_body));
|
|
5044
|
+
List *body_stmt_list = castNode(List, linitial((List *) create_function_stmt->sql_body));
|
|
4909
5045
|
foreach(lc, body_stmt_list)
|
|
4910
5046
|
{
|
|
4911
5047
|
if (IsA(lfirst(lc), ReturnStmt))
|
|
@@ -5104,7 +5240,19 @@ static void deparsePartitionSpec(StringInfo str, PartitionSpec *partition_spec)
|
|
|
5104
5240
|
ListCell *lc;
|
|
5105
5241
|
|
|
5106
5242
|
appendStringInfoString(str, "PARTITION BY ");
|
|
5107
|
-
|
|
5243
|
+
|
|
5244
|
+
switch (partition_spec->strategy)
|
|
5245
|
+
{
|
|
5246
|
+
case PARTITION_STRATEGY_LIST:
|
|
5247
|
+
appendStringInfoString(str, "LIST");
|
|
5248
|
+
break;
|
|
5249
|
+
case PARTITION_STRATEGY_HASH:
|
|
5250
|
+
appendStringInfoString(str, "HASH");
|
|
5251
|
+
break;
|
|
5252
|
+
case PARTITION_STRATEGY_RANGE:
|
|
5253
|
+
appendStringInfoString(str, "RANGE");
|
|
5254
|
+
break;
|
|
5255
|
+
}
|
|
5108
5256
|
|
|
5109
5257
|
appendStringInfoChar(str, '(');
|
|
5110
5258
|
foreach(lc, partition_spec->partParams)
|
|
@@ -6153,9 +6301,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6153
6301
|
else
|
|
6154
6302
|
appendStringInfoString(str, "ADD COLUMN ");
|
|
6155
6303
|
break;
|
|
6156
|
-
case AT_AddColumnRecurse: /* internal to commands/tablecmds.c */
|
|
6157
|
-
Assert(false);
|
|
6158
|
-
break;
|
|
6159
6304
|
case AT_AddColumnToView: /* implicitly via CREATE OR REPLACE VIEW */
|
|
6160
6305
|
// Not present in raw parser output
|
|
6161
6306
|
Assert(false);
|
|
@@ -6214,9 +6359,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6214
6359
|
else
|
|
6215
6360
|
appendStringInfoString(str, "DROP ");
|
|
6216
6361
|
break;
|
|
6217
|
-
case AT_DropColumnRecurse: /* internal to commands/tablecmds.c */
|
|
6218
|
-
Assert(false);
|
|
6219
|
-
break;
|
|
6220
6362
|
case AT_AddIndex: /* add index */
|
|
6221
6363
|
appendStringInfoString(str, "ADD INDEX ");
|
|
6222
6364
|
break;
|
|
@@ -6226,9 +6368,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6226
6368
|
case AT_AddConstraint: /* add constraint */
|
|
6227
6369
|
appendStringInfoString(str, "ADD ");
|
|
6228
6370
|
break;
|
|
6229
|
-
case AT_AddConstraintRecurse: /* internal to commands/tablecmds.c */
|
|
6230
|
-
Assert(false);
|
|
6231
|
-
break;
|
|
6232
6371
|
case AT_ReAddConstraint: /* internal to commands/tablecmds.c */
|
|
6233
6372
|
Assert(false);
|
|
6234
6373
|
break;
|
|
@@ -6241,9 +6380,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6241
6380
|
case AT_ValidateConstraint: /* validate constraint */
|
|
6242
6381
|
appendStringInfoString(str, "VALIDATE CONSTRAINT ");
|
|
6243
6382
|
break;
|
|
6244
|
-
case AT_ValidateConstraintRecurse: /* internal to commands/tablecmds.c */
|
|
6245
|
-
Assert(false);
|
|
6246
|
-
break;
|
|
6247
6383
|
case AT_AddIndexConstraint: /* add constraint using existing index */
|
|
6248
6384
|
// Not present in raw parser output
|
|
6249
6385
|
Assert(false);
|
|
@@ -6251,9 +6387,6 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6251
6387
|
case AT_DropConstraint: /* drop constraint */
|
|
6252
6388
|
appendStringInfoString(str, "DROP CONSTRAINT ");
|
|
6253
6389
|
break;
|
|
6254
|
-
case AT_DropConstraintRecurse: /* internal to commands/tablecmds.c */
|
|
6255
|
-
Assert(false);
|
|
6256
|
-
break;
|
|
6257
6390
|
case AT_ReAddComment: /* internal to commands/tablecmds.c */
|
|
6258
6391
|
case AT_ReAddStatistics: /* internal to commands/tablecmds.c */
|
|
6259
6392
|
Assert(false);
|
|
@@ -6317,7 +6450,7 @@ static void deparseAlterTableCmd(StringInfo str, AlterTableCmd *alter_table_cmd,
|
|
|
6317
6450
|
appendStringInfoString(str, "DISABLE TRIGGER ");
|
|
6318
6451
|
break;
|
|
6319
6452
|
case AT_EnableTrigAll: /* ENABLE TRIGGER ALL */
|
|
6320
|
-
appendStringInfoString(str, "ENABLE TRIGGER ");
|
|
6453
|
+
appendStringInfoString(str, "ENABLE TRIGGER ALL ");
|
|
6321
6454
|
break;
|
|
6322
6455
|
case AT_DisableTrigAll: /* DISABLE TRIGGER ALL */
|
|
6323
6456
|
appendStringInfoString(str, "DISABLE TRIGGER ALL ");
|
|
@@ -7321,6 +7454,8 @@ static void deparseCopyStmt(StringInfo str, CopyStmt *copy_stmt)
|
|
|
7321
7454
|
appendStringInfoString(str, "BINARY");
|
|
7322
7455
|
else if (strcmp(format, "csv") == 0)
|
|
7323
7456
|
appendStringInfoString(str, "CSV");
|
|
7457
|
+
else if (strcmp(format, "text") == 0)
|
|
7458
|
+
appendStringInfoString(str, "TEXT");
|
|
7324
7459
|
else
|
|
7325
7460
|
Assert(false);
|
|
7326
7461
|
}
|
|
@@ -7950,8 +8085,20 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
|
|
|
7950
8085
|
else
|
|
7951
8086
|
appendStringInfoString(str, "REVOKE ");
|
|
7952
8087
|
|
|
7953
|
-
if (!grant_role_stmt->is_grant && grant_role_stmt->
|
|
7954
|
-
|
|
8088
|
+
if (!grant_role_stmt->is_grant && list_length(grant_role_stmt->opt)) {
|
|
8089
|
+
DefElem *defelem = castNode(DefElem, linitial(grant_role_stmt->opt));
|
|
8090
|
+
Assert(!castNode(Boolean, defelem->arg)->boolval);
|
|
8091
|
+
|
|
8092
|
+
if (strcmp("admin", defelem->defname) == 0) {
|
|
8093
|
+
appendStringInfoString(str, "ADMIN ");
|
|
8094
|
+
} else if (strcmp("inherit", defelem->defname) == 0) {
|
|
8095
|
+
appendStringInfoString(str, "INHERIT ");
|
|
8096
|
+
} else if (strcmp("set", defelem->defname) == 0) {
|
|
8097
|
+
appendStringInfoString(str, "SET ");
|
|
8098
|
+
}
|
|
8099
|
+
|
|
8100
|
+
appendStringInfoString(str, "OPTION FOR ");
|
|
8101
|
+
}
|
|
7955
8102
|
|
|
7956
8103
|
foreach(lc, grant_role_stmt->granted_roles)
|
|
7957
8104
|
{
|
|
@@ -7969,8 +8116,31 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
|
|
|
7969
8116
|
deparseRoleList(str, grant_role_stmt->grantee_roles);
|
|
7970
8117
|
appendStringInfoChar(str, ' ');
|
|
7971
8118
|
|
|
7972
|
-
if (grant_role_stmt->is_grant
|
|
7973
|
-
|
|
8119
|
+
if (grant_role_stmt->is_grant) {
|
|
8120
|
+
if (list_length(grant_role_stmt->opt) > 0) {
|
|
8121
|
+
appendStringInfoString(str, "WITH ");
|
|
8122
|
+
}
|
|
8123
|
+
|
|
8124
|
+
foreach(lc, grant_role_stmt->opt) {
|
|
8125
|
+
DefElem *defelem = castNode(DefElem, lfirst(lc));
|
|
8126
|
+
if (strcmp("admin", defelem->defname) == 0) {
|
|
8127
|
+
appendStringInfoString(str, "ADMIN ");
|
|
8128
|
+
appendStringInfoString(str, castNode(Boolean, defelem->arg)->boolval ? "OPTION" : "FALSE");
|
|
8129
|
+
} else if (strcmp("inherit", defelem->defname) == 0) {
|
|
8130
|
+
appendStringInfoString(str, "INHERIT ");
|
|
8131
|
+
appendStringInfoString(str, castNode(Boolean, defelem->arg)->boolval ? "OPTION" : "FALSE");
|
|
8132
|
+
} else if (strcmp("set", defelem->defname) == 0) {
|
|
8133
|
+
appendStringInfoString(str, "SET ");
|
|
8134
|
+
appendStringInfoString(str, castNode(Boolean, defelem->arg)->boolval ? "OPTION" : "FALSE");
|
|
8135
|
+
}
|
|
8136
|
+
|
|
8137
|
+
if (lnext(grant_role_stmt->opt, lc)) {
|
|
8138
|
+
appendStringInfoChar(str, ',');
|
|
8139
|
+
}
|
|
8140
|
+
|
|
8141
|
+
appendStringInfoChar(str, ' ');
|
|
8142
|
+
}
|
|
8143
|
+
}
|
|
7974
8144
|
|
|
7975
8145
|
if (grant_role_stmt->grantor)
|
|
7976
8146
|
{
|
|
@@ -7978,6 +8148,10 @@ static void deparseGrantRoleStmt(StringInfo str, GrantRoleStmt *grant_role_stmt)
|
|
|
7978
8148
|
deparseRoleSpec(str, castNode(RoleSpec, grant_role_stmt->grantor));
|
|
7979
8149
|
}
|
|
7980
8150
|
|
|
8151
|
+
if (grant_role_stmt->behavior == DROP_CASCADE) {
|
|
8152
|
+
appendStringInfoString(str, "CASCADE ");
|
|
8153
|
+
}
|
|
8154
|
+
|
|
7981
8155
|
removeTrailingSpace(str);
|
|
7982
8156
|
}
|
|
7983
8157
|
|
|
@@ -9791,12 +9965,6 @@ static void deparseClosePortalStmt(StringInfo str, ClosePortalStmt *close_portal
|
|
|
9791
9965
|
}
|
|
9792
9966
|
}
|
|
9793
9967
|
|
|
9794
|
-
static void deparseCurrentOfExpr(StringInfo str, CurrentOfExpr *current_of_expr)
|
|
9795
|
-
{
|
|
9796
|
-
appendStringInfoString(str, "CURRENT OF ");
|
|
9797
|
-
appendStringInfoString(str, quote_identifier(current_of_expr->cursor_name));
|
|
9798
|
-
}
|
|
9799
|
-
|
|
9800
9968
|
static void deparseCreateTrigStmt(StringInfo str, CreateTrigStmt *create_trig_stmt)
|
|
9801
9969
|
{
|
|
9802
9970
|
ListCell *lc;
|
|
@@ -10101,9 +10269,243 @@ static void deparseXmlSerialize(StringInfo str, XmlSerialize *xml_serialize)
|
|
|
10101
10269
|
deparseExpr(str, xml_serialize->expr);
|
|
10102
10270
|
appendStringInfoString(str, " AS ");
|
|
10103
10271
|
deparseTypeName(str, xml_serialize->typeName);
|
|
10272
|
+
|
|
10273
|
+
if (xml_serialize->indent) {
|
|
10274
|
+
appendStringInfoString(str, " INDENT");
|
|
10275
|
+
}
|
|
10276
|
+
|
|
10104
10277
|
appendStringInfoString(str, ")");
|
|
10105
10278
|
}
|
|
10106
10279
|
|
|
10280
|
+
static void deparseJsonFormat(StringInfo str, JsonFormat *json_format)
|
|
10281
|
+
{
|
|
10282
|
+
if (json_format == NULL || json_format->format_type == JS_FORMAT_DEFAULT)
|
|
10283
|
+
return;
|
|
10284
|
+
|
|
10285
|
+
appendStringInfoString(str, "FORMAT JSON ");
|
|
10286
|
+
|
|
10287
|
+
switch (json_format->encoding)
|
|
10288
|
+
{
|
|
10289
|
+
case JS_ENC_UTF8:
|
|
10290
|
+
appendStringInfoString(str, "ENCODING utf8 ");
|
|
10291
|
+
break;
|
|
10292
|
+
case JS_ENC_UTF16:
|
|
10293
|
+
appendStringInfoString(str, "ENCODING utf16 ");
|
|
10294
|
+
break;
|
|
10295
|
+
case JS_ENC_UTF32:
|
|
10296
|
+
appendStringInfoString(str, "ENCODING utf32 ");
|
|
10297
|
+
break;
|
|
10298
|
+
case JS_ENC_DEFAULT:
|
|
10299
|
+
// no encoding specified
|
|
10300
|
+
break;
|
|
10301
|
+
}
|
|
10302
|
+
}
|
|
10303
|
+
|
|
10304
|
+
static void deparseJsonIsPredicate(StringInfo str, JsonIsPredicate *j)
|
|
10305
|
+
{
|
|
10306
|
+
deparseExpr(str, j->expr);
|
|
10307
|
+
appendStringInfoChar(str, ' ');
|
|
10308
|
+
|
|
10309
|
+
deparseJsonFormat(str, castNode(JsonFormat, j->format));
|
|
10310
|
+
|
|
10311
|
+
appendStringInfoString(str, "IS ");
|
|
10312
|
+
|
|
10313
|
+
switch (j->item_type)
|
|
10314
|
+
{
|
|
10315
|
+
case JS_TYPE_ANY:
|
|
10316
|
+
appendStringInfoString(str, "JSON ");
|
|
10317
|
+
break;
|
|
10318
|
+
case JS_TYPE_ARRAY:
|
|
10319
|
+
appendStringInfoString(str, "JSON ARRAY ");
|
|
10320
|
+
break;
|
|
10321
|
+
case JS_TYPE_OBJECT:
|
|
10322
|
+
appendStringInfoString(str, "JSON OBJECT ");
|
|
10323
|
+
break;
|
|
10324
|
+
case JS_TYPE_SCALAR:
|
|
10325
|
+
appendStringInfoString(str, "JSON SCALAR ");
|
|
10326
|
+
break;
|
|
10327
|
+
}
|
|
10328
|
+
|
|
10329
|
+
if (j->unique_keys)
|
|
10330
|
+
appendStringInfoString(str, "WITH UNIQUE ");
|
|
10331
|
+
|
|
10332
|
+
removeTrailingSpace(str);
|
|
10333
|
+
}
|
|
10334
|
+
|
|
10335
|
+
// "json_value_expr" in gram.y
|
|
10336
|
+
static void deparseJsonValueExpr(StringInfo str, JsonValueExpr *json_value_expr)
|
|
10337
|
+
{
|
|
10338
|
+
deparseExpr(str, (Node *) json_value_expr->raw_expr);
|
|
10339
|
+
appendStringInfoChar(str, ' ');
|
|
10340
|
+
deparseJsonFormat(str, json_value_expr->format);
|
|
10341
|
+
}
|
|
10342
|
+
|
|
10343
|
+
// "json_value_expr_list" in gram.y
|
|
10344
|
+
static void deparseJsonValueExprList(StringInfo str, List *exprs)
|
|
10345
|
+
{
|
|
10346
|
+
ListCell *lc;
|
|
10347
|
+
foreach(lc, exprs)
|
|
10348
|
+
{
|
|
10349
|
+
deparseJsonValueExpr(str, lfirst(lc));
|
|
10350
|
+
removeTrailingSpace(str);
|
|
10351
|
+
if (lnext(exprs, lc))
|
|
10352
|
+
appendStringInfoString(str, ", ");
|
|
10353
|
+
}
|
|
10354
|
+
appendStringInfoChar(str, ' ');
|
|
10355
|
+
}
|
|
10356
|
+
|
|
10357
|
+
// "json_name_and_value" in gram.y
|
|
10358
|
+
static void deparseJsonKeyValue(StringInfo str, JsonKeyValue *json_key_value)
|
|
10359
|
+
{
|
|
10360
|
+
deparseExpr(str, (Node *) json_key_value->key);
|
|
10361
|
+
appendStringInfoString(str, ": ");
|
|
10362
|
+
deparseJsonValueExpr(str, json_key_value->value);
|
|
10363
|
+
}
|
|
10364
|
+
|
|
10365
|
+
// "json_name_and_value_list" in gram.y
|
|
10366
|
+
static void deparseJsonKeyValueList(StringInfo str, List *exprs)
|
|
10367
|
+
{
|
|
10368
|
+
ListCell *lc;
|
|
10369
|
+
foreach(lc, exprs)
|
|
10370
|
+
{
|
|
10371
|
+
deparseJsonKeyValue(str, lfirst(lc));
|
|
10372
|
+
removeTrailingSpace(str);
|
|
10373
|
+
if (lnext(exprs, lc))
|
|
10374
|
+
appendStringInfoString(str, ", ");
|
|
10375
|
+
}
|
|
10376
|
+
appendStringInfoChar(str, ' ');
|
|
10377
|
+
}
|
|
10378
|
+
|
|
10379
|
+
static void deparseJsonOutput(StringInfo str, JsonOutput *json_output)
|
|
10380
|
+
{
|
|
10381
|
+
if (json_output == NULL)
|
|
10382
|
+
return;
|
|
10383
|
+
|
|
10384
|
+
Assert(json_output->returning != NULL);
|
|
10385
|
+
|
|
10386
|
+
appendStringInfoString(str, "RETURNING ");
|
|
10387
|
+
deparseTypeName(str, json_output->typeName);
|
|
10388
|
+
appendStringInfoChar(str, ' ');
|
|
10389
|
+
deparseJsonFormat(str, json_output->returning->format);
|
|
10390
|
+
}
|
|
10391
|
+
|
|
10392
|
+
static void deparseJsonObjectAgg(StringInfo str, JsonObjectAgg *json_object_agg)
|
|
10393
|
+
{
|
|
10394
|
+
Assert(json_object_agg->constructor != NULL);
|
|
10395
|
+
|
|
10396
|
+
appendStringInfoString(str, "JSON_OBJECTAGG(");
|
|
10397
|
+
deparseJsonKeyValue(str, json_object_agg->arg);
|
|
10398
|
+
|
|
10399
|
+
if (json_object_agg->absent_on_null)
|
|
10400
|
+
appendStringInfoString(str, "ABSENT ON NULL ");
|
|
10401
|
+
|
|
10402
|
+
if (json_object_agg->unique)
|
|
10403
|
+
appendStringInfoString(str, "WITH UNIQUE ");
|
|
10404
|
+
|
|
10405
|
+
deparseJsonOutput(str, json_object_agg->constructor->output);
|
|
10406
|
+
|
|
10407
|
+
removeTrailingSpace(str);
|
|
10408
|
+
appendStringInfoString(str, ") ");
|
|
10409
|
+
|
|
10410
|
+
if (json_object_agg->constructor->agg_filter)
|
|
10411
|
+
{
|
|
10412
|
+
appendStringInfoString(str, "FILTER (WHERE ");
|
|
10413
|
+
deparseExpr(str, json_object_agg->constructor->agg_filter);
|
|
10414
|
+
appendStringInfoString(str, ") ");
|
|
10415
|
+
}
|
|
10416
|
+
|
|
10417
|
+
if (json_object_agg->constructor->over)
|
|
10418
|
+
{
|
|
10419
|
+
struct WindowDef *over = json_object_agg->constructor->over;
|
|
10420
|
+
appendStringInfoString(str, "OVER ");
|
|
10421
|
+
if (over->name)
|
|
10422
|
+
appendStringInfoString(str, over->name);
|
|
10423
|
+
else
|
|
10424
|
+
deparseWindowDef(str, over);
|
|
10425
|
+
}
|
|
10426
|
+
|
|
10427
|
+
removeTrailingSpace(str);
|
|
10428
|
+
}
|
|
10429
|
+
|
|
10430
|
+
static void deparseJsonArrayAgg(StringInfo str, JsonArrayAgg *json_array_agg)
|
|
10431
|
+
{
|
|
10432
|
+
Assert(json_array_agg->constructor != NULL);
|
|
10433
|
+
|
|
10434
|
+
appendStringInfoString(str, "JSON_ARRAYAGG(");
|
|
10435
|
+
deparseJsonValueExpr(str, json_array_agg->arg);
|
|
10436
|
+
deparseOptSortClause(str, json_array_agg->constructor->agg_order);
|
|
10437
|
+
|
|
10438
|
+
if (!json_array_agg->absent_on_null)
|
|
10439
|
+
appendStringInfoString(str, "NULL ON NULL ");
|
|
10440
|
+
|
|
10441
|
+
deparseJsonOutput(str, json_array_agg->constructor->output);
|
|
10442
|
+
|
|
10443
|
+
removeTrailingSpace(str);
|
|
10444
|
+
appendStringInfoString(str, ") ");
|
|
10445
|
+
|
|
10446
|
+
if (json_array_agg->constructor->agg_filter)
|
|
10447
|
+
{
|
|
10448
|
+
appendStringInfoString(str, "FILTER (WHERE ");
|
|
10449
|
+
deparseExpr(str, json_array_agg->constructor->agg_filter);
|
|
10450
|
+
appendStringInfoString(str, ") ");
|
|
10451
|
+
}
|
|
10452
|
+
|
|
10453
|
+
if (json_array_agg->constructor->over)
|
|
10454
|
+
{
|
|
10455
|
+
struct WindowDef *over = json_array_agg->constructor->over;
|
|
10456
|
+
appendStringInfoString(str, "OVER ");
|
|
10457
|
+
if (over->name)
|
|
10458
|
+
appendStringInfoString(str, over->name);
|
|
10459
|
+
else
|
|
10460
|
+
deparseWindowDef(str, over);
|
|
10461
|
+
}
|
|
10462
|
+
|
|
10463
|
+
removeTrailingSpace(str);
|
|
10464
|
+
}
|
|
10465
|
+
|
|
10466
|
+
static void deparseJsonObjectConstructor(StringInfo str, JsonObjectConstructor *json_object_constructor)
|
|
10467
|
+
{
|
|
10468
|
+
appendStringInfoString(str, "JSON_OBJECT(");
|
|
10469
|
+
deparseJsonKeyValueList(str, json_object_constructor->exprs);
|
|
10470
|
+
|
|
10471
|
+
if (json_object_constructor->absent_on_null)
|
|
10472
|
+
appendStringInfoString(str, "ABSENT ON NULL ");
|
|
10473
|
+
|
|
10474
|
+
if (json_object_constructor->unique)
|
|
10475
|
+
appendStringInfoString(str, "WITH UNIQUE ");
|
|
10476
|
+
|
|
10477
|
+
deparseJsonOutput(str, json_object_constructor->output);
|
|
10478
|
+
|
|
10479
|
+
removeTrailingSpace(str);
|
|
10480
|
+
appendStringInfoChar(str, ')');
|
|
10481
|
+
}
|
|
10482
|
+
|
|
10483
|
+
static void deparseJsonArrayConstructor(StringInfo str, JsonArrayConstructor *json_array_constructor)
|
|
10484
|
+
{
|
|
10485
|
+
appendStringInfoString(str, "JSON_ARRAY(");
|
|
10486
|
+
deparseJsonValueExprList(str, json_array_constructor->exprs);
|
|
10487
|
+
|
|
10488
|
+
if (!json_array_constructor->absent_on_null)
|
|
10489
|
+
appendStringInfoString(str, "NULL ON NULL ");
|
|
10490
|
+
|
|
10491
|
+
deparseJsonOutput(str, json_array_constructor->output);
|
|
10492
|
+
|
|
10493
|
+
removeTrailingSpace(str);
|
|
10494
|
+
appendStringInfoChar(str, ')');
|
|
10495
|
+
}
|
|
10496
|
+
|
|
10497
|
+
static void deparseJsonArrayQueryConstructor(StringInfo str, JsonArrayQueryConstructor *json_array_query_constructor)
|
|
10498
|
+
{
|
|
10499
|
+
appendStringInfoString(str, "JSON_ARRAY(");
|
|
10500
|
+
|
|
10501
|
+
deparseSelectStmt(str, castNode(SelectStmt, json_array_query_constructor->query));
|
|
10502
|
+
deparseJsonFormat(str, json_array_query_constructor->format);
|
|
10503
|
+
deparseJsonOutput(str, json_array_query_constructor->output);
|
|
10504
|
+
|
|
10505
|
+
removeTrailingSpace(str);
|
|
10506
|
+
appendStringInfoChar(str, ')');
|
|
10507
|
+
}
|
|
10508
|
+
|
|
10107
10509
|
static void deparseGroupingFunc(StringInfo str, GroupingFunc *grouping_func)
|
|
10108
10510
|
{
|
|
10109
10511
|
appendStringInfoString(str, "GROUPING(");
|